ここ数週間、McAfee Labsでは最近発見されたバンキング型トロイの木馬を解析してきました。Shifu(”Thief” つまり「泥棒」の日本語風の発音から)と呼ばれるトロイの木馬は、複数のマルウェアツールの要素を併せ持るとともに、4月から広まり始め、主として日本の銀行を攻撃対象としています。
インストール
このマルウェアは、他のマルウェアによってファイルとして生成されるか、ユーザーがハッキングされたサイトにアクセスしたときに、知らないうちにファイルをダウンロードすることで感染し、そしてインストールされると、次のファイルが生成されます。
このファイルは、次のファイルを生成、実行します。
隠蔽テクニック
最近発見されたこのマルウェアファミリーは、ありとあらゆるだましの技を駆使して、従来のセキュリティソリューションの検出を逃れることがわかりました。マシンのコンピューター名がSANDBOXまたはFORTINETの場合は、自身を終了させます。
また、次のいずれかのファイルが見つかった場合にも、自身を終了させました。
次の画像は、マルウェアがc:\sample\pos.exeのファイルが存在するかどうかを確認する様子を示したものです。
このマルウェアは、自身がデバッグ対象になっている場合も終了しました。IsDebuggerPresent APIによって、プログラムがデバック中かどうかを検出し、デバック中であれば、その振る舞いを変更できます。APIとはWindows OSが提供するシステム関数のことで、このAPIは、一般にマルウェアサンプルでの使用例が多く見られるものです。マルウェアの開発者は、これらのテクニックを駆使してマルウェアが容易に解析されないようにしていますが、Shifuには、Sleep APIも使われていることがわかっています。これは、アプリケーションを無期限でスリープ状態にできるAPIです。
また、Shifuは自動化防止機能の有無をチェックできます。一般に、通常のシステムでは、ユーザーがタスクを切り替えるとフォアグラウンドのウィンドウが切り替わりるのですが、サンドボックスのような自動化システムでは、通常、不正と思われるサンプルを実行してその挙動を監視する、というただ1つのタスクしかありません。マルウェアは、これら2つのシステムの違いを狡猾に利用し、まずGetForegroundWindow()を呼んでチェックし、ウィンドウのハンドルを保存。その後、同じ機能を継続的に呼ぶことによって、フォアグラウンドのウィンドウが切り替わったかどうかをチェックしているのです。そして、コードの残りの部分は、ウィンドウが切り替わるまで実行されません。
非同期手続きのコールをインジェクションする
通常、スレッドを作成するにはオーバーヘッドが必要となるため、マルウェアはしばしば非同期手続きコールをインジェクションします。これによってある関数を現在のスレッド上で呼び出せるようになるためです。これらのコールは、スレッドに対して正規の実行パスを実行する前に、別のコードを実行するように指示することができます。マルウェアは、PoS RAMスクレイパーによってしばしば利用されるCreateToolhelp32Snapshot関数を使用して、感染したシステムで実行中のプロセスをチェックすることがわかっています。次の図で示すように、Createtoolhelp32snapshot(特定のプロセス、およびそのプロセスが使用しているヒープ、モジュール、スレッドのスナップショットを取る)、Process32First、Process32nextなどのAPIコールを探して、対象のプロセスを見つけることで、マルウェアが対象にしているコードが判明します。このマルウェアは、すべてのプロセスのリストを取得して、それを自身のメモリに保存。そしてインジェクションされた不正コードのスレッドの1つは、感染したシステム上でアクティブな非システムプロセスのメモリを定期的に取り出すことでクレジットカード情報を詐取しているのです。
このマルウェアは、メモリから取り出して盗んだデータを漏えいさせるためにHTTP POST要求を使い、データをとあるコントロールサーバーに送信します。その結果、盗んだ情報がそのコントロールサーバーまで送られることになります。この例では、マルウェアはexplorer.exeおよびcsrss.exeの2つの実行中のプロセスにコードをインジェクションしていることを確認できました。
Shifuは、ドメイン生成アルゴリズムを使用して、ランダムなドメイン名を作成し、これをボットネットの秘密の通信に利用。次に示すトラフィックでは、生成されたランダムなドメイン名が示されています。
このマルウェアは、Windowsの機能であるmailslotを使用してローカルプロセスとネット上のプロセスとの間で片方向のプロセス間通信を行い、追跡情報と盗んだデータをmailslotに格納、POST要求を使用してそのデータをコントロールサーバーに送信することが可能です。
Shifuは、GetModuleFileNameコールを使用して現在動作中の実行ファイルのパスを取得できます。ここでGetModuleFileNameコールが必要となるのは、マルウェアがディレクトリまたはファイル名を知らない場合があるからで、この情報を動的に取得することでマルウェアは、どの実行ファイルが呼ばれ、またそのファイルがどこに格納されていようとも、サービスをインストールすることができるというわけです。
このマルウェアは、SHGetValueAを使用してオープンレジストリキーまたは名前が付けられたサブキーから値を取得します。
よくあるように、解凍されたコードが新しく再マッピングされたメモリにもインジェクションされています。
このマルウェアは、被害者のOSのバージョン情報、PC名、GUIDなどをHTTP Postを使用してリモートサーバーに送信するのです。以下に示すコードの断片もご参照ください。
ここまでに解説した内容は、氷山の一角に過ぎません。今後もこのマルウェアについてさらに深く調べ、判明した情報をみなさんにお知らせしたいと思います。
そして最後に、Intel Security製品は、DATバージョン7930以降でこのマルウェアをTrojan-Shifu!の一部として検出可能であることもお伝えします。
※本ページの内容はMcAfee Blogの抄訳です。
原文:Japanese Banking Trojan Shifu Combines Malware Tools
著者:Diwakar Dinkar (Intel Security)