
Caricatore di shellcode tramite syscall (Lavori in corso)
Shhhloader è un loader di shellcode in fase di sviluppo. Prende shellcode grezzo come input e compila uno stub in C++ che esegue una serie di diverse operazioni per tentare di bypassare AV/EDR. Il builder Python incluso funzionerà su qualsiasi sistema Linux con Mingw-w64 installato.
Modifica del 25/01/24: Shhhloader ora supporta la variante 7 di PoolParty! È stata anche aggiunta un'opzione che combina PoolParty con Module Stomping per evitare che lo shellcode eseguito risieda in memoria non supportata. Vedi sotto per un video che dimostra questo nuovo metodo di iniezione contro Defender ATP:
┳┻|
┻┳|
┳┻|
┻┳|
┳┻| _
┻┳| •.•) - Shhhhh, AV might hear us!
┳┻|⊂ノ
┻┳|
usage: Shhhloader.py [-h] [-p explorer.exe] [-m QueueUserAPC] [-u] [-w] [-nr] [-ns] [-l] [-v] [-sc GetSyscallStub] [-d] [-dp apphelp.dll] [-s domain]
[-sa testlab.local] [-o a.exe] [-pp explorer.exe] [-ppv] [-np] [-cp] [-td ntdll.dll] [-ef NtClose]
file
ICYGUIDER'S CUSTOM SYSCALL SHELLCODE LOADER
positional arguments:
file File containing raw shellcode
options:
-h, --help show this help message and exit
-p explorer.exe, --process explorer.exe
Process to inject into (Default: explorer.exe)
-m QueueUserAPC, --method QueueUserAPC
Method for shellcode execution (Options: PoolPartyModuleStomping, PoolParty, ThreadlessInject, ModuleStomping, QueueUserAPC,
ProcessHollow, EnumDisplayMonitors, RemoteThreadContext, RemoteThreadSuspended, CurrentThread) (Default: QueueUserAPC)
-u, --unhook Unhook NTDLL in current process
-w, --word-encode Save shellcode in stub as array of English words
-nr, --no-randomize Disable syscall name randomization
-ns, --no-sandbox Disable sandbox checks
-l, --llvm-obfuscator
Use Obfuscator-LLVM to compile stub
-v, --verbose Enable debugging messages upon execution
-sc GetSyscallStub, --syscall GetSyscallStub
Syscall execution method (Options: SysWhispers2, SysWhispers3, GetSyscallStub, None) (Default: GetSyscallStub)
-d, --dll Generate a DLL instead of EXE
-dp apphelp.dll, --dll-proxy apphelp.dll
Create Proxy DLL using supplied legitimate DLL (File must exist in current dir)
-s domain, --sandbox domain
Sandbox evasion technique (Options: sleep, domain, hostname, username, dll) (Default: sleep)
-sa testlab.local, --sandbox-arg testlab.local
Argument for sandbox evasion technique (Ex: WIN10CO-DESKTOP, testlab.local)
-o a.exe, --outfile a.exe
Name of compiled file
PPID Spoofing:
-pp explorer.exe, --ppid explorer.exe
Parent process to use for PPID Spoofing (Default: explorer.exe)
-ppv, --ppid-priv Enable spoofing for privileged parent process (Disabled by default)
-np, --no-ppid-spoof Disable PPID spoofing
ThreadlessInject:
-cp, --create-process
Create process instead of injecting into existing one
-td ntdll.dll, --target-dll ntdll.dll
Target DLL containing export function to overwrite
-ef NtClose, --export-function NtClose
Export function to overwrite
Caratteristiche:
Vedi sotto per un video PoC del metodo ThreadlessInject utilizzato per iniettare un beacon Havoc in IE senza generare alcun avviso e con eventi minimi in Microsoft Defender for Endpoint (MDE) EDR (Registrato il 4/3/2023):
Vedi il video sottostante che dimostra la tecnica di iniezione Module Stomping eseguita tramite DLL Proxying (Registrato il 9/8/2022):
Shhhloader è stato anche integrato nel Havoc C2 Framework tramite un modulo di @jakobfriedl. Vedi sotto per un video che dimostra il modulo:
Problemi noti/Note:
-p per fornire il nome di un processo che sai o sospetti sia già in esecuzione sul sistema di destinazione.Aggiornamenti pianificati:
OPZIONALE: Per usare il flag Obfuscator-LLVM, devi averlo installato sul tuo sistema insieme a wclang. Ho trovato che sia un po' fastidioso, ma dovresti riuscirci con un po' di perseveranza. Ecco una procedura passo-passo che ho usato per installare il ramo llvm-13.x di OLLVM sul mio sistema Kali Linux:
# Clone and Run CMake
git clone -b llvm-13.x https://github.com/heroims/obfuscator.git
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_NEW_PASS_MANAGER=OFF ../obfuscator/llvm/
# Configure CMake and Compile OLLVM
export clang_build_dir=$(cd ../; pwd)/obfuscator/clang
sed -i 's/LLVM_TOOL_CLANG_BUILD:BOOL=OFF/LLVM_TOOL_CLANG_BUILD:BOOL=ON/g' CMakeCache.txt
sed -i "s|LLVM_EXTERNAL_CLANG_SOURCE_DIR:PATH=|LLVM_EXTERNAL_CLANG_SOURCE_DIR:PATH=$clang_build_dir|g" CMakeCache.txt
make -j7
# ONCE COMPILED, BACKUP ORIGINAL CLANG BINARIES
mv /usr/bin/clang /usr/bin/clang13.0.1
mv /usr/bin/clang++ /usr/bin/clang++13.0.1
# Then in OLLVM build/bin dir, copy the newly build clang bins
cp bin/clang /usr/bin/clang
cp bin/clang++ /usr/bin/clang++
# Then install wclang
cd ..
git clone https://github.com/tpoechtrager/wclang.git
cd wclang/
cmake -DCMAKE_INSTALL_PREFIX=_prefix_ .
make
make install
export wclang_path=$(pwd)/_prefix_/bin
echo "export PATH=$wclang_path:$PATH" >> ~/.bashrc
export PATH=$wclang_path:$PATH
# Then backup original lib files
cp -R /lib/llvm-13/lib/clang/13.0.1/include/ /lib/llvm-13/lib/clang/13.0.1/include_backup/
# Finally in the OLLVM build/bin/lib/clang/13.0.1/ dir, copy the include folder
cd ../build/lib/clang/13.0.1/
cp -R include/ /lib/llvm-13/lib/clang/13.0.1/
Probabilmente esiste un modo migliore per farlo, ma questo è ciò che ha funzionato per me. Se hai problemi, continua a provare e assicurati di poter eseguire x86_64-w64-mingw32-clang++ -v e che l'output contenga "Obfuscator-LLVM" o "heroims". Purtroppo non ho tempo per assistere singolarmente chi potrebbe aver bisogno di ulteriore aiuto, ma puoi provare a leggere questo issue sul mio repository Nimcrypt2, dove un paio di utenti hanno capito come fare sui loro sistemi.
Saluti e crediti: