Маскировка UDP трафика в TCP/ICMP при помощи udp2raw



    В данной статье речь пойдет про утилиту udp2raw, которая позволяет обходить межсетевые экраны, настроенные на блокировку протокола UDP, используя RAW сокеты, а также туннелировать любые другие протоколы при работе в связке с OpenVPN.

    Обзор возможностей


    Официальный сайт инструмента

    На нем же представлена схема работы утилиты



    Их схемы становится ясно, что инструмент состоит из клиента и сервера, причем второй требуется разместить за межсетевым экраном. Другие утилиты для туннелирования трафика, как правило, требуют то же самое, например, reGeorg, работа которой описана в другой моей статье на defcon.ru.

    Один сервер может обслуживать одновременно несколько клиентов, а один клиент несколько UDP соединений через один RAW сокет.

    Вы можете использовать udp2raw как для Linux (включая Android, OpenWRT, Raspberry PI) с правами root, так и для Windows и MacOS, правда, в довольно специфическом виде — в виде образа виртуальной машины. Но образ виртуальной машины занимает всего 4.4 МБ, так что это вполне применимо.

    В базовом виде udp2raw может добавлять фейковые ICMP/TCP заголовки к сетевым пакетам, тем самым заставляя межсетевой экран считать их пакетами соответствующих сетевых протоколов, а не UDP.

    В режиме FakeTCP, udp2raw симулируем трехсторонний TCP handshake при установке соединения и затем поддерживает корректную установку SYN/ACK флагов непосредственно при передаче данных.

    udp2raw может использоваться и как вспомогательный инструмент для стабилизации соединения, защиты от replay атаки (anti-replay window) или просто для шифрования трафика (AES-128-CBC) в режиме обычного UDP туннеля. В этом случае фейковые ICMP/TCP заголовки к пакетам добавляться не будут.

    Так же возможно использование udp2raw в связке с OpenVPN, что позволяет использовать udp2raw для туннелирования не только UDP трафика. Схема работы представлена ниже



    Для конкретно этого случая есть отдельная несложная инструкция на гитхабе разработчика.

    Практический пример


    Для начала работы с udp2raw в Linux скачиваем архив с github

    wget https://github.com/wangyu-/udp2raw-tunnel/releases/download/20170826.0/udp2raw_binaries.tar.gz

    и распаковываем

    root@kalix64:~/tunneling/udp2raw# tar -xvzf udp2raw_binaries.tar.gz 
    udp2raw_amd64
    udp2raw_mips34kc
    udp2raw_arm
    udp2raw_amd64_hw_aes
    udp2raw_arm_asm_aes
    udp2raw_mips34kc_asm_aes
    udp2raw_x86
    udp2raw_x86_asm_aes

    Клиент и сервер представляют из себя одно и то же приложение. Различаться будут только ключи при запуске

    usage:
    run as client : ./this_program -c -l local_listen_ip:local_port -r server_ip:server_port  [options]
    run as server : ./this_program -s -l server_listen_ip:server_port -r remote_ip:remote_port  [options]

    Предположим, что в сети есть Windows машина с активированным SNMP сервисом и шлюз, блокирующий UDP пакеты, но разрешающий TCP доступ к Windows машине.

    Злоумышленнику удалось получить доступ со своей Kali Linux машины к шлюзу и разместить там udp2raw сервер. Если злоумышленник попытается напрямую подключиться к Windows машине на UDP порт 161, то ничего не выйдет.



    Тогда он может воспользоваться udp2raw, чтобы спрятать природу SNMP пакетов от межсетевого экрана, запустив на шлюзе

    ./udp2raw_amd64 -s -l 0.0.0.0:5555 -r 192.168.2.2:161  -a -k "snmptunnel" --raw-mode faketcp
    



    И на Kali машине

    ./udp2raw_amd64 -c -l 0.0.0.0:4444  -r 192.168.1.5:5555 -a -k "snmptunnel" --raw-mode faketcp
    



    Теперь злоумышленник может получать доступ к SNMP сервису удаленной машины через зашифрованный туннель так



    При этом в Wireshark будет виден только TCP трафик



    Если использовать ICMP заголовки, то в Wireshark мы увидим следующее



    Если проверить трафик на стороне шлюза, то будет видно, что Windows машине отсылаются самые обыкновенные SNMP UDP пакеты



    В заключении


    Дополнительно можно ускорить работу туннеля, используя kcptun, а так же ознакомиться с другими инструментами для туннелирования трафика: reGeorg, dnscat2, icmptunnel и другими.

    В случае использования udp2raw злоумышленником, подобные аномалии в корпоративной сети могут быть обнаружены при помощи IDS, IPS и DPI систем обеспечения сетевой безопасности.
    Pentestit
    Информационная безопасность
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 20

      –1

      Отличная статья. теперь буду знать как это делается!

        0
        А зачем так сложно? Ведь уже давно есть OpenVPN и ещё десятки других VPN…
          +1

          udp2raw позволяет "упаковать" UDP пакеты (от того же OpenVPN и любого другого UDP сервиса) в TCP или ICMP пакеты, которые не блокирует межсетевой экран или система IPS.

            +1
            Ну, OpenVPN по сути пакует IP/ethernet пакеты в UDP/TCP пакет. В ICMP не умеет, конечно. )
              0
              Заблочить udp/tcp от openvpn по сигнатуре достаточно легко. лезть в payload к icmp уже не всякий будет
                0
                This is also true. Udp2raw has different signatures for different passwords.So you can use udp2raw to hide openvpn's signature.
                  0
                  Тогда есть GoVPN там сигнатур нет совсем, и даже есть режим постоянного битрейта, независимо от того передаются пользовательские данные или нет.
                    +1
                    Thanks for the info of GoVPN,I just checked their website,its indeed an awesome tool.

                    TCP mode is not suggested on their website,they said:

                    “TCP is more resource hungry. Moreover because of packet loss and TCP reliability it can lead to 'meltdown' effect: significant performance loss of underlying TCP connections. Generally TCP is not advisable for VPNs, but it can help with some nasty firewalls.”

                    Udp2raw can bypass this 'meltdown' effect.

                    Udp2raw is not designed for replacing VPNs,instead it can be used with VPN together,to bypass udp firewalls while not having performance issues.
                    0
                    В OpenVPN есть опция --tls-crypt, которая скрывает данные в control channel, и, соответственно, хендшейк.
                  0
                  Tcp mode OpenVPN has the performance issue i mentioned.

                  Check this link for more details:

                  github.com/wangyu-/udp2raw-tunnel#frequently-asked-questions
                0
                First of all,OpenVPN doesnt have an icmp mode.

                Second.TCP doesnt allow real-time/out-of-order delivery.If you use OpenVPN tcp mode to tunnel udp,there will be peformance issue: one packet loss blocks every following packet until re-transmit is done.

                In a penetration test,this performance issue is not a big deal,but if you use OpenVPN tcp mode for gaming or file transfer,this will cause serious problem.

                  0
                  SoftEther VPN много чего умеет. )
                  0

                  By the way, wangyucn is the developer of udp2raw as I understand, so you may clarify all the details about the tool right here. I just want to tell "Thanks" to him.

                    +3
                    Yes.I am the developer. You are very welcome,dude.And thanks for sharing this tool.

                    I m not a Russian speaker.I saw some interesting discussions here by using google translate,so I created an account.Sorry i can only reply with English,because google translate sometimes can produce very poor results: )
                      0
                      By the way,the second picture seems like to be linked to a wrong URL.

                      I meant the picture below 'Так же возможно использование udp2raw в связке с OpenVPN, что позволяет использовать udp2raw для туннелирования не только UDP трафика. Схема работы представлена ниже'
                        0

                        Fixed. Thanks!

                    0
                    Спасибо за обзор инструмента.
                    А постоянная установка TCP-сессий не будет сказываться на следующих показателях?
                    а) скорости передачи
                    б) нагрузке CPU (для обхода блокировок маловероятно, никто не будет гонять большой трафик по такой схеме, но всё же).
                    В случае инкапсуляции трафика в TCP стоит изначально задавать tcp-window сильно больше стандартного значения. Окно, конечно, постепенно увеличивается, но при синхронной обработке сервером таких запросов это может пагубно сказаться.
                      0

                      На официальном гитхабе представлены некоторые тесты производительности. Можете изучить.

                        0
                        Ого, не обратил внимание. Спасибо!

                    Only users with full accounts can post comments. Log in, please.