Актуальные методы расшифрования TLS/SSL

от автора

Привет, Хабр. В рамках курса «Network engineer» подготовили авторскую статью.

Также приглашаем всех желающих смотреть открытый вебинар на тему «NAT — не Firewall». На нем участники вместе с экспертом рассмотрят NAT и его использование, разберут, почему NAT != firewall. Дополнительно рассмотрят различные виды конфигураций для разных ситуаций.


Шифрование — это наиболее популярный способ для защиты сетевого взаимодействия. Статья расскажет об актуальных методах расшифровки данных, которые передаются во время взаимодействия с web-приложениями. Будут рассмотрены примеры расшифровки в зависимости от стартовых условий (наличие ключей шифрования, сертификатов и уязвимостей в схеме передачи информации).

Проблематика и история

Разберемся немного с проблематикой и терминологией. На сегодняшний день наиболее популярными технологиями, которые применяются для шифрования данных, передаваемых по сети, являются SSL и TLS. Последняя сейчас является стандартом дефакто для взаимодействия по протоколу HTTPS. Кстати, именно в расшифровке этого протокола и будет заключаться практическая часть данной статьи. Для понимания процесса расшифровки данных мы должны знать такие понятия как:

  • Симметричная криптография

  • Ассиметричная криптография

  • Сертификат

  • Хранилище сертификатов

  • HSTS — или Strict Transport Security технология, которая включена в современных браузерах для контроля над обязательным использованием HTTPS для взаимодействия с сервером.

Описание каждого из пунктов, указанных выше, выходит за тематику данной статьи — поэтому если вы никогда не сталкивались с этими понятиями, то самое время их найти в Wiki и продолжить изучение статьи.

Практика

Практику будем проводить с использованием виртуальной лаборатории. Состав лаборатории:

  • Virtual Box;

  • Windows 8.1;

  • Ubuntu Server 20.04

Также для тестирования способов расшифровки трафика будем использовать устройство iPhonе SE.

Все машины должны быть подключены к сети «NAT Network». Именно этот тип подключения позволяет моделировать близкую к реальной топологию сети. В схеме есть хосты, которые могут взаимодействовать друг с другом, и есть хост, который используется как точка доступа в сеть Интернет. Приступим к практике.

Расшифровка трафика с использованием SQUID

Squid — программное обеспечение, которая эмулирует функцию кэширующего сервера. Может быть использована для распределения нагрузки и логирования действий пользователей по протоколу HTTP в сети, кстати, и с HTTPS это ПО работать тоже умеет. Воспользуемся этой его функцией. К сожалению, использовать squid из репозитория не получится, необходимо собрать его самостоятельно:

```sh wget http://www.squid-cache.org/Versions/v4/squid-4.5.tar.gz tar -xvzf squid-4.5.tar.gz cd squid-4.5  ./configure --with-openssl --enable-ssl-crtd --prefix=/usr/local/squid make make all make install ```

Самый действенный способ расшифровки взаимодействия между сервером и клиентом на сегодня — это добавление доверенного корневого сертификата, поэтому перед началом расшифровки нужно его сгенерировать:

```sh  cd /etc/squid mkdir ssl_cert chown squid:squid -R ssl_cert chmod 700 ssl_cert cd ssl_cert openssl req -new -newkey rsa:2048 -sha256 -days 365 -nodes -x509 -extensions v3_ca -keyout myCA.pem  -out myCA.pem  openssl x509 -in myCA.pem -outform DER -out myCA.der ```

Файл сертификата myCA.der можно использовать для браузера. Устанавливаем его в локальное хранилище и прописываем в качестве прокси сервер squid.

Настроим ссылку на вновь скомпилированный файл squid:

```sh ln -s /usr/local/squid/sbin/squid /usr/local/bin/squid ```

Проинициализируем директорию для кэша:

``` /usr/local/squid/libexec/security_file_certgen -c -s /var/lib/ssl_db -M 4MB chown squid:squid -R /var/lib/ssl_db ```

Модифицируем конфиг:

```sh nano /usr/local/squid/etc/squid.conf ```

Должен получить следующий листинг:

```sh acl SSL_ports port 443 acl CONNECT method CONNECT acl manager proto cache_object http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost manager http_access deny manager http_access allow localnet http_access allow localhost http_access deny all http_port 3128 cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256 coredump_dir /usr/local/squid/var/cache/squid refresh_pattern ^ftp:		1440	20%	10080 refresh_pattern ^gopher:	1440	0%	1440 refresh_pattern -i (/cgi-bin/|\?) 0	0%	0 refresh_pattern -i \.(gif|png|jpg|jpeg|ico)$ 10080 90% 43200 override-expire ignore-no-cache ignore-no-store ignore-private refresh_pattern -i \.(iso|avi|wav|mp3|mp4|mpeg|swf|flv|x-flv)$ 43200 90% 432000 override-expire ignore-no-cache ignore-no-store ignore-private refresh_pattern -i \.(deb|rpm|exe|zip|tar|tgz|ram|rar|bin|ppt|doc|tiff)$ 10080 90% 43200 override-expire ignore-no-cache ignore-no-store ignore-private refresh_pattern -i \.index.(html|htm)$ 0 40% 10080 refresh_pattern -i \.(html|htm|css|js)$ 1440 40% 40320 refresh_pattern -i youtube.com/.* 10080 90% 43200 refresh_pattern (/cgi-bin/|\?) 0 0% 0 refresh_pattern .		0	20%	4320 http_port 3128 ssl-bump \   cert=/etc/squid/ssl_cert/myCA.pem \   generate-host-certificates=on dynamic_cert_mem_cache_size=4MB sslcrtd_program /usr/local/squid/libexec/security_file_certgen -s /var/lib/ssl_db -M 4MB acl step1 at_step SslBump1 ssl_bump peek all ssl_bump stare all ssl_bump bump all cache allow all access_log stdio:/usr/local/squid/var/logs/access.log combined cache_store_log stdio:/usr/local/squid/var/logs/store.log cache_log stdio:/usr/local/squid/var/logs/cache.log ```

Запускаем squid:

```sh squid -d 10 && tail -f /usr/local/squid/var/logs/access.log ```

Результат проксирования:

Расшифровка взаимодействия с использованием CharlesProxy

В этом эксперименте будем использовать настоящую WiFi сеть с подключенным к нему устройством iPhone SE. Для расшифровки сетевого взаимодействия будем использовать специализированные программные продукты. Например charlesProxy. Продукт платный, но предоставляет бесплатный период использования. После запуска нужно выбрать опцию «Proxy > Start SSL Proxying»:

После этого станет доступна ссылка на корневой сертификат для браузера или другого сетевого устройства. Установим сертификат на устройство:

После установки в в качестве доверенного в браузере или на устройстве, можно увидеть следующий результат:

Вывод

Расшифровка трафика это достаточно простой процесс, если есть правильный набор инструментов. Приведенные примеры можно использовать для анализа сетевых взаимодействий внутри сети. А так же можно применять эти методы для исследования тех данных, которые отправляются браузером или другим ПО в Интернет.


Узнать подробнее о курсе «Network engineer».

Смотреть открытый вебинар на тему «NAT — не Firewall».

ссылка на оригинал статьи https://habr.com/ru/company/otus/blog/541804/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *