
悪意のあるペイロードを含む 1 つのショートカット + 1 つの .DLL を作成 => USB に入れて被害者に送る => 被害者が USB を開く => ペイロードが自動的に起動する!
まず、このバグが正確にどこから発生するのかを知る必要があります! それは Plug-and-Play(プラグアンドプレイ) と呼ばれる機能によるものです。OS がデバイスを自動検出し、リソースを割り当て、適切なドライバーをロードして、再起動することなく即座に動作させます。USB を挿して Windows Explorer explorer.exe でフォルダを開くと、OS はファイルをスキャンして、ユーザーに対応するアイコン(icon)画像を表示します!
旧バージョンの Windows 以来、Microsoft は Control Panel の機能(実質的には .cpl または .dll ファイル)を指すショートカット(.lnk)が、動的なアイコンを柔軟に表示できるようにしたいと考えていました。そのため、Windows のコアとなるインターフェース管理ライブラリである shell32.dll には、CPL_LoadCPLModule という名前の関数が設計されました。
盲目的な LoadLibrary の使用: Control Panel アプレット構造ファイルからアイコンを取得するために、OS は単なる静的画像ファイルを読み込むのではなく、LoadLibraryW 関数を使用して、その動的リンクライブラリ(DLL)全体を explorer.exe プロセスのメモリ空間に直接ロードします。ロード後、標準のエクスポート関数である CPlApplet を呼び出して、画面に描画するアイコンを取得します。
LoadLibraryW が上記のエクスプロイトチェーンに実際に関与していることを証明するには:
1/
x64dbg với quyền adminを起動する2/
explorer.exeにアタッチする3/ コマンド
bp LoadLibraryWを入力する4/ F9 を押して
explorer.exeの実行を続行する5/ USB を挿すとすぐに
hit breakpointする!
エクスプロイトチェーンがまったく反応しない(完全に沈黙する)という問題に遭遇しました。あれこれチェックしてデバッグしてみても、修正方法が見つかりませんでした! その後、他の人の PoC を探して実行してみましたが、それも失敗しました!
しかし、昼食に行って戻ってくると、私は再び集中力と冷静さを取り戻しました。そして疑問を持ち始めました。なぜ彼の PoC は動作するのに、自分のマシンに持ち帰ると動作しないのか? OK、彼の .lnk と .dll を軽くリバースエンジニアリングしてみることにしました。すると 2 つのことが判明しました!
1 / 私の .dll は彼のものより長い! しかし大丈夫、それは問題ではない!
2 / .lnk を HxD に放り込んで strings を読んだとき、彼は相対パスではなく絶対パスを使っていることに気づきました!
相対パス : ../example.dll
絶対パス : O:/example.dll
OK、修正方法はこうです。USB が被害者のマシンに挿されたときに自動的に割り当てられるドライブレターを知る必要があります。そこに絶対パスを設定すれば成功します。私の Win7 では USB を挿すといつも F ドライブになるため、私のビルド構文は次のようになります:
python Make_PoC.py FakeGoogleChrome F:\Pwned.dll
これはメモリオーバーフローのバグではなく、システムアーキテクチャ設計上の欠陥(Logic/Architecture Flaw) に属するバグであるため、Microsoft は Control Panel の処理方法を完全に変更する必要がありました:
.cpl または .dll ファイルに、Microsoft の有効なデジタル署名があること、または厳重に保護されたシステムディレクトリ(System32 など)内にあることが必須とされ、USB からの "Binary Planting" バグを防いでいます。explorer.exe [cite: 1058] に直接ロードする代わりに、新しいバージョンの Windows は Control Panel アプレットを、分離された中間プロセス(dllhost.exe や rundll32.exe など)経由で実行します。DLL がクラッシュするかマルウェアを含んでいても、影響はその中間プロセスが落ちるだけにとどまり、ユーザーインターフェースシステム全体を乗っ取られることはありません。研究(VN)
PoC
脆弱な .lnk をビルドするツール