Атака NAT slipstreaming для отправки запросов на внутренний IP
10 ноября 2020 года
Сами Камкар (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.
Источники
правитьЛюбой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.