最近、X-Force RedはWindows Feature Hunterというツールをリリースしました。これは、Fridaを使用するWindowsシステムで動的リンク・ライブラリー(DLL)をサイドローディングするターゲットを特定します。DLLのサイドローディングに対する防御的な対策を提供するため、X-Force Incident ResponseはWindowsシステムでのサイドローディングの痕跡を特定するためのシステム・プロファイリング・スクリプトとSysmon構成であるSideLoaderHunterをリリースしました。この記事では、IBM X-Forceがなぜこのツールが必要だと考察するのか、その機能について説明し、いくつかのユースケースを分析します。
Microsoft Windowsでは、プログラムはフルパスを指定するか、マニフェストなどの別のメカニズムを使用することで、ランタイムにロードされるライブラリーを定義できます。プログラム・マニフェストは、アプリケーションが実行時にロードする必要がある共有アセンブリの名前とバージョンを管理するために使用される、アプリケーション内の外部ファイルまたは埋め込みリソースです。プログラム・マニフェストには、DLLリダイレクト、ファイル名、またはフル・パスを含めることができます。マニフェストがライブラリー・ファイル名のみを参照している場合、それは弱い参照とみなされ、DLLサイドローディング攻撃に対して脆弱です。
ライブラリーへの弱い参照が行われた場合、Windowsは事前に定義された検索順序でDLLを見つけようとします。Windowsが最初に検索する場所は、アプリケーションがロードされているディレクトリーです。
DLLサイドローディング攻撃は、正規のDLLになりすました悪意のあるDLL ファイルを正規のプログラムで自動的に読み込ませることで、脆弱なライブラリ参照とWindowsのデフォルト検索順序を利用することを目的とする敵対的な手法です。
DLLサイドローディングに関する詳細は、MITRE ATT&CK Technique T1574.002を参照してください。
IBMニュースレター
AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。登録の際はIBMプライバシー・ステートメントをご覧ください。
ニュースレターは日本語で配信されます。すべてのニュースレターに登録解除リンクがあります。サブスクリプションの管理や解除はこちらから。詳しくはIBMプライバシー・ステートメントをご覧ください。
Windows内の検索順序ハイジャックの脆弱性はWindows XP以降に存在するため、DLLのサイドローディングは新しい手法ではありません。X-Force®は、Metamorfoバンキング型トロイの木馬が使用するDLLサイドローディングを観察しました。このトロイの木馬は、署名されたバイナリと悪意のあるDLLを抽出する悪意のあるMSIファイルをドロップし、第 2 段階のマルウェア・ローダーを実行します。Windowsに組み込まれているデフォルトの検索順序により、署名されたバイナリは悪意のあるDLL をロードし、悪意のある実行フローに進みます。
脅威アクターが利用する最も一般的な手法ではないものの、DLLサイドローディングはランサムウェア・オペレーターがますます使用するようになっており、セキュリティー製品による検知を回避するために、DLLサイドローディングを利用してランサムウェア・ペイロードを実行しています。
たとえば、ランサムウェア・オペレーターであるREvilは、Windows Defenderの実行ファイル(MsMpEng.exe)内のDLLサイドローディング脆弱性を悪用し、ランサムウェアのペイロードを含む悪意のあるDLL(mpsvc.dll)をロードしました
X-Forceでは、システム上の既存のバイナリやモジュールを上書きしてDLLサイドローディング攻撃を実行する脅威アクターまたはマルウェアをあまり見ていません。これは、システムがクラッシュしたり、検知につながる可能性のあるエラーが発生したりする可能性があるためです。
代わりに、DLLサイドローディングを悪用した脅威アクターまたはマルウェアは、攻撃を実行する前に通常、つの動作を実行します。
最初のユースケースは、かなりシンプルな検知方法です。バイナリが署名されていても、その実行はプログラム実行データセット内では異常とみなされます。前述のMetamorfoの例では、マルウェアはAvastのメモリー・ダンプ・ユーティリティーであるAVDump32.exeを埋め込んでjesus.exeと改名し、その際にdbghelp.dllという悪意のあるDLLがサイドロードされました。
この例では、プログラム実行データセット内に記録されたファイル名の頻度分析を実行することにより、jesus.exeの識別が行われました。
図1:プログラム実行データセットのバイナリ名の頻度分析
2番目のユースケースでは、一般に信頼できる標準のWindowsアプリケーションを利用して悪意のあるDLLが実行され、悪意のあるアクティビティが悪意のないプログラム実行データに紛れ込むため、検出がより困難になる可能性があります。プログラム実行データセット内のバイナリのフルパスの頻度分析を通じて検知の機会がありますが、何らかのフィルタリングがなければ、この分析はあまりにも非効率的です。
代わりに、プログラム実行データセットをフィルタリングして、デフォルトでSystem32またはSysWow64内にある実行ファイル名のみを含めることができます。この場合、分バイナリの完全パスがデフォルトと一致しなかったSystem32またはSysow64の実行可能ファイルに関連するすべてのプログラム実行データに対して分析が実行されます。
この分析を実行するには、WindowsシステムからのデフォルトのSystem32およびSysow64実行可能ファイルの検索テーブルを作成します。これらは制御データセットとして機能し、防御側は異常を特定できます。
次のPowerShellスクリプトは、System32およびSysWow64内の実行可能ファイルを列挙し、結果をCSVにエクスポートします。
コントロールグループとしてsysbins.csvを使用することで、プログラムの実行を識別することができ、デフォルトのSystem32またはSysWow64ディレクトリーの外にあるWindowsアプリケーションの証拠が得られます。
| $SysBinList = Get-ChildItem $env:SystemRoot\system32\ ,$env:SystemRoot\syswow64\ -Recurse -ErrorAction SilentlyContinue | Where-Object {($_.Extension -like “.exe”)} -ErrorAction SilentlyContinue | Select Name;$SysBinLobj = $SysBinList.Name | select -Unique | Select-Object @{Name=’Name’; Expression={$_}};$SysBinLobj | export-csv sysbins.csv -NoTypeInformation |
図2:System32バイナリのフルパスにおける頻度分析
サイドローディング手法は実行ファイルの名前に関係なく有効なままであるため、脅威アクターはバイナリ実行ファイルの名前を変更することでファイル名のマッチングを使用して検知を回避できる点に注意することが重要です。
図3:Side-LoadSide-Loading mspaint.exe(notmspaint.exeに名称変更)とmsftedit.dll
名前変更された実行可能ファイルを検知する方法の1つは、Windowsマシン上のSystem32およびSysWow64実行可能ファイルのハッシュ値をさらにプロファイリングするか、ターゲット・システムから実行可能ファイルの内部名を収集することです。Sysmonなどの一部のプロセス実行監視ソリューションは、実行時に実行ファイルの内部名を取得します。さらに、PowerShellには、名前変更後に実行可能ファイルの元のファイル名を列挙する機能があります。
図4: PowerShellにおける元のファイル名属性の一覧表示
次のスクリプトでは、System32ディレクトリーとSysow64ディレクトリーにある実行可能なハッシュのリストが列挙されます。このリストは、非標準の場所にある標準のWindows実行可能ファイルを識別するための制御データセットとしても使用できます。
$binarray=@()$SysBinList = Get-ChildItem $env:SystemRoot\system32\,$env:SystemRoot foreach($bin in $SysBinList) { $binhash = Get-FileHash $bin.FullName -Algorithm SHA1 $binobject = New-Object psobject $binobject | Add-Member -MemberType NoteProperty -Name “Name” -Value $bin.Name $binobject | Add-Member -MemberType NoteProperty -Name “Hash” -Value $binhash.Hash $binarray += $binobject } $binarray | export-csv sysbinhash.csv -NoTypeInformation |
図5:ファイルのハッシュを収集するためのPowerShellスクリプト
ただし、一元化されたプロセス実行データがあり、環境内で長期にわたるアクティビティーのベースラインを確立できる場合、前述の検知はより効果的です。調査中には非常にまれなことです。
この課題を克服するために、X-Forceはデータ収集ユーティリティーを展開して、エンドポイントからメタデータを大規模に収集します。これらのユーティリティーの1つは SideLoadHunterであり、ユーザー・プロファイル、System32、Sysow64内のDLLおよび実行可能ファイルのエンドポイントをプロファイリングします。実行可能ファイルとDLLがプロファイリングされると、X-Forceは比較分析を実行し、ファイル名、ハッシュ値、内部名からDLLのサイドローディングの可能性のある痕跡を特定します。さらに、プログラム実行アーティファクトを分析して、ディスク上に存在しなくなったサイドローディングされた実行ファイルの痕跡を調べます。このツールはPowerShellに移植されており、こちらからダウンロード可能です。
SideLoadHunterの主な機能は次のとおりです。
図6:Sside-Load Hunter.ps1の実行
図7:Side-Load Hunter.xmlのSysmonイベント
マルウェアや敵対者は通常、System32ディレクトリーとSysow64ディレクトリー内の実行可能ファイルをサイドローディングのターゲットとしますが、DLLを実行可能ファイルにサイドローディングする可能性は、これらのディレクトリーに限定されません。たとえば、X-Force Incident ResponseとX-Force Redの共同作業を通じて、Windows 10システムではデフォルトで %userprofile%\appdata\local\Microsoft\OneDrive 内に存在する実行可能なOneDriveStandaloneUpdater.exeを WofUtil.dllを通じてサイドローディングすることができます。これは、デフォルトで%windir%\system32\に存在します。
図8:WofUtil.dllを使用したOneDriveStandalone Updater.exeのサイドローディング
X-Forceは現在、サイドローディングの対象となる実行可能ファイルとDLLファイルのより包括的なリストを作成するためにさらなる研究を行っているため、今後の更新にもご注目ください。