Cisco Japan Blog

注目の脅威:GozNym

1 min read



ブログ執筆者:Ben BakerEdmund BrumaghinJonah Samost

概要

GozNym は、2 つの既知のマルウェア ファミリ、すなわち Gozi と Nymaim の特徴を兼ね備えています。Gozi は、広範にわたって配布された、バンキング型のトロイの木馬です。既知のドメイン生成アルゴリズム(DGA)を使用しており、マスター ブート レコード(MBR)ルートキットをインストールする機能も備えていました。Nymaim はランサムウェアの配布に使用されるマルウェアとして 2013 年に登場し、ブラック ホール エクスプロイト キットによって分散されていました。コードには、Win32 API コールの難読化などのさまざまな分析対策手法が組み込まれていました。

トロイの木馬である Gozi のソース コードは、過去に何度かリークpopup_iconしたことがあります。Gozi に組み込まれている優れた手口について、GozNym の作成者がそれを利用し、極めて堅牢なマルウェアを作り出すことができたのは、ソース コードがリークされたのが理由です。これにより、強化された永続化手法を利用できるようになり、ついに強力なインターネット バンキングを狙ったトロイの木馬になったのです。

トロイの木馬 GozNym による最近の成功と、このマルウェアを利用して標的を感染させようとする標的型攻撃が増加していることを受けて、Talos ではこの種のマルウェア ファミリが使う内部手口を徹底的に調査することにしました。Talos ではまず、GozNym に関連するバイナリと拡散メカニズムから調査に着手しました。さらに、GozNym のコマンド & コントロール(C2)インフラストラクチャに関連する DGA のリバース エンジニアリングを行い、ボットネットに対してシンクホールを実行することに成功しました。これにより、GozNym の脅威の規模と範囲、および攻撃者の制御下にある C2 サーバにビーコンを送信する感染システムの数を詳細に把握することができました。

絶えず進化する脅威

Talos が入手できたテレメトリ データを分析した結果、GozNym には 4 種類の亜種を発見しました。各亜種の間では、接続先の C2 サーバのリストを生成するためのドメイン生成アルゴリズム(DGA)の特性がわずかに異なっていました。ただし、これらはすべて同じ攻撃者や攻撃集団によって作成・拡散された可能性があります。その理由は、バイナリの配布元として使用されている C2 インフラストラクチャや、サンプルの配布に関連するフィッシング キャンペーンなどに関して共通点がいくつかあるためです。中には、サンプル間で使用する種類の DGA は異なれど、アクセスする C2 サーバが同じだったケースもあります。同様に、悪意のあるバイナリの配布に使用されたサーバが GozNym の複数の亜種によって利用されていることも確認されました。

最初の感染ベクトル

Talos では、GozNym マルウェアの配布に使用されたスピア フィッシング キャンペーンをいくつか特定しました。ダウンローダは VBA マクロを含む Microsoft Word ドキュメントを介して提供され、このマクロが悪意のあるバイナリをダウンロードして実行する HTTP GET 要求を実行していました。これらのスピア フィッシング キャンペーンに関連する電子メールを分析したところ、攻撃者は標的を慎重に選んでおり、積極的に身を隠そうとしていることが分かりました。

このスピア フィッシング キャンペーンのテーマは、他の電子メール型脅威にもよく見られるキャンペーンのテーマによく似ていました。そうした電子メールには、添付された「税額請求書」や「支払書」などを受信者が開くように仕向けるメッセージが記されています。攻撃者は、キャンペーンの標的とする各組織に対して、時間をかけてプロファイリングを行っていました。Talos が分析したケースの多くでは、標的組織に電子メールを 1 通だけ送り、経理部や財務部で働く 1 人の従業員のみを標的にしていました。また、各メッセージの内容は組織に合わせて調整されており、重要な役割を果たす添付ファイルの名前も適宜変更されていました。

図 1:Intuit QuickBooks 社から送信された「Invoice [Random Digits] for [Org Name]
([組織名] 様への請求書 [ランダムな数字])」という件名の電子メール

 

あるキャンペーンでは、悪意のある VBA マクロが含まれている MS Word の添付ドキュメントを送付し、それがあたかも Bank of America からの請求書であるかのように見せかける手口が使用されました。また、通知プロンプトを表示させることで、Microsoft Word のマクロを有効にするよう促す手口も使用されていました。

2:添付ファイルの例(その 1

 

別のキャンペーンでは「税額請求書」が添付され、画像には Intuit QuickBooks への参照が含まれていました。このキャンペーンでも、マクロを有効にするよう促すため同じ通知が使用されていました。

3:添付ファイルの例(その 2

被害者によってマクロが有効化されると、攻撃者が制御する Web サーバから悪意のあるバイナリが VBA のダウンローダを通じて取得され、ローカルのシステム上で実行されます。Talos では、Microsoft Word ドキュメントから VBA マクロを抽出した結果、次の難読化されたコードを入手しました。

 

4:難読化されたダウンローダの例


この VBScript は ROT 置換を使用して難読化されており、ローテーションの方法を決定するための各種の基準値が至るところで使用されていました。難読化を解除すると、このスクリプトの目的は一目瞭然です。このスクリプトは、バイナリをダウンロードして実行し、システムを感染させようとしていたのです。

5:難読化が解除されたダウンローダの例

GozNym の分析

悪意のあるバイナリが実行されると、マルウェアは自分自身を展開し、バッファを rundll32.exe プロセスに割り当てて、展開された内容をそのバッファにコピーします。具体的には、マルウェアはランダムなコマンド ライン オプションとランダムな DLL 名で構成された偽のコマンド引数を使用して rundll32.exe を実行します。これは rundll32.exe を呼び出す標準的な方法ではありません。
また、この DLL は実際には存在しないことにも注意してください。マルウェアは、展開された主要なデータをこのプロセスに挿入しようとします。これに成功すると、マルウェアは C2 サーバとの通信を開始します。

rundll32.exe -ya ngfk.dll

Talos が分析した GozNym のサンプルでは、分析を困難にし、より時間がかかるようにするために、いくつかの分析対策と難読化の手法が使用されていました。このマルウェアにおける難読化手法の 1 つは、API コールを難読化した方法と関係があります。サンプルには、関数をインポートし、それらのアドレスをカスタムの方法で実行時に解決するための独特な方法が実装されています。API コールは、ハード コード化された 2 つの値をスタックにプッシュしてから、API コールを解決するための複雑な関数にジャンプすることによって行われます。

関数の呼び出しはすべて、同じ命令(メモリ内の固定アドレスに配置された JMP)を使用して行われます。リターン アドレスは実際の呼び出しポイントではなく、CALL EBX 命令を常に含むライブラリ関数内でランダムに選択されるガジェットです。EBX では、API 解決コードに任意のアドレスを含みます。このコードはスタックを調整してから、実際の呼び出し元に戻ります。マルウェアはこの方法を使用して、API 関数が呼び出されるアドレスを難読化しています。これによりアドレスがスタック内に存在しなくなるため、API 関数が呼び出されたときや、API 関数がリターンしたときに、実際の呼び出し元のアドレスを分析できなくなります。また、制御フローも難読化されています。JMP/CALL 命令のターゲット アドレスは実行時に計算されます。同様に、定数に対して XOR が実行されます。復号化は EAX でパラメータを受け取る関数を呼び出して行われ、その後、難読化が解除された定数が EAX に返されます。

さらに、制御フロー リダイレクションの難読化が、ガジェットを実行するスレッドを作成することによって行われています。ガジェットは、スレッドの関数に渡されるパラメータで指定されたアドレスに戻ります。スレッドの関数は、それ自体が、CALL EAX を介して別の関数にジャンプするシェルコードです。

GozNym には、暗号化されたメモリ領域が少なくとも 1 つ含まれています(このメモリ領域はオンデマンドでのみ復号化されます)。分析したサンプルでは、関数を使用して個々のデータ アイテムをこのメモリ領域との間でコピーすることで、この領域内のすべてのデータを必ず暗号化し、復号化されたデータが一時的にメモリ内に存在するようにされています。マルウェアは、データの保存と受け渡しを実行時に行うカスタム構造を多用しているほか、カスタムのスレッド同期メカニズムも実装しています。

C2 の特性と暗号化

マルウェアはまず、DNS を実行して google.com および microsoft.com の A レコードを照会することにより、感染したシステムがインターネットに接続しているかどうかを確認しようとします。その後、Google の DNS サーバ(8.8.8.8 および 8.8.4.4)を使用して、疑似ランダムに生成されたドメインを照会しようとします。稼働している C2 サーバが見つかると、GozNym は RC4 で暗号化された HTTP POST 要求を介してサーバにシステムの調査情報をアップロードします。システムの調査情報には、マシン ID や Windows のバージョンのほか、サンプルに格納されているユーザ名、コンピュータ名、暗号キーのチェックサムも含まれます。バイナリに格納されている不完全なキーを使用して RC4 暗号キーが生成された後、一連のバイトがランダムに生成されます。GozNym は、ランダムに生成されたキーの一部、暗号化されたデータ、およびこれらの両方のバイト アレイのサイズを格納するバッファを作成し、さらに、このバッファの Base64 エンコードを実行して、HTTP POST データとして C2 サーバに送信します。

GozNym には、ネットワーク トラフィック内で検出されることを防ぐための、さまざまな手口が組み込まれています。C2 との通信に含まれるすべてのフィールドは、ランダムに生成されたキー、または部分的にランダムなキーを使用して暗号化されます。URL の引数は、ランダムな数の引数を指定してランダムに生成することも、マルウェアの構成データ内でハード コード化することも可能です。ドメインはランダムに生成されます。また、ユーザ エージェント文字列は Windows API によって生成されるため、静的ではありません。

DGA のリバース エンジニアリング

Talos では、構成が異なる複数の DGA 亜種を発見しました。最も興味深いものについて詳細にレポートします。Talos では、発見したすべてのボットネットに対してシンクホールを実行することに積極的に取り組んでいます。GozNym は、存続可能なコマンド & コントロール IP を見つけるための 2 段階の処理をサポートしています。また、ドメインを照会するための 2 つの方法(gethostbyname API をコールするシンプルな方法と、8.8.4.4 または 8.8.8.8 のいずれかをサーバとして使用してカスタムの DNS プロトコルを実装する複雑な方法)をサポートしています。後者では、UDP パケットを送信して応答を解析し、DNS 解決を取得します。

第 1 段階

DGA の第 1 段階では、XORShift 疑似乱数ジェネレータ(PRNG)のバリエーションを使用して、15 個のドメインのリストを作成します。PRNG は、当日のビット シフト値と、ハード コード化された 2 つのダブルワード値を使用してシードされます。各ドメイン名は、5 ~ 12 文字の小文字の文字列と、それに続くランダムに選択された TLD(.net、.com、.in、または .pw)で構成されます。GozNym はその後、Google の DNS サーバを使用して各ドメインを照会し、IP の応答がパブリックにルーティング可能かどうかを確認します。2 つの異なる IP が解決されると、それらを DGA の第 2 段階で使用します。

第 2 段階

GozNym は同じ DGA の機能を使用しますが、この段階では、ハード コード化されたダブルワード シードを、第 1 段階の DNS の照会で得られた IP アドレスに置き換えます。GozNym は、セミコロンで区切った 128 個のドメインから成る新しいリストを作成します。ただし、それらを解決するのではなく、リスト内の最初のドメインに対して .com の TLD を強制的に使用させます。このプロセスでは、最初の「.」文字を探して、その後の 4 文字を「com;」で置き換えます。DGA アルゴリズムによって 2 ~ 3 文字の TLD が上記のように生成されることを考えると、2 番目のドメインの 1 文字が上書きされる可能性があります。

次に、ドメイン リスト全体の CRC32 ハッシュを作成し、さらに XOR とビット ローテーションに基づいてハッシュをもう 1 つ作成して、最後に 2 つのハッシュを合計します。GozNym は、バイナリに組み込まれた 360 個のハッシュで構成されたテーブル内でこの結果を探します。つまり攻撃者は、少なくとも 360 日間にわたって使用する予定のシードと第 2 段階のドメインをすでに計算したことになります。ハッシュがテーブル内に存在する場合は、gethostbyname を使用してリスト内の最初のドメインが照会されます。gethostbyname はデフォルトでは、ドメインが解決した IP アドレスを 1 つだけ返しますが、複数個返す場合もあります。Talos が確認した第 2 段階のドメインでは、この段階で 4 つの IP アドレスが使用されていました。

次に、DNS 応答から得られた IP に XOR 演算子と SUB 演算子を使用することで、使用可能な IP に変換します。IP の 1 つは残りの IP のチェックサムに合致します。チェックサムを確認するために、残りの IP のチェックサムと合致しているかどうかのチェックが IP ごとに実施されます。目的のチェックサムが見つかったら、それを IP リストから削除してから IP リストを返します。IP リストのチェックサムを確認できない場合は IP を返しません。

最後のチェックが行われるのは最初にアクセスした後です。サーバは、第 2 段階で解決したドメインと合致する、4 つのハッシュの暗号化されたリストを返します。チェックサムが一致しない場合、サンプルは応答の内容の処理を続行できません。

捕捉できない脅威に対してシンクホールを実行

GozNym の DGA 認証は、一見すると大きな脅威に思えるかもしれません。ただし実際のところ、最初の 32 ビットは日付を変換したもので、続く 64 ビットは最初の DNS 応答から受け取った IP のエントロピーです。これらの 96 ビットを乱数ジェネレータのシーディングに使用して、ランダムに生成された 128 個のドメインを含む文字列を作成し、その文字列のチェックサムを確認します。この認証方式における重大な欠点は、最終的なチェックサムがわずか 32 ビットのため、比較的簡単に総当たり攻撃を行えることです。総当たり攻撃はビット長に応じて指数関数的に処理時間が長くなります。このため、考えられるすべてのシード IP(64 ビットのエントロピー)を調べる場合、32 ビットのハッシュと一致するすべてのシードに対して総当たり攻撃を行う場合の 40 億倍以上時間がかかります。

Talos では、GozNym の DGA を複製し、有効な IP の範囲に対して総当たり攻撃を行い、第 2 段階の有効な DGA シードを見つけるためのスクリプトを作成しました。シーディング プロセスにおける日付の役割が大きいため、シンクホールを行う日ごとに一連の新しいシード IP への総当たり攻撃を行う必要がありました。各試行では PRNG を約 1,000 回呼び出して、ドメイン リストに含める各文字を生成し、ドメイン リストの CRC32 ハッシュ値を計算する必要がありました。シード IP のランダムなセットがハッシュの衝突を引き起こす確率は約 1,100 万分の 1 です。Talos では、処理速度の遅いデスクトップ コンピュータを使用して、ハッシュの衝突を 5 時間に 1 回発生させることができました。ハッシュの衝突が発生したということは、シード IP の有用なセットが見つかったことを意味します。該当ドメインの GozNym は、それらのシード IP を受け取った後にアクセスを試行します。

GozNym の DGA には、もう 1 つ大きな誤りがありました。それは、第 1 段階のドメインのリストの処理方法にあります。それは、リスト内の最初のドメインが有効なシード IP のセットを返した場合に、GozNym がそのリスト内の他のドメインにアクセスしようとしないことです。そのため、最初のドメインでのハッシュの衝突を利用することで、GozNym の犠牲者がリスト内の他のどのドメインにもアクセスしないようにすることができました。GozNym に感染したマシンは、シンクホール サーバに対して 1 回ビーコンを送信した後、スリープを何度も繰り返し、時折 Google の DNS に対してシンクホール ドメインを照会します。

ボットネットのプロファイリング

シンクホール サーバは、GozNym をシンクホールしてから最初の 24 時間以内に 23,062 個のビーコンを受信しました。感染した各マシンは、応答がないことに気付くまでに 1 個のビーコンしか送信しませんでした。これはおおよそ、1 人の犠牲者につき 1 個のビーコンに相当します。最も顕著な例外はサンドボックスです。サンドボックスは、少数の IP からビーコンを数回送信する場合があります。Talos では、1,854 個の固有 IP からビーコンを受信しました。

以下の図は、ビーコンの送信数が多い国の内訳を示したものです。

image01

6GozNym 被害のユニーク IP 数(国別)

まとめ

潜在的な被害者に GozNym を送り付けるためのスパム キャンペーンの特性を分析すると、組織内でターゲットにする人物を決定するのに多大な労力が費やされていることや、検出を回避し、管理者にアラートが送られないようにするためにスピア フィッシングが使用されていることが分かります。また、マルウェアで使用されている分析対策や回避の手法を見れば、セキュリティ アナリストによる分析を困難にし、時間を稼ぐという意図があったことも伺えます。スピア フィッシング攻撃は組織を感染させる目的で今もなお使用されて続けています。これはおそらく、この種の攻撃が成功し続けているためでしょう。GozNym は、フィッシング キャンペーンの危険性と、この種の脅威から組織を確実に保護することの重要性を際立たせています。Talos による分析が示しているように、GozNym は絶えず進化している脅威です。おそらく今後も形を変えながら進化を続けるでしょう。攻撃者はさらに機能を追加しており、トロイの木馬としての能力も強化しようとしています。

Talos では、GozNym のサンプルの分析に使用できる、以下のスクリプトも公開しています。

  • DGA_release.py:GozNym で使用されている DGA のシミュレーションに用います。
  • Extract_parameters_from_http_post.py:C2 サーバに送信される HTTP POST 要求からパラメータを抽出します。
  • Decrypt_response.py:応答ペイロードの復号化に使用します。

これらのツールは、Talos Github リポジトリpopup_iconから入手できます。

カバレッジ

お客様がこの脅威を検出してブロックできる別の方法を以下に記載します。

coverage

Advanced Malware Protection(AMP)は、これらの攻撃者によるマルウェアの実行の阻止に最適です。

CWSWSA の Web スキャンは、悪意のある Web サイトへのアクセスを阻止し、それらの攻撃に使用されたマルウェアを検出します。

IPSNGFW のネットワーク セキュリティ保護には、攻撃者による不正なネットワーク アクティビティを検出できる最新のシグネチャが備わっています。

ESA は、攻撃活動の一環として攻撃者が送信した悪意のある電子メールをブロックできます。

侵害の兆候

Maldocs(SHA256):

bf1601d89f816312278ac09b0c21acdc854c4d21e1443f5170b49c5f64ffcc11
4b2cda69112b4d25c25da0df18cad55dd78fed78e9525c1f48ff5b86517af505
48e7c4357cb3f19ca931951b502fcb4a50c18240d2b21c08e54f7086dde35637
c31878e2250f105b1ac52f9584d9f3d67fd07f2795c20cd1fdbe738fa24f639b
4b9f9894953843c5929885e7ca0bfc16fd6b718c7567f83f6cc6881b0c17fb48
e00d90dea174fa51b07d2d991614630721c04d12810fe72a40dea8fd6edfa3f1
fa4f949b0bd6c4f07aee82027c40521ccdc6f4f3d930335caa6dc9bc2fab5140
a68cec90af59daa1e71b4a0c5cf07c62ddc5440e9b1d4303bd111526d0972881
7e42ec7809fd48590c1eb6c5f936187ce7c31177adff831837e9bcc7549ed440
8ea0d38bd3857adc74eebafc548393ca982dbd7cb3a89a0499e453b05938cb6b
aabd5d71c4251f8a56a0434c37ed88aba73d44bd45a66d054123c86665428778
361231d27c6fe4d3f9176c7c5ebfba96618d15ea29f52625ae522054f81115a0
7b90dcf26d56cc4b6325675cb973f122c2d98904eff540afd917b0552aa9c68b
169384f163eb14b23d2bab8a9269ebd8940b0ec51bcd1767d03c43052c0bb139
443f5760fda53f19db6f483c2fcce5658bebaa3d40a9e535e7de4723f3b40e13
212aded63a3af0996f183da175dbd69ad830299cf3b8d97c7e10535c50b29de9
31c4ae8dbf12f4f9999929602cf24179011c30d1599d36db190af7d85ed2ac1b
a56c177c39bfaa4c50d28b549f7b509299135e0bcd82fb694b21bcbde90a7c66
328fa5803334650ac130105c08251d47a3f447f114ead9d012308e11769379cc
06580e38fe29b2e7ce3a53df4c5ccb389eaa21b8a2f0f4e2dbd880b3c5c5a4cd
c16036c5fc0c25970ba55e5e9d1bb0be8a4044f39495679deb4900c12c1e57e3
46001cf7063cffc00f2fcea7828084f6537e7cc500f3372b2014ca42b21a0dcc
cc86b2b5939ba56a33395121a618c61cfb7cde19fa76231a3a5e872bf1262f34

悪意のあるバイナリ(SHA256):

17aa5711b59e389ffb65294b8281d3b5f39ca18ac1ac861327e7d8548f49a4d3
eb10ec30f2fec3830daee6ad502e527ad6ef67e4591d545b1a84dde300b3edb5
55f9cd6cbed53ccc26d6d570807a18f91d9d8c10db352524df424f356d305a6e
c58d987be377e4fa3d512a21fdb522bd894b8d91536330a9abebbb461fd093b7
17aa5711b59e389ffb65294b8281d3b5f39ca18ac1ac861327e7d8548f49a4d3
b98a835c6239c63a6ada26b92a4605264a9a36130bebe288b21c51edd750dea2
87be9450f217180f09436d3307c7441d090ccfcedfcf6ce1275e8b0d2c9f4470
9b52bd5194475d24b6f0e2d191a8e5bc943f80153a3768ce749dc5f93320e52f
bac9c27a047a7fa4cb35f84fd7f63a87ce79e01c91944c48c35854cb891adf2c
65a8909d4f61aff28a66ee4682c7722e68551fd2dc5fce2c8e160f89b2685971
3577f0b44ded3f0207910c5e624a7a2667fea4fff0416f8c3cc37995c494e9e2

配信サーバ

morelikestoday[.]com
carsi12[.]com
sociallyvital[.]com

C2 ドメイン

mbcqjsuqsd[.]com
kcrznhnlpw[.]com
humzka[.]com

本稿は 2016年9月27日に Talos Grouppopup_icon のブログに投稿された「Threat Spotlight: GozNympopup_icon」の抄訳です。

コメントを書く