Отлов вирусной активности в сети с помощью Netflow

Опубликовано admin в Втр, 21/09/2010 - 22:21
В этом топике расскажу как можно в пару скриптов наладить простой сбор статистики по аномальной активности в сети.

Аномальным для нас будет на момент снятия статистики:

1. Более 20 исходящих коннектов по 25 порту с 1 IP.
2. Более 100 исходящих коннектов по 80 порту с 1 IP.
3. Более 100 исходящих коннектов по 53 порту с 1 IP.
4. Придумывайте сами, всё гибко.

Статистику будем вынимать из кэша netflow маршрутизаторов. Будет ли это Cisco или FreeBSD — не важно. О настройке netflow на FreeBSD я рассказывал в предыдущих своих статьях.

Так как мы собираемся обрабатывать статистику исходящих соединений, в netflow обязательно попадание исходящего трафика из вашей сети.

В cisco это будет навешивание параметра «ip flow egress» на интерфейс с которого мы хотим анализировать исходящий трафик.
Про FreeBSD читаем Netgraph ipfw и гибкий учет трафика через netflow (_http://alexandr.sysoev.ru/node/83).

Принцип работы


Команда cisco «sh ip cache flow»

7206#sh ip cache flow
IP packet size distribution (50885M total packets):
1-32 64 96 128 160 192 224 256 288 320 352 384 416 448 480
.000 .367 .018 .009 .005 .004 .019 .005 .004 .002 .015 .001 .002 .003 .002

512 544 576 1024 1536 2048 2560 3072 3584 4096 4608
.002 .003 .012 .030 .486 .000 .000 .000 .000 .000 .000

IP Flow Switching Cache, 4456704 bytes
14372 active, 51164 inactive, 1424895745 added
595073185 ager polls, 0 flow alloc failures
Active flows timeout in 30 minutes
Inactive flows timeout in 15 seconds
IP Sub Flow Cache, 1057544 bytes
14372 active, 18396 inactive, 1424881570 added, 1424881570 added to flow
0 alloc failures, 0 force free
2 chunks, 63 chunks added
last clearing of statistics never
Protocol Total Flows Packets Bytes Packets Active(Sec) Idle(Sec)
-------- Flows /Sec /Flow /Pkt /Sec /Flow /Flow
TCP-Telnet 2394420 0.5 2 59 1.2 1.6 17.3
TCP-FTP 693781 0.1 12 67 1.9 4.1 7.6
TCP-FTPD 16673 0.0 4116 815 15.9 29.6 10.9
TCP-WWW 705969510 164.3 46 843 7698.6 4.6 11.0
TCP-SMTP 4790885 1.1 16 593 18.5 4.8 8.6
TCP-X 586390 0.1 3 176 0.5 1.0 17.5
TCP-BGP 377369 0.0 3 490 0.3 11.7 17.2
TCP-NNTP 492 0.0 6 270 0.0 4.5 10.8
TCP-Frag 1878 0.0 27 194 0.0 12.3 17.2
TCP-other 283995180 66.1 37 715 2505.0 5.9 12.1
UDP-DNS 42291343 9.8 1 73 10.1 0.0 19.3
UDP-NTP 1781711 0.4 1 76 0.6 7.4 17.9
UDP-TFTP 49776 0.0 5 52 0.0 21.6 17.3
UDP-Frag 293665 0.0 352 106 24.0 15.7 18.1
UDP-other 347985517 81.0 18 618 1503.7 4.4 18.7
ICMP 33442833 7.7 2 80 21.9 5.0 18.4
IGMP 2 0.0 2 28 0.0 0.9 26.5
IPv6INIP 178 0.0 4 68 0.0 13.4 18.1
GRE 60567 0.0 2878 162 40.5 185.4 15.4
IP-other 150016 0.0 89 614 3.1 69.2 17.0
Total: 1424882186 331.7 35 781 11846.6 4.7 13.5

SrcIf SrcIPaddress DstIf DstIPaddress Pr SrcP DstP Pkts
Gi0/1 80.75.131.2 Null 123.456.123.14 06 40A0 0050 29
Gi0/1 82.116.35.44 Null 123.456.123.23 06 D52A 0050 5
Gi0/2.105 123.456.789.54 Null 195.151.255.253 06 0050 F9F0 3
Gi0/1 217.172.29.5 Null 123.456.123.33 06 E469 0050 279
Gi0/1 217.172.29.5 Null 123.456.123.43 06 E46B 0050 25
Gi0/1 217.172.29.5 Null 123.456.123.53 06 E46D 0050 51
Gi0/1 82.116.35.44 Null 123.456.123.64 06 D531 0050 5
Gi0/1 217.172.29.5 Null 123.456.123.73 06 E46E 0050 55
Gi0/1 217.172.29.5 Null 123.456.123.13 06 E46F 0050 23
Gi0/1 217.172.29.5 Null 123.456.123.23 06 E464 0050 39
Gi0/2.105 123.456.789.54 Null 67.195.111.40 06 0050 E9FC 5
Gi0/2.105 123.456.789.53 Null 83.167.97.145 06 0050 CF77 7
Gi0/2.105 123.456.789.56 Null 213.180.199.34 11 C479 0035 1
Gi0/2.103 123.456.789.30 Null 123.456.123.56 11 BB7D 0035 1
Gi0/2.105 123.456.789.56 Null 123.456.123.30 11 0035 BB7D 1

[--cut--] дальше еще много-много похожих строчек[--cut--]

даёт вот такой вот вывод, верхняя его часть нам не интересна, там общая статистика.

Аналогичный вывод, но без общей статистики, под FreeBSD даёт команда «flowctl netflow show», где netflow — имя вашего узла ng_netflow.

[root@border] /root/> /usr/sbin/flowctl netflow show
SrcIf SrcIPaddress DstIf DstIPaddress Pr SrcP DstP Pkts
lo0 123.456.161.48 vlan3 212.119.237.214 6 0f93 0050 6
lo0 123.456.153.8 vlan2 154.153.8.109 17 6df4 f45f 20
lo0 123.456.164.126 vlan2 154.164.126.104 17 68eb eb5f 16
lo0 123.456.134.168 vlan2 154.134.168.139 17 8b2c 2c5f 40
lo0 123.456.169.132 vlan2 154.169.132.219 17 db31 315f 28
lo0 123.456.153.13 vlan2 154.153.13.62 17 3e3a 3a5f 28
lo0 123.456.147.214 vlan2 154.147.214.54 17 3658 585f 4
lo0 123.456.161.167 vlan2 154.161.167.102 17 66f5 f55f 4
lo0 123.456.144.147 vlan2 154.144.147.248 17 f88b 8b5f 4
lo0 123.456.162.220 vlan2 154.162.220.42 17 2adc dc5f 27
lo0 123.456.170.119 vlan2 154.170.119.198 17 c60a 0a5f 64

[--cut--] дальше еще много-много похожих строчек[--cut--]


В этом выводе нас интересует столбик «DstP». Это номер порта в Hex.
25 порт будет выглядеть как 0019, 80 — 0050, 53 — 0035.

Работа



Анализируем вывод этой статистики:

Берем статистику и выделяем 25 порт:
flowctl netflow show | grep 0019
Выбираем только IP источника из второго столбика «SrcIPaddress» и сортируем вывод.
awk '{print $2}' | sort
Считаем уникальные IP адреса, и выводим только те, которые повторились больше 20 раз.
uniq -c | awk '{ if( $1 > 20 ) print $2 }'

Получаем для 25 порта:
[root@border] /root/>flowctl netflow show | grep 0019 | awk '{print $2}' | sort | uniq -c | awk '{ if( $1 > 20 ) print $2 }'
123.456.123.10
123.456.123.17
123.456.123.140
123.456.123.220


Для 80 порта:
[root@border] /root/>flowctl netflow show | grep 0050 | awk '{print $2}' | sort | uniq -c | awk '{ if( $1 > 100 ) print $2 }'
123.456.123.10
123.456.123.17
123.456.123.165


Для 53 порта:
[root@border] /root/>flowctl netflow show | grep 0035 | awk '{print $2}' | sort | uniq -c | awk '{ if( $1 > 100 ) print $2 }'
123.456.123.17
123.456.123.19


Для получения этой статистики с cisco на сервер используется rsh, как его настроить расскажет google. В итоговой команде изменится лишь источник статистики с «flowctl netflow show» на «rsh -l логин ip_cisco 'sh ip cache flow'»

Зачем всё это?



Что делать с этими адресами решайте сами.
У меня, например, по крону, раз в 5 минут, адреса добавляются в БД, с которой работает radius сервер.
Клиента выкидывают из интернета, а при следующей авторизации он блокируется полностью. Также при обращении по 80 порту выдается сообщение о нарушении регламента сети из-за вирусной активности на его компьютере.

Спасибо за внимание. Чистых Вам сетей!

Статья взята с http://habrahabr.ru (_http://habrahabr.ru/blogs/sysadm/90489/)

( categories: )