28.11.2020

Атака 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 и включит проброс пакетов для любого выбранного атакующим порта, считая, что данный порт используется для канала передачи данных.

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

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

Добавить комментарий