Рефера т на тему TLS. Обмен ключами в tls обмен ключами в tls
Скачать 0.62 Mb.
|
Обмен ключами в TLS Обмен ключами в TLS-рукопожатии RSA облегчает обмен ключами, позволяя клиенту шифровать общий секрет и отправлять его на сервер, где он используется для вычисления соответствующего сеансового ключа. Обмен ключами DH на самом деле вообще не требует обмена открытым ключом, скорее обе стороны создают ключ вместе. 57 Сообщение сервера Hello Retry Request Если в сообщении Client Hello недостаточно данных для продолжения рукопожатия, сервер может отправить сообщение Hello Retry Request, требующее прислать исправленное Client Hello с указанным ключевым материалом. При этом сервер может включить в Hello Retry Request необязательное расширение cookie [2]. Клиент должен скопировать это расширение в своем повторном Client Hello. Как указано в спецификации, cookie преследует две основные цели: Заставляет клиента продемонстрировать достижимость на сетевом адресе (обеспечивая защиту от DoS-атак). Это прежде всего полезно для транспорта, не ориентированного на соединения. Позволяет серверу не сохранять состояние сеанса. Поскольку первое сообщение Client Hello (точнее, его хеш) участвует в криптографических вычислениях, сервер должен где-то его хранить. Вместо этого сервер может выгрузить эти данные клиенту, включив их в расширение cookie, а клиент вернет его в ответном сообщении. 58 Расшифровываем зашифрованную часть процесса установки соединения в TLS 1.3 https://habr.com/ru/post/253521/ Одна из проблем с тем, как работает Wireshark, заключается в невозможности легко проанализировать зашифрованный трафик, вроде TLS. Раньше вы могли указать Wireshark приватные ключи, если они у вас были, и расшифровывать трафик на лету, но это работало только в том случае, если использовался исключительно RSA. Эта функциональность сломалась из-за того, что люди начали продвигать совершенную прямую секретность (Perfect Forward Secrecy), и приватного ключа стало недостаточно, чтобы получить сессионный ключ, который используется для расшифровки данных. Вторая проблема заключается в том, что приватный ключ не должен или не может быть выгружен с клиента, сервера или HSM (Hardware Security Module), в котором находится. Из-за этого, мне приходилось прибегать к сомнительным ухищрениям с расшифровкой трафика через man-in-the-middle 59 Wireshark фильтр по IP самый простой фильтр в Wireshark – это IP адрес устройства (хоста, host) и выглядит этот фильтр следующим образом: host 10.10.10.1 В случае если проблема глобальнее и нам необходимо захватить трафик с отдельной подсети независимо от направления его передачи, то применяем фильтр: net 192.168.0.0/24 или net 192.168.0.0 mask 255.255.255.0 При захвате трафика от подсети фильтр будет выглядеть вот так: src net 192.168.0.0/24 или src net 192.168.0.0 mask 255.255.255.0 А если надо увидеть для анализа только приходящий трафик в нашу подсеть, то любой из фильтров: dst net 192.168.0.0/24 dst net 192.168.0.0 mask 255.255.255.0 Если пользователь жалуется, что у него не открываются странице в браузере, проблема может быть с DNS сервером (порт 53) или с протоколом HTTP (порт 80), тогда захватываем трафик с использованием фильтра «порт»: port 53 Если мы решили захватить весь трафик для конкретного сервера без учета HTTP и FTP, то фильтр настраивается по любому из этих двух примеров: host 192.168.0.1 and not (port 21 or port 80) host 192.168.0.1 and not port 21 and not port 80 Если мы хотим видеть весь трафик на порту, кроме трафика DNS, FTP, ARP, то логика будет аналогичной: port not dns and not 21 and not arp При захвате трафика приложений, которые используют динамические порты из определенного диапазона, то фильтр будет сложно выглядеть в случае, если версия Libcap ниже чем 0.9.1: (tcp[0:2] > 1500 and tcp[0:2] < 1550) or (tcp[2:2] > 1500 and tcp[2:2] < 1550) если версии более поздние, то фильтр будет менее угрожающим и понятным: tcp portrange 1501-1549 Для захвата кадров Ethernet типа EAPOL (Протокол передачи EAP-сообщений в стандарте 802.1x называется EAPOL (EAP encapsulation over LAN) ): ether proto 0x888e Если необходимо захватить трафик определенного IP протокола, то можно использовать фильтр: ip proto tcp – захват TCP трафика ip proto udp – захват UDP трафика Для захвата IP трафика применяется самый короткий фильтр: ip Для захвата только unicast трафика при анализе трафика исходящего и приходящего к сетевому устройству используется фильтр в таком формате: not broadcast and not multicast Простые фильтры, о которых мы поговорили, можно объединять с помощью не сложных символов: Отрицание: ! Или not Объединение: && или and Чередование: II или or Пример: для захвата трафика от или к устройству с адресом 10.10.10.10, но не из сети 192.168.0.0 фильтр получится объединением с отрицанием: host 10.10.10.10 && !net 192.168 Фильтры на основе байтов смещения являются самыми мощными и существенно упрощают жизнь, но для их использования надо знать протокол и размещение искомых полей в пакете. Приведенные ниже примеры фильтров позволят захватить пакеты с определенным значением поля в заголовках или полезной нагрузке. Настроить их несложно: ip[8] = 1 Смещаемся на восемь байт в IP пакете и захватываем трафик со значением TTL =1 tcp[0:2] = 80 Захватываем все пакеты TCP с адресом порта отправителя 80. Это эквивалент фильтру src port 80. Фильтры по IP-адресу: ip.addr == 192.168.10.0/24 !(ip.addr == 192.168.10.1) ip.src == 192.168.22.11 && ip.dst == 192.168.14.15 ip.addr => 172.16.1.14 && ip.addr <= 172.16.1.16 Фильтры по DNS-имени: tcp contains "vmblog.ru" http.host == "report.vmblog.ru" (поиск точного значения в заголовках http) http.host contains "vmblog.ru" (поиск содержимого в заголовках http) http.host (все запросы с полем host в заголовке http) Фильтры по портам TCP или UDP: tcp.port == 443 tcp.dstport == 80 udp.srcport == 53 tcp.dstport>=8000 && tcp.dstport<=8180 Фильтры для протокола DHCP: udp.dstport == 67 bootp.option.dhcp Фильтры по MAC адресу: eth.src == 01:2b:2a:a2:aa:22 eth.dst == 01:2b:2a:a2:aa:22 Фильтры по содержимому: http.content_type contains "jpeg" http.content_type contains "image" http.content_type contains "xml" http.request.uri contains "rar" Фильтры для ICMP: icmp icmp.type==0 (ответы на ping) icmp.type==3 (ошибки недоступности) Фильтры заголовков HTTP: http.content_type == "text/plain" (по значению поля content type) http.request.method == "POST" http.request.method == "GET" http.response.code == 404 (по коду ответа) http.response.code != 200 (по коду ответа) http.server == "nginx" (по значению поля server) Фильтры для анализа SIP-трафика: sip rtp rtcp rtpevent udp.srcport >= 10000 && udp.srcport <= 20000 udp.port == 5060 || tcp.port == 5060 64. 63 Информация о хосте из трафика DHCP Любой хост, генерирующий трафик в вашей сети, должен иметь три идентификатора: MAC-адрес, IP-адрес и имя хоста. В большинстве случаев оповещения о подозрительной активности основаны на IP-адресах. Если у вас есть доступ к полному захвату пакетов вашего сетевого трафика, то полученные pcap-файлы наряду с внутренним IP-адресом также будут содержать информацию о связанном MAC-адресе и имени хоста. Как же нам добыть эту информацию, используя Wireshark? Для этого нам необходимо использовать фильтр по одному из видов сетевой активности: DHCP или NBNS. Трафик DHCP может помочь идентифицировать хосты практически для любого типа компьютеров, подключенных к вашей сети. Трафик NBNS генерируется в основном компьютерами под управлением Microsoft Windows или хостами Apple под управлением MacOS. Первый тренировочный pcap-файл «host-and-user-ID-pcap-01.pcap» для нашего практического руководства доступен для скачивания по этой ссылке: https://www.malware-traffic-analysis.net/training/host-and-user-ID.html (все остальные файлы мы также берем отсюда). Он содержит информацию о трафике для внутреннего IP-адреса «172.16.1.207». Открыв pcap-файл в Wireshark и применив фильтр «bootp», как показано на рисунке 1, вы получите отображение трафика DHCP. Обратите внимание, что, если вы используете новую версию Wireshark 3.0, то в качестве поискового запроса вам следует использовать значение «dhcp» вместо «bootp». Отфильтровываем трафик DHCP в Wireshark Рисунок 1: Отфильтровываем трафик DHCP в Wireshark Выберите один из пакетов, который обозначен как DHCP-запрос («DHCP Request») в информационном столбце. Перейдите в раздел с детальной информацией о пакете и разверните пункт меню «Bootstrap Protocol (Request)», как показано на рисунке 2. Необходимая нам информация находится в подпунктах «Client Identifier» и «Host Name», что проиллюстрировано на рисунке 3. В подробной информации об идентификаторе клиента должен быть указан MAC-адрес, соответствующий IP-адресу «172.16.1.207», ну а сведения об имени хоста должны, как следует из названия, откроют нам имя хоста. Разворачиваем пункт меню «Bootstrap Protocol (Request)» для DHCP-запроса Рисунок 2: Разворачиваем пункт меню «Bootstrap Protocol (Request)» для DHCP-запроса Находим MAC-адрес и имя хоста в запросе DHCP Рисунок 3: Находим MAC-адрес и имя хоста в запросе DHCP В нашем практическом примере имя хоста для IP-адреса «172.16.1.207» — это «Rogers-iPad», а MAC-адрес — это «7c:6d:62:d2:e3:4f». Этот MAC-адрес зарегистрирован за корпорацией Apple, как производителя данного сетевого устройства. Судя по имени хоста, это устройство, скорее всего, является планшетом Apple iPad, но точно утверждать это, опираясь только на имя хоста, мы не можем. Мы можем легко сопоставить MAC-адрес и IP-адрес для любого пакета с источником «172.16.1.207», как это показано на рисунке 4. Сопоставление MAC-адреса с IP-адресом для любого пакета Рисунок 4: Сопоставление MAC-адреса с IP-адресом для любого пакета |