開発者は、ソフトウェアのバージョン更新や、プロジェクトの管理と維持のためにこまめにソースコードを変更したり再加工したりする必要があります。そのような目的のために広く利用されている「GitHub」は、バージョン管理システムを提供するオンラインのリポジトリホスティングサービスです。ソースコードの管理・共有・合作・統合のための貴重なプラットフォームを提供している GitHubは、プログラマや開発者のためのソーシャル・ネットワーキング・サイトのように活用されています。
しかし、GitHubは悪用されることもあります。オープンソースのランサムウェアのプロジェクト「EDA2」と「Hidden Tear」は、教育目的を意図して作成されたはずでしたが、GitHubで公開されて以来、さまざまなランサムウェア亜種を生み出し、企業に損害を与えてきました。「モノのインターネット(Internet of Things、IoT)」機器の不具合を悪用するツールも GitHubで入手可能でした。標的型攻撃で利用されたキーロガー「Limitless」でさえ、GitHubのプロジェクトにリンクしていました。
トレンドマイクロは、最近、攻撃者集団「WINNTI(ウィンティ)」がバックドア型マルウェア(「BKDR64_WINNTI.ONM」として検出)のコマンド&コントロール(C&C)通信の経路として GitHubを悪用しているのを確認しました。WINNTIは、オンラインゲーム開発会社などを狙った攻撃で古くから知られているグループです。
弊社の調査から、この度の GitHubアカウントを利用した攻撃においても、WINNTIの特徴とも言える遠隔操作ツール「PlugX」の亜種の利用が確認されています(遠隔操作ツール「PlugX」は、株式会社 地理情報開発から提供されている PlugX(R) シリーズとは無関係な不正なプログラムです)。
■マルウェアの解析
トレンドマイクロが解析したマルウェアは、他のマルウェアをメモリに読み込むファイル “loadperf.dll” と、不正活動を実行するファイル “loadoerf.ini” の、2つの部分に分かれていました。
この “loadperf.dll” は、同じファイル名を持つ Microsoftの正規ファイルの改変版です。パフォーマンスレジストリの操作をするための正規ファイルのセクションに、余分なコンポーネントが追加されています。“loadperf.dll” は、<Windowsのインストールディレクトリ> \ system32 \ wbem \ に自身をコピーし、正規ファイル “loadperf.dll” と置き換えます。そして、PC のパフォーマンスデータ を収集する Windowsの正規のファイル「WMI Performance Adapter Service(WmiApSrv)」を利用し、“services.exe” を経由して改変版 “loadperf.dll” をインポートします。また関連するすべての DLLファイルと不正活動を実行するファイル”loadoerf.ini” をインポートします。感染経路としては、 “loadoerf.ini” からインポートされた空の関数「gzwrite64」が偽の APIとして機能し、”loadoerf.ini” の実行開始ポイントのの役割を果たします。「gzwrite64」は改変版 “loadperf.dll” によってインポートされますが、主要な不正活動を実行するコードは、実際には “loadoerf.ini” の「DLLMain」に存在します。
図1:「.idata」が追加されている改変版 “loadperf.dll“
図2:追加でインポートされた関数「gzwrite64」
暗号化、実行、およびコードインジェクションなどの最終的な不正活動を担うファイルは “loadoerf.ini” です。PCに読み込まれると、「DLLMain」が暗号化関数「CryptUnprotectData」を呼び出し “loadoerf.ini” を復号します。この関数は実際のコンピュータ IDに依存する部分が大きく、実際の感染PC 以外の PC上での復号は不可能であり、このことがマルウェアの解析をより困難なものにしています。
図3:復号関数(部分)
復号後、PC上でコードの一部が実行され、その後、主要な Windowsコンポーネントである “svchost.exe” に追加されます。そして “loadoerf.ini” がメモリに読み込まれます。
図4: “loadoerf.ini” の実行および感染フロー
GitHubはどのように利用されているのでしょうか。感染に成功すると、マルウェアは GitHubプロジェクトに格納されているリポジトリから、HTMLページと通信を開始します。
図5:GitHubアカウントに確認された、C&C通信に利用される HTMLページ
マルウェア解析者であれば、上記画像の赤で囲った部分から、PlugXが暗号化されている可能性を疑うでしょう。文字列の最初と最後の部分である DZKS と DZJS は、PlugXの典型です。しかし、さらに詳細に見ると、復号アルゴリズムが PlugXとは異なっています。この例では、文字列を復号すると、マルウェアが接続する IPアドレスとポート番号、つまり実際の C&Cサーバの所在が明らかになります。
「BKDR64_WINNTI.ONM」は、異なる暗号化アルゴリズムを利用して自身の C&C情報を Githubに格納したファイルに保存されしています。それらの中には、PlugXが利用するアルゴリズムがあります。実際に解析した C&C文字列から、PlugXとの関連が確認されています。これは、WINNTIが今回の攻撃活動でも同じバックドア型マルウェアを利用している可能性を示しています。今回確認された GitHubアカウントからは PlugXの検体を見つけることはできませんでしたが、トレンドマイクロは、現在活動中の PlugXの亜種の中には、この GitHubのリポジトリを利用して C&C情報を取得するものが存在すると推測しています。
この GitHubアカウントを利用した攻撃活動で確認された他のアルゴリズムのほとんどは、従来の PlugXのアルゴリズムから派生しています。
- PlugX様式+シフト文字列+ Base64
- PlugX様式+シフト文字列+ Base64 + XOR
- PlugX様式+ Base64 + XOR
それ以外のアルゴリズムでは、マーク文字列+シフト文字列+ Base64暗号化方式のものが確認されています。
■WINNTIの GitHubアカウントを追跡する
WINNTIが利用する GitHubアカウントは 2016年5月に作成されていました。そして 2016年6月に、他の正規の既存リポジトリを複製して、1つのプロジェクト「mobile-phone-project」が作成されました。
WINNTIの C&C通信のリポジトリは、2016年8月に作成されています。トレンドマイクロは、GitHubアカウントは乗っ取られたものではなく WINNTIによって作成されたものと推測しています。リポジトリには、2017年3月までに、さまざまな時点で 14の HTMLページが作成されていました。
■攻撃活動の歴史
トレンドマイクロは、今回の WINNTIの攻撃活動を、GitHubに公開されている日付から分析しました。GitHubでは、各ファイルの最初と最後のコミットされた時刻のタイムスタンプが保存されます。これにより、WINNTIの C&Cサーバ初回利用日の時系列表を作成しました。
IPアドレスが WINNTIの C&Cサーバに接続している時間を監視したところ、攻撃者集団が午後から活動を開始し、夕方遅くまで活動していたことが確認されました。時刻からは、予定に拘束されない攻撃者らしく、開始が遅い傾向がうかがえますが、非常に遅い時間まで活動していることもわかります。週末には 1つの活動が確認されたのみで、それは新しい HTMLファイルの作成でした。
GitHubのアカウントで最初に確認された活動は 2016年8月17日、そして最近では、2017年3月12日に開始された活動が確認されています。
以下は、C&Cサーバの IPアドレスが最初に利用された日の時系列表です。
図6:C&Cサーバの IPアドレスが最初に利用された日
■C&Cサーバ
WINNTIが利用する GitHubアカウントには 12種類の IPアドレスがあり、さまざまなポート番号が利用されています。これらの C&Cサーバは、53(DNS)、80(HTTP)、および443(HTTPS)の3つの異なるポートを経由して通信されます。 これは、感染PC とC&Cサーバ間の通信のために PlugXと WINNTIの亜種が用いる典型的な手法です。ほとんどの C&Cサーバは米国でホストされていますが、2つは日本に所在していました。
C&Cサーバの IPアドレス | ポート番号 |
160[.]16[.]243[.]129 | 443 (HTTPS) |
160[.]16[.]243[.]129 | 53 (DNS) |
160[.]16[.]243[.]129 | 80 (HTTP) |
174[.]139[.]203[.]18 | 443 (HTTPS) |
174[.]139[.]203[.]18 | 53 (DNS) |
174[.]139[.]203[.]20 | 53 (DNS) |
174[.]139[.]203[.]22 | 443 (HTTPS) |
174[.]139[.]203[.]22 | 53 (DNS) |
174[.]139[.]203[.]27 | 53 (DNS) |
174[.]139[.]203[.]34 | 53 (DNS) |
174[.]139[.]62[.]58 | 80 (HTTP) |
174[.]139[.]62[.]60 | 443 (HTTPS) |
174[.]139[.]62[.]60 | 53 (DNS) |
174[.]139[.]62[.]60 | 80 (HTTP) |
174[.]139[.]62[.]61 | 443 (HTTPS) |
61[.]195[.]98[.]245 | 443 (HTTPS) |
61[.]195[.]98[.]245 | 53 (DNS) |
61[.]195[.]98[.]245 | 80 (HTTP) |
67[.]198[.]161[.]250 | 443 (HTTPS) |
67[.]198[.]161[.]250 | 53 (DNS) |
67[.]198[.]161[.]251 | 443 (HTTPS) |
67[.]198[.]161[.]252 | 443 (HTTPS) |
表:C&C通信に利用される IPアドレスおよびポート番号
トレンドマイクロは、この記事公開に先立って確認した内容を GitHubに開示し、協働してこの脅威に取り組んでいます。
■結論
攻撃者集団 WINNTI は、GitHubのように人気のあるプラットフォームを悪用し、感染PC と C&Cサーバ間の通信維持に役立てています。トレンドマイクロは、「2017年セキュリティ脅威予測」で、今後の標的型攻撃では予想を上回る新たな手法が登場すると予測しました。WINNTIは、古くからのマルウェアを利用しながらも、新たな手法を用い攻撃を巧妙化させている点で、予測を反映しているといえます。
「BKDR64_WINNTI.ONM」として検出される SHA256値は以下のとおりです。
06b077e31a6f339c4f3b1f61ba9a6a6ba827afe52ed5bed6a6bf56bf18a279ba — 「 cryptbase.dll」
1e63a7186886deea6c4e5c2a329eab76a60be3a65bca1ba9ed6e71f9a46b7e9d — 「 loadperf.dll」
7c37ebb96c54d5d8ea232951ccf56cb1d029facdd6b730f80ca2ad566f6c5d9b — 「loadoerf.ini」
9d04ef8708cf030b9688bf3e8287c1790023a76374e43bd332178e212420f9fb — 「wbemcomn.ini」
b1a0d0508ee932bbf91625330d2136f33344ed70cb25f7e64be0620d32c4b9e2 — 「 cryptbase.ini」
e5273b72c853f12b77a11e9c08ae6432fabbb32238ac487af2fb959a6cc26089 — 「wbemcomn.dll」
※リサーチ協力:Cyber Safety Solutions Team
参考記事:
翻訳:室賀 美和(Core Technology Marketing, TrendLabs)