Опубликован новый вариант атаки NAT slipstreaming

Новый вариант атаки NAT slipstreaming, позволяющей установить сетевое соединение от сервера атакующего к любому UDP или TCP порту на системе пользователя, открывшего подготовленную атакующим web-страницу в браузере.

3 мин
Автор PINTA IT
Опубликован новый вариант атаки NAT slipstreaming

Атака даёт возможность атакующему отправить любые данные на любой порт пользователя, невзирая на применение на системе жертвы внутреннего диапазона адресов (192.168.x.x, 10.x.x.x), выход в сеть с которого напрямую закрыт и возможен только через транслятор адресов.

NAT Slipstreaming v2.0: New Attack Variant Can Expose All Internal Network Devices to The Internet | Armis
Armis and security researcher Samy Kamkar identify NAT Slipstreaming v2.0, a new Attack Variant That Can Expose All Internal Network Devices to The Internet.

Принцип работы нового варианта атаки 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 могут быть устанавлены браузерами не только для UDP, но и поверх TCP, и адресованы любому сетевому TCP-порту. Указанная особенность позволяет применить атаку NAT slipstreaming не только к H.323, но и к любым другим комбинированным протоколам, таким как FTP и IRC, которые входят в список портов, обращение по HTTP к которым не допускается, но не включены в список запрещённых портов для TURN. Метод также позволяет обойти добавленную в браузеры защиту от первого варианта атаки 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 можно симулировать пакет с командами перенаправления звонка, получив который система отслеживания соединений в сетевом стеке включит проброс пакетов для любого выбранного атакующим порта, считая, что данный порт используется для обработки звонка.