
SysWhispers on Steroids - التهرب من AV/EDR عبر استدعاءات النظام المباشرة.
يساعد SysWhispers في التهرب عن طريق إنشاء ملفات رأس/ASM يمكن للـ implants استخدامها لإجراء استدعاءات نظام مباشرة.
تعالوا لنلتقي على Discord!
الأسباب التي جعلت SysWhispers3 إصدارًا مستقلاً كثيرة، لكن أهمها هي:
الاستخدام مشابه جدًا لـ SysWhispers2، مع الاستثناءات التالية:
شرح أفضل لهذه الميزات موضح بشكل أفضل في منشور المدونة [SysWhispers is dead, long live SysWhispers!][2]
عادةً ما تضع منتجات الأمان، مثل برامج مكافحة الفيروسات (AVs) وأنظمة الكشف والاستجابة للنقاط الطرفية (EDRs)، خطافات (hooks) في دوال API في وضع المستخدم لتحليل تدفق تنفيذ البرنامج، وذلك لاكتشاف الأنشطة التي يحتمل أن تكون ضارة.
SysWhispers2 هي أداة مصممة لإنشاء أزواج رأس/ASM لأي استدعاء نظام في صورة النواة الأساسية (ntoskrnl.exe)، والتي يمكن بعد ذلك دمجها واستدعاؤها مباشرة من كود C/C++، متجنبةً خطافات وضع المستخدم.
ومع ذلك، فإن الأداة تولد بعض الأنماط التي يمكن تضمينها في التواقيع، أو سلوك يمكن اكتشافه في وقت التشغيل.
SysWhispers3 مبني على SysWhispers2، ويدمج بعض الميزات المفيدة لتجاوز هذه الأشكال من الكشف.
C:\> git clone https://github.com/klezVirus/SysWhispers3.git
C:\> cd SysWhispers3
C:\> python .\syswhispers.py --help
يعرض المساعدة جميع الأوامر والميزات المتاحة للأداة:
C:\>python syswhispers.py -h
usage: syswhispers.py [-h] [-p PRESET] [-a {x86,x64}] [-m {embedded,egg_hunter,jumper,jumper_randomized}] [-f FUNCTIONS] -o OUT_FILE [--int2eh] [--wow64] [-v] [-d]
SysWhispers3 - SysWhispers on steroids
optional arguments:
-h, --help show this help message and exit
-p PRESET, --preset PRESET
Preset ("all", "common")
-a {x86,x64}, --arch {x86,x64}
Architecture
-c {msvc,mingw,all}, --compiler {msvc,mingw,all}
Compiler
-m {embedded,egg_hunter,jumper,jumper_randomized}, --method {embedded,egg_hunter,jumper,jumper_randomized}
Syscall recovery method
-f FUNCTIONS, --functions FUNCTIONS
Comma-separated functions
-o OUT_FILE, --out-file OUT_FILE
Output basename (w/o extension)
--int2eh Use the old `int 2eh` instruction in place of `syscall`
--wow64 Use Wow64 to run x86 on x64 (only usable with x86 architecture)
-v, --verbose Enable debug output
-d, --debug Enable syscall debug (insert software breakpoint)
# Export all functions with compatibility for all supported Windows versions (see example-output/).
py .\syswhispers.py --preset all -o syscalls_all
# Export just the common functions (see below for list).
py .\syswhispers.py --preset common -o syscalls_common
# Export NtProtectVirtualMemory and NtWriteVirtualMemory with compatibility for all versions.
py .\syswhispers.py --functions NtProtectVirtualMemory,NtWriteVirtualMemory -o syscalls_mem
# Normal SysWhispers, 32-bits mode
py .\syswhispers.py --preset all -o syscalls_all -m jumper --arch x86
# Normal SysWhispers, using WOW64 in 32-bits mode (only specific functions)
py .\syswhispers.py --functions NtProtectVirtualMemory,NtWriteVirtualMemory -o syscalls_mem --arch x86 --wow64
# Egg-Hunting SysWhispers, to bypass the "mark of the sycall" (common function)
py .\syswhispers.py --preset common -o syscalls_common -m egg_hunter
# Jumping/Jumping Randomized SysWhispers, to bypass dynamic RIP validation (all functions) using MinGW as the compiler
py .\syswhispers.py --preset all -o syscalls_all -m jumper -c mingw
PS C:\Projects\SysWhispers2> py .\syswhispers.py --preset common --out-file temp\syscalls_common -v
. ,--.
,-. . . ,-. . , , |-. o ,-. ,-. ,-. ,-. ,-. __/
`-. | | `-. |/|/ | | | `-. | | |-' | `-. . \
`-' `-| `-' ' ' ' ' ' `-' |-' `-' ' `-' '''
/| | @Jackson_T
`-' ' @modexpblog, 2021
Edits by @klezVirus, 2022
SysWhispers3: Why call the kernel when you can whisper?
Common functions selected.
Complete! Files written to:
temp\syscalls_common.h
temp\syscalls_common.c
temp\syscalls_common_.asm
Press a key to continue...
ملف Makefile للـ 64 بت:
Makefile.msvc
OPTIONS = -Zp8 -c -nologo -Gy -Os -O1 -GR- -EHa -Oi -GS-
LIBS = libvcruntime.lib libcmt.lib ucrt.lib kernel32.lib
program:
ML64 /c syscalls-asm.x64.asm /link /NODEFAULTLIB /RELEASE /MACHINE:X64
cl.exe $(OPTIONS) syscalls.c program.c
link.exe /OUT:program.x64.exe -nologo $(LIBS) /MACHINE:X64 -subsystem:console -nodefaultlib syscalls-asm.x64.obj syscalls.obj program.obj
ملف Makefile للـ 32 بت:
Makefile.msvc
OPTIONS = -Zp8 -c -nologo -Gy -Os -O1 -GR- -EHa -Oi -GS-
LIBS = libvcruntime.lib libcmt.lib ucrt.lib kernel32.lib
program:
ML /c syscalls-asm.x86.asm /link /NODEFAULTLIB /RELEASE /MACHINE:X86
cl.exe $(OPTIONS) syscalls.c program.c
link.exe /OUT:program.x86.exe -nologo $(LIBS) /MACHINE:X86 -subsystem:console -nodefaultlib syscalls-asm.x86.obj syscalls.obj program.obj
قم بالتجميع باستخدام nmake:
nmake -f Makefile.msvc
ملف Makefile لكل من 64 و 32 بت:
Makefile.mingw
CC_x64 := x86_64-w64-mingw32-gcc
CC_x86 := i686-w64-mingw32-gcc
OPTIONS := -masm=intel -Wall
program:
$(CC_x64) syscalls.c program.c -o program.x64.exe $(OPTIONS)
$(CC_x86) syscalls.c program.c -o program.x86.exe $(OPTIONS)
قم بالتجميع باستخدام make:
make -f Makefile.mingw
win32k.sys) غير مدعومة.syscalls.h قد تم تعريفها بالفعل.
--preset all نادرًا ما يكون ضروريًا).syscalls.h.