DLL ハイジャックに WinSxS 悪用の新たな手法:Windows 10/11 保護をバイパス

New Variant of DLL Search Order Hijacking Bypasses Windows 10 and 11 Protections

2024/01/01 TheHackerNews — DLL (Dynamic Link Library) の検索順序をハイジャックする、新しい亜種に関する情報が、セキュリティ研究者たちにより公開された。この手口を悪用する脅威アクターたちは、Microsoft Windows 10/11 を実行するシステム上でセキュリティをバイパスし、コード実行を可能にする。サイバーセキュリティ企業 Security Joes は、「信頼できる WinSxS フォルダに一般的に取り込まれる実行可能ファイルを、古典的な DLL 検索順序のハイジャック手法で悪用する」と、The Hacker News に共有した最新レポートで説明している。


この手法を成功させた攻撃者は、権限を昇格させることなく、侵害したマシン上での悪意のコード実行を可能にする。さらに、過去にも観測されているように、潜在的に脆弱なバイナリを攻撃チェーンに導入することもできる。

DLL 検索順序ハイジャックとは、その名の通り、DLL をロードする際に使用される検索順を悪用して、防御回避/永続性/権限昇格などを目的として、悪意のペイロードを実行するものだ。

具体的に言うと、この技術を悪用する攻撃では、必要とするライブラリへのフルパスは指定されない。その代わりに、アプリケーションの特定が行われるが、そこでは、あらかじめ DLL の検索順序が定義され、それに依存しているものが選択される。

この動作を悪用する脅威アクターは、正規のシステム・バイナリを非標準のディレクトリに移動させる。そのディレクトリには、正規の DLL と同じ名前を持つ悪意の DLL が配置されているため、攻撃コードを含むライブラリがピックアップされることになる。

DLL Search Order Hijacking


つまり、DLL を呼び出すプロセスは、実行中のディレクトリを最初に検索してから、他の特定された場所を反復して検索し、対象となるリソースをロードするようになっている。その検索順序は、以下のようになる。

  1. アプリケーションの起動元ディレクトリ
  2. C:˶WindowsSystem32 フォルダ
  3. C:˶WindowsSystem フォルダ
  4. C:˶Windows フォルダ
  5. 現在の作業ディレクトリ
  6. システムの PATH 環境変数にリストされているディレクトリ
  7. ユーザーの PATH 環境変数にリストされているディレクトリ

この、Security Joes が発見した斬新な手口は、信頼できる C:˶WindowsWinSxS フォルダにあるファイルをターゲットにしている。WinSxS (Windows side-by-side) とは、重要な Windows コンポーネントであり、互換性と完全性を確保するために OS のカスタマイズやアップデートに使用される。

Security Joes の Co-Founder/CEOである Ido Naor は、「従来かた攻撃者たちは、Windows アプリケーションが外部ライブラリや実行可能ファイルをロードする方法を操作する、DLL 検索順序ハイジャックなどのテクニックに依存していた。今回の発見は、このような手法とは一線を画し、より巧妙でステルス的な悪用方法を明らかにするものである」と、The Hacker News に述べている。

端的に言うと、このアイデアは、WinSxS フォルダ内の脆弱なバイナリ (ngentask.exe/aspnet_wp.exe など) を見つけ出すことから始まる。続いて、正規の DLL と同じ名前のカスタム DLL を、アクターが管理するディレクトリに戦略的に配置することで、通常の DLL 検索順序の乗っ取り手法と組み合わせて、コード実行を実現するというものだ。

その結果として、不正な DLL を含むカスタム・フォルダをカレント・ディレクトリとして設定し、WinSxS フォルダ内の脆弱なファイルを実行するだけで、WinSxS フォルダから実行ファイルをコピーすることなく、DLL の内容の実行をトリガーすることができる。

Security Joes が警告するのは、WinSxS フォルダ内には、DLL 検索順序ハイジャックの影響を受けやすいバイナリが存在する可能性があるため、この悪用手法を軽減するために、十分な予防措置を講じる必要があるという点だ。

同社は、その対抗策として、下記のアプローチを推奨している。

  • 信頼されたバイナリを中心に、プロセス間の親子関係を調べる。
  • WinSxS フォルダに存在するバイナリにより実行される全てのアクティビティを、ネットワーク通信とファイル操作の両方に焦点を当てながら、注意深く監視する。