Ursnif(Dreambot, Gozi)の静的解析レポート~インジェクションされた不正コードからIATフックまで~(2019年4月15日ばらまき分)
前回の記事に続いて再びUrsnifの静的解析について記載していこうと思います。
前回の記事ではUrsnifのExplorerへのプロセスインジェクションの手法について解説しました。今回はExplorerにインジェクションされた不正コードの解析およびIATフック(Import Adderess Table)によって実行される不正コードについて、解析していこうと思います。
■解析対象と解析環境(再掲)
2019年4月15日にばらまかれたUrsnifで、jsファイルを経由してread.binというUrsnifをダウンロード・実行するものでした。動的解析結果は以前の記事をご参照ください。
https://bankingmalware.hatenablog.com/entry/2019/04/15/165434
・ハッシュ値(Sha1)45762C39DE64AB7ACECA9D6367129EC0CE37433D
・ファイル名 read.bin
解析環境としてはWindows7の32ビットを使用。32ビットと64ビット環境では動きが異なることが分かったので、ご注意ください。また、今回の解析のために、キャプチャをとりながら再起動を繰り返しています。そのため、アドレス等について、前項のキャプチャと整合性が合わない部分もありますので、ご容赦ください。なお、もし本記事を参考にして解析する場合は、必ず仮想マシンなど、解析が終わったらすぐに戻せる環境で行い、ネットワークからも隔離した状態で行ってください。
■Explorerにインジェクションされた不正コードの追跡
・端末のバージョン情報を摂取
下記の通り、GetVersion、GetCurrentProcessId等のAPIを利用して端末やプロセス情報を取得。のちに%temp%に出力。
・Torモジュールのダウンロードおよびレジストリに書き込み
UrsnifはTorClientのDLLモジュールをダウンロードし、C&Cサーバとの通信の隠ぺいを試みます。今回は下記のキャプチャの通り、hxxp://h33a7jzovxp2dxfg[.]onionにアクセスし、またTorClientのモジュール情報がレジストリに書き込まれたことが確認。
キーロガーを実装するためにはいくつかの手法がありますが、本検体ではExplorer.exeにインジェクションされた不正スレッドがGetAsyncKeyState関数を利用して、キーロガーの機能を実装していることが確認されました。
・CreateProcessWのIATフック
UrsnifはExplorerをインジェクションしたのちに、Explorer及び各DLLのCreateProcess APIをIATフック(Import Address Table)することで、この後Explorer経由で呼び出されるプロセスに対して、インジェクションを試みます。まず、実際にIATがフックされた様子を下記に記載します。
・CreateProcessWのIATフックの手法
前項でCreateProcessWのIATフックが行われたことが確認されました。そのIATフックを行う手法についてですが、呼び出し側のプロセスのコミット済みページ領域に対するアクセス権限を変更するVirtualProtect APIを用いて実装されていることがわかりました。下記キャプチャの通り、CreateProcessWの開始アドレスが書き込まれたアドレスから4バイトだけアクセス権限を変更してIATフックが行われていました。
・CreateProcessAsUseWのIATフック
上記の処理部分にブレイクポイントを張り、処理を進めた結果CreateProcessAsUseWのIATフックも行われていることが確認された。
■CreateProcessのIATフックにより、行われる不正コードの追跡
・起動プロセスへのインジェクション
基本的にExplorerにインジェクションしたときと同様の手法(Process Hollowing)で起動プロセスへのインジェクションを行われることが確認できた。ただし、Explorerの際はすでに起動しているプロセス(Explorer)にインジェクションするためOpenProcessでExplorerのプロセスハンドルを得るが、今回はCreateProcessでまずSuspend状態でプロセスを起動し、その後ZwMapViewOfSection等を利用して不正コードを注入する。
それ以外はExplorerと同様のため、詳細な手順は省略します(詳細な手順は前記事を参照。 )
このiexplorerに注入された不正コードも簡単に解析してみましたが、explorerに注入された不正コードとほとんど同じ動きが見受けられました。explorerとiexplorerに注入されたRWXの領域のメモリを比較してみましたが、一部の部分は異なりましたが、それ以外は同じバイトだったため、基本的には同じ動きをすると思われます。また、試しにメモ帳や電卓を開いて、iexplorer, calc, notepadに注入された不正コードを比較してみましたがすべて同じでした(この傾向は私の解析環境でブラウザインジェクションも行われた2019年6月17日にばらまかれたUrsnifでも同様でした)。個人的にはブラウザインジェクションを行うため、iexplorerと他のプロセスで注入される不正コードは違うのではと勝手に推測していたため、意外な結果でした。
■(参考)自動起動設定
%temp%配下にadmkadp.exeという名前で自分自身をコピーし、自動起動となるようにレジストリを修正することが確認された。
■まとめ
今回のUrsnifの静的解析により、プロセスインジェクションの手法及びIATフックの手法についてより詳しく理解することができました。逆にブラウザインジェクションの手法及びC&Cとの通信については、今回の検体では動作が観測できなかった(C&Cに関してはすでに落ちた)ため、十分に解析できませんでした。現在、諸事情でIDA Proを現在使えなくなってしまったので、またIDA Proが使えるようになれば時間があるときに解析してみようと思います。
■筆者について
筆者は、あくまで最近マルウェア解析をし始めたマルウェア解析初心者です。基本的には独学によりマルウェア解析スキルを身に着けた程度のため、あくまで参考程度にとどめていただければ幸いです。ご質問・ご指摘がある場合、ご連絡いただければ幸いです。
■参考文献
今回の解析に当たり、多くのサイトを参考にさせていただきましたが、その中でも特に参考にさせていただいたページを記載させていただきます。
https://www.mbsd.jp/blog/20180607.html
https://www.nttsecurity.com/docs/librariesprovider3/default-document-library/jp_ursnif_20161226
https://www.iij.ad.jp/dev/report/iir/034/01_04.html