FFI という新たな脆弱性:Windows Code Integrity を回避する恐れ

New ‘False File Immutability’ Vulnerability Poses Significant Threat to Windows Security

2024/07/22 SecurityOnline — False File Immutability (FFI) と呼ばれる新たに発見された脆弱性クラスにより、重要なセキュリティ・メカニズムである Windows Code Integrity (CI) 回避の可能性が生じるため、サイバーセキュリティ・コミュニティ内で深刻な懸念を引き起こしている。この脆弱性については、発見者である Elastic Security の Gabriel Landau から詳細が公開されており、書き込み権限なしにオープンされたファイルは変更できないという、大前提の欠陥が突かれるものだという。


“ItsNotASecurityBoundary” と名付けられた、Gabriel Landau が提供する PoC エクスプロイトにより、FFI の深刻さが示されている。攻撃者は、ファイル属性と競合状態を操作して、信頼されるセキュリティ・カタログに悪意のコードを注入し、署名検証プロセスを効果的にバイパスして、署名されていない有害な任意のドライバなどのロードを可能にする。


この悪用の根源は、False File Immutability (FFI) として知られる概念にある。FFI が発生するのは、ファイルが FILE_SHARE_WRITE パーミッションなしでオープンされたことで、ファイルが変更できないとソフトウェアが誤って想定する場合となる。つまり、これらのパーミッションには関係なく、攻撃者は特定の状況でファイルを変更することが可能となり、”ダブル・リード脆弱性” と呼ばれる状況へといたる。この脆弱性は、ファイル内の同じ値やオフセットが2回以上読み込まれた場合に発生し、潜在的に不整合や悪用の機会を引き起こすという。

FFI は、ReadFile などの従来の I/O 操作と、MapViewOfFile などのメモリー・マップド I/O 操作の両方に影響し、ユーザー・モードとカーネル・モードの両方のコードに影響を与える。

ItsNotASecurityBoundary は、Windows Code Integrity (ci.dll) 内の FFI の仮定を利用するものだ。この悪用に成功した攻撃者は CI を操作して、不正な認証ハッシュを取り込んだ悪意のセキュリティ・カタログを受け入れるようにする。そうすることで、攻撃者はカーネルを騙して、たとえそれが署名されていなくても、任意のドライバーをロードさせることが可能となる。

このエクスプロイトを成功させるには、複雑な一連のイベントと正確なタイミングが必要だが、その影響は広範囲に及ぶ。ひとたび攻撃者がコード・インテグリティを回避する能力を獲得すれば、セキュリティ・ソフトウェアを無効にし、検知メカニズムを回避し、比較的容易にマルウェアを展開できるようになる。

この脅威を軽減するために、Gabriel Landau はカーネル・ドライバ “FineButWeCanStillEasilyStopIt” をリリースしている。しかし、これは一時的な解決策であり、根本的な脆弱性に完全に対処するには、Windows Code Integrity 自体の包括的な修正が必要である。