Windows レジストリを使用しないマルウェアの持続性

攻撃者がネットワーク内に足場を維持するために、攻撃者は通常、少なくとも 1 つのシステムにバックドア マルウェアをインストールします。マルウェアは永続的にインストールする必要があります。つまり、再起動してもアクティブなままになります。 Microsoft Windows プラットフォームでのほとんどの永続化手法には、レジストリの使用が含まれます。注目すべき例外には、スタートアップ フォルダとトロイの木馬化システム バイナリが含まれます。 Windows レジストリ内のマルウェアの永続的な場所とスタートアップの場所を調査することは、フォレンジック調査員がホスト上のマルウェアを特定するために採用する一般的な手法です。今日一般的に見られる各永続化手法は、市場に出回っているほとんどのフォレンジック ソフトウェアを使用して簡単に収集できるフォレンジック フットプリントを残します。

ここで説明する永続化手法は、簡単なフォレンジック トレイルを残さないという点で特別です。マルウェア DLL は、特定の名前の特定のディレクトリに存在するだけで、Windows ホスト上で永続的になる可能性があります。レジストリまたはスタートアップ フォルダーに痕跡の証拠がなく、変更されたシステム バイナリもありません。この永続化メカニズムの場所の候補となるディレクトリの場所と DLL ファイル名は 1 つだけではなく、任意のシステムに候補の場所のクラス全体が存在します。私のラップトップ (Windows 7 64 ビット) では、1032 以上のパスと DLL 名の組み合わせがあり、DLL を配置して、通常の起動時にある時点で自動的にロードされるようにすることができます。 32ビットDLL! 64 ビットのマルウェア DLL を使用している場合、起動時にさらに多くの 64 ビット プロセスが実行されるため、この数ははるかに多くなります。では、これはどのように機能するのでしょうか。

DLL 検索順序ハイジャック

アプリケーションが実行可能ファイルのインポート テーブルを介して静的に、または LoadLibrary() 関数を介して動的に DLL のロードを要求すると、オペレーティング システムは定義済みの一連の場所で DLL を検索します。このシーケンスは、MSDN ドキュメント ( http://msdn.microsoft.com/en-us/library/ms682586(VS.85).aspx ) で定義されています。このドキュメントから得られる最も重要な情報は、アプリケーションが最初に DLL を探す場所は、実行可能ファイル自体の場所であるということです。ただし、常にそうであるとは限りません。要求された DLL 名が「.KnownDlls」オブジェクトにリストされている場合、常に固定の場所 (System32 フォルダー) から読み込まれます。このオブジェクトは、次の場所にあるレジストリのデータを使用して起動時に設定されます。

HKEY_LOCAL_MACHINESystemCurrentControlSetControlSession ManagerKnownDLLs

Microsoft の従業員である Larry Osterman は、これについてブログ投稿 ( http://blogs.msdn.com/b/larryosterman/archive/2004/07/19/187752.aspx ) で説明しています。彼は投稿の中で、KnownDlls オブジェクトはレジストリ キーにあるものよりもメモリ内で大きくなり、レジストリにリストされている任意の DLL から静的にインポートされた DLL から再帰的に構築されると述べています。私が Windows XP および Windows 7 システムで行った限定的なテストでは、メモリ内の KnownDlls オブジェクトは、KnownDLLs レジストリ キーによって提供されるリストと同じです。

KnownDlls キーを何気なくブラウジングすると、最も一般的に使用される DLL の約 30 ~ 35 の短いリストが表示されます。たとえば、低レベルのネットワーク API DLL “ws2_32.dll” がこのリストに含まれています。アプリケーションが「ws2_32.dll」という名前の DLL を読み込もうとすると、アプリケーションがどこから起動されたかに関係なく、このキーにリストされているため、常に System32 フォルダーから読み込まれます。 KnownDlls システムは、この重要な DLL の小さなセットにセキュリティの薄層を提供します。攻撃者は、ws2_32.dll を使用するアプリケーションを含むフォルダー内に「ws2_32.dll」という名前の DLL を単純に配置して、ローカル コピーが読み込まれました。ただし、KnownDlls システムは、DLL ロード セキュリティの現実的な感覚を提供するにはあまりにも限定的です。たとえば、読み込まれる ws2_32.dll のコピーが常に system32 のものであることは保証できますが、ws2_32.dll の読み込み時に読み込まれる他のコンポーネント (iphlpapi.dll や mswsock.dll など) は保証されません。それらは KnownDlls によってカバーされていないためです。

「C:Program FilesMyCompany」という場所から実行され、ws2_32.dll をロードした update.exe という正当なプログラムがあったとします。update.exe にマルウェア DLL をロードさせるために必要なことは、マルウェアを「C:Program FilesMyCompany」ディレクトリを開き、「iphlpapi.dll」という名前を付けます。 update.exe プログラムが実行されると、ws2_32.dll がロードされます。次に ws2_32.dll がロードされ、アプリケーション ディレクトリから最初に iphlpapi.dll がロードされてから、正規に存在する System32 フォルダがチェックされます。マルウェア作成者が行う必要があるのは、悪意のある iphlpapi.dll が最終的に本物をロードし、システムのユーザー (およびフォレンジック アナリストの可能性が最も高い) がマルウェアがロードされたことに気付かないようにすることだけです。

実際の使用法

上記の問題の説明を読んで、System32 フォルダにある実行可能ファイルは影響を受けないという結論に達したかもしれません。と思った方、正解です。また、System32 フォルダーにはすべての一貫性のある確実に配置されたスタートアップ バイナリが存在するため、実質的な問題はないと考えている場合は、それは誤りです。事例: Explorer.exe 。不思議なことに、このバイナリは C:Windows にあります (歴史的な理由からだと思います)。そのため、explorer.exe が起動し、KnownDlls によって保護されていない DLL が要求された場合、システムが DLL を見つけるために最初に検索するのは C:Windows ディレクトリです。これまでのところ、このマルウェアの永続化手法が使用されていることが最も一般的に確認されている場所は、「C:Windowsntshrui.dll」という場所と名前です。実際の ntshrui.dll は System32 フォルダーにありますが、この dll は Explorer.exe によって読み込まれ、KnownDlls によって保護されていないため、残念ながら DLL 検索順序ハイジャックの影響を受けやすくなっています。

問題の程度

問題の性質を本当に理解すると、それが非常に広範で蔓延している問題であることに気付くかもしれません。これは常に Windows に存在しており、近い将来に存在する可能性があります。 DLL の検索パス メカニズムを変更すると、Windows の下位互換性に重大な問題が生じる可能性がありますが、Windows は常に互換性に高い価値を置いてきたため、変更が行われる可能性はほとんどありません (Raymond Chen を愛しています!)。特定のシステムで持続性を実現するために DLL を配置できるすべての場所とファイル名を特定するプログラムを作成しました。アイデアは、このプログラムをクリーンな (ゴールド イメージ) システムで実行し、この永続化の方法で侵害されたと思われるマシンの出力にリストされている DLL 名をフォレンジックに検索できるというものです。同様のプログラムが開発され、稼働中のシステムでハイジャックされた DLL を特定しようとする可能性があります。しかし、このプログラムを最初に書くことにしたのは、その出力が問題の範囲を説明するのに役立つからです。このプログラムをラップトップで実行したところ、1032 行を含む出力が生成されました。各行には、システムの起動時に DLL を配置してロードできる場所とファイル名が記述されていました。クリーンな XP SP2 マシンでは、91 の場所が一覧表示されます。私のラップトップからの出力からの数行を次に示します。

ハイジャック可能な場所: C:Program Files (x86)iTunesSspiCli.dll

ハイジャック可能な場所: C:Program Files (x86)iTunesCRYPTBASE.dll

ハイジャック可能な場所: C:Program Files (x86)iTunesCoreFoundation.dll

ハイジャック可能な場所: C:Program Files (x86)iTunesMSVCR80.dll

この出力によると、システムの起動時に読み込まれる一部のプログラム (ほとんどの場合 iTunes) は、System32 フォルダーにある「CRYPTBASE.DLL」という名前の DLL を読み込もうとしますが、攻撃者は悪意のある DLL を iTunes フォルダーに配置して、代わりにロードされます。このプログラムは、実行中のプロセスを調べて、次のプロパティ (システム内の実行中のすべてのプロセスで読み込まれた各 dll に適用される) によってハイジャック可能な DLL の場所を特定します。

  1. DLL をロードしたプロセス実行可能ファイルが System32 フォルダーにありません
  2. KnownDlls オブジェクトに DLL 名が見つかりません
  3. DLL が実行可能ファイルと同じディレクトリに見つからない

3 つのプロパティすべてを含むロード済みの DLL は、検索順序のハイジャックによって切り捨てられる可能性があります。

クリーンなシステムから悪意のある可能性のある 32 ビット DLL の場所を特定するためのツール (コンパイル済みおよびソース) は、こちらにあります

参照: https://www.mandiant.com/resources/blog/malware-persistence-windows-registry

Comments

タイトルとURLをコピーしました