Wireshark — перехоплення TLS/SSL-трафіку. Частина 2

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Всім привіт. Це продовження статті Wireshark — основні можливості та як ним користуватись. За коментарями до першої частини стало зрозуміло: у спільноти є запит на пояснення, яким чином можна перехопити TLS-трафік і за певних умов розшифрувати його. У цій статті я розгляну, як зняти TLS-трафік з embedded-пристрою. Якщо обмін даними відбувається між ноутбуком чи є доступ до сервера, куди підключається пристрій, і туди можливо поставити Wireshark, перехопити трафік можливо стандартно. Це описано в першій частині.

Не розповідатиму, як атакувати протокол TLS. Натомість розгляну проблеми, які можна вирішити, якщо не вдається встановити TLS-з’єднання (handshake). А також як розшифрувати трафік в тестовому середовищі, якщо є доступ до приватного ключа сервера. Протоколи, які розглядатиму в матеріалі, не є HTTPS. Якщо ваш девайс обмінюється даними за протоколом HTTPS, є багато ПЗ, які дозволяють перехопити трафік. Наприклад, платні Charles чи Fiddler. А також безплатний mitmproxy.

Для перехоплення трафіку буду використовувати ноутбук з системою Windows 10, у якого є два інтерфейси: Ethernet та Wi-Fi. Мій embedded-пристрій використовує Ethernet. Тому я Ethernet-кабелем (патчкорд) приєдную пристрій до ноутбука і підключаю його до інтернету через Wi-Fi. Якщо у вас Wi-Fi embedded-пристрій, можна зробити навпаки.

схема підключення

Коротко про TLS

TLS (Transport Layer Security) — це протокол, який дозволяє безпечно обмінюватись даними в інтернеті. Складається з 2 основних фаз. Під час першої фази (handshake) клієнт і сервер можуть перевірити один одного за допомогою сертифікатів, визначити алгоритми шифрування і обміну ключів, обмінятися ключами для шифрування даних у другій фазі. Під час другої фази відбувається передача даних на основі ключів для шифрування, узгоджених в першій. Як правило, основні помилки виникають під час handshake.

Для того, щоб клієнт і сервер могли перевірити один одного, вони генерують пари з публічних і приватних ключів. Публічний ключ відправляють на підпис в довірений центр сертифікації (CA) і отримують підписаний сертифікат. Коли клієнт хоче встановити з’єднання, він відправляє серверу початкове повідомлення (Client Hello), де вказує, які шифри для обміну/генерації ключів для нього прийнятні. Сервер своєю чергою відповідає, які шифри прийнятні для нього та надсилає свій підписаний серверний сертифікат.

За допомогою публічного ключа від СА клієнт перевіряє підпис серверного сертифіката, строк дії, домен тощо. Сервер може запитати клієнтський сертифікат, якщо необхідно. Після цього клієнт з сервером узгоджують ключі для шифрування і можна переходити до другої фази шифрування даних.

Налаштування середовища для перехоплення трафіку

Отже, для перехоплення трафіку я під’єднав кабелем Ethernet свій пристрій до ноутбука. Сам ноутбук виходить в мережу Інтернет через Wi-Fi. Нам потрібно розшарити Wi-Fi з’єднання для Ethernet. Для цього в мережевих налаштуваннях (Network connections) обираємо Wi-Fi та заходимо у вкладку Sharing. Потрібно дозволити іншим мережам підключення через Wi-Fi. А також обрати мережу Ethernet у списку.
Wi-Fi properties

Операційна система запропонує включити на пристрої DHCP, щоб він зміг отримати відповідну IP-адресу і шлюз.DHCP

На цьому все. Потрібно перезапустити девайс, щоб він гарантовано отримав мережеві налаштування. Після цього можна перевірити, чи на пристрої є інтернет.

Перехоплення трафіку

Тепер можна запустити Wireshark і за допомогою фільтрів перехопити трафік. Приклад наведено нижче (src і dst IP-адреси не відображені на рисунку).TLS-sniffing


Тут можна ретельно проаналізувати TLS-handshake. Деталі кожного повідомлення можна переглянути в нижньому вікні Wireshark.
Приклад TLS-повідомлення

Client Hello — повідомлення від клієнта на запит отримання серверного сертифіката і передача клієнтських параметрів для встановлення з’єднання.

Server Hello/Certificate — повідомлення від сервера з серверними параметрами для встановлення з’єднання і відправка серверного сертифікату клієнту для перевірки.

Certificate Request/Certificate — запит сервером клієнтського сертифіката.

Finished — повідомлення про завершення TLS-handshake з боку клієнта чи сервера.

Application data — передача зашифрованих даних між клієнтом і сервером.

Close notify — повідомлення про бажання закрити з’єднання.

Аналіз помилок TLS-handshake за допомогою Wireshark

Розглянемо кілька прикладів, які допомагають визначити проблеми в TLS-з’єднанні.

Від сервера приходить невалідний (непідписаний) сертифікат. Якщо сервер віддає клієнту такий сертифікат, клієнт розриває з’єднання. Причину можна визначити за допомогою Wireshark. Unknown CA

Прострочений сертифікат. Дуже часто в моїй практиці були випадки, коли TLS-з’єднання не відбувалось через те, що клієнт і сервер не могли знайти спільного шифру, які вони підтримують. Expired certificate

Якщо коротко, клієнт в повідомленні Client Hello передає список шифрів, які він підтримує. А сервер має обрати один із них. Якщо серверу не подобається жоден з запропонованих шифрів (наприклад, вони слабкі або просто не підтримуються сервером), сервер закриє з’єднання. Нижче наведу приклад нормального узгодження шифру.

В Client Hello клієнт відправляє свій список: Client Hello Cipher Suite В Server Hello сервер відправляє шифр, який йому найбільше підійшов: Server Hello Cipher Suites Нижче наведено приклад, коли сервер відразу завершує з’єднання після отримання повідомлення Сlient Hello, якщо йому не підходить жоден Сhiper Suite. Тоді необхідно додати якийсь спільний шифр для сервера або для клієнта. Chipher Suite fail Аналогічно можна визначити й інші проблеми в TLS-handshake (наприклад, проблеми з клієнтським сертифікатом, стара версія TLS-протоколу тощо.)

Отримання даних додатку у відкритому вигляді, якщо є доступ до серверного приватного ключа

Якщо у вас є серверний приватний ключ, Wireshark може розшифрувати трасу. Для цього необхідно зайти в Edit -> Preferences -> Protocols -> TLS. Wireshark properties

В RSA keys list задаємо IP-адресу TLS-сервера, порт, шлях до серверного сертифікату (я використовував формат PEM) та пароль, якщо є. Якщо Wireshark підтримує ваш протокол, він зможе його розпарсити, якщо ні — слід задати якийсь інший протокол (iso8583, наприклад, але бажано не http). RSA keys

Після цього замість Application Data у вікні Wireshark ви побачите просто кількість байтів, якщо Wireshark не зміг розпарсити ваш протокол. Decrypted message

В нижньому вікні можна побачити зашифрований пакет Application Data, а також розшифрований пакет TLS segment data.Data view

👍ПодобаєтьсяСподобалось6
До обраногоВ обраному11
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Если перхопыв трафик, как его потом лучше расшифровать? Например я могу узнать пароль, соседней вйфая соседа, и пароль его сети? Извините за возможно пространную формулировку, но я еще только учусь, и база у меня начальная. Было бы интересно узнать мнение ДоУ экспертов в этой области.

Например я могу узнать пароль, соседней вйфая соседа, и пароль его сети

Пароль WiFi дізнатись не вийде, для цього створені інші інструменти. Стандартно — після запуску Wireshark ви вибираєте мережу до якої хочете підключитись. Пароль його локальної мережі також не вийде дізнатись, Microsoft прикрили потенційні лазівки (іноді навіть аж занадто, наприклад — проблема з мережевим друком). Для того щоб щось перехоплювати від сусіда вам потрібно повторити схему, описану в статті — роздавати сигнал WiFi самому, переконати сусіда використовувати це підключення, та на пристрій з якого ви роздаєте поставити Wireshark

Альтернативою до Wireshark є Microsoft Network Monitor, але Wireshark мені подобається більше .

Microsoft Network Monitor

вiн працює на linux чи macos?

Я використовував Wireshark для пошуку дублюючих IP адрес в мережі, фільтр arp.duplicate-adress-detected. Також із Wireshark можна моніторити стан мережі по чорним рядках TCP. Також в мене була проблема коли не виходило відправляти завдання на друк з комп’ютера на Windows 10 на принтер підключений до комп’ютера з windows 11 . Тоді я моніторив обмін даних по протоколу msrpc. Там було дуже загальне повідомлення про помилку і не ясно було що робити

Отримання даних додатку у відкритому вигляді, якщо є доступ до серверного приватного ключа

Тут наведений приклад з RSA ключем. Зараз все частіше поширені інші шифри (а RSA-шифрам сканери вразливостей понижують оцінки): такі, що використовують механізм обміну ключами Діффі-Хеллмана. Відповідно DH- та ECDH- шифри не вдасться розшифрувати навіть маючи на руках приватний ключ.
Ця архітектура з Wi-Fi та Ethernet мережевими адаптерами є по суті реалізацією MitM атак. А ось згаданий для аналізу https зʼєднань Fiddler проксює зʼєднання, тому і дозволяє розшифрувати все, не залежно від шифрів

З DH- та ECDH згоден.
Проблема проксі у тому, що треба, як правило, налаштовувати з ембеддед пристрою підключення до них (змінювати IP і порт). А це не завжди можливо.
Ну і Fiddler здається вміє лише http-протокол. Але я тут можу помилятись. Давно ним не користувався. Якщо він потім нормально проксює кастомні протоколи поверх TCP, то ок.
mitmproxy наче вміє як шлюз працювати. Але то вже окремий тул. Ще є з stunnel варіант, якщо проксі. Я наче писав про нього, мабуть, теж редактор видалив. Використовую часто його.

Залишу тут посилання

www.stunnel.org

Якщо у вас є серверний приватний ключ

Бвахаха

А взагалі стаття цікава, думаю пойнт якраз що клієнт ембеддед і обмежений, бо все це дебажиться легко без перехоплення

Був правда кейс коли довелось розчехляти Wireshark коли дебажив VPN, пакети TLS дуже великі і зазвичай фрагментовані, якщо десь на шляху занадто тісно і нема PMTU можуть бути проблеми з TLS

Трохи модератор текст переробив. Я на початку писав 4 пункти, де було вказано, про доступ до серверного приватного ключа. 4 пункти скоротили. В проді, дійсно, такого бути не може. Це про тестові середовища.

Так, стаття саме про ембеддед девайси. В коментарях до минулої статті були запити, як отримати трафік з них.

Звісно, під дебагом питань немає — дуже легко. Хоча бувають теж нюанси. Інколи для ембеддед застосовується окрема ссл бібліотека під дану платформу і її немає можливості продебажити. Власне, з таким у нас в компанії стикались.

Ну тут жеж класіка

В тесті чи лабораторних умовах це звісно працює, але проблеми якраз найчастіше в якомусьхитронамученомузакрученому продакшені ж

Якщо це IoT, мабуть ще й десь серед якогось невідомоде куди і їхати то западло

Але то таке, стаття кльова всеодно, тут питань нема

Трохи модератор текст переробив.

Бісить це в ДОУ неймовірно. Кожен, блін, раз. Перепишуть, стаття виглядає неадекватно, автор в коментах виправдовується, зате ДОУ задоволене, що коми правильно розставлені.

Підписатись на коментарі