🦈 Смотрим под капот защищенных соединений в Wireshark. Часть 3: MITM-атака на SSL/TLS-соединения

Ещё в группе «Общее»
- Мы помогли Apple устранить уязвимость в ядре ее операционных систем
Мы помогли Apple устранить уязвимость в ядре ее операционных систем Эксперт PT ESC Михаил Ложников обнаружил…
- Восстановление EVTX-записей: методы карвинга
Восстановление EVTX-записей: методы карвинга 🧩 При расследовании инцидентов, когда злоумышленники шифруют образы виртуальных машин, нередко возникает…
- Операция Chewbacca
В конце июня команда PT ESC в ходе расследования инцидентов обнаружила новую группу, нацеленную как минимум…
- Ваш сервер Zimbra под угрозой
Недавно наша команда PT ESC IR столкнулась с новой атакой ransomware-группировок на почтовые серверы Zimbra с…
- Он вам не gsocket
Он вам не gsocket 😑 В ходе расследования одного из инцидентов специалисты PT ESC IR наткнулись…
MITM-атака — достаточно популярный функционал различных песочниц и систем анализа приложений. Обычно инструменты, которые позволяют осуществлять MITM-атаки, представляют из себя прокси-сервер, который позволяет гибко обрабатывать входящий в него трафик и перехватывать SSL/TLS-сессии, извлекать мастер-ключи и многое другое. В таком случае нам требуется указать этот прокси-сервер в приложении или сервисе, на который планируется MITM-атака. В зависимости от гибкости инструмента, в нем также может быть встроен режим прозрачного проксирования (transparent proxy), который в отличие от классического прокси обычно требует, чтобы трафик был перенаправлен сетевыми правилами (например, с помощью iptables) в конкретную машину.
👀 Рассмотрим sslsplit — инструмент с открытым исходным кодом, который позволяет расшифровывать SSL/TLS-соединения прозрачно.
Сконфигурируем шлюз на базе Debian на примере скрипта make_gateway.sh.
Предварительно сгенерируем сертификаты для последующей работы прозрачного прокси.
openssl genrsa -out ca.key 2048
openssl req -new -x509 -days 365 -key ca.key -out ca.crtCode language: plaintext (plaintext)
Запустим sslsplit с указанными параметрами.
sslsplit -M keys.log -D -l connections.log -j sslsplit/ -S logdir/ -k ca.key -c ca.crt ssl 0.0.0.0 8443 tcp 0.0.0.0 8080Code language: plaintext (plaintext)
С другой машины сделаем запрос, при этом не указывая никакие параметры прокси, так как тут прокси у нас прозрачен и трафик перенаправляется в шлюз с клиентской машины, а дальше SSL/TLS с порта 443 перенаправляется в запущенный прозрачный прокси в порт 8443, при этом на клиенте нет никаких правил перенаправления трафика.
curl --cacert ca.crt --tlsv1.3 https://www.ptsecurity.com/Code language: Bash (bash)
Лог инструмента выводит информацию о том, что запрос прошел через прокси, хотя мы не указывали его напрямую (скриншот 1). В директории logdir, которую мы указали в инструменте, появляется файл, который содержит в себе расшифрованный поток (скриншот 2). При этом в файл keys.log записываются мастер-ключи SSL/TLS, и в дальнейшем эти ключи можно использовать, например, в Wireshark, если предварительно захватим весь трафик, который нужно расшифровать. Об этом мы рассказывали в первой части постов про Wireshark. Стоит отметить недочет данного инструмента — SSLKEYLOGFILE для сессий TLSv1.3 формируется некорректно, как следствие при открытии PCAP-файла в Wireshark не будет доступа к расшифрованным данным.
Но что, если мы хотим сформировать PCAP-файл с расшифрованными данными?
🐻 PolarProxy — в отличие от указанного выше инструмента, PolarProxy позволяет сформировать PCAP-файл с расшифрованными данными, но его главный недостаток: он проприетарный.
Запустим SOCKS в PolarProxy и укажем запись напрямую в PCAP-файл.
При этом PolarProxy имеет встроенный веб-хост сертификата, запустим его на порту 10080.
sudo ./PolarProxy -v --certhttp 10080 --socks 1080 -w polarproxy.pcapCode language: Bash (bash)
Загрузим сертификат
wget http://127.0.0.1:10080/polarproxy.crtCode language: Bash (bash)
Сформируем запрос через запущенный прокси.
Предварительно укажем сертификат в опции --cacert.
curl --cacert polarproxy.crt --proxy socks5://127.0.0.1:1080 https://ptsecurity.com/Code language: Bash (bash)
После завершения работы PolarProxy получаем записанный PCAP-файл polarproxy.pcap. В нем данный расшифрованный запрос можем посмотреть через Wireshark (скриншот 3). В отличие от предыдущих описанных инструментов, здесь формируется расшифрованный PCAP-файл в чистом виде, поэтому данный файл можно парсить с помощью Zeek, Suricata и других DPI.
У инструмента есть возможность применения опции прозрачного прокси, например:
sudo ./PolarProxy -v -p 0.0.0.0,10443,80,443 -w polarproxy.pcapCode language: Bash (bash)
Тогда PolarProxy будет запущен прозрачно на порту 10443 и будет обрабатывать трафик с клиентской машины от портов 80, 443 на всех интерфейсах.
Продолжение в посте ниже 👇


#dfir #tip #mitm #ssl #tls
@ptescalator
Ещё в группе «Общее»
- Мы помогли Apple устранить уязвимость в ядре ее операционных систем
Мы помогли Apple устранить уязвимость в ядре ее операционных систем Эксперт PT ESC Михаил Ложников обнаружил…
- Восстановление EVTX-записей: методы карвинга
Восстановление EVTX-записей: методы карвинга 🧩 При расследовании инцидентов, когда злоумышленники шифруют образы виртуальных машин, нередко возникает…
- Операция Chewbacca
В конце июня команда PT ESC в ходе расследования инцидентов обнаружила новую группу, нацеленную как минимум…
- Ваш сервер Zimbra под угрозой
Недавно наша команда PT ESC IR столкнулась с новой атакой ransomware-группировок на почтовые серверы Zimbra с…
- Он вам не gsocket
Он вам не gsocket 😑 В ходе расследования одного из инцидентов специалисты PT ESC IR наткнулись…



