Новый вариант атаки 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 можно симулировать пакет с командами перенаправления звонка, получив который система отслеживания соединений в сетевом стеке включит проброс пакетов для любого выбранного атакующим порта, считая, что данный порт используется для обработки звонка.
Источники
править- Главная ссылка к новости (https://www.armis.com/resource...) (Архивная копия от 28 января 2021 на Wayback Machine)
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.