PolarProxy для расшифровки трафика без поля SNI

Вопрос или проблема

Я попробовал PolarProxy для дешифрования трафика от вредоносного ПО и перенаправления трафика на поддельный сервер. Я следовал руководству по PolarProxy и INetSim. Я использовал PolarProxy на виртуальной машине Ubuntu и приложение с TLS на виртуальной машине Windows.
https://www.netresec.com/?page=Blog&month=2019-12&post=Installing-a-Fake-Internet-with-INetSim-and-PolarProxy

Согласно руководству, для виртуальной машины с PolarProxy я использую следующую команду:

$ sudo iptables -t nat -A PREROUTING -i <Ex. enp0s8> -p tcp --dport 443 -j REDIRECT --to 10443
$ sudo ./PolarProxy_1-0-0_linux-x64/PolarProxy -v -p 10443,80,80 -x polarproxy.cer --certhttp 10080 --pcapoverip 57012 -o . --terminate --connect <IP для Fakenet VM> --nosni nosni.polarproxy

Затем, с командами, как следующие на зараженной машине, PolarProxy работает правильно, дешифруя трафик и отправляя его на Fakenet VM.

$ curl.exe --insecure --resolve hello.com:443:<IP для PolarProxy VM> https://hello.com

Однако я заметил, что PolarProxy определяется сервер, на который нужно перенаправлять трафик, путем проверки поля SNI. Таким образом, он выдает ошибки для команд, как следующие, когда зараженная машина напрямую общается с IP, не указывая имя сервера:

$ curl.exe --insecure https://<IP для PolarProxy VM>

Примеры ошибок:

<4>[10443] Прозрачный TLS прокси System.IO.IOException (0x80131620) : Невозможно определить размер кадра или был получен поврежденный кадр.

<4>[10443] Прозрачный TLS прокси Сокет ошибка код HostNotFound System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (0x00000005) : Имя или служба не известны

Поэтому мне интересно, существуют ли инструменты/способы обойти эту проблему для приложений, которые не используют DNS/имя сервера и напрямую соединяются, используя указанный IP? Интересно, есть ли способы, чтобы PolarProxy перенаправлял весь расшифрованный и фиксированный трафик на указанный IP.

Не знаю, нужны ли мне инструменты, которые могут добавить SNI или что-то подобное. (Также для зараженных машин Windows на VMware изменение шлюза по умолчанию на виртуальную машину PolarProxy вызывает некоторые сетевые проблемы, поэтому это, похоже, не решение для меня.)

Спасибо!

Ответ или решение

PolarProxy — это инструмент, который может эффективно анализировать и дешифровать TLS-трафик с целью его последующего анализа и направления на "фальшивый" сервер, как это делается в сценариях, связанных с анализом вредоносного ПО. Однако использование PolarProxy в ситуациях, когда отсутствует поле Server Name Indication (SNI), может вызвать ряд сложностей. В данной ситуации инструменты и настройки ориентированы на использование SNI для выбора правильного конечного сервера, что становится проблемой, когда запросы отправляются напрямую на IP-адрес.

Теория: Описание проблемы и контекст

SNI (Server Name Indication) – это расширение TLS, которое позволяет клиенту указать доменное имя целевого сервера в процессе инициации защищенного соединения. PolarProxy, как и многие другие инструменты подобного рода, использует SNI для проверки и определения того, на какой сервер следует направить трафик. Однако, когда трафик направляется напрямую на IP без использования доменного имени, PolarProxy может испытывать трудности в определении конечной точки передачи, что выливается в ошибки подобные "Cannot determine the frame size" и "Name or service not known".

Пример: Сценарий использования

В вашем случае PolarProxy эффективно работал, когда вы использовали доменное имя (например, hello.com), направляя трафик на ваш VM. Это происходит потому, что в этих случаях в клиентских запросах присутствует SNI, которое PolarProxy может использовать для маршрутизации. Однако при выполнении команды, которые не используют доменное имя, такие как curl.exe --insecure https://<IP for PolarProxy VM>, это уже не работает.

Применение: Решения и обходные пути

  1. Добавление псевдо-SNI: Один из способов обойти это ограничение – внедрение псевдо-SNI в ваше трафиковое соединение, таким образом позволяя PolarProxy правильно обрабатывать трафик. Для этого может понадобиться написать скрипт или использование промежуточного прокси, который будет добавлять необходимое SNI к соединениям, не содержащим его.

  2. Настройка PolarProxy для поддержки IP-базированной маршрутизации: Если внесение изменений в трафиковый поток не является возможным, исследуйте возможность настройки PolarProxy для маршрутизации на основе IP адресов. Хотя это может потребовать глубокого понимания работы инструмента и, возможно, изменения его исходного кода.

  3. Использование другого инструмента/инструментов: Если ни одно из вышеописанных решений не подходит, рассмотрите возможность использования других инструментов для декодирования и маршрутизации трафика, которые могут лучше обрабатывать запросы без SNI. Это может потребовать больше времени на изучение и освоение, но может обеспечить необходимую функциональность.

  4. Фиктивное добавление SNI с помощью локального пересылочного сервера: Вы можете установить локальный промежуточный мета-прокси сервер на Ubuntu VM, который будет обрабатывать входящие IP-запросы и добавлять к ним необходимое SNI. Это может быть настроено с использованием инструментов, таких как HAProxy или nginx, сконфигурированные соответствующим образом для пересылки HTTP-запросов.

  5. Мониторинг и логирование: Чтобы понять точные причины и сценарии, провоцирующие ошибки, настройте детальное логирование в PolarProxy и источниках, генерирующих трафик. Это позволит увидеть, на каком этапе происходят сбои и какие запросы их вызывают.

Выводы

Работа с сетевыми инструментами, такими как PolarProxy, в условиях отсутствия SNI требует творческого и технического подхода. Вам может потребоваться рассмотреть альтернативные маршрутизационные методы или использовать дополнительные инструменты для маршрутизации IP-трафика. Понимание внутренней работы TLS и гибкость в применении различных инструментов автотестирования трафика — ключевые навыки, которые помогут решить данную задачу.

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

Капча загружается...