Для многих людей мир
компьютерной безопасности и обнаружения
вторжений - книга за семью печатями. Обычно
все начинается с вопросов: Какие
инструменты вы используете? Могу я
смоделировать это дома? Какие знания
необходимы? В этой статьей я попробую
рассказать о том как работают системы
защиты - мы возьмем распространенный
эксплоит, проанализируем его работу и
обследуем с точки зрения системного
администратора.
Окружение
Я в своей работе использовал
примерно такую лабораторию:
- SuSE Pro 9.1 для запуска эксплоита, 192.168.1.100.
- Windows 2000 Pro без обновлений и файрвола (стандартная
ситуация, не правда ли?). Такой выбор
обусловлен тем, что мы будем тестить
старый, но вполне радостный эксплоит
для RPC DCOM уязвимости. Адрес этой машины
192.168.1.101.
Утилиты
Разобравшись с железом перейдем к софту.
МОи программы могут работать как в 32-битных
Windows, так и на Linux/Unix. поддавшись мнению
большинства я буду использовать в на
админской машине Windows ХР.
- Snort
- Snortsnarf
- кросс-платформенна утилита на Perl с
модулями JulianDay.pm, TimeZone.pm, и ParseDate.pm (качать тут,
для опознания делать так: C:\snortsnarf.pl -usage) - Tcpdump and libpcap
для Linux или windump
and winpcap для винды - PERL версии 5.6. 1
Анализ трафика
Естественно нас будет интересовать
сетевой трафик той машины, на которой мы
будет испытывать действие эксплоита (192.168.1.101).
В моем примере я записал лог (дял примера
его размер и комплексность сведена к
минимуму) в формате "little endian" и его
можно использовать с Snort, windump или tcpdump, или
обработать через Ethereal.
Мой совет использовать все же более
низкоуровневые инструменты типа windump, так
как аналайзеры хоть и позволят
абстрагироваться от некоторых вещей (ведь с
другой стороны в windump сами придется искать в
пакетах все поля и данные), но не дадут на
практике более полно изучить протокол TCP/IP.
Snort
Первым шагом будет сборка эксплоита и
пропускание его через Snort. Если вы еще не в
курсе, то Snort - open-source система обнаружения
вторжения. Для теста использует программу с
со стандартными правилами, которые идут со
Snort:
c:\snort\bin\snort.exe -r file -c c:\snort.conf -A full
Здесь file - бинарник, который мы получили
при помощи windump во время работы эксплоита на
тестовой машиной, ключ 'с' указывает где
искать конфигурационный файл, 'А' - включить
полное логгирование. Eсли выскочит ошибка о
том, что нет доступа на запись в директорию
с логами, то вероятно просто такой
директории нет, для того что бы ее указать
запустите Snort с ключом '-l'.
Snortsnarf
Работающий Snort будет выдавать данные в
alert.ids, который мы затем запулим в snortsnarf,
который в свою очередь будет генерить милые
HTML страницы. Делаем так:
snortsnarf.pl alert.ids -win -rs
Snortsnarf создаст поддиректорию snfout.alert.ids, в
которой и сложит все страницы, которые вам
необходимы. В зависимости от версии Snort вы
увидите примерно такой список
предупреждений:
Priority | Signature (click for sig info) | # Alerts | # Sources | # Dests |
1 | WEB-PHP viewtopic.php access [sid] [BUGTRAQ] | 3 | 1 | 2 |
1 | NETBIOS DCERPC ISystemActivator bind attempt [sid] [CVE] | 1 | 1 | 1 |
2 | TFTP Get [sid] | 3 | 1 | 1 |
2 | ATTACK-RESPONSES directory listing [sid] | 3 | 1 | 1 |
2 | ATTACK-RESPONSES 403 Forbidden [sid] | 1 | 1 | 1 |
Вот как это будет выглядеть в Snortsnarf:
Анализируем алярмы
Подошло время посмотреть что же выдал Snort.
За первым номером идет WEB-PHP, проследовав по
гиперссылке на сайте Snort можно прочитать
описание. Без осознания произошедшего нам
трудно будет построить bpf фильтр, который бы
изолировал враждебный трафик. Обратите так
же внимание, что в snortsnarfдля каждого
предупреждения указан точный пакет,
который вызвал срабатывание триггера.
Знание конкретного пакета конечно хорошо,
но в нашем случае я предпочитаю изолировать
весь трафик между двумя хостами,
заподозренными во вторжении. Фильтр,
приведенный ниже, позволит нам узнать
только тот трафик, которыми обменивались
два конкретных подозреваемых хоста. Кстати
говоря, в данном случае я предпочитаю
смотреть не только TCP, но и IP протокол -
очевидно, что интересно проследить за всей
деятельностью, которая происходила между
компьютерами, например обмен ICMP ECHO пакетами
довольно занимателен и полезен для
изучения :).
C:\ windump.exe -r log_file -nXvSs 0 ip and host 192.168.1.101 and host
64.233.67.99 > web_php
Что тут происходит? Я сказал tcpdump парсить
все пакеты с правильным заголовком с такими
адресами в текстовый файл web_php. Обратите
внимание, что мы вскоре увидим, что адрес
64.x.x.x вовсе не при чем и вызвал ложно
срабатывание от простого серфинга. Ключ 'S' говорит
программе давать полную последовательный
номер TCP, а не относительный. Это позволит
вам не запариваясь наблюдать за Sequence и
Acknowledgement номерами.