This post is also available in: English (英語)
概要
11月8日、日本の気象庁は、同庁の警報を装った偽の迷惑メールに関して報道発表を行いました。発表によると、迷惑メールは日本語で作成されており、受信者に、地震発生後の津波の避難区域を確認するためのリンクへアクセスするよう求めていました。
メール内のリンクは、救命避難のための重大な情報ではなく、受信者から重要情報を窃取するマルウェアでした。このマルウェアは「Smoke Loader」という名前で、2011年以降さまざまなサイバー犯罪者が使用してきた悪名高い商用マルウェアです。本ブログでは、パロアルトネットワークスの脅威インテリジェンスチームUnit 42によるSmoke Loaderとこの気象庁を装った攻撃に関する分析について解説します。
Smoke Loaderは、モジュール型のローディングプログラムで、攻撃者は被害端末にインストールされるペイロードを選択できます。そのため、最終的なペイロードは、攻撃によって多岐にわたります。例えば、Unit 42は以前、スウェーデンと日本でSmoke Loaderによって配布されたRetefeバンキング型トロイの木馬についてレポートしました。また、これまでに同マルウェアによって、バックドア、ランサムウェア、仮想通貨マイナー、パスワード窃取プログラム、PoSマルウェアがインストールされたことも観測しています。
気象庁を装ったこの攻撃キャンペーンは、日本の不特定の標的から認証情報を窃取することを目的としていると考えられ、通常の標的型攻撃と同様の手法をとっていました。攻撃者は、偽の日本政府機関のドメインを登録し、サーバー上のマルウェアへのファイル パスを正規の機関のWebサイトのURLと類似したものにしていました。疑似餌となる迷惑メールは流暢な日本語で書かれており、広範囲には配布されませんでした。そして11月下旬には、攻撃者はAzoRultという別の商用マルウェアを使用し始めています。図1にこの攻撃の時系列を示します。
図1 攻撃の時系列
Smoke Loaderの分析
Smoke Loaderが初めて登場してから7年が経ちますが、作成者は、依然としてコードの更新を続けています。Malwarebytesが2016年にSmoke Loaderに関する優れた分析を発表しています。パロアルトネットワークスが確認したサンプルでは、検出または分析を回避するために、以下の技法が追加されています。
- ジャンク ジャンプによるコードの難読化
- サブルーチンの復号、および実行後のそれらの暗号化
- PROPagateトリックを使用した、explorer.exeプロセスへの第2段階コードの挿入
- 固有ID生成のアルゴリズムの変更
- ネットワーク トラフィックおよびペイロード ファイルの暗号化
これらの技法の一部は、今年のFireEyeおよびTalosによって既に報告済みです。このブログでは、固有ID、C2通信、ペイロードに重点を置いて考察します。
固有IDの生成
この脅威は最初に、コンピュータ名、ハードコードされた静的番号(0B0D0406)、システム ドライブのボリューム シリアル番号から、侵害されたマシンの固有IDを生成します。Smoke Loaderは、この固有IDを3つの目的で使用します。
- C2で侵害されたマシンを追跡
- IDによってペイロードを暗号化
- 永続化のためにランダム ファイル名を作成
以下に、固有IDの作成方法を示します。コンピュータ名が「Test_PC」でボリューム シリアル 番号が「12345678」の場合、この脅威は以下のように3つの値を組み合わせます。
"Test_PC" + "0B0D0406" + "12345678" = "Test_PC0B0D040612345678"
そして、文字列のMD5ハッシュ値を算出します。
MD5("Test_PC0B0D040612345678") = 41EE612602833345FC5BD2B98103811C
ボリューム シリアル番号をハッシュ値に足して、40文字の固有IDを生成します。
"41EE612602833345FC5BD2B98103811C" + "12345678" = "41EE612602833345FC5BD2B98103811C12345678"
次に、Smoke Loaderは、このIDの最初の8文字と最後の8文字に基づいて、2つの文字列を生成します。以下は、Pythonで書かれたアルゴリズムです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# the unique ID id = "41EE612602833345FC5BD2B98103811C12345678" def makeStrings(_s): results = "" for n in _s: results += chr((ord(n) - 0x30) + ord('a')) return results stringA = makeStrings(id[:8]) # "ebvvgbcg" stringB = makeStrings(id[-8:]) # "bcdefghi" |
Smoke Loaderは、これらの文字列をファイル名に使用します。以下のように自身をコピーします。
%APPDATA%\Microsoft\Windows\[stringA\[stringB].exe
そして、次のようなショートカット ファイルを作成して、コンピュータの起動時に脅威を実行します。
%StartUp%\[stringA].lnk
これら2つの文字列はランダムに見えます。しかし、攻撃者は侵害されたマシンに対して常に同じ2つの文字列を生成します。これは、環境の静的な値に基づいているためです。
C2通信
Smoke Loaderには、以下のハードコードされたC2アドレスが含まれています。
jma-go[.]jp/js/metrology/jma.php
最初のC2通信の概要は以下のとおりです。
- Smoke Loaderは、暗号化されたデータをHTTP POSTメソッドによってC2に送信します。
- C2サーバーは、暗号化されたデータとともにHTTP 404応答(Not Found)を返します。
- Smoke Loaderは、C2からプラグインを抽出し、固有IDを使用して暗号化してから、ローカル ディスクに保存します。
- Smoke Loaderは、暗号化されたプラグイン ファイルからペイロード モジュールを抽出し、Explorer.exeプロセスに挿入します。
図2 最初の通信
最初のPOSTデータの作成
Smoke Loaderは、C2に送信するデータを作成します。オフセット0にマーカー「E207」があり、固有IDが続きます(図3)。マーカーは、リトルエンディアン形式では「07E2」で、10進数では「2018」です。Smoke Loaderは、C2と通信するたびにこのマーカーを使用します。
図3 POSTデータ
最終的に、Smoke Loaderは、静的キー0x161A9A0Cを使用して、RC4暗号によってデータを暗号化してから、HTTP POSTメソッドでC2に送信します。
C2からのプラグイン
C2サーバーは、HTTP 404ステータス コードとともに、最終的なペイロードを含むプラグイン データを返します。Smoke Loaderは、このプラグインの最初のDWORD値から暗号化されたヘッダー サイズを取得し、別の静的キー0x1D17D70Aを使用して、RC4暗号で後続のバイトを復号します。図4に、復号後のプラグイン データを示します。マーカー「E207」を確認したら、「plugin_size」変数に定義されているプラグイン サイズを取得します。
図4 C2から返されるデータ
プラグイン サイズを確認したら、Smoke Loaderは、固有IDを使用して、RC4暗号でプラグインデータを暗号化し、固有IDから生成された文字列による以下のパスで保存します。ファイルはマシンごとに異なる値で暗号化されているため、プラグインが同じでも、ファイル ハッシュはコンピュータごとに常に異なります。
%APPDATA%\Microsoft\Windows\[stringA]\[stringA]
Smoke Loaderは、保存されたプラグイン データを復号します。プラグイン データには、13バイト長のヘッダーがあり、以下の値から構成されています。
オフセット | サイズ | 値 |
0x00 | DWORD | プラグイン サイズ |
0x04 | DWORD | プラグイン マーカー、0xD5A08DD8 |
0x08 | DWORD | 不明、プラグインIDと想定される |
0x0C | BYTE | プラグイン内のモジュール数 |
表1 プラグイン ヘッダー
プラグインには、複数のモジュールが含まれていることがあります。この攻撃キャンペーンの場合、ペイロードには6個のモジュールが含まれていました。各モジュールには、サイズおよび復号用のRC4キーが含まれたヘッダーがあります。
図5 プラグイン ヘッダーおよびモジュール ヘッダー
Smoke Loaderは、指定されたキーを使用して、RC4暗号でモジュールを復号します。モジュール内のアーキテクチャ フラグ(64ビットか32ビットか)を確認後、この脅威はExplorer.exeプロセスを実行し、モジュールをプロセスに挿入します。脅威はモジュールの数だけこれを繰り返すため、侵害されたマシンには、複数のExplorer.exeプロセスが存在することになります。
ペイロード モジュール
表2に、この攻撃キャンペーンにおけるモジュールのリストを示します。2つのアーキテクチャで3種類の機能があります。
モジュール | アーキテクチャ | 機能 |
1 | 32ビット | ブラウザおよび電子メール プログラムから、保管されている認証情報を窃取 |
2 | 64ビット | モジュール1の不完全な移植 |
3 | 32ビット | ブラウザから送信されるデータの窃取 |
4 | 64ビット | モジュール3と同じ |
5 | 32ビット | 電子メール プロトコルからログイン
情報を窃取 |
6 | 64ビット | モジュール5と同じ |
表2 モジュール リスト
モジュールを挿入する際、Smoke Loaderは、以下の値を含む構成データをC2通信用にモジュールに渡します。各モジュールには、ローダーとまったく同じC2通信コードがあります。
- HTTP POST用のRC4暗号キー
- 固有ID
- C2 URL
モジュール1
このモジュールは、以下のプログラムに保管されている認証情報を窃取することを目的としています。
- Internet Explorer
- Firefox
- Chrome
- Opera
- Chromium
- Yandex
- Amigo
- QQBrowser
- Outlook
- Thunderbird
- WinSCP
モジュール2には、モジュール1のコードの一部が含まれていますが、まだ開発フェーズにあると思われます。
モジュール3およびモジュール4
これらのモジュールはAPIをフックし、以下のブラウザから送信されるすべてのデータを窃取します。
- Firefox
- Internet Explorer
- Edge
- Chrome
- Opera
モジュール5およびモジュール6
これらのモジュールは、APIをフックし、以下のプロトコルで、ユーザーID、パスワード、関連するリモートFTPおよび電子メール サーバー アドレスを窃取します。
- FTP (ポート21)
- SMTP (ポート25、587、2525)
- POP3 (ポート110)
- IMAP (ポート143)
インフラストラクチャおよびその他のツール
ある人物によって、2018年10月30日に、jma-go[.]jpというドメイン名が登録されました。このドメインには、.co.jpまたは.ne.jpなどの2階層のドメイン名がありません。これは、JPNICで汎用JPドメイン名と定義されています。定義によれば、JPNICは、汎用JPドメイン名の登録要件を以下のように説明しています。
「汎用JPドメイン名制度においては、当センターが『ローカルプレゼンス』と呼ぶ、日本とのつながりまたは関係があることを登録要件としました。」
このドメインのWhois情報によれば、このドメインはロシアに住所があり、Gmailアドレスを使用する個人によって所有されていました。登録者は、登録後に住所を変更したか、あるいは「日本とのつながりや関係」を証明したのだと思われます。
また、同じ人物が同じGmailアドレスで別の8つのドメインを登録していました。 これらのドメインのうち3つが、2018年2月から3月にかけて、Androidバンキング型トロイの木馬/パスワード窃取マルウェア、Marcherに関連した攻撃で使用されたことを弊社は確認しています。しかし、このモバイル マルウェアの標的はまだ特定されていません。以下にサンプルのリストを示します。
ドメイン | Marcher SHA256 |
Sungmap[.]at | 254925e47fbfff4786eada6cbcb0805ed79d9bd417955c016236143eb2ecd827 |
Mountainhigh[.]at | 75edaae605622e056a40c2d8a16b86654d7ddc772f12c4fc64292a32a96fde7a |
Racemodel[.]at | 55ae2b00234674d82dcc401a0daa97e7b3921057a07970347815d9c50dddbda8 |
表3 ドメインおよびMarcherハッシュ
11月25日に、Unit 42は、以前にSmoke Loaderを提供していたURLから、別のマルウェアAzoRultが提供されたことを確認しました。AzoRultもまた、認証情報、cookie、仮想通貨を窃取する商用マルウェアです。このAzoRultは、以下のC2アドレスにアクセスします。これは、Smoke Loaderと同じC2サーバー上の別のパスです。
www.jma-go[.]jp/java/java9356/index.php
このブログの執筆時点で、3つのAzoRultサンプルが同じC2を使用使用していることが観測しています。 攻撃者は、これらのファイルを以下のURLから配布しています。
- thunderbolt-price[.]com/Art-and-Jakes/Coupon.scr
- bite-me.wz[.]cz/1.exe
thunderbolt-price[.]comは、日本で2012年に登録されており、その登録情報はPrivacy Protection Serviceによって保護されています。このドメインのWebサイトのトップページは、本日時点でコンテンツをホストしていません。Google検索によれば、このドメインは、2014年から2015年にかけてショッピング関連のページに出現しています。興味深いことに、これらのWebページは低品質で、大半がハッキングされたWebサーバーでホストされています。検索エンジン最適化(SEO)対策として、検索結果のページ ランキングでスコアを稼ぐことを目的に、悪意のあるバックリンクのために作成されたと考えられます。図6は、婦人靴ショッピング用のWebページで、トルコの建築・建材会社のWebサイトでホストされていた例です。
図6 ハッキングされたサイトのSEOバックリンクの例
このドメインは、以前はショッピングまたはアフィリエイト サイト用に使用されていたと思われますが、現在はこの目的では使用されていません。攻撃者は、数年間使用されていなかったこのWebサイトを侵害し、現在AzoRultを配布するために使用しているものと想定されます。しかし、攻撃者とthunderbolt-price[.]comの現在の所有者とのつながりはわかっていません。
表4に、マルウェアのインフラストラクチャ変更とタイムスタンプの時系列を示します。
日付 | 活動 |
2018年10月30日 | jma-go[.]jpドメインを登録 |
2018年11月5日 | Smoke Loader
3d75eabb8460450a49e2fb68053d9f591efe5aefd379205e5cc3af574bb9f415 |
2018年11月6日 | Smoke Loader
8a1aab36c3940e4dd83f489432fa710fba582e254c3a52459c52826d6a822f2d 0db3fd1394b15b98f4e112102cdec6cc569062cdb199b66c5838c54cbc286277 be3817b9f14df3e0af82ae47b0904ac38d022e2b2d7bb7f8f9800b534b60183c |
2018年11月8日 | Smoke Loader
27aa9cdf60f1fbff84ede0d77bd49677ec346af050ffd90a43b8dcd528c9633b |
2018年11月9日 | Smoke Loader
42fdaffdbacfdf85945bd0e8bfaadb765dde622a0a7268f8aa70cd18c91a0e85 |
2018年11月15日 | Smoke Loader
fb3def9c23ba81f85aae0f563f4156ba9453c2e928728283de4abdfb5b5f426f |
2018年11月24日 | AzoRult
70900b5777ea48f4c635f78b597605e9bdbbee469b3052f1bd0088a1d18f85d3 |
2018年11月25日 | Smoke Loader
1ce72ec2f2fe6139eb6bb35b8a4fb40aca2d90bc19872d6517a6ebb66b6b139 |
2018年11月27日 | AzoRult
7337143e5fb7ecbdf1911e248d73c930a81100206e8813ad3a90d4dd69ee53c7 |
2018年11月30日 | jma-go[.]jpに関連したIPアドレスを47.74.255[.]111から149.129.135[.]53に変更 |
2018年12月3日 | AzoRult7
48c94bfdb94b322c876114fcf55a6043f1cd612766e8af1635218a747f45fb9 |
表4 時系列
結論
今日、商用マルウェアはサイバー犯罪において広く使用されています。マルウェアの作成者は、機能の拡大とより多くの顧客の獲得を目的として、コードを更新し続けています。本ブログで説明したように、Smoke Loaderはネットワーク トラフィックとファイルをさまざまなキーで暗号化して検出を回避します。最近Unit 42はAzoRultの新しい亜種に関するレポートを公開しており、そこで、セキュリティ製品による検出を回避するための新しい高度な難読化技法を紹介しています。今回の攻撃キャンペーンのような攻撃者は、オンラインの脅威関連のマーケットプレイスから、自分たちの目的に沿ったマルウェアを探し出しています。
パロアルトネットワークのお客様は、この脅威から以下に示す方法で保護されています。
- 脅威インテリジェンスサービスAutoFocusのお客様は、これらのサンプルをSmoke Loader、AzoRult、Marcherで追跡できます。
- クラウド脅威解析WildFireは、このレポートで言及したすべてのファイルを、悪意があると判断して検出します。
- アドバンスドエンドポイントプロテクションTrapsは、本記事で説明されているすべてのファイルをブロックします。
IoC
Smoke Loaderのサンプル
3d75eabb8460450a49e2fb68053d9f591efe5aefd379205e5cc3af574bb9f415 8a1aab36c3940e4dd83f489432fa710fba582e254c3a52459c52826d6a822f2d 0db3fd1394b15b98f4e112102cdec6cc569062cdb199b66c5838c54cbc286277 be3817b9f14df3e0af82ae47b0904ac38d022e2b2d7bb7f8f9800b534b60183c 27aa9cdf60f1fbff84ede0d77bd49677ec346af050ffd90a43b8dcd528c9633b 42fdaffdbacfdf85945bd0e8bfaadb765dde622a0a7268f8aa70cd18c91a0e85 fb3def9c23ba81f85aae0f563f4156ba9453c2e928728283de4abdfb5b5f426f a1ce72ec2f2fe6139eb6bb35b8a4fb40aca2d90bc19872d6517a6ebb66b6b139
AzoRultのサンプル
70900b5777ea48f4c635f78b597605e9bdbbee469b3052f1bd0088a1d18f85d3 7337143e5fb7ecbdf1911e248d73c930a81100206e8813ad3a90d4dd69ee53c7 748c94bfdb94b322c876114fcf55a6043f1cd612766e8af1635218a747f45fb9
Marcherのサンプル
55ae2b00234674d82dcc401a0daa97e7b3921057a07970347815d9c50dddbda8
75edaae605622e056a40c2d8a16b86654d7ddc772f12c4fc64292a32a96fde7a
254925e47fbfff4786eada6cbcb0805ed79d9bd417955c016236143eb2ecd827
インフラストラクチャ
http://jma-go[.]jp/js/metrology/jma.php
http://www.jma-go[.]jp/java/java9356/index.php
http://jma-go[.]jp/jma/tsunami/tsunami_regions.scr
http://thunderbolt-price[.]com/Art-and-Jakes/Coupon.scr
http://bite-me.wz[.]cz/1.exe
Unit 42 - Latest Cyber Security Research | Palo Alto Networks
Unit 42 - Latest Cyber Security Research | Palo Alto Networks
Unit 42 - Latest Cyber Security Research | Palo Alto Networks
付録
.bitsドメイン サポート
Smoke Loaderは、.bitトップ レベル ドメイン(TLD)をサポートしています。この脅威の作成者は、.bit ドメインを解決するために、以下のハードコードされたDNSサーバーを組み込んでいます。Tsunamiキャンペーンでは.bitドメインを確認できませんでしたが、この脅威による別の攻撃に備えてIPアドレスをリストしました。
192.71.245[.]208
58.251.121[.]110
101.226.79[.]205
188.165.200[.]156
185.121.177[.]177
185.121.177[.]53
144.76.133[.]38
169.239.202[.]202
5.135.183[.]146
193.183.98[.]66
51.254.25[.]115
51.255.48[.]78