PCに感染したCitadelマルウェアは、起動する際に端末の固有情報を確認します。確認の結果、感染したPCとは別のPCで動作していることが判明した場合にはプロセスを終了させ、その後の動作を行いません。これにより、検体を回収してもそのままでは実行することができず、解析が困難になっているという現状があります。
Citadelマルウェアが利用する固有情報は以下の2種類となっています。
Citadelマルウェアは感染すると自分自身を以下のパスに格納します。
C:\Users\<ユーザー名>\AppData\Roaming\<ランダム文字列>\<ランダム文字列>.exe
Citadelマルウェアは起動すると、自分自身が起動したファイルのパスをチェックし、上記のパスと同一かどうかのチェックを行います。チェックに用いるパスの情報は、感染時にCitadelマルウェア本体中に埋め込まれていますので、その内容と起動時に取得した情報とを比較します。この結果、パスが異なる場合には起動しないという挙動となっています。
またWindowsでは、接続されているハードディスクドライブごとに以下のようなボリューム名が付けられています。
\\?\Volume{aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee}\
上記の“{”と“}”の間の部分に設定されているGUIDを取得し、端末固有の情報として利用しています。GUIDは「グローバル一意識別子」と呼ばれ、一意の値となるため、対象の端末固有の情報として使用することができます。
Citadelマルウェアは、感染時に、感染先のファイルパスとGUID値をあらかじめマルウェアの中に埋め込みます。マルウェアは、起動時に取得した情報と格納された情報を比較することで、動作している端末が感染PCかどうかの判断を行っています。
Citadelマルウェアには、解析を困難にさせる目的で、解析環境を検出する機能が搭載されています。解析環境を検出する機能にも追加が行われているようで、入手経路A、Bで入手したCitadelマルウェアと入手経路Cで入手したCitadelマルウェアとでは、解析環境検出機能に違いがありました。
入手経路A、Bに実装されている解析環境検出機能では、動作中のプロセス一覧を取得し、特定のプロセスが動作していないかどうかをチェックをする機能が実装されています。チェック対象となっているプロセスは、VMwareやVirtualBox、BufferZoneやJoeSandboxのような仮想化関連、サンドボックス関連製品のプロセスとなります。
入手経路Cに実装されている解析環境検出機能では、入手経路A、Bに実装されているものに加えて、特定ファイル、レジストリ、ミューテックス、DLLなどの存在確認が行われています。
確認処理部分は下図のようになっています。実際のチェック関数自体は、関数ポインターの形式で保持されており、0x045A16D9のcall命令でチェック関数を順次呼び出す形式になっています。この実装形式の場合、チェック関数は個別に実装可能ですので、チェック関数の追加が容易です。今後、チェック処理がさらに強化されたマルウェアが出てくると想定できます。
これらの解析環境検出によってマルウェアが解析されていると判断した場合、その時点で処理を終了するのではなく、ダミーのURLへアクセスするようになっています。ダミーのURLは環境固有の情報を元に生成しています。そのため、解析側としては通信が発生していると勘違いして解析を続けてしまう可能性があります。
今回は、Citadelマルウェアに実装されている解析を困難にする対策について説明しました。近年サンドボックス製品などのように自動解析を行う製品が増えてきていることから、マルウェア側としても自動解析環境を検出する機能が実装されてきていることが分かりました。
また、感染対象のPCにカスタマイズした形で感染することから、パターンベースでの検知も困難になってきています。ユーザーが感染しないように対策する場合、OSやアプリケーションを最新バージョンにしておくことや、振る舞い検知ロジックを搭載したアンチウイルス製品などの導入などが必要になってくるかと思います。
FFRIは日本においてトップレベルのセキュリティリサーチチームを作り、IT社会に貢献すべく2007年に設立。日々進化しているサイバー攻撃技術を独自の視点で分析し、日本国内で対策技術の研究開発に取り組んでいる。その研究内容は国際的なセキュリティカンファレンスで継続的に発表し、海外でも高い評価を受けており、これらの研究から得た知見やノウハウを製品やサービスとして提供している。
Copyright © ITmedia, Inc. All Rights Reserved.