...
...
...

Snort в примерах

введение

Snort — что значит это имя? В случае ПО с открытым исходным кодом - это мощная система предупреждения и обнаружения сетевых вторжений. Snort был написан за выходные в 1998 году Мартином Реском (Martin Roesch). Мартин хотел написать кросс-платформенный анализатор пакетов, не выполняющий прямые вызовы ядра для перехвата пакетов, а использующий pcap - программную библиотеку для захвата пакетов. Результат этой хоббийной работы - стандарт де факто для предупреждения и обнаружения вторжений.

Если Snort не установлен в вашей системе, вы можете его загрузить с http://www.snort.org/dl/. Эта статья рассматривает Snort версии 2.4.3. Snort работает, используя язык правил, который комбинирует возможности сигнатурного поиска, протокольного анализа и обнаружения аномалий. Вы можете настроить Snort для работы в нескольких различных режимах — анализа пакетов, журналирования пакетов, обнаружения сетевых вторжений.

режим анализа пакетов

В режиме анализа пакетов, Snort просто читает пакеты, приходящие из сети, и выводит их на экран. Если вы хотите вывести на экран заголовки пакетов TCP/IP, выполните

snort -v

Эта команда выводт заголовки IP- и TCP/UDP/ICMP-пакетов. Если вы хотите, кроме того, увидеть данные, содержащиеся в пакетах, введите:

snort -vd

Для еще более подробного вывода, включающего заголовки канального уровня, выполните:

snort -vde

11/13-20:08:02.807867 0:E0:81:2F:FE:2C ->0:0:C:7:AC:2 type:0x800 len:0x5EA
66.179.164.20:22 ->24.136.161.188:62456 TCP TTL:64 TOS:0x10 ID:27401 IpLen:20 DgmLen:1500 DF
***A**** Seq: 0x50692152 Ack: 0xDD1E2B42 Win: 0x2180 TcpLen: 20
AA A8 5A 92 A7 BF DF 32 7D BF F7 7B 1B 5C 35 47 ..Z....2}..{.\5G
D6 52 B3 E2 97 6D 68 41 A6 53 2B 89 92 8E 10 8D .R...mhA.S+.....
1B E0 C9 87 A8 71 91 EA D0 F4 1C 6C B4 DC D7 C4 .....q.....l....
B5 22 84 40 E5 09 0F B5 E9 1F 4E AC 96 6C A5 9D .".@......N..l..
D9 AF 38 88 5F 2B 4B 8D 32 FC 4C 37 AB DA E1 EA ..8._+K.2.L7....
61 D9 23 22 FD DA 20 32 E7 6C 48 60 2C 55 CB 99 a.#".. 2.lH`,U..
74 3A F5 7D 30 77 75 58 6B AE 80 2F 48 A5 FD F4 t:.}0wuXk../H...
B5 C7 CA 9D 42 EA 9B BF B6 74 E5 19 8F EF F1 8A ....B....t......
2D 7E D0 55 0A 92 3E 72 CF 5F 89 53 FC 85 2F 25 -~.U..>r._.S../%
72 8F B4 DD 40 BF 33 46 82 6D 21 98 8E A7 A0 A5 r...@.3F.m!.....
2E 32 54 ED 41 D4 2F C4 B6 6E BE 55 C0 95 78 7C .2T.A./..n.U..x|
35 CA 06 4D 59 32 68 C8 3D 77 7A 73 FA 6A 78 1C 5..MY2h.=wzs.jx.
90 C7 CD 48 6D AE 0E 74 39 A0 4C F4 4E AC 49 06 ...Hm..t9.L.N.I.
A2 3F F3 BB 24 B7 05 7C B3 00 70 2E 65 E1 ED 1A .?..$..|..p.e...
96 4C 93 CB A6 F5 68 B5 83 F8 08 F1 5C F2 9F 32 .L....h.....\..2
E1 F7 47 CF 2D 0B 35 DA 6A B5 D0 6D 49 9D 61 63 ..G.-.5.j..mI.ac
75 F2 4B 18 1F 02 C6 E4 9A 23 95 FE 21 6B A4 3E u.K......#..!k.>
06 40 CB 23 34 68 8F A1 C7 3C 98 20 14 8F 20 63 .@.#4h...<. .. c
F7 FB 37 2B CC B9 2F 97 ED 5B 92 8D 96 84 0C 08 ..7+../..[......
E5 D4 29 A1 DF 4D 5B 33 EE 68 D3 F1 29 54 DF 0C ..)..M[3.h..)T..
F0 37 44 4A DF 2F 07 68 49 9B 09 0A C1 C7 EC 89 .7DJ./.hI.......
50 CA 40 D3 5B A5 27 69 12 7E 49 34 1A F8 26 9C P.@.[.'i.~I4..&.
44 A0 87 C7 BC CB 46 8A 33 25 94 F6 89 72 64 E0 D.....F.3%...rd.
F0 AB 16 DB 52 A1 BE AC 3C 8B D6 CC 22 C7 0F B4 ....R...<..."...
86 6B BF EE A8 7E 1F 74 C7 34 14 AF 7C 50 BC 7F .k...~.t.4..|P..
42 0C B8 98 8C C3 EC D6 FC 51 CE 1F B3 7D A1 48 B........Q...}.H
1D 89 96 AB 79 AA E0 A5 B8 F5 39 7C 27 4C 25 D0 ....y.....9|'L%.
5A 0C 81 13 07 19 6E 81 1C 3C 9F E5 1A 6D BA 18 Z.....n..<...m..
DC 35 51 90 A1 1D 8E 57 7A 0A 56 BB 09 CB 3D 81 .5Q....Wz.V...=.
8F C5 84 83 88 ED CD 89 DB 81 4D F6 C7 04 A9 71 ..........M....q
...

Конечно же, ключи могут быть заданы в любой форме, например: "snort -vde", "snort -d -ev" и "snort -e -v -d".

Примечание: Snort будет собирать информацию до тех пор, пока вы его не прервете. Для завершения захвата пакетов нажмите Ctrl-C. После нажатия Ctrl-C будет выведен отчет о захваченных пакетах. Ниже показан отчет, полученный после работы Snort в течение приблизительно минуты.

Snort received 74260 packets
Analyzed: 5923(7.976%)
Dropped: 68337(92.024%)

Breakdown by protocol:
TCP: 1602 (2.157%)
UDP: 4142 (5.578%)
ICMP: 0 (0.000%)
ARP: 6 (0.008%)
EAPOL: 0 (0.000%)
IPv6: 0 (0.000%)
ETHLOOP: 0 (0.000%)
IPX: 0 (0.000%)
FRAG: 0 (0.000%)
OTHER: 1 (0.001%)
DISCARD: 0 (0.000%)

Action Stats:
ALERTS: 0
LOGGED: 0
PASSED: 0

Snort exiting

режим журналирования пакетов

Режим журналирования пакетов позволяет вам записывать поток информации на диск. Это полезно при проведении анализа за определенный интервал времени или проверки изменений в настройках и политике безопасности.
Вам нужно будет создать и указать каталог для логов, а Snort автоматически перейдет в режим журналирования пакетов.
Пример: создаем каталог Piglet и запускаем:

snort -dev -l ./Piglet

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

snort -r ./Piglet/logfile

Если вы не укажете каталог для данных, то по умолчанию используется /var/log/snort.

режим обнаружения сетевых вторжений

Третий режим Snort, это режим обнаружения сетевых вторжений (Network Intrusion Detection, NIDS). Чтобы не записывать все пакеты, которые передаются в сети, вы можете указать Snort наблюдать только за локальной сетью. Например:

./snort -dev -l ./log -h 192.168.0.0/24

Обычно в режиме NIDS используется конфигурационный файл Snort, например: "snort... -c snort.conf", где snort.conf это файл, содержащий правила. Указанная команда будет применять правила, заданные в файле snort.conf к каждому пакету с тем, чтобы определить, следует ли выполнять действие, связанное с конкретным правилом. Стандартный файл snort.conf подключает несколько дополнительных файлов с правилами, так что просмотрите его перед использованием из командной строки.

Если вы собираетесь запустить Snort в режиме обнаружения вторжений на длительное время, опустите ключ -v ради увеличения скорости. Информация будет записываться быстрее, если она не будет дополнительно выводиться на экран.

Также, для большинства приложений нет надобности записывать заголовки канального уровня, так что обычно ключ –e также можно не использовать. Типичная команда запуска Snort:

./snort -d -h 192.168.1.0/24 -l ./log -c snort.conf

В Snort 2.3.0 RC1 интегрирована новая возможность, которая не планировалась Мартином Реском при написании Snort. Это система предупреждения вторжений (Intrusion Prevention System, IPS) snort_inline. Snort_inline получает пакеты не от libpcap, а от iptables, и с помощью новых типов правил помогает определить, что нужно сделать с пакетом: пропустить или уничтожить. Этот режим называют встраеваемым.

Для поддержки snort_inline, вам необходимо скомпилировать iptables и выполнить команду "make install-devel" или найти подходящую сборку библиотеки libipq. Она позволяет snort_inline взаимодействовать с iptables. Вам также нужна будет библиотека LibNet, которую можно загрузить с узла http://www.packetfactory.net.

При использовании Snort с snort_inline в вашем распоряжении будут три действия: drop, reject и sdrop. За подробной информацией обратитесь к документации iptables.

Что это дает для безопасности системы? Как мне использовать Snort, чтобы увеличить безопасность системы? Настоящая сила Snort - в правилах, которые вы задаете для наблюдения. Некоторые типы правил полезнее других, в зависимости от передаваемых по сети данных. Например, часто используется правило, позволяющее анализировать содержимое пакета. Правило может выглядеть, например, так:

content: [!] "содержащаяся_строка";

Также можно определять правила, работающие со служебной информацией пакетов. Следующий пример демонстрирует нам правило, которое проверяет заголовок протокола IP, в данном случае, на соответствие ICMP:

alert ip any any ->any any (ip_proto:icmp;)

Ключом к написанию хороших правил является их правильная последовательность. Непродуманная последовательность правил может заставлять Snort повторять проверки или тратить время на поиск уже известной информации. Тщательный анализ используемых протоколов позволяет обнаружить характерные события. Например, пользователь, авторизующийся на FTP-сервере, может посылать строку "user root". Можно написать правило, которое будет обнаруживать эту строку в трафике, адресованном FTP-порту:

alert tcp any any ->any any 21 (content:"user root";)

заключение

Существует столько способов защиты системы, сколько правил вы можете придумать. Своей популярностью Snort обязан сообществу, сформированному вокруг его разработки. Подробную информацию можно найти на сайте http://www.snort.org или в предложенной литературе:

- Snort Cookbook. Angela D. Orebaugh, Simon Biles, Jacob Babbin; первое издание, март 2005;

- Nessus, Snort, & Ethereal Power Tools: Customizing Open Source Security Applications. Brian Caswell, Gilbert Ramirez, CISSP, Jay Beale, Noam Rathaus. Издатель: Syngress, сентябрь 2005.



Мэт Фрей (Matt Frye), председатель общества системных администраторов Северной Каролины и активный член Triangle Linux User Group. Перевод Ивана Песина.


© Сетевые решения