🦈Смотрим «под капот» защищенных соединений в Wireshark. Часть 2: протоколы Windows

Ещё в группе «Общее»
- Мы помогли Apple устранить уязвимость в ядре ее операционных систем
Мы помогли Apple устранить уязвимость в ядре ее операционных систем Эксперт PT ESC Михаил Ложников обнаружил…
- Восстановление EVTX-записей: методы карвинга
Восстановление EVTX-записей: методы карвинга 🧩 При расследовании инцидентов, когда злоумышленники шифруют образы виртуальных машин, нередко возникает…
- Операция Chewbacca
В конце июня команда PT ESC в ходе расследования инцидентов обнаружила новую группу, нацеленную как минимум…
- Ваш сервер Zimbra под угрозой
Недавно наша команда PT ESC IR столкнулась с новой атакой ransomware-группировок на почтовые серверы Zimbra с…
- Он вам не gsocket
Он вам не gsocket 😑 В ходе расследования одного из инцидентов специалисты PT ESC IR наткнулись…
В первой части мы разбирали декрипт TLS-соединений, которые часто используются в интернете. Но если переместиться внутрь корпоративной среды, там будут преобладать другие протоколы — SMB, LDAP и DCERPC, — и все они имеют функцию шифрования содержимого своих запросов.
Например, эта функция появилась в протоколе SMB версии 3, для большинства DCERPC-соединений используется уровень аутентификации Packet Privacy, а сообщения протокола LDAP шифруются при включенной подписи (LDAP Signing).
У них есть кое-что общее: ключ шифрования Session Key в конечном счете генерируется на основе пароля учетной записи пользователя или ключа учетной записи устройства. Правда, сам алгоритм дешифрования сильно отличается в зависимости от протокола (NTLM или Kerberos).
1️⃣ NTLM-аутентификация
Самый простой случай: для расшифрования нам понадобится только пароль пользователя. Чтобы указать его в Wireshark, необходимо открыть Edit → Preferences, затем в параметрах протокола NTLMSSP вписать пароль в поле NT Password. Теперь рядом с зашифрованными блоками появятся расшифрованные (скриншот 1).
2️⃣ Kerberos
Для расшифрования сессий с аутентификацией Kerberos необходим пароль либо учетной записи пользователя, либо сервисной учетной записи, поскольку оба эти пароля участвуют в формировании сессионного ключа. По сути, нам сначала необходимо расшифровать значение сессионного ключа внутри Kerberos, а затем использовать его для декрипта SMB или других протоколов. Сначала необходимо сгенерировать keytab-файл.
Генерация keytab-файла по паролю пользователя
Из Kerberos-ответа AS-REP узнаем алгоритм шифрования и значение соли по формуле <REALM> + <cname>. В нашем случае они будут равны aes256-cts-hmac-sha1-96 и ATTDETT.STFo_walsh соответственно, причем важно обратить внимание на регистр (скр. 2).
С помощью Linux-утилиты kutils добавляем запись для нужного пользователя, используя команду addent с параметром -password. Параметры указываем как в команде ниже, причем параметр -k (Key Version Number, kvno) может быть любым числом. Сохраняем keytab при помощи команды wkt (скр. 3).
ktutil: addent -password -p o_walsh@ATTDETT.STF -k 2 -e aes256-cts-hmac-sha1-96
Code language: YAML (yaml)
Генерация keytab-файла по ключу сервисной УЗ
Сессионный ключ в билете TGS может быть расшифрован также при помощи ключа сервисной учетной записи. Это полезно, если мы хотим расшифровывать соединение с сервисом любых пользователей. Пароль сервисных учетных записей, как правило, совпадает с паролем учетной записи устройства — он очень сложный и генерируется автоматически каждые 30 дней.
Из TGS-ответа так же достаем алгоритм шифрования и с помощью той же утилиты kutils добавляем запись. Разница лишь в том, что вместо пароля используем параметр -key с ключом сервисной учетной записи, получить который можно, например, с помощью скрипта secretsdump из фреймворка Impacket. Параметр -p (principal) для Wireshark неважен, можем указать любые значения -p и -k (скр. 4).
ktutil: addent -key -p something@RANDOM.RND -k 666 -e aes256-cts-hmac-sha1-96
Code language: YAML (yaml)
Как использовать полученный keytab-файл?
В Wireshark включаем параметр Try to decrypt Kerberos blobs:
Edit → Preferences → Protocols → KRB5 → Try to decrypt Kerberos blobs
Чтобы указать keytab-файл в Wireshark, необходимо открыть Edit → Preferences, затем в параметрах протокола KRB5 выбрать файл Kerberos keytab file. Часть полей будут отображаться нерасшифрованными — это нормально. Затем приступаем к дешифровке SMB3.
SMB3
Нам понадобится тот самый сессионный ключ. Найти его можно в поле keyvalue в пакетах TGS-REP или AP-REQ. Затем берем один из интересующих нас пакетов SMB3 и копируем из хедера Session ID (как на скр. 5, 6).
Указываем сессионный ключ и Session ID в поле Secret session key в Wireshark в параметрах протокола SMB2:
Edit → Preferences → Protocols → SMB2 → Secret session key for decryption
Бинго! Получаем расшифрованный SMB3 (скр. 7). Тот же самый алгоритм работает и для дешифрования других протоколов (DCERPC, LDAP и т. д.).






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



