検証用コードサイニングEXEと無署名EXE
凌です。コードサイニング(署名)されているマルウェアの話をします。
最近のマルウェアは正規の証明書で署名されているものが徐々に増えています。特にAPTで利用されるマルウェアについては、その傾向が顕著に出ています。一部のセキュリティ対策では、署名されている実行ファイルを検査しない、振る舞いを見ない、と例外(ホワイトリスト)扱いにしているものが多く、攻撃者は検知を免れるために悪用しはじめているようです。
【コードサイニングとは】
文字通りプログラムに署名をすることですが、目的は2つあり、実行ファイルの開発元を証明することおよび、実行ファイルが改ざんされていないことを証明します。署名をするのは開発元であり、認証局から提供された証明書(秘密鍵含む)を用います。
Windowsでは署名がされている実行ファイルのプロパティを見ると以下の[デジタル署名]タブが表示されます。
攻撃者が正規の証明書を入手する手口は2つあります。
- ソフトウェアを開発している組織に侵入し、コードサイニング用の秘密鍵を盗む
- 正規の会社と結託したり、架空の会社をでっち上げたりして、正規の手順で認証局から証明書を発行してもらう
こうしたマルウェアに対して、自社内の対策またはブラウザ、OSの振る舞いの違いを調べていただくためのテスト用実行ファイルを用意しました。 署名あり版と署名なし版があり、実行内容は全く同じで「Hello World」というポップアップを表示するだけの単純なEXEです。
【ダウンロード】
A.署名されていないEXE (MD5:670ef95dfd79c3f6c1d3f63de5e3a2a3)
B.署名されているEXE (MD5:66f65b57235f9886537bb791db6dfb14)
C.ルート証明書(MD5:7c8f48160d6fdd5ebd3d3c013ffd0874)
上記は自己署名証明書(いわゆる「オレオレ証明書」)なので、正規の証明書として、テストする場合はルート証明書を「信頼されたルート証明機関」としてインストールしてください。
【テスト手順】
テスト用のクライアント端末を用意し、以下のステップを試し、警告や検知イベントなどを観察しながら、進めます。
- A(署名なし)をダウンロードします。
- B(署名あり)をダウンロードします。
- A(署名なし)を実行し、閉じます。
- B(署名あり)を実行し、閉じます。
- C(ルート証明書)をダウンロードし、OSにインポートします。セキュリティ対策製品側にもルート証明書のインポートが可能の場合はそちらにもインポートします。
- 再度B(署名あり)をダウンロードしまる。
- 再度B(署名あり)を実行し、閉じます。
最後にテスト結果を以下のようにまとめます。
もし、結果が上記の表同様、署名ありのEXEは警告や検知ログが出ないのであれば、既存のセキュリティ対策では署名ありのマルウェアはすり抜けられる可能性があるということになります。
フォローしませんか?