This post is also available in: English (英語)
概要
2018年11月、Chafer脅威攻撃グループは、2018年の初めにClearskyが報告したキャンペーンで使用したインフラストラクチャを再利用し、トルコ政府機関を標的とした攻撃を行いました。 具体的には、ドメインwin10-update[.]comを再利用しています。この攻撃の最初の配信メカニズムは確認できませんでしたが、185.177.59[.]70(同活動中に同ドメインの解決先となっていたIPアドレス)にホストされている第2段階のペイロードは観測できました。
Unit 42は2016年からChaferの活動を観測していますが、Chaferは遅くとも2015年からは活動していることが分かっています。この新しい第2段階のペイロードはPythonベースで、PyInstallerユーティリティを使って実行形式にコンパイルされています。同攻撃者がPythonベースのペイロードを利用する様子を確認したのは、Unit 42 ではこれが初めてです。なおOilRigのClayside VBScriptとコードに重複が見られることは確認していますが、現時点で私たちはChaferとOilRigを別々の脅威攻撃グループとして追跡しています。私たちは、このペイロードを追跡するにあたりMechaFlounderと名付けました。以下に、詳細を説明します。
トルコ政府を標的に
私たちがChaferによる活動を目にしたのは、IPアドレス185.177.59[.]70からダウンロードされる悪意のある実行可能ファイルを特定したことがきっかけでした。攻撃者がどのように被害者を選び、同ファイルをダウンロードさせたのかについてはいまのところ分かっていません。
ですが、この「lsass.exe」という名前のファイルは、HTTPリクエスト経由でwin10-update[.]comからダウンロードされていました。ClearSky Cyber Securityは、win10-update[.]comドメインをChaferの脅威攻撃グループの活動に関連するIOCであるとしてマークしています。同ドメインからダウンロードされたlsass.exeファイルはこれまで報告されていないpythonベースのペイロードで、私たちはこれをMechaFlounderとして現在追跡しています。私たちは、ChaferがMechaFlounderを第2段階のペイロードとして使用しており、第1段階のペイロード経由でダウンロードした後、侵入先ホストでエクスプロイト後の攻撃を行うと考えています。私たちのテレメトリでは、この活動の第1段階のペイロードは観測されていません。
2018年2月時点で、IPアドレス134.119.217[.]87は、win10-update[.]comをはじめとし、Chaferの活動に関連している可能性があるいくつかのドメインに解決されていました。興味深いことに、トルコ政府のドメインturkieyburslari[.]gov[.]tkのミラーである正当なTurkish Scholarshipのドメインturkiyeburslari[.]tkもこのIPアドレスに解決されていました。turkiyeburslari[.]tkは、Chaferによる別の情報収集キャンペーンで使用されていた可能性があります。このIPアドレスに関連付けられたドメインを、本稿末尾の付録と次の図1に記載します。
MechaFlounderのペイロード
pythonベースのペイロード「lsass.exe」は、次のURLへのHTTPリクエスト経由でC&C(C2)サーバーから取得されていました。
win10-update[.]com/update.php?req=<redacted>&m=d
私たちがMechaFlounderとして追跡しているこのペイロード(SHA256: 0282b7705f13f9d9811b722f8d7ef8fef907bee2ef00bf8ec89df5e7d96d81ff)はPythonで開発され、PyInstallerツールを使用してPEファイルとしてバンドルされていました。この第2段階のペイロードはバックドアとして機能するもので、攻撃者はこのバックドアを利用してファイルをアップロード/ダウンロードしたり、侵入先システムで追加コマンドやアプリケーションを実行することができます。
MechaFlounderの活動はC2サーバーとの通信を継続的に試みるループに入ることから始まります。このトロイの木馬はHTTPを使用し、ユーザーのアカウント名とホスト名をURLに含めたアウトバウンドのビーコンをC2サーバーに送信します。図2に示すコードでは、まずユーザー名とホスト名をハイフン2文字「--」で連結した後、この「--」で連結して作成した文字列2つの間にバックスラッシュ「\\」を挟み、後ろに文字列「-service.html」を追加してURL文字列を作成しています。
下の図3に示す通り、この分析中図2のコードはビーコン用に異常な形式のHTTPリクエストを生成しました。図3のGETリクエストはスラッシュ「/」で始まっておらず、URLにバックスラッシュ「\」が含まれていることがわかります。これが原因でテスト環境で使用しているnginxなどの正規Webサーバーは「400 Bad Request」エラーメッセージで応答します。このことから、図2のコードはhttplibモジュールのHTTPConnectionクラスを使って異常な形式のHTTPビーコンを生成してはいるものの、脅威攻撃者は標準的なWebサーバーを使うかわりにC2チャネル処理用にカスタムサーバーを作成していたのではないかと思われます。
さらに図2からは、マルウェア作成者が変数名「cmd」を使用して、HTTPメソッドとパスに使用する文字列を作成し、HTTPメソッド部分に文字列「exit」という単語が含まれるかどうかを確認している様子が伺えます。ただし、この文字列のHTTPメソッドが「exit」になることはないため、この条件がtrueになることはありえません。このため、このチェックを行っている目的は分かりません。私たちは、このマルウェア作者が以前のバージョンのスクリプトから削除し忘れた痕跡が残っているのではないかと考えています。
図3 テスト環境でこのトロイの木馬が発行したHTTPリクエストのサンプル
C2サーバーが図3に示したビーコンを受け付けていたとすれば、受信側のトロイの木馬が解析・実行することを目的としたコマンドを含むHTMLで応答していたことでしょう。この後、トロイの木馬は下の図4に示すコードを使用し、応答のHTMLをテキストに変換します。図4のHTMLからテキストへの変換コードは、インターネット上のいくつかの場所から利用可能ですが、おそらくはStack OverflowでのExtracting text from HTML file using Python(Pythonを使用してHTMLファイルからテキストを抽出する)という議論がオリジナルのようです。マルウェア作成者はこのコードをここから入手した可能性があります。
HTMLをテキストに変換した後、このトロイの木馬はレスポンスの最初の10文字を破棄し、残りの文字列をコマンドとして扱います。C2はこのコマンド文字列として文字列 「yes」を与えることがあります。これは、「yes」という部分文字列を削除し、base16エンコード文字列としてコマンドをデコードするようにトロイの木馬に指示するものです。このトロイの木馬はC2が提供したコマンドをハンドラに渡し、自身の実行する活動を決めさせます。表1は、トロイの木馬のコマンドハンドラ内で利用可能なコマンドと対応する活動のリストを示しています。コマンドハンドラ内のコマンドは、Chaferが遠隔側のシステムと対話するのに必要な機能を提供しています。
コマンド | 説明 |
terminate | 接続を終了する |
download | 与えられたファイル名の<filename>をhttp://<c2 server>/<filename>からダウンロードし、C:\Users\Public\<filename>に保存する |
runtime | ビーコンのスリープインターバルを設定する |
upload | 与えられたファイル名の<filename>をHTTP POSTリクエスト経由で http://<c2 server> にアップロードする |
cd | 現在の作業ディレクトリを変更する |
empty | 何もしない。おそらくidleコマンド |
<anything else> | 指定されたデータをコマンドライン用のコマンドとして実行しようとする |
表1トロイの木馬のコマンドハンドラで利用可能なコマンド
MechaFlounderが「upload」コマンドを受信したときに実行する活動を分析し、カスタムC2サーバーアプリケーションについてより多くの洞察が得られました。侵入先のシステムからC2サーバーに指定されたファイルをアップロードするために、このトロイの木馬はmechanizeモジュールのブラウザクラス(MechaFlounderの名前の一部はここから)を使用して、そのファイルをC2サーバー上のHTMLフォームに送信します。このことは、前述の異常な形式のHTTP GETリクエストを処理できることにくわえ、カスタムC2サーバーアプリケーションも次のことができる必要があることを示唆しています。
- アップロードされたファイルを受け取るためのフォームを含むHTMLを提供し、
- mechanizeモジュールによって生成された正当なHTTP POSTリクエストを処理し、
- HTTP POSTリクエストでアップロードされたファイルを保存する
このコマンドのための活動を実行後、このトロイの木馬は「base64.b16encode」メソッドを使用してコマンドの結果または出力メッセージをエンコードします。「empty」と「terminate」を除き、各コマンドにはコマンドの実行の成功・失敗の両方に対する出力メッセージがあります。以下の表2は、各コマンドに関連した成功および失敗のメッセージを示しています。
コマンド | メッセージの種類 | 出力されるメッセージの構造 |
download | Success | <username>--<hostname>||download <filename>**download success\n |
Fail | <exception message>||<username>--<hostname>**download failed, download <filename> \n | |
upload | Success | <username>--<hostname>||upload <filename>**upload success \n |
Fail (no file) | <username>--<hostname >||<command issued>**no such file\n | |
Fail (exception) | <exception message>||<username>--<hostname>**upload failed,upload <filename> \n | |
runtime | Success | <interval>||<username>--<hostname>**runtime changed to <command issued> |
Fail | <username>--<hostname>||<command issued>**runtime change failed because of large mount | |
cd | Success | <username>--<hostname>||<command issued>**directory changed success to <directory> |
Fail | <username>--<hostname>||<command issued>**Couldn"t change directory | |
<anything else> (command execution) | Success | <username>--<hostname>||<command issued>**<command stdout> |
Fail | <username>--<hostname>||<command issued>**<command stderr> |
表2コマンドに関連した成功および失敗のメッセージ
異常な形式のHTTP GETリクエストを使用する最初のビーコンとは異なり、このトロイの木馬は最初のHTTPビーコンと同じソケットを使用してエンコードされた結果をC2サーバーに送信します。同一ソケットを利用すること、そしてHTTPビーコンの一部の形式に異常が見られることは、この攻撃者がこのネットワークトラフィックを処理するためにカスタムC2サーバーを作成した可能性の高さをさらに裏付けています。
これらのネットワーク通信内容を確認するために、私たちはトロイの木馬にパッチを当て、ビーコンが正しい形式のHTTP GETリクエストを発行し、テスト環境のHTTPサーバー(nginx)で正常に受け取れるようにました。このパッチではHTTPリクエスト内のパスを一部変更しました。具体的には、パスをスラッシュ「/」始まりにし、URLパスのバックスラッシュ「\」の代わりにスラッシュ「/」を使うように設定します。テスト環境では、「rob-rob-virtual-machine」フォルダのファイル「rob-rob-virtual-machine-service.html」に文字列 「0123456789runtime 5」を追加しました。
トロイの木馬がビーコンを発行すると、HTTPサーバーは「rob-rob-virtual-machine-service.html」ファイルの内容で応答しますが、これが事実上トロイの木馬へのコマンドを発行しています。このトロイの木馬は、コマンド「runtime 5」に「5||rob–rob-virtual-machine**runtime changed to runtime 5」というメッセージをbase16でエンコードして応答します。その後、最初のHTTPリクエストと同一のソケットを使用し、HTTPヘッダーなしでこのメッセージをC2サーバーに送信します。
図5は、パッチを適用したトロイの木馬から送信された最初のビーコン、コマンドで応答するHTTPサーバー、そのコマンドに応答するトロイの木馬、これらすべての処理が1つのTCPセッション内で行われている様子を示しています。
ワン・モア・シング…
本稿を読んだ方は、以前どこかで「&m=d」というパラメータを目にしたことがある気がしたのではないでしょうか。それもそのはずで、このMechaFlounderペイロードの最初のダウンロードURLで見られた「&m=d」というパラメータは、Chafer、OilRigの両脅威グループに関連する多数のURLで見られるものです。このパラメータは、Oilrig/Chaferの両方に関連している配信文書によってインストールされる、VBScriptダウンローダーのペイロードで確認されています。このパラメータは、ChaferのAutoITペイロードによって生成されたURLでも使用されています。VBScriptペイロードとAutoITペイロードは変数名や全体的な機能も共通していることから、2つの脅威攻撃グループはコードを共有している可能性があります。下の図6は、左側にOilRig配信文書が実行する VBScript (SHA256: 1b2fee00d28782076178a63e669d2306c37ba0c41770)、右側にChaferのAutoITスクリプト (SHA256: 332fab21cb0f2f50774fccf94fc7ae905a21b37fe66010dcef6b71c140bb7fa1) を配置して比較したものを、コードが重複する部分を色分けして示したものです。
残念ながら、OilRigとChaferの間で具体的にどのようにコードが共有されているかについての詳細は確認できていません。現時点では、これらのコードの重複に基づいて2つの脅威グループを組み合わせることはしていません。
結論
Chafer脅威攻撃グループは、遅くとも2015年から、中東の官民両セクタの組織にフォーカスして活動を続けてきました。Unit 42は、遅くとも2016年以降はトルコ政府機関が標的とされた様子を明確に観測しています。ただしChaferがPythonベースのペイロードを使う様子をUnit 42が観測したのはこれが最初です。現在MechaFlounderとして知られているこのペイロードは、オンライン開発者コミュニティで無料で入手可能なコードスニペットと、攻撃者が開発したコードとを組み合わせてChaferが作成したものです。MechaFlounderトロイの木馬は、Chafer脅威攻撃グループが自身の目標を達成するために必要とする活動の実行に十分な機能を備えています。具体的には、ファイルのアップロードとダウンロード、コマンド実行機能のサポートなどです。
OilrigのClayside VBScriptとChaferのAutoITペイロードが重複していることは、さほど驚くことではありません。かなり以前からOilrigとChaferには運用上非常に似通った部分がありました。両者がペイロード開発時に同一コードやリソースにアクセスできているとすれば、この重複にも納得がいきます。Unit 42は、これら2つのグループの活動で見られた重複の状況を参考にしつつ、これらの活動内容を個別に追跡していく予定です。
パロアルトネットワークスのお客様は、次の方法でこの脅威から保護されています。
- WildFireは本稿に記載したMechaFlounderを検出し「Malicious(悪意のある)」ものと判定します。
- C2サーバーとして識別されたドメインには「Malicious(悪意のある)」というフラグが付けられます。
- AutoFocus をお使いのお客様は、本稿に説明した脅威を次のタグで追跡できます。https://autofocus.paloaltonetworks.com/#/tag/Unit42.Mechaflounder
パロアルトネットワークスは本稿で見つかったファイルサンプルや侵害の兆候などをふくむ調査結果をCyber Threat Alliance(CTA サイバー脅威アライアンス)のメンバーと共有しました。CTA のメンバーはこのインテリジェンスを使用して、お客様に保護を迅速に提供し、悪意のあるサイバー攻撃者を体系的に阻害することができます。Cyber Threat Allianceの詳細については www.cyberthreatalliance.org をご覧ください。
付録
MechaFlounder サンプル
- lsass.exe 0282b7705f13f9d9811b722f8d7ef8fef907bee2ef00bf8ec89df5e7d96d81ff
本稿で参照したインフラストラクチャ
- win10-update[.]com
- 185.177.59[.]70
- 134.119.217[.]87
- win7-update[.]com
- turkiyeburslari[.]tk
- xn--mgbfv9eh74d[.]com (تلگرام[.]com)
- ytb[.]services
- eseses[.]tk