[ << ALL_FEED ]

Смотрим под капот защищенных соединений в Wireshark. Часть 1: TLS

Ещё в группе «Общее»

🦈 Смотрим под капот защищенных соединений в Wireshark. Часть 1: TLS

Нашим сетевым экспертам часто бывает нужно расшифровывать трафик TLS-соединений и проанализировать защищенное содержимое. Современные алгоритмы TLS уже очень давно используют схему Ephemeral Diffie–Hellman (EDH), которая не позволяет расшифровывать TLS-сессии закрытым ключом RSA.

Теперь для расшифровки необходимо собирать так называемые сессионные ключи (session keys) средствами самого TLS-клиента или сервера. И за много лет мы собрали несколько лайфхаков, которые работают для большинства анализируемых приложений. Поехали!

1️⃣ Браузеры и консольные утилиты

Для расшифровки браузерных TLS-сессий или консольных утилит, например curl, необходимо установить переменную окружения SSLKEYLOG. Это делается при помощи команды export SSLKEYLOGFILE=/path/to/keylog.log для Linux-систем или через переменные среды (скриншоты 1 и 2) в системах Windows. Теперь браузеры и утилиты будут сохранять сессионные ключи в указанном файле.

2️⃣ Приложения на Go

Настройка дампа ключей в подобных приложениях потребует небольшого патча. Необходимо либо добавить эти строки в код самого приложения (пример).

w, err := os.OpenFile("/path/to/SSLKEYLOGFILE", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
config := &tls.Config{KeyLogWriter: w}
Code language: plaintext (plaintext)


Либо, если в файле явно не определяется tls config, но в самой программе или в библиотеке используется стандартная библиотека crypto/go, можно задать sslkeylog-файл прямо в ней. Мы привели пример diff-файла (common_go.diff) для go version go1.24.4 linux/amd64. После этого достаточно задать путь к keylog-файлу в переменной окружения SSLKEYLOGFILE:

export SSLKEYLOGFILE=/path/to/keylog.log
Code language: Bash (bash)


3️⃣ Приложения на Python

Настройка дампа ключей также работает через установку переменной окружения SSLKEYLOGFILE:

export SSLKEYLOGFILE=/path/to/keylog.log
python main.py
Code language: Bash (bash)


4️⃣ Приложения на Node.js

Необходимо просто запустить приложение с ключом tls-keylog

node --tls-keylog=/path/to/keylog.log program.js
Code language: plaintext (plaintext)


Либо задать переменную окружения NODE_OPTIONS и запустить программу в той же консоли:

export NODE_OPTIONS=--tls-keylog=/path/to/keylog.log
Code language: Bash (bash)


5️⃣ Xray Core

Другие проприетарные приложения могут использовать свои собственные параметры для дампа сессионных ключей. Особенно те, которые реализуют TLS-соединения по-своему. Xray — это целый фреймворк, который поддерживает множество VPN-протоколов, включая VMess, VLESS и XTLS. Благодаря разработчикам ядра Xray собрать сессионные ключи не составит труда. Нужно всего лишь добавить ключ masterKeyLog в конфигурацию исходящего (outbound) подключения.

"realitySettings": {
  "serverName": "yahoo.com",
  "publicKey": "publicKey",
  "shortId": "shortId",
  "fingerprint": "chrome",
  "spiderX": "/",
  "masterKeyLog": "/path/to/keylog"
}
Code language: plaintext (plaintext)


Большинство конфигураций Xray задается при помощи URL, для добавления ключа необходимо поправить JSON-конфигурацию внутри клиента или сервера уже после добавления ключа.

Как использовать полученные session keys

Чтобы расшифровать TLS-сессию в Wireshark, необходимо открыть Edit → Preferences, затем в настройках протокола TLS выбрать файл Master-Secret log filename (скриншот 3, результат на скриншоте 4).

☠️ Ну а в следующей части мы расскажем о расшифровке зашифрованного содержимого протоколов SMB/LDAP/DCERPC с NTLM- и Kerberos-аутентификацией.

Делитесь вашими собственными лайфхаками в комментариях ⬇️


#dfir #tip #tls #network
@ptescalator

Ещё от oUth0R

Ещё от oUth0R

Ещё в группе «Общее»