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

Discussion in 'Мировые новости. Обсуждения.' started by Suicide, 10 Nov 2020.

  1. Suicide

    Suicide Super Moderator
    Staff Member

    Joined:
    24 Apr 2009
    Messages:
    2,373
    Likes Received:
    6,619
    Reputations:
    693
    Сами Камкар (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.

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

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

     
    CyberTro1n, alexzir, fandor9 and 3 others like this.