Bitdefenderのセキュリティ研究者らは、Windowsのバインドリンクを悪用してエンドポイント検知・対応(EDR)製品を回避する3つの攻撃手法を実証しました。
バインドリンクはbindflt.sysによって実装された正規のWindows機能で、Storeアプリ、Windows Sandbox、Windowsコンテナで使用されています。これはカーネルレベルのリダイレクト機構であり、実際のバッキングパスに透過的にマッピングされる仮想パスを作成します。
しかし、バッキングパスが攻撃者の管理下にあるファイルを指すように改変された場合、そのファイルは事実上不可視のままアクセスされることになります。特定の条件下では、これによって隠されたマルウェアが読み込まれる一方で、システム側には既知の無害なファイルを指す通常のリンクしか見えない、という事態が起こり得ます。
研究者らのレポートによると、バッキングパスが「DLLを指している場合、それはファイルバインディングになります。つまり、プロセスは自身が信頼しているパスから攻撃者のファイルを読み込んでしまうのです」と説明されています。
この問題が発生するのは、防御機構がパスに大きく依存しているためです。有効かつ想定通りのWindowsパスであれば、ほとんどの防御機構はそれを無視するか許可します。バインドリンクは有効に見えるため、実際には不可視の悪意あるコンテンツへ密かに誘導するよう改変されていても、無視されてしまうのです。「攻撃者はファイル解決の仕組みを変え、あとは信頼されたWindowsコンポーネントに処理を任せるだけです」。
なお、Microsoftは今回のBitdefenderの発見について、管理者権限を必要とすることから深刻度を「低」と評価しています。これに対しBitdefenderは、攻撃者は日常的に管理者権限を取得しているとして反論しています。
Bitdefenderの研究者らは、バインドリンクを悪用する3つの攻撃手法について説明しています。1つ目は「ファイルバインディング」、すなわち単純なパスハイジャックです。この手法を用いて、研究者らは防御回避、具体的にはAMSI.dll(Antimalware Scan Interface)の回避例を示しています。PowerShellは、スクリプトをチェックする際にAMSIを呼び出すWindowsアプリの一つです(他にはWindows Script Host、JavaScriptおよびVBScriptエンジン、Officeマクロの実行経路などがあります)。
PowerShellは通常、実行前にスクリプト内容をスキャンするためamsi.dllを起動・読み込みします。しかし攻撃者が事前に環境を仕込んでいた場合、バインドリンクによってこのリンクが乗っ取られ、攻撃者の偽装DLLへとリダイレクトされてしまいます。これは通常のユーザーモードやほとんどのEDRファイルシステム監視からは不可視です。スキャナーは通常、仮想パスをあたかも実際のパスであるかのように認識しますが、実際には偽のバッキングパスからデータを受け取っていることに気付きません。
AMSI自体やPowerShell自体には何も手を加えることなくAMSIを無力化できます。しかもこれはAMSIに限った話ではありません。他のプロセスから信頼されているDLLパスであれば、バインドリンクによって攻撃者の望む任意の対象へリダイレクトする標的にできます。

2つ目の攻撃手法は「プロセスバインディング」と呼ばれています。これは実行可能イメージに対してファイルバインディングを適用したもので、EDRの検知を回避するために使用され得ます。プロセスがファイルパスを対象として信頼している場合、バインドリンクによってそれを無意味なファイルへリダイレクトできます。winver.exeはその好例で、他の偽装攻撃でもよく使われています。
EDRが読み込まれると、ファイルパスをチェックし、それが正しいものだと想定します。そのため、EDRは本来調べるべきものを調べていると「信じ込み」ますが、実際には無害なwinver.exeを見ているだけです。異常は見つからず、そのまま処理を進めてしまいます。攻撃者の命令を含むファイルは、EDRとユーザーの両方にとって不可視のままです。「カーネルのプロセス生成コールバックが発火し、製品はイメージパスを記録し、ポリシーエンジンはそのパスが信頼できるかどうかをチェックし、UIツールはカーネルから取得したパスに基づいてプロセスを表示します。報告されたパスが元のソースパスであれば、そのプロセスは信頼された実行ファイルのように見えます」と研究者らは説明しています。
ただし、このアプローチには一つ問題があります。EDRからは不可視であっても、このリンクはグローバルなものであるため、他のスキャナーには検知され得るのです。「パスを再度開く形で確認するスキャナー、アナリスト、EDRコンポーネントであれば、この不整合に気付く可能性があります」。これを解決するために、と研究者らは述べます。「攻撃者には2つのファイルシステムビューが必要です。一つは信頼された名前がペイロードに解決されるビュー、もう一つはペイロードのパスがクリーンなファイルに解決し直されるビューです」。
これを実現するのが、Bitdefenderが示す3つ目の攻撃手法「サイロバインディング」です。これにはユーザー定義のWindowsサイロが必要であり、単純な作業ではありませんが、攻撃者がすでに管理者レベルのアクセス権を得ていれば実現可能です。
サイロは、その内部に含まれるプロセスに対し、システムの隔離されたビュー(独自のファイルパス、レジストリ、オブジェクト名)を与え、外部からは完全に遮断します。サイロ内のバインドリンクはグローバルなリンクではなく、サイロの外部からは検知できません。その結果、あるパスがサイロ内では一つのファイルに解決される一方、それ以外の場所ではまったく別のファイルに解決される、ということが起こり得ます。
サイロの内部では、攻撃者は自らのマルウェアを指すようにできます。しかしそのマルウェアは、サイロの外部から動作するスキャナーによって検知される可能性があります。これを防ぐのが、ペイロードからクリーンな元のファイルへ戻す2つ目のリンクです。その結果、攻撃者のペイロードは実行可能でありながら、サイロの外部で動作するスキャナーには検知されないという状態が生まれます。
「この2つのリンクは、同じ2つのファイルの組み合わせに対して正反対の経路を示しており、bindflt.sysは実行コンテキストに応じてどちらを適用するかを決定します。サイロ内では、信頼されたパスを開くとペイロードが得られるため、悪意あるコードが実行されます。サイロ外では、ペイロードを探しに来たツールは静かにクリーンな元のファイルへリダイレクトされます」と研究者らは説明しています。
研究者らは、サイロバインディングがWindowsの組み込みセキュリティ防御機構をいかに覆し得るかについて、具体例を挙げています。AppLockerの回避、Windowsファイアウォールの回避、Sysmonの汚染などです。さらに、標準的なMimikatzに対してEDRが検知を行えるかどうかもテストしています。サイロバインディングを使用しない場合は検知できましたが、これは予想通りの結果でした。しかしサイロバインディングを使用した場合は、検知できませんでした。
バインドリンクはWindows内で正規かつ有用なツールです。しかし同時に、攻撃者に侵害後の強力な回避手段を提供してしまいます。最も強力な手法はサイロバインディングであり、これはファイルバインディングとプロセスバインディングの両方を拡張したものです。Bitdefenderはこの発見内容を開示しましたが、Microsoftはローカル管理者権限を必要とすることを理由に、この脅威を深刻度「低」に分類しています。
これに対しBitdefenderは、BYOVD(bring your own vulnerable device、脆弱なドライバーの持ち込み)攻撃手法を引き合いに出しています。この手法も管理者権限を必要としますが、現代のランサムウェア攻撃の手順書における一般的かつ産業化された「標準的」な構成要素になっています。管理者権限が必要だからといって「それで終わり」ではない、とBitdefenderは述べます。「(BYOVDは)国家レベルの高度な手口ではありません。今や、ほとんどのプロフェッショナルなランサムウェアグループがツールキットにEDRキラーを備えており、暗号化前の標準的な手順としてそれを使用しています。バインドリンクの悪用は、そうした同じ攻撃者たちに、脆弱なドライバーすら一切必要とせず、文書化されたWindows機能とすでに保持している管理者権限だけでエンドポイントエージェントを盲目化させる、もう一つの手段を与えてしまうのです」。
関連記事: DragonForceランサムウェア攻撃でMicrosoft Teamsのリレーサーバーが悪用される
翻訳元: https://www.securityweek.com/windows-bind-link-attacks-can-hide-malware-from-edr-tools/