Trickbot(Ver1000102)を解析してみる
マルウェア解析が趣味のあゆむです。今回はWindows7(64bit)環境下でTrickbotを解析したので、その結果をお伝えします。検体/ログ解析時の種類特定にお役立てください。モジュールの解析までは行っていませんのであしからず。
Trickbotとは
オンラインバンキングマルウェアです。Trickbotの主なターゲットは海外で日本にはあまりばら撒かれていない印象を受けます。
Trickbotは、ウェブインジェクション機能やURLリダイレクション機能などを持っています。たとえば、感染した状態でユーザが銀行のサイトなどにアクセスしようとすると、サイトに不正なコードが挿入されて入力した情報が盗まれるという被害が起こりえます。
主な感染経路はメールによるものです。メールに添付されたファイルを開いて感染するケースや脆弱な環境下で悪意のあるサイトに誘導される形で感染するケースがほとんどのようです。
Trickbotの更新はとても盛んで、バージョンアップして動作が変わったり、新たな機能を有するモジュールをダウンロードするようになったりと日々進化しています。執筆現在(12/23)の最新バージョンは1000108です。
検体情報
解析した検体は、2017年12月13日にばら撒かれたTrickbotです。メールに添付されたDocファイルを開くとTrickbotがダウンロードされて感染するという流れです。
Docfile
MD5 | 5a69998c829e08486b27ad16182f451e |
SHA256 | ee468a25416ad9f812198dbfb0f389fcdaf6326d1267625e921e7048bc37a9ee |
TrickBot(Packed)
FileName | nyRhdkwSD.exe / oySielwTD.exe |
MD5 | 8b607501725d998c14f6a34eb4e8dc3e |
SHA256 | d27ea2a862848c82b7726584c6e66e41cb4988e3e92a42391d85d24fbe4e3d9c |
Version(ver) | 1000102 |
GroupTag(gtag) | mac1 |
解析結果
概要
Trickbotは、パックされており本体が動作するまでに4つのステップがあります。下図をご覧ください。最初に実行されるファイルは「nyRhdkwSD.exe」です。これを実行すると、Process Hollowingという手法を用いて、新たに作成した自身のプロセスにコードを注入します(下図1-1)。次に実行元のファイルを別の場所へコピーします(下図2-1)。また、自動実行の設定をタスクスケジューラに登録します(下図2-2)。そして、再度Process Hollowing(下図3-1)とタスクの登録試行(下図4-2)を行い、正規のプログラムsvchost.exeへTrickbotを注入します(下図4-1)。以降では、これらをステップごとに解説します。
内容
1st Step
まず、デバッガで開くと、CreateWindowExA関数がたくさん呼び出されていることがわかります。これらは、解析妨害のために挿入されているようで、ブレイクポイントを設定しても一度も呼び出されません。引数もすべて0で呼び出す気がないです。
実行すると、Process Hollowingを行います。自身をサスペンド状態でプロセス生成し、中身をアンマップ(空洞化)して、新たなコードを注入します。そして、エントリーポイントを書き換えて、スレッドを動作させます。このテクニックはよくある手法でDreamBotでも使われています。
なお、Process Hollowing実行時に呼ばれる関数のアドレスはスタック上に展開されます。
2nd Step
スレッドの動作が始まると注入されたコードが実行され、主にファイルのコピーとタスクスケジューラへの登録を行います。
まず、「%APPDATA%/AppData/Roaming/」に「services」というフォルダを作成します。CopyFileW関数を用いて、実行元のファイル(8b607501725d998c14f6a34eb4e8dc3e)をコピーします。当該解析環境では「oySielwTD.exe」という名前にリネームされて配置されました。
さらに、タスクスケジューラへ次の内容で自動実行の登録を行います。ログオン時または登録時点から3分ごとにプログラムが実行されます。
名前 | services update |
説明 | Look for services monitor. |
トリガー | 複数のトリガーの定義(任意のユーザのログオン時。毎日hh:mmに起動、トリガーされた後、1日間の間、00:03:00ごとに繰り返す。) |
操作 | プログラムの開始 C:\Users\■■■\AppData\Roaming\services\oySielwTD.exe |
3rd Step
タスクスケジューラによってプログラムが実行されます。このときの動作は1st Stepと同一のもので、再度Process Hollowingが行われます。
4th Step
スレッドの動作が始まると注入されたコードが実行され、2nd Stepと途中まで同一の動作をします。この段階では、主にタスクスケジューラへの登録試行とTrickbotの展開、svchost.exeへの注入が行われます。
詳細を解析していませんが、svchost.exeへの注入もProcess Hollowingによって行われていると思われます。CreateProcessW関数を用いてsvchost.exe(64bit)のプロセスをサスペンド状態で作成します。
なお、一連の動作終了後の「oySielwTD.exe」のヒープ領域には、Trickbot(64bit)が展開されています。マジックナンバー0x4D 0x5A(MZ)が確認できます。
Trickbot
Trickbotが注入されたsvchost.exeが動作すると、まず、「%APPDATA%/AppData/Roaming/」に新たにファイルとフォルダを作成します。この動作は繰り返されるようで、削除しても当該svchost.exeが動作している間は再度生成されます。
Modulesフォルダには、モジュールをダウンロードして配置します。client_id、group_tagの中身は下図をご覧ください。黒塗りにしていますが、client_idは感染端末のユーザ名から始まり、Windowsバージョンと乱数で構成されています。
外部のサービスと通信して感染端末のグローバルIPアドレスを確認します。User-AgentがChromeとなっていますが、確認したところ感染端末にインストールされているChromeのバージョンと異なっていました。
C2サーバとのC2通信が発生します。
残念ながら解析時点では接続できませんでした。Trickbotは基本的にHTTPS通信を行うようです。
なお、おとりC2サーバを用意して通信させてみた結果、次のリクエストを投げていることがわかりました。「/5/spk/」の5はコマンドIDで、C2サーバから何かをダウンロードする際に使われるとのことです。*1
さて、C2サーバのIPアドレスを含むconfigは、Trickbotが注入されたsvchost.exeのメモリのヒープ領域に保持されています。
取り出したデータは次の通りです。ここにTrickbotのバージョンやC2通信先、取得するモジュールのリストが記載されています。
<mcconf> <ver>1000102</ver> <gtag>mac1</gtag> <servs> <srv>79.106.41.9:449</srv> <srv>185.21.149.41:449</srv> <srv>200.111.97.235:449</srv> <srv>67.209.219.92:449</srv> <srv>209.205.188.238:449</srv> <srv>73.252.252.62:449</srv> <srv>76.16.105.16:449</srv> <srv>82.202.236.84:443</srv> <srv>78.155.199.124:443</srv> <srv>179.43.160.45:443</srv> <srv>94.250.253.142:443</srv> <srv>5.200.55.47:443</srv> <srv>37.60.177.19:443</srv> <srv>94.250.255.50:443</srv> <srv>82.146.48.44:443</srv> <srv>194.87.93.30:443</srv> <srv>194.87.94.225:443</srv> <srv>195.62.53.88:443</srv> <srv>82.146.48.241:443</srv> <srv>195.88.209.128:443</srv> <srv>80.87.198.204:443</srv> <srv>194.87.146.14:443</srv> <srv>195.133.147.140:443</srv> <srv>92.53.66.60:443</srv> <srv>194.87.93.84:443</srv> <srv>82.202.226.189:443</srv> <srv>95.154.199.136:443</srv> </servs> <autorun> <module name="systeminfo" ctl="GetSystemInfo"/> <module name="injectDll"/> </autorun> </mcconf>
解析結果は以上です。
今回の解析ではC2サーバと通信ができなかったため、これ以降の分析はしていません。通常は、この後に各種情報を窃取する機能を持ったモジュールがダウンロードするようです。そのうちチャレンジします。