Атака NAT slipstreaming для отправки запросов на внутренний IP

Сами Камкар (Samy Kamkar), исследователь безопасности, известный созданием различных замысловатых устройств для проведения атак, таких как кейлоггер в USB-зарядке телефона, представил новую технику атаки "NAT slipstreaming". Атака позволяет при открытии страницы в браузере организовать соединение сервера атакующего с любым портом UDP или TCP на системе пользователя, находящейся за транслятором адресов. Инструментарий для проведения атаки опубликован на GitHub.

Метод основан на обмане механизма отслеживания соединений ALG (Application Level Gateways) в трансляторах адресов или межсетевых экранах, который применяется для организации проброса через NAT протоколов, в которых используется несколько сетевых портов (один для данных, а другой для управления), таких как SIP, H323, IRC DCC и FTP. Атака применима к пользователям, выходящим в сеть с использованием внутренних адресов из интранет диапазона (192.168.x.x, 10.x.x.x) и позволяет отправить на любой порт любые данные (без заголовков HTTP).

Для проведения атаки достаточно, чтобы жертва запустила подготовленный атакующим JavaScript-код, например, открыв страницу на сайте злоумышленника или просмотрев вредоносную рекламную вставку на легитимном сайте. На первом этапе атакующий получает сведения о внутреннем адресе пользователя, который может быть определён при помощи WebRTC или, если WebRTC отключен, через пепребор адресов с измерением времени отклика при запросе скрытого изображения (для существующих хостов попытка запроса картинки выполняется быстрее, чем для несуществующих за счёт таймаута перед возвращением ответа TCP RST).

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

Основная идея в том, что, зная параметры фрагментации, затем можно отправить большой HTTP-запрос, хвост которого придётся на второй пакет. При этом попадающий во второй пакет хвост подобран так, что не содержит HTTP-заголовков и отсекается на данных, которые полностью соответствуют другому протоколу, для которого поддерживается обход NAT.

На третьем этапе, при помощи вышеописанной манипуляции с хвостом HTTP-запроса (или TURN для UDP), JavaScript-код генерирует корректный SIP-пакет, в котором указан внутренний IP жертвы, и отправляет его на TCP-порт 5060 сервера атакующего. Система отслеживания соединений в сетевом стеке определит данный пакет как начало сеанса по протоколу SIP и включит проброс пакетов для любого выбранного атакующим порта, считая, что данный порт используется для канала передачи данных.

0_1604987386.png

Атака может быть совершена независимо от используемого браузера. Для решения проблемы разработчики Mozilla предложили заблокировать возможность отправки HTTP-запросов на сетевые порты 5060 и 5061, связанные с протоколом SIP. Аналогичную меру защиты также намерены реализовать разработчики Chromium и движка Blink.

Дата: 2020-11-10 08:04:41

Источник: https://www.opennet.ru/opennews/art.shtml?num=54058