В данной статье речь пойдет про утилиту 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 систем обеспечения сетевой безопасности.

Комментарии (20)


  1. AntonAlekseevich
    01.09.2017 14:40
    -1

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


  1. krpl
    01.09.2017 16:10

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


    1. antgorka Автор
      01.09.2017 16:11
      +1

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


      1. rogoz
        01.09.2017 16:37
        +1

        Ну, OpenVPN по сути пакует IP/ethernet пакеты в UDP/TCP пакет. В ICMP не умеет, конечно. )


        1. lehnh
          01.09.2017 20:36

          Заблочить udp/tcp от openvpn по сигнатуре достаточно легко. лезть в payload к icmp уже не всякий будет


          1. wangyucn
            01.09.2017 21:15

            This is also true. Udp2raw has different signatures for different passwords.So you can use udp2raw to hide openvpn's signature.


          1. krpl
            01.09.2017 21:28

            Тогда есть GoVPN там сигнатур нет совсем, и даже есть режим постоянного битрейта, независимо от того передаются пользовательские данные или нет.


            1. wangyucn
              01.09.2017 21:39
              +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.


          1. ValdikSS
            02.09.2017 09:27

            В OpenVPN есть опция --tls-crypt, которая скрывает данные в control channel, и, соответственно, хендшейк.


      1. wangyucn
        01.09.2017 21:13

        Tcp mode OpenVPN has the performance issue i mentioned.

        Check this link for more details:

        github.com/wangyu-/udp2raw-tunnel#frequently-asked-questions


  1. wangyucn
    01.09.2017 20:37

    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.


  1. OmManiPadmeHum
    01.09.2017 20:37

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


    1. wangyucn
      01.09.2017 21:12

      As far as I know.TCP mode of SoftEther VPN also has the peformance issue i mentioned.

      Udp2raw turns udp packets into tcp packets by using raw socket,so it doesnt have similiar problem.

      Check this link for more details:

      github.com/wangyu-/udp2raw-tunnel#frequently-asked-questions


  1. antgorka Автор
    01.09.2017 21:16

    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.


    1. wangyucn
      01.09.2017 21:49
      +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: )


      1. wangyucn
        01.09.2017 22:08

        By the way,the second picture seems like to be linked to a wrong URL.

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


        1. antgorka Автор
          01.09.2017 22:15

          Fixed. Thanks!


  1. ClausMark
    01.09.2017 21:39

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


    1. antgorka Автор
      01.09.2017 21:56

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


      1. ClausMark
        01.09.2017 21:57

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