Truco para evadir el firewall de Windows mediante SendInput() (botón 'permitir acceso' en alerta de Windows)

Si desarrollas malware una parte de tu artefacto estará siempre destinada a evadir ese molesto firewall personal que controla la ejecución y el acceso a red de las aplicaciones del sistema de la víctima. Por simple economía de escala una gran parte (por no decir la mayoría) suele ser el propio firewall de Windows para lo cual se suele intentar hookear o directamente detener mediante una función como execl(), system() con el argumento:

netsh advfirewall set currentprofile state off

o añadir directamente nuestro binario a la lista blanca atacando al registro:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile
SYSTEM\ControlSet%03d\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\AuthorizedApplications\List


si bien el antivirus esta ya ducho en estas técnicas hoy leía otra forma bastante interesante usando la *todopoderosa* API de Windows para simular un oportuno clic en el botón correspondiente de la alerta de turno, abriendo las puertas a nuestra "bestia del averno":



Windows tiene la función SendInput() para simular una pulsación de tecla. Esta función acepta como argumento un array de estructuras INPUT. Las estructuras de INPUT pueden ser un clic del ratón o un evento del teclado. La estructura de eventos del teclado tiene un miembro denominado wVk que puede ser cualquier tecla del teclado.

En primer lugar, se encuentra una ventana con el título "Alerta de seguridad de Windows" utilizando la función GetWindowText(). En segundo lugar, se llama a SendInput() con TAB y ENTER para elegir el botón "permitir el acceso'. Tan sencillo como eso.

Echa un vistazo al siguiente vídeo:


Fuente: http://funguscodes.blogspot.com.es/2016/05/uncommon-trick-to-bypass-windows.html
Código: https://github.com/CoolerVoid/X_files/blob/master/docs/PoCs/bypass_firewall_windows.cpp

Comentarios