Best EDR Of The Marketは、エンドポイント検出・応答(EDR)セキュリティ製品で使用される検出方法とその回避策を、低レベルの視点から実装・理解するために設計されたオープンソースラボです。これらのテクニックは主に、Windows NTのテレメトリ機能を悪用してプロセス動作を動的に分析することに基づいています。
したがって、この第3版では、PPID Spoofing(T1134.004)、Credential Dumping(T1003.001)、Process Hollowing/Ghosting/Tampering(T1055.012)、メモリコードインジェクション(T1055)手法(APCキューイング(T1055.004)およびThread Hijacking(T1055.003)を含む)、異常なシステムコール(T1106)、レジストリ永続化操作(T1547.001)など、多くのTTPを検出することが可能です。
このプロジェクトには、Yaraルールを提供するために@Elasticのprotection-artifactsリポジトリのクローンが含まれています。
📁 beotmv3
⚙️ beotm.sys
📄 beotm.exe
📁 protection-artifacts/
📁 rules/
📁 yara/
📄 Windows_Trojan_Metasploit.yar
📄 Windows_Hacktool_Mimikatz.yar
📄 Windows_Hacktool_Rubeus.yar
📄 ...
📄 libcrypto-3-x64.dll
beotm.exe <path to driver> <path to Yara rules folder>
protection-artifactsを使用した例:
.\beotm.exe .\beotm.sys .\protection-artifacts\yara\rules\
beotm.exeはシステムにbeotm.sysドライバを自動的にインストールし、起動前に管理者モードで実行するよう要求します。ドライバがインストールされると、パラメータで指定されたパスに存在するYaraルールを取得してコンパイルします:

すべてのYaraルールがコンパイルされたら、任意のキーを押すとUIパネルにリダイレクトされます:

beotm.exeが終了しても、ドライバに関連付けられたサービスはシステム上でアクティブなままです。そのため、beotm.exeを再度実行する際にドライバを再インストールする必要はありません。サービス名は「BeotmDrv」です:
C:\Windows\system32>sc.exe query type=driver | findstr /i "beotm"
SERVICE_NAME: BeotmDrv
DISPLAY_NAME: BeotmDrv
必要に応じて、次のようにサービスを停止できます:
C:\Windows\system32> sc.exe stop BeotmDrv
Windows仮想マシンなどのテスト環境が必要です。マシンは TESTSIGNING モードで構成する必要があります。
Windows 10 22H2 VM(BEOTMがテストされたバージョン)を推奨します。
変更をテストする場合は、リモートVMのカーネルをデバッグすることもできます。BEOTM起動時にデバッグメッセージが表示され、コールバックが正常に登録されたかどうかを通知します:
1: kd> g
____ _ _____ ____ ____ ___ __ _____ _
| __ ) ___ ___| |_ | ____| _ \| _ \ / _ \ / _| |_ _| |__ ___
| _ \ / _ \/ __| __| | _| | | | | |_) | | | | | |_ | | | '_ \ / _ \
| |_) | __/\__ \ |_ | |___| |_| | _ < | |_| | _| | | | | | | __/
|____/_\___||___/\__| |_____|____/|_| \_\ \___/|_| |_| |_| |_|\___| v3
| \/ | __ _ _ __| | _____| |_
| |\/| |/ _` | '__| |/ / _ \ __|
| | | | (_| | | | < __/ |_ Yazidou - github.com/Xacone
|_| |_|\__,_|_| |_|\_\___|\__|
[+] Win Kernel Structs offsets initialized
[+] Altsyscall handler registered !
[+] PsSetCreateThreadNotifyRoutine success
[+] PsSetCreateProcessNotifyRoutineEx success
[+] PsSetLoadImageNotifyRoutine success
[+] ObRegisterCallbacks 1 success
[+] CmRegisterCallbackEx success
[+] Driver loaded
プロジェクトはVisual Studio 2022で設計されました。WDKアップストリームと、x64 spectrum mitigationライブラリなどのすべての前提条件が揃っていることを確認してください。Windows Hardwareドキュメントには、手順の詳細が記載されています。
プロジェクトはC++20を使用しています。
プロジェクトには、まだ実装されていないNDISベースのTCP/IPフィルタリング機能が含まれています。"Symbol not found"のようなエラーが発生した場合は、BestEdrOfTheMarketDriver -> Project Properties -> Linker -> Entry -> Additional Dependenciesで以下のライブラリをリンクしてください:
$(DDK_LIB_PATH)\fwpkclnt.lib
$(DDK_LIB_PATH)\ndis.lib
$(SDK_LIB_PATH)\uuid.lib
ユーザー側では、yaraをvcpkgでインストールしてください:
.\vcpkg\vcpkg.exe install yara
vcpkg.exe実行可能ファイルを入手する方法は次のとおりです:
git clone https://github.com/microsoft/vcpkg
.\vcpkg\bootstrap-vcpkg.bat
クラッシュ、バグ、BSOD、または過剰な誤検出が発生した場合は、遠慮なくIssueを開いてください。
エラーの原因を特定するために、できるだけ多くの情報を提供してください。そのためには、バグが再現された条件と、それを引き起こしたアーティファクト、さらに(可能であれば)カーネルデバッグモードのWinDbgにおける analyze -v の出力を提供するのが最も効果的です。
クラッシュ/バグ/BSODを引き起こしたのがあなたのアーティファクトだった場合、そのソースコードもいただけると助かります。
このプロジェクトの範囲は純粋に教育目的です。ドライバは管理されたテスト環境でのみ使用してください。