Новый вариант атаки NAT slipstreaming, позволяющей отправить запросы на внутренний IP

28 января 2021 года

Опубликован (Архивная копия от 28 января 2021 на Wayback Machine) новый вариант атаки NAT slipstreaming, позволяющей установить сетевое соединение от сервера атакующего к любому UDP или TCP порту на системе пользователя, открывшего подготовленную атакующем web-страницу в браузере. Атака даёт возможность атакующему отправить любые данные на любой порт пользователя, невзирая на применение на системе жертвы внутреннего диапазона адресов (192.168.x.x, 10.x.x.x), выход в сеть с которого напрямую закрыт и возможен только через транслятор адресов.

Принцип работы нового варианта атаки NAT slipstreaming (CVE-2021-23961, CVE-2020-16043) идентичен изначальному методу, отличия сводятся к использованию иных протоколов, которые для организации проброса через транслятор адресов или межсетевой экран обрабатываются механизмом отслеживания соединений ALG (Application Level Gateways). В первом варианте атаки для обмана ALG применялись манипуляции с протоколом SIP, в котором используется несколько сетевых портов (один для данных, а другой для управления). Второй вариант позволяет совершить подобные манипуляции с VoIP-протоколом H.323, в котором применяется TCP-порт 1720.

Кроме того, во втором варианте предложена техника обхода чёрного списка портов, недопустимых для использования с протоколом TURN (Traversal Using Relays around NAT), который применяется в WebRTC для взаимодействия двух хостов за разными NAT. TURN-соединения в WebRTC устанавливаются браузерами поверх TCP и могут быть адресованы любому сетевому порту. Указанная особенность позволяет применить атаку NAT slipstreaming не только к H.323, но и к любым другим комбинированным протоколам, таким как FTP и IRC, которые входят в список портов, обращение по HTTP к которым не допускается. Метод также позволяет обойти добавленную в браузеры защиту от первого варианта атаки NAT slipstreaming, основанную на запрещение HTTP-запросов к порту 5060 (SIP).

Проблема уже устранена в недавних выпусках Firefox 85, Chrome 87.0.4280.141, Edge 87.0.664.75 и Safari 14.0.3. Помимо связанных с протоколом H.323 сетевых портов в браузерах также заблокирована отправка HTTP, HTTPS и FTP-запросов на TCP-порты 69, 137, 161 и 6566. В ядре Linux функциональность conntrack-модуля ALG в netfilter отключена по умолчанию начиная с выпуска 4.14, т.е. по умолчанию трансляторы адресов на базе свежих ядер Linux проблеме не подвержены.

Например, OpenWRT проблеме не подвержен даже при установке пакетов с модулями ALG. При этом уязвимость проявляется в дистрибутиве VyOS, в котором применяется ядро Linux 4.14, но явно включён флаг nf_conntrack_helper, активирующий ALG для FTP и H.323. Проблема касается и многих потребительских маршрутизаторов, поставляемых со старыми ядрами Linux или меняющих настройки ALG. Возможность совершения атаки также подтверждена для устанавливаемых на предприятиях межсетевых экранов и трансляторов адресов на базе оборудования Fortinet (FG64, 60E), Cisco (csr1000, ASA) и HPE (vsr1000).

Напомним, что для проведения атаки NAT slipstreaming достаточно, чтобы жертва запустила подготовленный атакующим JavaScript-код, например, открыв страницу на сайте злоумышленника или просмотрев вредоносную рекламную вставку на легитимном сайте. Атака состоит из трёх этапов:

  • На первом этапе атакующий получает сведения о внутреннем адресе пользователя, который может быть определён при помощи WebRTC или, если WebRTC отключен, через перебор адресов с измерением времени отклика при запросе скрытого изображения (для существующих хостов попытка запроса картинки выполняется быстрее, чем для несуществующих за счёт таймаута перед возвращением ответа TCP RST).
  • На втором этапе определяются параметры фрагментации пакетов, для чего выполняемый в браузере жертвы JavaScript-код генерирует большой (не вмещающийся в один пакет) запрос HTTP POST на сервер атакующего, используя нестандартный номер сетевого порта для инициирования настройки параметров сегментирования TCP и размера MTU в TCP-стеке жертвы. В ответ сервер атакующего возвращает TCP-пакет с опцией MSS (Maximum Segment Size), определяющей максимальный размер принимаемого пакета. В случае UDP манипуляция похожа, но основана на отправке крупного запроса WebRTC TURN для вызова фрагментации на уровне IP.
  • На третьем этапе JavaScript-код генерирует и отправляет на TCP-порт 1720 (H.323) сервера атакующего специально подобранный HTTP-запрос (или TURN для UDP), который после фрагментации разделится на два пакета - первый включает HTTP-заголовки и часть данных, а второй образует корректный H.323-пакет, в котором указан внутренний IP жертвы. Суть в том, что, зная параметры фрагментации, можно отправить большой HTTP-запрос, хвост которого придётся на второй пакет. Попадающий во второй пакет хвост можно подобрать так, что он будет полностью соответствуют другому протоколу, для которого поддерживается обход NAT. В случае с H.323 можно симулировать пакет с командами перенаправления звонка, получив который система отслеживания соединений в сетевом стеке включит проброс пакетов для любого выбранного атакующим порта, считая, что данный порт используется для обработки звонка.

Источники

править


 
 
Creative Commons
Эта статья содержит материалы из статьи «Новый вариант атаки NAT slipstreaming, позволяющей отправить запросы на внутренний IP», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.