ファイア・アイは12月11日、OS起動前に実行されるマルウェアを使用してカード決済情報を狙う攻撃を確認したと発表した。

攻撃は、「ブートキット(bootkit)」と呼ばれる特殊な手法を使用しており、下位レベルのシステムコンポーネントにマルウェアを感染させるというもの。端末によるマルウェアの特定・検出は非常に困難であり、万が一端末が感染した場合、OSの再インストールを実施してもマルウェアを削除できないという。同社は、「システム管理者がブートキットで感染したシステムの完全な物理的消去を実行してから、OSを再ロードする必要がある」と説明している。

攻撃は「FIN1」と呼ばれるグループによって行われている。このグループは、悪意あるファイルやユーティリティを多数展開しており、「Nemesis(ネメシス)」と呼ばれるマルウェア・エコシステムの構成要素となっている。

マルウェアが端末に侵入すると、まずシステムチェックを実施する。BOOTRASHインストーラのコピーがシステム上で実行されていないか、マルウェアの必須コンポーネントであるMicrosoft NET 3.5フレームワークがシステムにインストールされているかをチェックする。インストーラがすでに実行中の場合や、.NETフレームワークがインストールされていない場合、マルウェアは停止するという。

システムチェック後に問題がないようなら、BOOTRASHは独自のカスタム仮想ファイルシステム(VFS)を作成して、Nemesisエコシステムのコンポーネントを保存する。マルウェアはファイルシステムの位置を特定し、ファイル構造に見合うだけの十分な領域がシステムに存在するかを確認する。

インストールに必要な領域スペースを特定するため、マルウェアはWindows Management Instrumentation(WMI)を使用して、システムの起動ディスクとパーティションに問い合わせる。その後、32ビットまたは64ビットのコンポーネントの合計サイズを計算し、システムのパーティション間の空き領域の中に、カスタムファイルシステム用の十分な領域があることを確認する。

ここからブートセクタのハイジャックを実施する。インストーラは、まず正規のブートセクタをメモリに読み込み、パーティションの開始から0xEのセクタにVBRコードの符号化されたバックアップコピーを保存する。続いてマルウェアは、その後のインテグリティ・チェックのために、正規のブートセクタに2つのアルゴリズムを適用する。正規のブートセクタが保存されると、マルウェアは組み込みリソースの1つから新たなブートストラップ・コードを解読し、既存のブートストラップ・コードを上書きすることで、感染システムの起動プロセスを効果的にハイジャックする。

今度はNemesisコンポーネントのインストールする。ブートキットの作成とインストールを担当する3つのコンポーネント(vbr.bin、vbs.bin、bootldr.sys)の保存に際して、インストーラは仮想ファイルシステムを使用する。それ以外のコンポーネントについては、仮想ファイルシステム内に保存される場合と、HKCU.Default\Identitiesレジストリキー内のバイナリデータとして保存される場合がある。これらのコンポーネントは、ファイル転送、画面キャプチャ、キーロガー、プロセス・インジェクション、プロセス操作、タスク・スケジューリングなどを担当している。

レジストリ値として任意的に保存されたNemesisコンポーネント

感染した端末を起動すると、システムのMBRによって悪意あるBOOTRASHブートストラップ・コードによって上書きされている起動パーティションのVBRのロードが試みられる。このコードは、カスタム仮想ファイルシステムから、Nemesisブートキット・コンポーネントをロードする。ブートキットは次に、インストール・プロセス中にディスクに保存された、正規のブートセクタにコントロールを渡す。この段階から、起動プロセスはOSのソフトウェアのロードと実行を継続する。

通常の起動プロセスの簡略図

ハイジャックされた起動プロセスの簡略図

ブートキットは、いくつかのシステム割り込みを傍受することで、起動プロセス中のNemesisの主要コンポーネントのインジェクションを手助けする。ブートキットは、さまざまなシステムサービスを担当するBIOS割り込みをハイジャックし、関連する割り込みベクターテーブルのエントリーにパッチを適用することで、OSローダーがコントロールを得た後のメモリのクエリを傍受できるようになる。

ブートキットはその後、正規のVBRにコントロールを渡し、起動プロセスの継続を許可し、OSのロード中にも、ブートキットは割り込みの傍受を行い、リアルモードからプロテクト・モードへとCPUを移す固有の命令を探して、OSのローダメモリをスキャンする。

これにより、CPUがリアルモードからプロテクト・モードへと変わるその都度、ブートキットは記述子テーブルにパッチを適用できる。このパッチには、修正版割り込みハンドラーが含まれており、特定アドレスが実行されるたびにブートキットにコントロールをリダイレクトする。この結果、ブートキットは、OSのローダー実行の特定ポイントを検出・傍受して、通常のカーネルのロードの一環としてNemesisコンポーネントをインジェクトできる。