EDRバイパス入門

23.2K Views

August 16, 25

スライド概要

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

EDRバイパス入門

2.

自己紹介 GMOサイバーセキュリティ byイエラエ株式会社 オフェンシブセキュリティ部ペネトレーションテスト一課 シニアエンジニア 川田 柾浩 • 資格 • 著書 ペネトレーションテストの教科書 (ハッカーの技術書) • その他 https://kawakatz.io/ https://x.com/kawakatz

3.

概要 • 主にWindows端末でのEDR回避手法の例 • HavocベースでCrowdStrike Falcon、Microsoft Defender for Endpoint、Cortex XDRに検知され ない.exe形式のマルウェアを実装 • 端末内での情報収集等については、今回は対象外

4.

目次 • • • • • • • • • はじめに macOS vs EDR Havoc vs YARA vs CrowdStrike Falcon vs Microsoft Defender for Endpoint vs Cortex XDR vs その他 おまけ

5.

はじめに

6.

EDRとは EDR (Endpoint Detection and Response) = (シグネチャベースの検知 + 振る舞い検知) + 検知対応機能 • シグネチャベースの検知 YARAルールによるスキャン ファイルのハッシュ値の比較 ... • 振る舞い検知 新規プロセスの外部通信 重要ファイル/プロセスへのアクセス Windows APIの監視 ...

7.

macOS vs EDR

8.

macOS vs EDR macOSでの検知は比較的困難 SIPによる保護が厳しく、OSから取得できるログも比較的限定されているので、プロセスの悪性判 断が難しい • SIP (System Integrity Protect) システムファイル/アプリケーションの保護 プロセスの保護 (デバッグ、コードインジェクション、メモリアクセスの制限) ... ただし、シグネチャベースの検知は問題なく行えるので、最近は各EDRも力を入れてきた印象

9.

macOS vs EDR • ESF (Endpoint Security Framework) ProcessMonitor: https://objective-see.org/products/utilities.html

10.

macOS vs EDR • ESF (Endpoint Security Framework) ProcessMonitor: https://objective-see.org/products/utilities.html

11.

macOS vs EDR • ESF (Endpoint Security Framework) ProcessMonitor: https://objective-see.org/products/utilities.html

12.

macOS vs EDR • ESF (Endpoint Security Framework) FileMonitor: https://objective-see.org/products/utilities.html

13.

macOS vs EDR • ESF (Endpoint Security Framework) Red Canary Mac Monitor: https://github.com/redcanaryco/mac-monitor

14.

macOS vs EDR • Network Filter Extension LuLu: https://objective-see.org/products/lulu.html

15.

macOS vs EDR • Network Filter Extension LuLu: https://objective-see.org/products/lulu.html

16.

macOS vs EDR • Network Filter Extension LuLu: https://objective-see.org/products/lulu.html $ sudo log stream --level debug --predicate 'subsystem == "com.objectivesee.lulu"'

17.

macOS vs EDR • Network Filter Extension Netiquette: https://objective-see.org/products/netiquette.html

18.

macOS vs EDR • Unified Logging

19.

macOS vs EDR 検知が難しい例  JavaScript for Automationの検知 ※ JavaScript for Automation ≒ WindowsのPowerShell

20.

macOS vs EDR • Apfell https://github.com/MythicAgents/apfell JXA (JavaScript for Automation)をベースとしたペイロード

21.

macOS vs EDR • Apfell

22.

macOS vs EDR • Apfell

23.

macOS vs EDR • vs CrowdStrike (当時) OSAKitの使用  NG .jsファイルをosascriptコマンドで実行  ペイロードによってはNG

24.

macOS vs EDR • vs CrowdStrike (当時) マルウェアからosascriptコマンドを実行し、標準入力経由でペイロードを渡す

25.

macOS vs EDR • vs CrowdStrike (当時)

26.

macOS vs EDR シグネチャベースの検知回避として、独自のMythic Agentを開発するのもあり • How to create your own mythic agent in C: https://red-team-sncf.github.io/how-to-create-your-own-mythic-agent-in-c.html • 1. Agent Message Format: https://docs.mythic-c2.net/customizing/payload-type-development/create_tasking/agentside-coding/agent-message-format

27.

Havoc

28.

Havoc • Havoc https://github.com/HavocFramework/Havoc OSSのC2フレームワーク  BOFを実行する機能を持つ

29.

Havoc • Havoc https://github.com/HavocFramework/Havoc OSSのC2フレームワーク  BOFを実行する機能を持つ

30.

BOF • BOF (Beacon Object File) マルウェアのメインスレッドで実行される  新規プロセス/スレッドを生成することなくコードを実行可能  検知回避の観点で大きなメリット 注意事項  実行中はメインスレッドが占有されるため、長時間の処理には向かない  BOFがクラッシュするとマルウェアのプロセスが死んでしまう

31.

BOF

32.

BOF • COFF (Common Object File Format) 半完成品のコードで、Loaderを用いて初めて実行できる COFF Loader: https://github.com/trustedsec/COFFLoader

33.

BOF • COFF (Common Object File Format) 半完成品のコードで、Loaderを用いて初めて実行できる COFF Loader: https://github.com/trustedsec/COFFLoader

34.

BOF • COFF (Common Object File Format) 半完成品のコードで、Loaderを用いて初めて実行できる COFF Loader: https://github.com/trustedsec/COFFLoader

35.

BOF • Various BOF collection https://github.com/crypt0p3g/bof-collection

36.

Shellcode ”Windows Shellcode” ≠ Shellcode (Position-Independent Code)

37.

Shellcode ”Windows Shellcode” ≠ Shellcode (Position-Independent Code) Reflective DLL Loader DLL

38.

Reflective DLL Loader メモリ上に存在するDLLを読み込む技術 (Position-Independent Code) payloads/Shellcode/

39.

DLL Reflective DLL Loaderから読み込まれるDLLでHavocのメイン機能を実装 payloads/Demon/

40.

Shellcode Runner • 実行ファイル(.exe)形式 • 検知回避のため、独自実装のものを使用 • AIで生成したものから開始

41.

Shellcode Runner

42.

まとめ • Reflective DLL Loader • DLL • Shellcode Runner

43.

vs YARA

44.

YARA EDRでもシグネチャベースの検知に用いられるパターンマッチングルール • vs Havoc https://github.com/elastic/protections-artifacts/blob/main/yara/rules/Windows_Trojan_Havoc.yar

45.

vs YARA

46.

vs YARA Windows_Trojan_Havoc_9c7bb863 0x0:$a1: 56 48 89 E6 48 83 E4 F0 48 83 EC 20 E8 0F 00 00 00 48 89 F4 5E C3 0x2ea:$a2: 65 48 8B 04 25 60 00 00 00 https://defuse.ca/online-x86-assembler.htm

47.

vs YARA Windows_Trojan_Havoc_9c7bb863 0x0:$a1: 56 48 89 E6 48 83 E4 F0 48 83 EC 20 E8 0F 00 00 00 48 89 F4 5E C3 0x2ea:$a2: 65 48 8B 04 25 60 00 00 00

48.

vs YARA Windows_Trojan_Havoc_9c7bb863 0x0:$a1: 56 48 89 E6 48 83 E4 F0 48 83 EC 20 E8 0F 00 00 00 48 89 F4 5E C3 0x2ea:$a2: 65 48 8B 04 25 60 00 00 00

49.

vs YARA Windows_Trojan_Havoc_9c7bb863 0x0:$a1: 56 48 89 E6 48 83 E4 F0 48 83 EC 20 E8 0F 00 00 00 48 89 F4 5E C3 0x2ea:$a2: 65 48 8B 04 25 60 00 00 00

50.

vs YARA Windows_Trojan_Havoc_9c7bb863 0x0:$a1: 56 48 89 E6 48 83 E4 F0 48 83 EC 20 E8 0F 00 00 00 48 89 F4 5E C3 0x2ea:$a2: 65 48 8B 04 25 60 00 00 00 https://defuse.ca/online-x86-assembler.htm

51.

GSレジスタ スレッド情報にアクセスするためのレジスタ GS: 0x30 => TEB (Thread Environment Block) GS: 0x60 => PEB (Process Environment Block) … ① TEB (GS: 0x30) + 0x60 => PEB … ②

52.

vs YARA Windows_Trojan_Havoc_9c7bb863 0x0:$a1: 56 48 89 E6 48 83 E4 F0 48 83 EC 20 E8 0F 00 00 00 48 89 F4 5E C3 0x2ea:$a2: 65 48 8B 04 25 60 00 00 00 https://defuse.ca/online-x86-assembler.htm

53.

vs YARA Windows_Trojan_Havoc_9c7bb863 0x0:$a1: 56 48 89 E6 48 83 E4 F0 48 83 EC 20 E8 0F 00 00 00 48 89 F4 5E C3 0x2ea:$a2: 65 48 8B 04 25 60 00 00 00

54.

vs YARA • Before • After

55.

vs YARA Windows_Trojan_Havoc_88053562 0xffcb:$a: 48 81 EC F8 04 00 00 48 8D 7C 24 78 44 89 8C 24 58 05 00 00 48 8B AC 24 60 05 00 00 4C 8D 6C 24 78 F3 AB B9 59 00 00 00 48 C7 44 24 70 00 00 00 00 C7 44 24 78 68 00 00 00 C7 84 24 B4 00 00 00

56.

vs YARA Windows_Trojan_Havoc_88053562 0xffcb:$a: 48 81 EC F8 04 00 00 48 8D 7C 24 78 44 89 8C 24 58 05 00 00 48 8B AC 24 60 05 00 00 4C 8D 6C 24 78 F3 AB B9 59 00 00 00 48 C7 44 24 70 00 00 00 00 C7 44 24 78 68 00 00 00 C7 84 24 B4 00 00 00

57.

vs YARA

58.

vs YARA sudo ./havoc server --profile profiles/havoc.yaotl -v --debug --debug-dev

59.

vs YARA Windows_Trojan_Havoc_88053562 0xffcb:$a: 48 81 EC F8 04 00 00 48 8D 7C 24 78 44 89 8C 24 58 05 00 00 48 8B AC 24 60 05 00 00 4C 8D 6C 24 78 F3 AB B9 59 00 00 00 48 C7 44 24 70 00 00 00 00 C7 44 24 78 68 00 00 00 C7 84 24 B4 00 00 00

60.

vs YARA Windows_Trojan_Havoc_88053562 0xffcb:$a: 48 81 EC F8 04 00 00 48 8D 7C 24 78 44 89 8C 24 58 05 00 00 48 8B AC 24 60 05 00 00 4C 8D 6C 24 78 F3 AB B9 59 00 00 00 48 C7 44 24 70 00 00 00 00 C7 44 24 78 68 00 00 00 C7 84 24 B4 00 00 00

61.

vs YARA

62.

vs YARA

63.

vs YARA

64.

vs YARA Windows_Trojan_Havoc_88053562 0xffcb:$a: 48 81 EC F8 04 00 00 48 8D 7C 24 78 44 89 8C 24 58 05 00 00 48 8B AC 24 60 05 00 00 4C 8D 6C 24 78 F3 AB B9 59 00 00 00 48 C7 44 24 70 00 00 00 00 C7 44 24 78 68 00 00 00 C7 84 24 B4 00 00 00

65.

vs YARA Windows_Trojan_Havoc_ffecc8af 0x181ff:$commands_table: 0B 00 00 00 00 00 00 00 20 64 2B A4 02 00 00 00 64 00 00 00 00 00 00 00 00 34 2B A4 02 00 00 00 15 00 00 00 00 00 00 00 70 4A 2B A4 02 00 00 00 10 10 00 00 00 00 00 00 30 5A 2B A4 02 00 00 00 ...

66.

vs YARA Windows_Trojan_Havoc_ffecc8af 0x181ff:$commands_table: 0B 00 00 00 00 00 00 00 20 64 2B A4 02 00 00 00 64 00 00 00 00 00 00 00 00 34 2B A4 02 00 00 00 15 00 00 00 00 00 00 00 70 4A 2B A4 02 00 00 00 10 10 00 00 00 00 00 00 30 5A 2B A4 02 00 00 00 ...

67.

vs YARA Windows_Trojan_Havoc_ffecc8af 0x181ff:$commands_table: 0B 00 00 00 00 00 00 00 20 64 2B A4 02 00 00 00 64 00 00 00 00 00 00 00 00 34 2B A4 02 00 00 00 15 00 00 00 00 00 00 00 70 4A 2B A4 02 00 00 00 10 10 00 00 00 00 00 00 30 5A 2B A4 02 00 00 00 ...

68.

vs YARA Windows_Trojan_Havoc_ffecc8af 0x181ff:$commands_table: 0B 00 00 00 00 00 00 00 20 64 2B A4 02 00 00 00 64 00 00 00 00 00 00 00 00 34 2B A4 02 00 00 00 15 00 00 00 00 00 00 00 70 4A 2B A4 02 00 00 00 10 10 00 00 00 00 00 00 30 5A 2B A4 02 00 00 00 ...

69.

vs YARA 0x76:$hash_ldrloaddll: 43 6A 45 9E 0x7528:$hash_ldrloaddll: 43 6A 45 9E 0x13969:$hash_ntaddbootentry: 76 C7 FC 8C 0x89:$hash_ntallocatevirtualmemory: EC B8 83 F7 0x788c:$hash_ntallocatevirtualmemory: EC B8 83 F7 0x7b36:$hash_ntfreevirtualmemory: 09 C6 02 28 0x7b55:$hash_ntunmapviewofsection: CD 12 A4 6A 0x7ad9:$hash_ntwritevirtualmemory: 92 01 17 C3 0x77d2:$hash_ntsetinformationvirtualmemory: 39 C2 6A 94 0x7b74:$hash_ntqueryvirtualmemory: 5D E8 C0 10 0x7a5d:$hash_ntopenprocesstoken: 99 CA 0D 35 0x78e9:$hash_ntopenthreadtoken: D2 47 33 80

70.

vs YARA

71.

vs YARA

72.

vs YARA

73.

vs YARA

74.

vs YARA

75.

vs YARA OK

76.

vs CrowdStrike Falcon

77.

CrowdStrike Falcon • トップクラスのEDR • MLを用いた静的解析など • インジェクション系の関数も注力的に監視 => シンプルにShellcodeを実行するのがベスト • ADに関する攻撃も結構見てくれる印象 • OverWatchも優秀 => かゆいところに手が届いて良い

78.

CrowdStrike Falcon

79.

CrowdStrike Falcon • CrowdStrike • Normal

80.

CrowdStrike Falcon

81.

CrowdStrike Falcon • Mini-Filter

82.

CrowdStrike Falcon • Mini-Filter

83.

CrowdStrike Falcon • WFP (Windows Filtering Platform) Filter

84.

vs CrowdStrike Shellcode Runnerに対するMachine Learningの検知

85.

vs CrowdStrike

86.

vs CrowdStrike

87.

vs CrowdStrike

88.

vs Microsoft Defender for Endpoint

89.

Microsoft Defender for Endpoint • トップクラスのEDR • Microsoft製品で統一している会社で広く導入 • CrowdStrikeとは味が違うけど良い

90.

vs Microsoft Defender for Endpoint

91.

vs Microsoft Defender for Endpoint

92.

vs Microsoft Defender for Endpoint

93.

vs Microsoft Defender for Endpoint

94.

Sleep Mask • Sleep中にShellcodeを暗号化してシグネチャベースの検知を回避 Cobalt Strike: Sleep Mask Kit、BeaconGate + Sleepmask-VS Havoc: Sleep Technique sleep mask shellcode

95.

vs Microsoft Defender for Endpoint

96.

vs Microsoft Defender for Endpoint

97.

vs Cortex XDR

98.

Cortex XDR • トップクラスのEDR • 日本企業では少しレア • YARAでのスキャンが凶悪 => YARAでスキャンされないようにしたい

99.

vs Cortex XDR プロセスメモリ中のShellcodeに対する検知

100.

vs Cortex XDR プロセスメモリ中のShellcodeに対する検知

101.

vs Cortex XDR • PART 3: How I Met Your Beacon – Brute Ratel https://www.mdsec.co.uk/2022/08/part-3-how-i-met-your-beacon-brute-ratel/ As we can see, the DLLs highlighted are all the DLLs that are loaded when the badger is injected. This list includes the loading of winhttp.dll and wininet.dll, which are not necessarily nefarious but are traditional loads for an egress beacon. There are however a number of less common DLLs loaded, such as dbghelp.dll, credui.dll samcli.dll and logoncli.dll amongst others. This behaviour allows us to create a signature for the image loads and leads to a high signal indicator that can be hunted for through image load telemetry.

102.

vs Cortex XDR

103.

vs Cortex XDR

104.

vs Cortex XDR

105.

vs Cortex XDR

106.

vs Cortex XDR

107.

vs Cortex XDR

108.

Proxy Loading 別スレッドからLoadLibraryW関数を呼び出し、Call Stackが綺麗な状態を保つ • RtlRegisterWait • RtlCreateTimer • RtlQueueWorkItem

109.

Proxy Loading (RtlRegisterWait) • RtlRegisterWait 登録したイベントがシグナル状態かタイムアウトした場合に、callback関数が呼び出される ThreadPool: 非同期タスクやcallback関数を効率よく実行するための仕組み  Worker Thread: 関数を実行するためのスレッド  Wait Thread: イベント等の待機状態を監視し、原則Worker Threadで関数を実行 Instance->Win32.RtlRegisterWait( &Timer, Event, C_PTR( Instance->Win32.LoadLibraryW ), // callback関数 NameW, // 引数 0, // 待機時間 WT_EXECUTEONLYONCE | WT_EXECUTEINWAITTHREAD // callback関数実行後に登録解除 | Wait Threadでcallback関数を実行 )

110.

Proxy Loading (RtlRegisterWait) • Havoc payloads/Demon/src/core/Win32.c

111.

Proxy Loading (RtlRegisterWait) • Havoc

112.

Proxy Loading (RtlRegisterWait)

113.

Proxy Loading (RtlRegisterWait) ls C:\Users\kawada\

114.

Proxy Loading (RtlRegisterWait)

115.

vs Cortex XDR OK

116.

Call Stack Spoofing 関数呼び出し時にCall Stackを偽装する技術

117.

Call Stack Spoofing 関数呼び出し時にCall Stackを偽装する技術

118.

Call Stack Spoofing 関数呼び出し時にCall Stackを偽装する技術

119.

Call Stack Spoofing 関数呼び出し時にCall Stackを偽装する技術

120.

Call Stack Spoofing • Havoc

121.

Call Stack Spoofing • Havoc SpoofFunc( Instance->Modules.Kernel32, IMAGE_SIZE( Instance->Modules.Kernel32 ), Instance->Win32.WaitForSingleObjectEx, NtCurrentProcess(), C_PTR( TimeOut ), FALSE );

122.

Call Stack Spoofing • Havoc

123.

Call Stack Spoofing • Havoc

124.

Call Stack Spoofing ※ コメントは追記したもの

125.

Call Stack Spoofing

126.

Call Stack Spoofing

127.

Call Stack Spoofing

128.

Call Stack Spoofing

129.

vs その他

130.

vs カスタムルール CrowdStrikeの例 • Process Creation • File Creation • Network Connection • Domain Name

131.

vs カスタムルール

132.

vs SACL • SACL (System Access Control List) 純粋なファイルアクセスを監視することが可能

133.

vs SACL • SACL (System Access Control List) 純粋なファイルアクセスを監視することが可能

134.

vs SACL • SACL (System Access Control List) 純粋なファイルアクセスを監視することが可能

135.

vs SACL

136.

vs Sysmon 詳細な調整が可能な玄人向けツール https://learn.microsoft.com/en-us/sysinternals/downloads/sysmon

137.

vs Sysmon 詳細な調整が可能な玄人向けツール https://learn.microsoft.com/en-us/sysinternals/downloads/sysmon

138.

おまけ

139.

検知パターン 端末内での検知例 • オペレーションミス 不適切な方法でのSAM/SYSTEM/SECURITYファイルのダンプ 不適切なプロセスを用いた外部/内部への通信 • 検知ロジック更新 AMSIの検知回避手法に対する検知強化 Machine Learning/シグネチャの検知ロジック更新 • カスタムルール Chromeのデバッグモード起動 定期的な/不審な通信先への外部通信

140.

検知後 • クリーンアップ 感染したアカウントのセッション/認証情報無効化 感染した端末のクリーンアップ 横展開先の端末/サーバのクリーンアップ 攻撃者が取得した認証情報/アクセス権等の無効化 ... • 検知強化 マルウェアの形式、ファイル名、通信先、永続化手法 フィッシングの経路、シナリオ、環境構成

141.

今後 • • • • 他形式のマルウェア開発 通信先の選定 AMSI/ETW等の検知機能の回避 横展開時のマルウェア実行方法 • • • • • Cookies/Login Dataおよび暗号鍵の取得 UACの突破 SAM/SYSTEM/SECURITYファイルのダンプ プロセスメモリのダンプ Mimikatz等の機能/関数の抽出/検知回避

142.