
Прозрачный прокси-посредник (man-in-the-middle), который завершает SSL/TLS соединения, формирует сертификаты на лету и регистрирует расшифрованный трафик для сетевой криминалистики и тестирования на проникновение.
SSLsplit - это инструмент для атак типа «человек посередине» на SSL/TLS-зашифрованные сетевые соединения. Он предназначен для использования в сетевой криминалистике, анализе безопасности приложений и тестировании на проникновение.
SSLsplit разработан для прозрачного завершения соединений, перенаправляемых на него с помощью механизма трансляции сетевых адресов. Затем SSLsplit завершает SSL/TLS и устанавливает новое SSL/TLS-соединение с исходным адресом назначения, регистрируя все передаваемые данные. Помимо работы на основе NAT, SSLsplit также поддерживает статические адреса назначения и использование имени сервера, указанного в SNI, в качестве вышестоящего адреса назначения. SSLsplit является исключительно прозрачным прокси и не может работать в качестве HTTP- или SOCKS-прокси, настраиваемого в браузере.
SSLsplit поддерживает обычные TCP, обычные SSL, HTTP и HTTPS-соединения как по IPv4, так и по IPv6. Он также способен динамически обновлять обычный TCP до SSL для общей поддержки SMTP STARTTLS и аналогичных механизмов обновления. SSLsplit полностью поддерживает Server Name Indication (SNI) и может работать с ключами RSA, DSA и ECDSA, а также с наборами шифров DHE и ECDHE. В зависимости от версии OpenSSL, с которой он скомпилирован, SSLsplit поддерживает SSL 3.0, TLS 1.0, TLS 1.1 и TLS 1.2, а также опционально SSL 2.0.
Для SSL- и HTTPS-соединений SSLsplit генерирует и подписывает поддельные сертификаты X509v3 на лету, имитируя subject DN, расширение subjectAltName и другие характеристики исходного сертификата сервера. SSLsplit может использовать существующие сертификаты, для которых доступен закрытый ключ, вместо генерации поддельных. SSLsplit поддерживает сертификаты CN с префиксом NULL, но в остальном не реализует эксплойты против конкретных уязвимостей проверки сертификатов в стеках SSL/TLS.
SSLsplit реализует ряд защит от механизмов, которые обычно предотвращают атаки MitM или усложняют их. SSLsplit может общим образом отклонять запросы OCSP. Для HTTP- и HTTPS-соединений SSLsplit изменяет заголовки, чтобы предотвратить привязку открытых ключей по указанию сервера (HPKP), избежать ограничений строгой транспортной безопасности (HSTS), избежать принудительного применения Certificate Transparency (Expect-CT) и предотвратить переключение на QUIC/SPDY, HTTP/2 или WebSockets (Upgrade, Alternate Protocols). Сжатие HTTP, кодировки и keep-alive отключаются, чтобы сделать журналы более читаемыми.
Параметры журналирования включают традиционные файлы журналов подключений и содержимого SSLsplit, а также файлы PCAP и зеркалирование расшифрованного трафика на сетевой интерфейс. Кроме того, можно регистрировать сертификаты, мастер-секреты и информацию о локальных процессах.
Подробнее об использовании SSLsplit и настройке различных механизмов NAT см. на странице руководства sslsplit(1).
По умолчанию SSLsplit зависит от библиотек OpenSSL, libevent 2.x, libpcap и libnet 1.1.x; libpcap и libnet не требуются, если функция зеркалирования не используется. Сборка зависит от GNU make и окружения POSIX.2 в PATH. Если доступен, используется pkg-config для поиска и настройки зависимостей. Опциональные модульные тесты зависят от библиотеки check.
В настоящее время SSLsplit поддерживает следующие операционные системы и механизмы NAT:
Поддержка информации о локальных процессах (-i) в настоящее время доступна на Mac OS X и FreeBSD.
Функции SSL/TLS и совместимость сильно зависят от версии OpenSSL, с которой произведена сборка. Для оптимальных результатов используйте последнюю версию OpenSSL или LibreSSL.
При наличии вышеуказанных требований выполните:
make
make test # optional unit tests
make sudotest # optional unit tests requiring privileges
make install # optional install
Зависимости автоматически настраиваются с помощью pkg-config. Если зависимости не обнаруживаются и исправление PKG_CONFIG_PATH не помогает, вы можете вручную указать их местоположения, задав OPENSSL_BASE, LIBEVENT_BASE, LIBPCAP_BASE, LIBNET_BASE и/или CHECK_BASE как соответствующие префиксы.
Вы можете переопределить префикс установки по умолчанию (/usr/local), задав PREFIX. Дополнительные параметры сборки и значения по умолчанию см. в GNUmakefile и defaults.h.
См. страницы руководства sslsplit(1) и sslsplit.conf(5) для пользовательской документации. См. NEWS.md для примечаний к выпускам с перечнем значительных изменений между версиями и SECURITY.md для информации о раскрытии уязвимостей безопасности.
SSLsplit предоставляется по лицензии BSD с 2 пунктами. SSLsplit содержит компоненты, лицензированные по лицензиям MIT и APSL. Подробнее см. в LICENSE, LICENSE.contrib и LICENSE.third, а также в соответствующих заголовках исходных файлов.
Список участников см. в AUTHORS.md. SSLsplit был вдохновлен mitm-ssl Клаеса М. Нюберга и sslsniff Мокси Марлинспайка, но не использует их исходный код.