Выбрать главу

– блокировать входящие/исходящие соединения с портами и/или IP-адресами внешней сети, заданными администратором.

Фактически роль брандмауэра сводится к ограждению корпоративной сети от всяких любопытствующих, блуждающих по просторам инета. Тем не менее, прочность этого ограждения только кажущаяся. Если клиент корпоративной сети использует уязвимую версию браузера или клиента электронной почты (а большая часть программного обеспечения уязвима!), атакующему достаточно заманить его на троянизированную WEB-страничку или послать ему письмо с вирусом внутри, и через короткое время локальная сеть окажется поражена. Даже если исходящие соединения из корпоративной сети запрещены, shell-код сможет воспользоваться уже установленным TCP-соединением, через которое он был заброшен на атакованный узел, передавая хакеру управление удаленной системой.

Брандмауэр может и сам являться объектом атаки, ведь он, как и всякая сложная программа, не обходится без дыр и уязвимостей. Дыры в брандмауэрах обнаруживаются практически каждый год и далеко не сразу затыкаются (особенно если брандмауэр реализован на «железном» уровне). Забавно, но плохой брандмауэр не только не увеличивает, но даже ухудшает защищенность системы (в первую очередь это относится к персональным брандмауэрам, популярность которых в последнее время необычайно высока).

Обнаружение и идентификация брандмауэра

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

Большинство брандмауэров отбрасывают пакеты с истечением TTL (Time To Live – время жизни), блокируя тем самым трассировку маршрута, чем разоблачают себя. Аналогичным образом поступают и некоторые маршрутизаторы, однако, как уже говорилось выше, между маршрутизатором и пакетным фильтром нет принципиальной разницы.

Отслеживание маршрута обычно осуществляется утилитой traceroute, поддерживающей трассировку через протоколы ICMP и UDP, причем ICMP блокируется гораздо чаще. Выбрав узел, заведомо защищенный брандмауэром (например, www.intel.ru), попробуем отследить к нему маршрут командой traceroute –I wwww.intel.ru.

$traceroute –I wwww.intel.ru

Трассировка маршрута к bouncer.glb.intel.com [198.175.98.50]

с максимальным числом прыжков 30:

1 1352 ms 150 ms 150 ms 62.183.0.180

2 140 ms 150 ms 140 ms 62.183.0.220

3 140 ms 140 ms 130 ms 217.106.16.52

4 200 ms 190 ms 191 ms aksai-bbn0-po2-2.rt-comm.ru [217.106.7.25]

5 190 ms 211 ms 210 ms msk-bbn0-po1-3.rt-comm.ru [217.106.7.93]

6 200 ms 190 ms 210 ms spb-bbn0-po8-1.rt-comm.ru [217.106.6.230]

7 190 ms 180 ms 201 ms stockholm-bgw0-po0-3-0-0.rt-comm.ru [217.106.7.30]

8 180 ms 191 ms 190 ms POS4-0.GW7.STK3.ALTER.NET [146.188.68.149]

9 190 ms 191 ms 190 ms 146.188.5.33

10 190 ms 190 ms 200 ms 146.188.11.230

11 311 ms 310 ms 311 ms 146.188.5.197

12 291 ms 310 ms 301 ms so-0-0-0.IL1.DCA6.ALTER.NET [146.188.13.33]

13 381 ms 370 ms 371 ms 152.63.1.137

14 371 ms 450 ms 451 ms 152.63.107.150

15 381 ms 451 ms 450 ms 152.63.107.105

16 370 ms 461 ms 451 ms 152.63.106.33

17 361 ms 380 ms 371 ms 157.130.180.186

18 370 ms 381 ms 441 ms 192.198.138.68

19 * * * Превышен интервал ожидания для запроса.

20 * * * Превышен интервал ожидания для запроса.

Смотри: трассировка доходит до узла 192.198.138.68, а затем умирает, что указывает либо на брандмауэр, либо на недемократичный маршрутизатор. Чуть позже мы покажем, как можно проникнуть сквозь него, а пока выберем для трассировки другой узел, например, www.zenon.ru

$traceroute –I www.zenon.ru

Трассировка маршрута к distributed.zenon.net [195.2.91.103]

с максимальным числом прыжков 30:

1 2444 ms 1632 ms 1642 ms 62.183.0.180

2 1923 ms 1632 ms 1823 ms 62.183.0.220

3 1632 ms 1603 ms 1852 ms 217.106.16.52

4 1693 ms 1532 ms 1302 ms aksai-bbn0-po2-2.rt-comm.ru [217.106.7.25]

5 1642 ms 1603 ms 1642 ms 217.106.7.93

6 1562 ms 1853 ms 1762 ms msk-bgw1-ge0-3-0-0.rt-comm.ru [217.106.7.194]

7 1462 ms 411 ms 180 ms mow-b1-pos1-2.telia.net [213.248.99.89]

8 170 ms 180 ms 160 ms mow-b2-geth2-0.telia.net [213.248.101.18]

9 160 ms 160 ms 170 ms 213.248.78.178

10 160 ms 151 ms 180 ms 62.113.112.67

11 181 ms 160 ms 170 ms css-rus2.zenon.net [195.2.91.103]

Трассировка завершена.

На этот раз трассировка проходит нормально. Выходит, что никакого брандмауэра вокруг zenon'а нет? Очень может быть, но для уверенного ответа нам требуется дополнительная информация. Узел 195.2.91.193 принадлежит сети класса С (три старших бита IP-адреса равны 110), и, если эта сеть не защищена брандмауэром, большинство ее узлов должно откликаться на ping, что в данном случае и происходит. Сканирование выявляет 65 открытых адресов. Следовательно, либо маршрутизатора здесь нет, либо он беспрепятственно пропускает наш ping.

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

Утилита nmap позволяет обнаруживать некоторые из брандмауэров, устанавливая статут порта во «firewalled». Такое происходит всякий раз, когда в ответ на SYN удаленный узел возвращает ICMP-пакет типа 3 с кодом 13 (Admin Prohibited Filter) с действительным IP-адресом брандмауэра в заголовке (nmap его не отображает; пиши собственный сканер или, используя любой снифер, самостоятельно проанализируй возвращаемый пакет). Если возвратится SYN/ACK – сканируемый порт отрыт. RST/ACK указывает на закрытый или заблокированный брандмауэром порт. Не все брандмауэры генерируют RST/ACK при попытке подключения к заблокированным портам (Check Point Firewall – генерирует), некоторые отсылают ICMP-сообщение, как было показано выше, или ничего не посылают вообще.

Большинство брандмауэров поддерживает удаленное управление через интернет, открывая один или несколько TCP-портов, уникальных для каждого брандмауэра. Так, например, Check Point Firewall открывает 256, 257 и 258 порты, а Microsoft Proxy – 1080. Некоторые брандмауэры явным образом сообщают свое имя и версию программного продукта при подключении к ним по netcat (или telnet), в особенности этим грешат прокси-сервера. Последовательно опрашивая все узлы, расположенные впереди исследуемого хоста, на предмет прослушивания характерных для брандмауэров портов, мы в большинстве случаев сможет не только выявить их присутствие, но и определить IP-адрес! Разумеется, эти порты могут быть закрыты как на самом брандмауэре (правда, не все брандмауэры это позволяют), так и на предшествующем ему маршрутизаторе (но тогда брандмауэром будет нельзя управлять через интернет).

Сканирование и трассировка через брандмауэр

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

Утилита Firewalk представляет собой классический трассер, посылающий TCP– или UDP-пакеты, с таким расчетом, чтобы на узле, следующем непосредственно за брандмауэром, их TTL обращался в ноль, заставляя систему генерировать сообщение ICM_PTIME_EXCEEDED. Благодаря этому Firewalk уверенно работает даже там, где штатные средства уже не справляются, хотя крепко защищенный брандмауэр ей, конечно, не пробить и атакующему приходится использовать более продвинутые алгоритмы.

Будем исходить из того, что с каждым отправляемым IP-пакетом система увеличивает его ID на единицу (как это чаще всего и случается). С другой стороны, согласно спецификации RFC-793, описывающей TCP-протокол, всякий хост, получивший посторонний пакет, который не относится к установленным TCP-соединениям, должен реагировать на него посылкой RST. Для реализации атаки нам понадобится удаленный узел, не обрабатывающий в данный момент никакого постороннего трафика и генерирующий предсказуемую последовательность ID. В хакерских кругах такой узел называется немым (dump). Обнаружить немой хост очень просто – достаточно лишь отправить ему серию IP-пакетов и проанализировать ID, возвращенный в заголовках. Запомним (запишем на бумажку) ID последнего пакета. Затем выберем жертву и отправим ей SYN-пакет, указав в обратном адресе IP немого узла. Атакуемый узел, думая, что немой хост хочет установить с ним TCP-соединение, ответит: SYN/ACK. Немой хост, словив посторонний SYN/ACK, возвратит RST, увеличивая свой счетчик ID на единицу. Отправив немому хосту еще один IP-пакет и проанализировав возвращенный ID, мы сможем узнать, посылал ли немой хост жертве RST-пакет или нет. Если посылал, значит, атакуемый хост активен и подтверждает установку TCP-соединения на заданный порт. При желании хакер может просканировать все интересующие его порты, не рискуя оказаться замеченным, ведь вычислить его IP практически невозможно – сканирование осуществляется «руками» немого узла и с точки зрения атакуемого выглядит как обычное SYN-сканирование.