PowerShellとSysmonによるDLLサイドローディングの痕跡の追跡

自宅で作業しながらコンピューターを使用してプログラミングするソフトウェア開発者の側面図

著者

John Dwyer

Head of Research

IBM Security X-Force

最近、X-Force RedはWindows Feature Hunterというツールをリリースしました。これは、Fridaを使用するWindowsシステムで動的リンク・ライブラリー(DLL)をサイドローディングするターゲットを特定します。DLLのサイドローディングに対する防御的な対策を提供するため、X-Force Incident ResponseはWindowsシステムでのサイドローディングの痕跡を特定するためのシステム・プロファイリング・スクリプトとSysmon構成であるSideLoaderHunterをリリースしました。この記事では、IBM X-Forceがなぜこのツールが必要だと考察するのか、その機能について説明し、いくつかのユースケースを分析します。

DLLサイドローディングとは

Microsoft Windowsでは、プログラムはフルパスを指定するか、マニフェストなどの別のメカニズムを使用することで、ランタイムにロードされるライブラリーを定義できます。プログラム・マニフェストは、アプリケーションが実行時にロードする必要がある共有アセンブリの名前とバージョンを管理するために使用される、アプリケーション内の外部ファイルまたは埋め込みリソースです。プログラム・マニフェストには、DLLリダイレクト、ファイル名、またはフル・パスを含めることができます。マニフェストがライブラリー・ファイル名のみを参照している場合、それは弱い参照とみなされ、DLLサイドローディング攻撃に対して脆弱です。

ライブラリーへの弱い参照が行われた場合、Windowsは事前に定義された検索順序でDLLを見つけようとします。Windowsが最初に検索する場所は、アプリケーションがロードされているディレクトリーです。

DLLサイドローディング攻撃は、正規のDLLになりすました悪意のあるDLL ファイルを正規のプログラムで自動的に読み込ませることで、脆弱なライブラリ参照とWindowsのデフォルト検索順序を利用することを目的とする敵対的な手法です。

DLLサイドローディングに関する詳細は、MITRE ATT&CK Technique T1574.002を参照してください。

The DX Leaders

AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。登録の際はIBMプライバシー・ステートメントをご覧ください。

ご登録いただきありがとうございます。

ニュースレターは日本語で配信されます。すべてのニュースレターに登録解除リンクがあります。サブスクリプションの管理や解除はこちらから。詳しくはIBMプライバシー・ステートメントをご覧ください。

DLL サイドローディングによる脅威の状況

Windows内の検索順序ハイジャックの脆弱性はWindows XP以降に存在するため、DLLのサイドローディングは新しい手法ではありません。X-Force®は、Metamorfoバンキング型トロイの木馬が使用するDLLサイドローディングを観察しました。このトロイの木馬は、署名されたバイナリと悪意のあるDLLを抽出する悪意のあるMSIファイルをドロップし、第 2 段階のマルウェア・ローダーを実行します。Windowsに組み込まれているデフォルトの検索順序により、署名されたバイナリは悪意のあるDLL をロードし、悪意のある実行フローに進みます。

脅威アクターが利用する最も一般的な手法ではないものの、DLLサイドローディングはランサムウェア・オペレーターがますます使用するようになっており、セキュリティー製品による検知を回避するために、DLLサイドローディングを利用してランサムウェア・ペイロードを実行しています。

たとえば、ランサムウェア・オペレーターであるREvilは、Windows Defenderの実行ファイル(MsMpEng.exe)内のDLLサイドローディング脆弱性を悪用し、ランサムウェアのペイロードを含む悪意のあるDLL(mpsvc.dll)をロードしました

オフィスでミーティングをするビジネスチーム

IBMお客様事例

お客様のビジネス課題(顧客満足度の向上、営業力強化、コスト削減、業務改善、セキュリティー強化、システム運用管理の改善、グローバル展開、社会貢献など)を解決した多岐にわたる事例のご紹介です。

DLLサイドローディングの検知

X-Forceでは、システム上の既存のバイナリやモジュールを上書きしてDLLサイドローディング攻撃を実行する脅威アクターまたはマルウェアをあまり見ていません。これは、システムがクラッシュしたり、検知につながる可能性のあるエラーが発生したりする可能性があるためです。

代わりに、DLLサイドローディングを悪用した脅威アクターまたはマルウェアは、攻撃を実行する前に通常、つの動作を実行します。

  1. 悪意のあるDLLとともにターゲット・ディレクトリーに署名された実行可能ファイルを仕掛けます。
  2. Windows実行ファイルをターゲット・マシンのSystem32またはSysWow64から非標準ディレクトリに動かして、悪意のある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
System32バイナリのフルパスにおける頻度分析

図2:System32バイナリのフルパスにおける頻度分析

サイドローディング手法は実行ファイルの名前に関係なく有効なままであるため、脅威アクターはバイナリ実行ファイルの名前を変更することでファイル名のマッチングを使用して検知を回避できる点に注意することが重要です。

Side-LoadSide-Loading mspaint.exe(notmspaint.exeに名称変更)とmsftedit.dll

図3:Side-LoadSide-Loading mspaint.exe(notmspaint.exeに名称変更)とmsftedit.dll

名前変更された実行可能ファイルを検知する方法の1つは、Windowsマシン上のSystem32およびSysWow64実行可能ファイルのハッシュ値をさらにプロファイリングするか、ターゲット・システムから実行可能ファイルの内部名を収集することです。Sysmonなどの一部のプロセス実行監視ソリューションは、実行時に実行ファイルの内部名を取得します。さらに、PowerShellには、名前変更後に実行可能ファイルの元のファイル名を列挙する機能があります。

PowerShellでの元のファイル名の属性一覧

図4: PowerShellにおける元のファイル名属性の一覧表示

次のスクリプトでは、System32ディレクトリーとSysow64ディレクトリーにある実行可能なハッシュのリストが列挙されます。このリストは、非標準の場所にある標準のWindows実行可能ファイルを識別するための制御データセットとしても使用できます。

$binarray=@()$SysBinList = Get-ChildItem $env:SystemRoot\system32\,$env:SystemRoot
\syswow64\ -Recurse -ErrorAction SilentlyContinue
| Where-Object {($_.Extension -like “.exe”)} -ErrorAction SilentlyContinue | Select FullName,Name

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

SideLoadHunterの主な機能は次のとおりです。

  • Get-SideLoadDetect:System32/SysWow64実行可能ファイルが、System32/SysWow64 DLL名に一致するが、Microsoftによって署名されていないDLLとともにUserLandディレクトリーに配置されている状況を識別するように設計された比較分析関数
  • Get-SusShimcache:ディスク上に存在しない、サイドローディングされた実行可能ファイルを一部検知するため、SusShimcacheは、非標準の場所から実行されたSystem32およびSysWow64実行可能ファイルのShimCacheエントリーを分析します。
  • Get-SusExecsおよびGet-SusDLL:デフォルトの場所に存在しないSystem32およびSysaw64の実行可能ファイルとDLLファイルを見つけるためにシステムをプロファイリングします。
Side-Load Hunter.ps1の実行

図6:Sside-Load Hunter.ps1の実行

SideLoadDetect

X-Forceは、Windowsシステム上のサイドローディングに対して脆弱な実行可能ファイルに関する研究を通じて、サイドローディングに対応できる実行可能ファイルと関連するDLLのリストを特定しました。

サイドローディングターゲットの全リストについては、こちらをご覧ください。

これらのサイドロード・ターゲットのリアルタイム検知を支援するために、 X-Forceは、関連する実行可能ファイルとDLLのモジュール・ロードをログに記録することを目的としたSysmon構成に既知のサイドロード・リストを移行しました。

Sysmon の設定については、こちらを参照してください。

Side-Load Hunter.xmlからのSysmonイベント

図7:Side-Load Hunter.xmlのSysmonイベント

System32とSysWow64以上のもの

マルウェアや敵対者は通常、System32ディレクトリーとSysow64ディレクトリー内の実行可能ファイルをサイドローディングのターゲットとしますが、DLLを実行可能ファイルにサイドローディングする可能性は、これらのディレクトリーに限定されません。たとえば、X-Force Incident ResponseとX-Force Redの共同作業を通じて、Windows 10システムではデフォルトで %userprofile%\appdata\local\Microsoft\OneDrive 内に存在する実行可能なOneDriveStandaloneUpdater.exeを WofUtil.dllを通じてサイドローディングすることができます。これは、デフォルトで%windir%\system32\に存在します。

WofUtil.dllを使用したOneDriveStandalone Updater.exeのサイドローディング

図8:WofUtil.dllを使用したOneDriveStandalone Updater.exeのサイドローディング

X-Forceは現在、サイドローディングの対象となる実行可能ファイルとDLLファイルのより包括的なリストを作成するためにさらなる研究を行っているため、今後の更新にもご注目ください。