はじめに
Elasticの レピュテーションサービス のようなレピュテーションベースの保護は、誤検知率を低く抑えながら、検出機能を大幅に向上させることができます。 ただし、他の保護機能と同様に、弱点が存在し、バイパスが可能です。 これらの弱点を理解することで、防御側は検出エンジニアリングを主要なカバレッジギャップに集中させることができます。 この記事では、評判ベースのシステムへのバイパスを調査するためのケース スタディとして Windows スマート アプリ制御 と SmartScreen について説明し、それらの弱点をカバーする検出を示します。
この記事のポイント:
- Windows Smart App Control と SmartScreen には、攻撃者がセキュリティ警告やポップアップなしで初期アクセスを取得できる設計上の弱点がいくつかあります。
- LNKファイルの処理にバグがあると、これらのセキュリティ制御が回避されることもあります
- 防御側は、これらの OS 機能の制限を理解し、それを補うためにセキュリティ スタックに検出を実装する必要があります
SmartScreen/SAC の背景
Microsoft SmartScreen は、Windows8から組み込まれているOS機能です。 「Mark of the Web」(MotW)があり、ユーザーがクリックしたファイルで動作します。Microsoftは、Windows11のリリースでスマートアプリコントロール(SAC)を導入しました。 SAC は、ある意味で SmartScreen の進化形です。 Microsoftは、「悪意のあるアプリや信頼できないアプリをブロックすることで、新たな脅威からの保護を大幅に追加する 」と述べています 。 これは、アプリケーションの実行時にMicrosoftクラウドサービスにクエリを実行することで機能します。 彼らが安全であることがわかっている場合、彼らは実行することが許可されています。ただし、不明な場合は、有効なコード署名がある場合にのみ実行されます。 SAC を有効にすると、Defender SmartScreen が置き換えられ、無効になります。
Microsoft は、SmartScreen と Smart App Control のファイルの信頼レベルを照会するための文書化されていない API を公開しています。 この研究を支援するために、ファイルの信頼を表示するユーティリティを開発しました。 このユーティリティのソースコードは 、こちらから入手できます。
署名付きマルウェア
Smart App Controlを回避する1つの方法は、コード署名証明書を使用してマルウェアに署名することです。 SAC以前から、攻撃者は検出を回避するためにマルウェアに署名する傾向がありました。 最近では、攻撃者は定期的に EV (Extend Validation) 署名証明書を取得しています。 EV証明書は、アクセスするために身元の証明が必要であり、特別に設計されたハードウェアトークンにのみ存在できるため、盗むのが困難です。 しかし、攻撃者は企業になりすまし、これらの証明書を購入する方法を見つけています。 SolarMarkerの背後にいる脅威グループは、キャンペーン全体で100を超える一意の署名証明書を活用しています。認証局(CA)は、不正使用を取り締まり、不正に取得された証明書を最小限に抑えるために、より多くのことを行う必要があります。 不正な証明書を最も頻繁に販売しているCAに圧力をかけるためには、より多くの公開調査が必要になるかもしれません。
レピュテーションハイジャック
レピュテーションハイジャックは、レピュテーションベースのマルウェア保護システムに対する一般的な攻撃パラダイムです。 これは、Casey Smith らによるアプリケーション制御システムに対する 誤った信頼 研究や、Gabriel Landau と I による 脆弱なドライバーの研究 と類似しています。残念ながら、この場合の攻撃対象領域はさらに大きくなります。 レピュテーションハイジャックには、評判の良いアプリを見つけて再利用し、システムをバイパスすることが含まれます。 初期アクセス ベクトルとして機能するには、1 つの制約として、アプリケーションをコマンド ライン パラメーター (たとえば、予測可能なファイル パスでスクリプトをロードして実行するスクリプト ホスト) なしで制御する必要があるという制約があります。
スクリプトホストは、レピュテーションハイジャック攻撃の理想的なターゲットです。 これは、外部関数インターフェイス (FFI) 機能が含まれている場合に特に当てはまります。 FFIを使用すると、攻撃者は任意のコードやマルウェアをメモリに簡単に読み込んで実行できます。 VirusTotal と GitHub での検索を通じて、既知の良好な評判を持ち、完全なコード実行に利用できる多くのスクリプト ホストを特定しました。 これには、Lua、Node.js、AutoHotkeyインタープリターが含まれます。 この手法を示すサンプルは 、こちらから入手できます。
次のビデオは、 JamPlus ビルドユーティリティを使用してハイジャックし、セキュリティ警告なしでSmart App Controlをバイパスする方法を示しています。
別の例では、SmartScreen のセキュリティ警告は、既知の AutoHotkey インタープリターを使用してバイパスされました。
既知のアプリケーションの評判を乗っ取る別の方法は、それを悪用することです。 これは、予測可能なパスでINIファイルを読み取ることによる従来のバッファオーバーフローのように、単純なものである可能性があります。 これは、他のプリミティブ(コマンドの実行/レジストリの書き込みなど)を連鎖させるより複雑なものである可能性があります。 また、複数の既知のアプリをチェーンして、完全なコード実行を実現することもできます。 たとえば、構成ファイルを読み取り、コマンド ライン パラメーターを実行する 1 つのアプリケーションを使用して、任意のコード実行を取得するために一連のパラメーターを必要とする別の既知のアプリケーションを起動できます。
レピュテーションシーディング
レピュテーション保護に対する別の攻撃は、攻撃者が制御するバイナリをシステムにシードすることです。 慎重に作成すれば、これらのバイナリは無害に見え、良い評判を得ると同時に、後で攻撃者にとっても有用です。 これは、単に新しいスクリプト ホスト バイナリ、既知の脆弱性を持つアプリケーション、または有用なプリミティブを持つアプリケーションである可能性があります。 一方、悪意のあるコードが埋め込まれているが、特定の日付または環境トリガーの後にのみアクティブ化されるバイナリである可能性があります。
Smart App Control は、シード処理に対して脆弱であるように見えます。 1台のマシンでサンプルを実行した後、約 2 時間後に適切なラベルを受け取りました。 私たちは、基本的なアンチエミュレーション技術が、良性の評決や評判を得る要因であるように思われることに気づきました。 幸いなことに、SmartScreen は、アプリケーションを信頼する前の世界的な普及率のバーが高いようです。 この手法を示すサンプルは 、こちら で入手でき、以下で示されています。
レピュテーションの改ざん
レピュテーションシステムに対する 3 つ目の攻撃クラスは、レピュテーション改ざんです。 通常、レピュテーションシステムは、改ざんを不可能にするために、暗号的に安全なハッシュシステムを使用します。 しかし、ファイルに対する特定の変更がSACの評判を変えないように見えたことに気付きました。 SAC は、標準のファイル ハッシュの代わりに、または標準のファイル ハッシュに加えて、ファジー ハッシュまたは特徴ベースの類似性比較を使用する場合があります。 また、クラウドのMLモデルを活用して、スコアが非常に良性である(既知の良好なものと非常に似ているなど)ファイルを許可することもできます。 驚いたことに、一部のコード セクションは、関連する評判を失うことなく変更できました。 試行錯誤を重ねることで、安全に改ざんできるセグメントを特定し、同じ評判を維持することができました。 私たちは、MicrosoftやSACが見たことのないユニークなハッシュを持つ 改ざんされたバイナリ を1つ作成しました。 これは "execute calc" シェルコードを埋め込み、SAC の強制モードで実行できました。
LNKストンピング
ユーザーがファイルをダウンロードすると、ブラウザは Mark of the Web (MotW) と呼ばれる 代替データ ストリーム に関連付けられた "Zone.Identifier" ファイルを作成します。 これにより、システム上の他のソフトウェア (AV や EDR など) は、ファイルのリスクが高いことを知ることができます。 SmartScreen は、Web のマークが付いたファイルのみをスキャンします。 SACは、特定のファイルタイプがある場合、完全にブロックします。 これにより、MotWバイパスは通常、これらのセキュリティシステムのバイパスにつながる可能性があるため、興味深い研究対象になります。 金儲けを目的とする脅威グループは、 複数の脆弱性 を発見し、それを利用してMotWのチェックを回避しています。 これらの手法には、細工された無効なコード署名署名を JavaScript または MSI ファイルに追加することが含まれていました。
調査中に、利用するのは簡単な別のMotWバイパスに遭遇しました。 これには、非標準のターゲットパスまたは内部構造を持つLNKファイルを作成することが含まれます。 クリックすると、これらのLNKファイルは正規の形式でexplorer.exe変更されます。 この変更により、セキュリティチェックが実行される前にMotWラベルが削除されます。 LNK ファイルを上書きする関数は、次の呼び出し履歴に示すように _SaveAsLink() です。
セキュリティ チェックを実行する関数は、次の呼び出し履歴に示すように CheckSmartScreen() です。
この問題の最も簡単なデモンストレーションは、ターゲットの実行可能パスにドットまたはスペースを追加することです(例: powershell.exe.
)。 または、 .\target.exe
などの相対パスを含む LNK ファイルを作成することもできます。 リンクをクリックすると、一致する.exe
名を検索して見つけるexplorer.exe
、フルパスを自動的に修正し、ディスク上のファイルを更新(MotWを削除)し、最後にターゲットを起動します。さらに別のバリエーションでは、LNKのターゲットパス配列の1つのエントリにマルチレベルのパスを作成します。 ターゲット・パス配列には、通常、ディレクトリごとに 1 エントリが必要です。 pylnk3 ユーティリティは、実行前と実行後 (正規形式) のエクスプロイト LNK (非正規形式) の構造を示しています。
これらの手法を示すPythonスクリプトは 、こちらから入手できます。
以下は、Smart App ControlのMotW制限をバイパスしてPowershellを起動し、calcをポップするLNKファイルを示しています。
別の例では、この手法を Microsoft cdb コマンドラインデバッガと連鎖させて、任意のコード実行を実現し、シェルコードを実行して pop calc する方法を示します。
VirusTotalでは、このバグを示す複数のサンプルを特定し、野生での使用が存在することを示しています。 特定された最も古い サンプル は、 6 年以上前に提出されました。 また、バグの詳細をMSRCに開示しました。 今後のWindowsアップデートで修正される可能性があります。 この情報は、検出ロジックや対策とともに公開されており、パッチが利用可能になるまで防御側がこのアクティビティを特定できるようにしています。
検出
レピュテーションハイジャックは、その性質上、検出が難しい場合があります。 この技術を実行するために、無数のアプリケーションを採用することができます。 悪用されていることがわかっているアプリケーションのカタログ化とブロックは、最初の (そして継続的な) ステップです。
process where process.parent.name == "explorer.exe" and process.hash.sha256 in (
"ba35b8b4346b79b8bb4f97360025cb6befaf501b03149a3b5fef8f07bdf265c7", // AutoHotKey
"4e213bd0a127f1bb24c4c0d971c2727097b04eed9c6e62a57110d168ccc3ba10" // JamPlus
)
ただし、このアプローチは常に攻撃者に遅れをとっています。 もう少し堅牢なアプローチは、悪用されたソフトウェアの一般的なカテゴリを識別するための行動シグネチャを開発することです。 たとえば、疑わしい呼び出し履歴で一般的な Lua または Node.js 関数名またはモジュールを探すことができます。
sequence by process.entity_id with maxspan=1m
[library where
(dll.Ext.relative_file_creation_time <= 3600 or
dll.Ext.relative_file_name_modify_time <= 3600 or
(dll.Ext.device.product_id : ("Virtual DVD-ROM", "Virtual Disk","USB *") and not dll.path : "C:\\*")) and
_arraysearch(process.thread.Ext.call_stack, $entry, $entry.symbol_info: "*!luaopen_*")] by dll.hash.sha256
[api where
process.Ext.api.behaviors : ("shellcode", "allocate_shellcode", "execute_shellcode", "unbacked_rwx", "rwx", "hook_api") and
process.thread.Ext.call_stack_final_user_module.hash.sha256 : "?*"] by process.thread.Ext.call_stack_final_user_module.hash.sha256
api where process.Ext.api.name : ("VirtualProtect*", "WriteProcessMemory", "VirtualAlloc*", "MapViewOfFile*") and
process.Ext.api.behaviors : ("shellcode", "allocate_shellcode", "execute_shellcode", "unbacked_rwx", "rwx", "hook_api") and
process.thread.Ext.call_stack_final_user_module.name : "ffi_bindings.node"
セキュリティチームは、ダウンロードしたファイルに特に注意を払う必要があります。 彼らは、地域の評判を使用して、環境内の外れ値を特定し、より詳細な調査を行うことができます。
from logs-* |
where host.os.type == "windows"
and event.category == "process" and event.action == "start"
and process.parent.name == "explorer.exe"
and (process.executable like "*Downloads*" or process.executable like "*Temp*")
and process.hash.sha256 is not null
| eval process.name = replace(process.name, " \\(1\\).", ".")
| stats hosts = count_distinct(agent.id) by process.name, process.hash.sha256
| where hosts == 1
LNKストンピングには多くのバリエーションがあり、LNKファイルに対するシグネチャベースの検出が困難になります。 ただし、それらはすべて、LNKファイルを上書き explorer.exe
同様の動作シグナルをトリガーする必要があります。 これは、ダウンロードフォルダやLNKにMark of the Webがある場合に特に異常です。
file where event.action == "overwrite" and file.extension : "lnk" and
process.name : "explorer.exe" and process.thread.Ext.call_stack_summary : "ntdll.dll|*|windows.storage.dll|shell32.dll|*" and
(
file.path : ("?:\\Users\\*\\Downloads\\*.lnk", "?:\\Users\\*\\AppData\\Local\\Temp\\*.lnk") or
file.Ext.windows.zone_identifier == 3
)
最後に、インメモリ回避、永続化、資格情報アクセス、列挙、ラテラルムーブメントなどの一般的な攻撃者の手法に関する堅牢な動作カバレッジは、レピュテーションハイジャックを含む現実的な侵入を検出するのに役立ちます。
まとめ
レピュテーションベースの保護システムは、コモディティマルウェアをブロックするための強力なレイヤーです。 ただし、他の保護技術と同様に、それらには弱点があり、ある程度の注意を払って回避できます。 Smart App Control と SmartScreen には、セキュリティ警告なしで初期アクセスを可能にし、ユーザーの操作を最小限に抑えることができる基本的な設計上の弱点がいくつかあります。 セキュリティチームは、検出スタックでダウンロードを慎重に精査し、この領域での保護をOSネイティブのセキュリティ機能だけに頼るべきではありません。