Вы когда-либо задумывались о величине трафика, который интернет пропускает в течение каждого дня? Большинство людей сравнивают трафик в интернете с трафиком на скоростной магистрали крупного города, но это - не слишком точная аналогия. В то время как по скоростным магистралям люди и объекты обычно перемещаются от источника к месту назначения, интернет скорее напоминает сотни тысяч людей, находящихся на переполненной арене и обменивающихся друг с другом сообщениями. В действительности, когда вы подключаетесь к хосту в интернете, ваши данные редко идут непосредственно от вашего компьютера к компьютеру-адресату. Данные фактически пересекают несколько "промежуточных" пунктов, таких как маршрутизаторы, шлюзы, мосты и брандмауэры. Все эти устройства обрабатывают ваше сообщение, но так как сообщение адресовано не им, то предполагается, что они просто пропускают его.
Даже когда оба компьютера находятся в локальной сети (LAN), они не могут пропускать сообщения непосредственно друг другу. Например, если в локальной сети используется коммутатор, ваше сообщение должно быть послано непосредственно получателю и больше никому другому. Коммутаторы сетей Ethernet обладают достаточным интеллектом и определяют, MAC-адрес какого
Но если в вашей сети используются хабы, то они не столь умны. Они не знают, какая машина связана с каким портом, поэтому они передают сообщение всем портам, надеясь, что истинный получатель сам о себе заявит и скажет: "О, это я". Другие порты, как предполагается, игнорируют сообщение, так как оно им не предназначено, но, тем не менее, они могут его слышать. Даже коммутаторы часто имеют, по крайней мере, один порт, сконфигурированный для получения копии каждого сообщения, которое ходит в округе (обычно, для административного контроля). Это означает, что возможности подслушивания или перехвата ваших сообщений другими людьми существуют в изобилии. В этой лекции рассказывается об инструментальных средствах, которые позволяют воспользоваться этими возможностями и обеспечить им достойное применение.
Анализатор сетевых потоков ( ) может слушать и записывать любые необработанные данные, которые проходят через или мимо физического (аппаратного) сетевого интерфейса. Они работают на очень низком уровне (то есть на уровне ядра или приложения уровня операционной системы), так, чтобы они могли связываться непосредственно с сетевым интерфейсом на понятном ему языке. Например, анализатор сетевого потока может приказать сетевому адаптеру (NIC) посылать ему копию каждого отдельного фрейма Ethernet, который прибывает на интерфейс независимо от того, чем этот фрейм является или куда он идет.
Поскольку анализатор сетевых потоков работает на канальном уровне (
Как и многие другие средства защиты, анализаторы сетевых потоков приобрели своего рода мистические свойства. Каждый о них слышал и осознает их мощь, но многие люди за пределами сообщества сетевой защиты думают, что анализаторы сетевых потоков относятся к черной магии, которая используется только хакерами, ворами и другими хулиганами. Анализаторы сетевых потоков в действительности представляют собой просто еще один инструмент (многие из них доступны для загрузки свободно - любому). Да, они могут использоваться для того, чтобы завладеть информацией и паролями, которые вам не принадлежат, но их можно также использовать для диагностики сетевых проблем или точного определения дефектной части IP-подключения.
Одна из причин, по которой анализаторы сетевых потоков стали не так опасны, как раньше, состоит в том, что теперь наиболее важные данные зашифрованы. Открытые, незашифрованные службы быстро исчезают из интернета. Люди, которые имели обыкновение использовать утилиту telnet для доступа к учетным записям командного интерпретатора shell при проверке своей электронной почты (то есть посылающие свои пароли открытым, нешифрованным текстом, который могут видеть все промежуточные маршрутизаторы, хабы и коммутаторы), теперь используют протокол Secure Shell (SSH), который шифрует каждую часть "telnet-подобного" сеанса. Люди, которые теперь заходят на Web-сайты, делают это по протоколу SSL (Secure Sockets Layer), который выполняет для Web-трафика то же, что SSH для telnet. Вместо посылки
Итог такой: анализаторы сетевых потоков существуют, и мы знаем, что люди собираются злоупотреблять ими. Это ничем не отличается от прослушивания чужого телефона, наблюдения за чьей-либо комнатой или простого подслушивания разговора. Народ сует свой нос в ваши дела на регулярной основе. Вы должны принимать это во внимание. Если вы все еще передаете важные данные (Web-серфинг и загрузку общедоступной информации обычно можно делать открытым текстом) по интернету не зашифрованными, значит, вы заслуживаете то, что имеете.
Беспокоясь о возможности злонамеренного использования анализаторов сетевых потоков, помните следующее.
Переключаемые сети еще более затрудняют (но не делают невозможным, благодаря таким инструментальным средствам, как dsniff ) внутренним пользователям
Даже в этом случае, вероятно, не стоит опасаться анализаторов сетевых потоков. Да, они действительно могут помочь хакерам украсть жизненно важную информацию, но существует много методов и инструментальных средств, предназначенных для противодействия этому. Считайте анализаторы сетевых потоков просто одним из инструментов, понятным и простым, и посмотрите, какую пользу могут дать этически и морально благонадежные применения анализаторов в нашей повседневной жизни.
После того как мы потратили столько времени, дабы убедить вас, что анализаторы сетевых потоков могут быть респектабельными инструментами, используемыми респектабельными людьми в респектабельных целях, вполне логично, что первый такой инструмент в нашем обсуждении называется .) Это весьма функциональный, но довольно сложный в использовании инструмент, если вы не знакомы с его концепциями. Давайте преодолеем этот барьер.
Первый шаг в изучении того, как использовать анализаторы сетевых потоков, состоит в том, чтобы сообщить ему, что мы хотим узнать. Мы делаем это через командную строку. Когда мы выполняем BUTTSniffer без опций, мы получаем резюме возможных опций:
BUTTSniffer v0.9 (c) 1998, Cult of the Dead Cow
Usage: buttsniff -{idl} <arguments>
-i (interactive) arguments: <device number> <port>
-d (disk dump) arguments: <device number> <log file>
<dump type> [filter]
-l (list devices) arguments: (none)
Valid dump types are:
r (raw frames) Dumps raw network traffic
e (encapsulation) Dumps decoded packets with
encapsulation information
p (protocol) Dumps fully decoded packets with
protocol information
Valid filters are:
A single number representing a port to be monitored (e.g. 80)
A port range to be monitored (e.g. 141-1024)
A filename containing a list of IP and port filter rules
Read the 'readme.txt' for more information and examples.
Filters are only active on dump type 'p'.
Итак, получается, что у BUTTSniffer есть только три режима: перечисление устройств, диалоговый и дамп на диск. Режим перечисления устройств сообщает, какие сетевые интерфейсы находятся на вашей машине. Каждому сетевому интерфейсу, даже адаптерам коммутируемой линии, назначены номера устройств. В двух других режимах инструмента BUTTSniffer вы должны знать номер устройства интерфейса, на котором хотите прослушивать трафик, так что режим перечисления устройств является первым шагом. Режимы дампа на диске и диалоговый немного сложнее в работе, они описаны далее.
Мы начнем с диалогового режима, потому что он сделан с расчетом на новичков. Командная строка для диалогового режима просит вас указать номер устройства (для интерфейса, который вы хотите прослушивать) и порт. Теперь речь идет совсем не о том порте, о котором вы думаете. Вас спрашивают не о том, на каком порте вы хотите прослушивать трафик; вас просят, чтобы вы обеспечили доступный порт, с которым может связываться демон. Диалоговый режим устанавливает демона на указанном порте, скажем на порте 8888 (вы вводите buttsniff -i 0 8888 ). Затем вы можете напечатать telnet localhost 8888 в приглашении на ввод команды, и будете связаны с демоном. Вы должны увидеть главное меню диалогового режима программы BUTTSniffer со следующими опциями.

Monitor Connections. Первая опция, Monitor Connections (Прослушивание подключений), делает только то, что обозначено в названии. Любые IP-сеансы, которые ретранслируются, проходят мимо или через интерфейс, который мы наблюдаем (в нашем примере командной строки это интерфейс с номером устройства 0), должны здесь показываться. Мы можем исследовать эту опцию, открывая несколько Web- и telnet-подключений, и наблюдать, что получается в результате. Выберите Monitor Connections и нажмите клавишу ENTER.

Мы видим telnet и несколько Web-сеансов с моим IP-адресом. Если мы прокрутим список до определенного подключения, мы можем прослушивать это подключение. Здесь мы прослушиваем сессию telnet.

Вывод информации выглядит не очень привлекательно, но если вы внимательно посмотрите, то сможете увидеть, что мы только что перехватили пароль привилегированного (root) пользователя в этом блоке (guessme). Нажатия клавиши пользователя отображены в нижней части экрана, а вывод от команд выведен в верхнюю часть. После того как пользователь напечатал su, он напечатал также пароль привилегированного пользователя guessme. Как видно из вывода в верхней части экрана, он успешно получил привилегированный доступ. Если вы посмотрите вниз экрана, то увидите некоторые опции отображения, которые можно выбирать. Опция Full Screen (Весь экран) особенно полезна, если вас интересует только то, что печатает пользователь.
Помните заявление о том, что никто больше не должен пользоваться утилитой telnet? Причина как раз в этом. С помощью такого инструмента весь ваш трафик может читаться любым, кто сможет вклиниться между вами и вашим адресатом. Теперь взгляните на результат прослушивания SSH-сеанса в ответ на точно такие же действия и команды.

Не очень полезный результат, не так ли? Тем не менее, мы все еще можем наблюдать любой незашифрованный трафик, прибывающий на нашу машину или покидающий ее.
Password Sniffer. Мы сумели перехватить пароль в сессии telnet, но опция Password ищет только попытки входа в систему и пытается перехватывать любые имена пользователя и пароли, которые проходят в открытом виде. В следующем примере пользователь связывается с Originix с помощью telnet как пользователь "bob", а затем становится привилегированным пользователем. BUTTSniffer достаточно умен, чтобы выделить начальный вход в систему со словом "bob", потому что это начало подключения, но он не будет подбирать su привилегированного пользователя. Это означает, что мы все еще должны были бы вести наблюдение с использованием режима Monitor Connections, чтобы подобрать пароль. Многие системы не позволят вам использовать telnet для привилегированного пользователя.

Диалоговый режим довольно легко использовать, но в нем нигде не делается запись каких-либо из полученных данных. Вы узнаете, как это делать, когда мы опишем режим дампа на диск в разделе "Режим Disk
Configure. Что, если вы оказались на машине, которая сильно перегружена сотнями подключений, происходящих в одно и то же время? Как бы вы смогли рассортировать весь этот "шум" и найти информацию, которую ищете?
Эта опция меню позволяет устанавливать фильтры для диалогового режима. Она заставляет BUTTSniffer наблюдать только за определенными видами сетевого трафика, идущего к или от определенных хостов. Важно понять, как эти фильтры работают, потому что мы будем определять их в текстовых файлах, когда перейдем к следующему режиму программы (дамп на диск).
Основная цель опции Configure - включить фильтры. На следующей иллюстрации обратите внимание, что мы сначала задаем исключение всех IP-адресов (*.*.*.*), а затем включаем только 192.168.1.100. Способ работы программы BUTTSniffer таков, что по умолчанию он включает все, что только возможно. Прежде чем вы сможете определить, на каких хостах и портах вы хотите сосредоточиться, нужно исключить те, которые вас не интересуют.

Внутри этой опции имеется еще две возможности. Сначала мы можем выбирать прослушивание только допустимых TCP-подключений. Необычные подключения (подобные тем, которые делают проходы сканеров nmap , когда просматривают сетевые порты) будут игнорироваться. Вторая опция, War Mode (Военный режим), является переключением на применение этого анализатора сетевых потоков в качестве дополнительного модуля ( plug-in ) к хакерскому закулисному пакету Back Orifice. Хотя BUTTSniffer первоначально предназначался для того, чтобы помогать контролировать сетевой трафик на собственном блоке Windows, привлечение режима War Mode позволяет пользователю захватывать некоторые сетевые подключения и сбрасывать их, срывая работу неосведомленных пользователей системы.
BUTTSniffer в диалоговом режиме, используйте некоторые из инструментальных средств, о которых мы говорили в предыдущих лекциях. В местном масштабе утилита netstat (лекции "Системные средства с открытым программным кодом: основы" и "Компоновка и использование набора инструментов для расследования хакерских атак...") сообщит вам, что порты TCP открыты и прослушиваются на вашем блоке Windows. Если вы видите что-то, чего не можете распознать, свяжитесь с ним с помощью утилиты telnet и посмотрите, что произойдет. В удаленном масштабе сканеры портов типа nmap или SuperScan (лекция "Сканеры портов") могут идентифицировать необычные TCP-порты. Так как некоторые из этих инструментальных средств могут фактически захватывать баннеры с портов,
то вы получите связку мусора с
порта демона программы BUTTSniffer. Вы можете применить telnet непосредственно к этому порту, чтобы подтвердить его присутствие.Если вы хотите контролировать некоторые виды деятельности в течение длительного периода времени, намного легче использовать режим дампа на диске. В этом режиме вы теряете многие из свойств "легкого использования" диалогового режима, но получаете возможность записывать эту деятельность в файл в определенных форматах, который позволяет вам запустить анализатор сетевых потоков ( ), оставить его работающим в течение дня и затем позже анализировать полученный журнал ( logfile ). Хакеры или системные администраторы могли бы даже писать скрипты для создания отчетов на основе выходных файлов анализатора.
Так же как и в диалоговом режиме, командная строка для режима дампа на диске в качестве первого параметра содержит номер устройства вашего интерфейса (полученный при первом выполнением команды buttsniff -l ). Второй параметр - это имя файла, который вы хотите использовать в качестве журнала регистрации. Третья опция - вид файла регистрации, который вы хотите получить. Для этой опции возможны три варианта: raw (r) (необработанный), encapsulation (e) (инкапсулированный) и protocol (p) (протокол). Варианты raw (r) и encapsulation (e) полезны только в том случае, если вы имеете шестнадцатеричный редактор и хорошее знание протокола, который вы прослушиваете, чтобы быть способным перебрать информацию байт за байтом. Большинство из нас выберут опцию протокола, поскольку в ней TCP-пакеты расшифровываются и отображаются в информативном, но простом для чтения файле регистрации.
Ниже приведена часть вывода из файла регистрации, полученного при использовании команды buttsniff -d 1 proto.log p:
Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 0 Source Port: 2111 Target Port: 23 Seq: 0919F2F2 Ack: 00000000 Flags: S Window: 65535 TCP ChkSum: 64163 UrgPtr: 0 Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 0 Source Port: 23 Target Port: 2111 Seq: 7BFD410D Ack: 0919F2F3 Flags: SA Window: 32120 TCP ChkSum: 49167 UrgPtr: 0 Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 0 Source Port: 2111 Target Port: 23 Seq: 0919F2F3 Ack: 7BFD410E Flags: A Window: 65535 TCP ChkSum: 27212 UrgPtr: 0 Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 3 Source Port: 2111 Target Port: 23 Seq: 0919F2F3 Ack: 7BFD410E Flags: PA Window: 65535 TCP ChkSum: 19269 UrgPtr: 0 00000000: FF FB 1F яы. Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 0 Source Port: 23 Target Port: 2111 Seq: 7BFD410E Ack: 0919F2F6 Flags: A Window: 32120 TCP ChkSum: 60624 UrgPtr: 0 Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 18 Source Port: 2111 Target Port: 23 Seq: 0919F2F6 Ack: 7BFD410E Flags: PA Window: 65535 TCP ChkSum: 10271 UrgPtr: 0 00000000: FF FB 20 FF FB 18 FF FB 27 FF FD 01 FF FB 03 FF яы яы.яы"яы.яы.я 00000010: FD 03 э
Мы вывели здесь совсем немного информации, так что давайте слегка разберемся с ней.
Ясно, что каждый пакет имеет свою собственную запись в журнале. Из первого пакета мы видим, что с адреса 192.168.1.101 послан пакет на адрес 192.168.1.100 с портом назначения 23 (telnet). Если мы посмотрим на флаги на этом пакете, то увидим, что установлен флаг S (или SYN ). Флаг SYN указывает на инициирование TCP-подключения. Следующая строка показывает ответ с адреса 192.168.100 обратно по адресу 192.168.1.101 к порту назначения (2111, в этом случае) с установленным флагом SA (или SYN/ACK ). Следующая строка показывает пакет с адреса 192.168.1.101 с установленным флагом A (или ACK ). Все это представляет методологию TCP - "трехэтапное квитирование" для установления соединения.
Итак, мы зафиксировали начало telnet подключения между этими двумя хостами. Ни один из первых трех пакетов не имеет никаких данных вне TCP-заголовков, но если мы посмотрим несколько ниже, то увидим шестнадцатеричный и ASCII-дамп некоторого "мусора", извлеченного из поля данных TCP-пакетов. Помните, что прежде чем telnet предоставит вам приглашение на вход в систему, клиент и сервер ведут переговоры относительно некоторых опций telnet (тип терминала, например). Этот "мусор" как раз и содержит такие переговоры. Пропустив их, мы должны найти более ценную информацию. Вот полезный текст:
Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 7 Source Port: 23 Target Port: 2111 Seq: 7BFD418A Ack: 0919F33F Flags: PA Window: 32120 TCP ChkSum: 35305 UrgPtr: 0 00000000: 6C 6F 67 69 6E 3A 20 login: Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 0 Source Port: 2111 Target Port: 23 Seq: 0919F33F Ack: 7BFD4191 Flags: A Window: 65404 TCP ChkSum: 27136 UrgPtr: 0 Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 1 Source Port: 2111 Target Port: 23 Seq: 0919F33F Ack: 7BFD4191 Flags: PA Window: 65404 TCP ChkSum: 2039 UrgPtr: 0 00000000: 62 b Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 1 Source Port: 23 Target Port: 2111 Seq: 7BFD4191 Ack: 0919F340 Flags: PA Window: 32120 TCP ChkSum: 35322 UrgPtr: 0 00000000: 62 b Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 1 Source Port: 2111 Target Port: 23 Seq: 0919F340 Ack: 7BFD4192 Flags: PA Window: 65403 TCP ChkSum: 64245 UrgPtr: 0 00000000: 6F o Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 1 Source Port: 23 Target Port: 2111 Seq: 7BFD4192 Ack: 0919F341 Flags: PA Window: 32120 TCP ChkSum: 31992 UrgPtr: 0 00000000: 6F o Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 1 Source Port: 2111 Target Port: 23 Seq: 0919F341 Ack: 7BFD4193 Flags: PA Window: 65402 TCP ChkSum: 2037 UrgPtr: 0 00000000: 62 b Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 1 Source Port: 23 Target Port: 2111 Seq: 7BFD4193 Ack: 0919F342 Flags: PA Window: 32120 TCP ChkSum: 35318 UrgPtr: 0 00000000: 62 b
Адрес 192.168.1.101 был представлен с приглашением входа в систему. Если мы сосредоточимся на пакетах, прибывающих с адреса отправителя 192.168.1.101 и направленных получателю 192.168.1.100, мы увидим, что пользователь набрал b-o-b. Каждый раз, когда хост с адресом 192.168.1.101 посылает символ, хост с адресом 192.168.1.100 повторяет его в обратном направлении. Сервер telnet "повторяет" то, что мы набрали, когда подтверждает получение наших символов. Другими словами, все, что мы набрали, никогда не должно отображаться у клиента. С протоколом telnet нажатия клавиши немедленно посылаются серверу вместо попадания в буфер клиента.
Если мы посмотрим еще ниже, то найдем действительно полезную информацию:
Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 10 Source Port: 23 Target Port: 2111 Seq: 7BFD4196 Ack: 0919F344 Flags: PA Window: 32120 TCP ChkSum: 1056 UrgPtr: 0 00000000: 50 61 73 73 77 6F 72 64 3A 20 Password: Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 0 Source Port: 2111 Target Port: 23 Seq: 0919F344 Ack: 7BFD41A0 Flags: A Window: 65389 TCP ChkSum: 27131 UrgPtr: 0 Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 1 Source Port: 2111 Target Port: 23 Seq: 0919F344 Ack: 7BFD41A0 Flags: PA Window: 65389 TCP ChkSum: 2034 UrgPtr: 0 00000000: 62 b Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 0 Source Port: 23 Target Port: 2111 Seq: 7BFD41A0 Ack: 0919F345 Flags: A Window: 32120 TCP ChkSum: 60399 UrgPtr: 0 Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 1 Source Port: 2111 Target Port: 23 Seq: 0919F345 Ack: 7BFD41A0 Flags: PA Window: 65389 TCP ChkSum: 64240 UrgPtr: 0 00000000: 6F o Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 0 Source Port: 23 Target Port: 2111 Seq: 7BFD41A0 Ack: 0919F346 Flags: A Window: 32120 TCP ChkSum: 60398 UrgPtr: 0 Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 1 Source Port: 2111 Target Port: 23 Seq: 0919F346 Ack: 7BFD41A0 Flags: PA Window: 65389 TCP ChkSum: 2032 UrgPtr: 0 00000000: 62 b Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 0 Source Port: 23 Target Port: 2111 Seq: 7BFD41A0 Ack: 0919F347 Flags: A Window: 32120 TCP ChkSum: 60397 UrgPtr: 0 Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 1 Source Port: 2111 Target Port: 23 Seq: 0919F347 Ack: 7BFD41A0 Flags: PA Window: 65389 TCP ChkSum: 14575 UrgPtr: 0 00000000: 31 1 Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 0 Source Port: 23 Target Port: 2111 Seq: 7BFD41A0 Ack: 0919F348 Flags: A Window: 32120 TCP ChkSum: 60396 UrgPtr: 0 Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 1 Source Port: 2111 Target Port: 23 Seq: 0919F348 Ack: 7BFD41A0 Flags: PA Window: 65389 TCP ChkSum: 14318 UrgPtr: 0 00000000: 32 2 Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 0 Source Port: 23 Target Port: 2111 Seq: 7BFD41A0 Ack: 0919F349 Flags: A Window: 32120 TCP ChkSum: 60395 UrgPtr: 0 Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 1 Source Port: 2111 Target Port: 23 Seq: 0919F349 Ack: 7BFD41A0 Flags: PA Window: 65389 TCP ChkSum: 14061 UrgPtr: 0 00000000: 33 3
Похоже на то, что мы подслушали нехитрый пароль Боба. Снова, сосредотачиваясь только на пакетах, прибывающих с адреса отправителя 192.168.1.101 получателю 192.168.1.100, мы видим, что пользователь набрал b-o-b-1-2-3. Обратите внимание, что пакеты подтверждения от сервера telnet не делают повторения ввода, как это произошло с именем пользователя. Так и должно быть, потому что когда мы вводим пароль, мы не видим его напечатанным на экране telnet.
Анализаторы сетевых потоков дают также отличную возможность узнать больше о TCP/IP. Здесь видно, как размер пакетов данных влияет на порядковый номер пакета, и как используются флаги.
Аналогично тому, как диалоговый режим инструмента BUTTSniffer имеет фильтры, режим дампа диска имеет необязательный "файл фильтра", который может быть указан в конце командной строки. Файл использует ту же самую методику, которая используется в диалоговом меню. Пустой файл фильтра означает, что BUTTSniffer должен регистрировать все. Если вы хотите сосредоточиться на определенном IP-адресе или порте, вы сначала должны исключить все остальное.
Ниже приводится синтаксис файла фильтра, который устанавливает тот же самый фильтр, который мы использовали в диалоговом режиме:
-*.*.*.* +192.168.1.100 -0-65535 +23 +80
Выглядит незамысловато. Сохраните этот текст как myfilter.fil, а затем выполните команду buttsniff-d 1 sniff.log p myfilter.fil, чтобы прослушивать только telnet и деятельность сети, направленную по адресу 192.168.1.100 и обратно.
myfilter.fil в этом примере единственным номером порта или диапазоном номеров порта, например, buttsniff-d l sniff.log p 23. Если вы хотите определить несколько портов не из диапазона, вам надо будет использовать файл фильтра.Загружаемый с сайта http://www.tcpdump.org, tcpdump является широко конфигурируемым пакетом анализатора сетевых потоков, который управляется из командной строки и предназначен для системы Unix. В то время как BUTTSniffer первоначально предназначался как дополнительный хакерский модуль ( plug-in ) для подслушивания на собственной системе, tcpdump был сделан специально для прослушивания сети, анализа и тестирования трафика и для перехвата пакетов.
tcpdump, скорее, представляет собой анализатор сетевых пакетов, чем сетевых потоков. Его способности фильтрации превосходят многие другие инструментальные средства, но он не обязательно облегчит вам перехват пакетов данных. Утилита действительно позволяет получать много интересной низкоуровневой информации о пакетах, передающихся по вашей сети, и может помочь вам диагностировать все виды сетевых проблем.
Утилиты Tcpdump и WinDump, ее воплощение под Windows, используют библиотеку pcap, набор подпрограмм по перехвату пакетов данных, написанный в Национальной лаборатории Лоренса Беркелея (Lawrence Berkeley National Laboratory). Программы pcap обеспечивают интерфейс и функциональность для фильтрации пакетов на уровне операционной системы и дизассемблирование IP-пакетов в необработанные данные.
Сначала необходимо загрузить и установить . Библиотека libpcap работает только в том случае, если ваша система использует механизм фильтрации пакетов уровня ядра, который она может распознать. У Linux есть свой собственный встроенный "пакетный" протокол, который libpcap признает и с которым она работает, при условии, что ваше ядро Linux скомпилировано с надлежащими опциями. Варианты BSD (Berkeley Software Distribution) и другие клоны операционной системы Unix используют BPF (Berkeley Packet Filtering).
После того как вы загрузили библиотеку libpcap и разархивировали ее, выполните скрипт выбора конфигурации. Ищите строку, в которой написано "checking packet capture type" (проверка типа перехвата пакета), чтобы выяснить какой механизм использует ваша система. Если libpcap не признает ваш пакетный фильтр, вам потребуется обратиться к сопровождающей систему документации, чтобы выяснить, как решить эту проблему. В противном случае, вы можете продолжить установку libpcap так, как вы бы устанавливали любой другой исходный файл под Unix (make и make install). После установки libpcap утилита tcpdump может быть установлена таким же способом.
Как и в случае с Unix, перед установкой . У WinPcap нет никаких опций установки. Устанавливается в течение примерно пяти секунд.
Теперь все, что вы должны сделать, это направиться на сайт http://netgroup-serv.polito.it/windump/ и загрузить windump.exe. Все готово!
WinDump - это просто порт Windows утилиты tcpdump. Использование tcpdump и WinDump почти взаимозаменяемо. В этой лекции мы сосредоточимся на утилите tcpdump, отмечая все различия между WinDump и tcpdump по мере продвижения. Вообще, если вы работаете дома, один, то можете использовать tcpdump вместо WinDump.
Первое обстоятельство, которое нужно иметь в виду, заключается в том, что утилита tcpdump обычно требует привилегированного доступа (root). Она должна выполняться с доступом root или tcpdump и библиотеке libpcap для того, чтобы иметь очень низкий уровень доступа (то есть уровень ядра) к сетевым интерфейсам и сетевым данным. Это также удерживает "пользователя Джо" от установки анализатора сетевых пакетов для неуместного использования. Некоторые системы Unix требуют большего, а некоторые меньшего доступа - детали смотрите с помощью утилиты man или в файле README.
WinDump / WinPcap сделана немного слабее, чем защита tcpdump / libpcap. Когда выполняется WinDump, она пытается загружать файл WinPcap DLL, если он еще не выполняется. Загружать эту библиотеку DLL можно только с привилегиями администратора. Однако если WinPcap уже выполняется, то любой пользователь может с этого момента использовать его до тех пор, пока система не будет перезагружена или не будет остановлена служба Netgroup Другая причина, по которой пользователи libpcap и WinPcap нуждаются в низкоуровневом доступе, состоит в том, что по умолчанию эти анализаторы сетевых потоков переводят сетевой интерфейс, на котором они работают, в смешанный режим. Если вы помните наше обсуждение в начале лекции, некоторые сетевые устройства, типа хабов Ethernet, фактически передают пакет ко всем портам хаба, надеясь, что законный получатель обнаружит себя и примет пакет. Другие хосты, связанные с хабом, также получают этот пакет, но они, как предполагается, игнорируют его. Смешанный (Promiscuous) режим предписывает интерфейсу вмешиваться в чужие дела, и это позволяет утилите tcpdump видеть весь сетевой трафик на хабе, а не только трафик, который направлен к хабу или от него. То же самое происходит, если вы выполняете tcpdump на маршрутизаторе или брандмауэре. Если интерфейс не находится в смешанном режиме, вы видите только трафик, направленный непосредственно маршрутизатору. Н
о если мы помещаем интерфейс в смешанный режим,
то можем прослушивать каждый пакет, который проходит через устройство. Многие организации захотят установить анализатор сетевых пакетов ( ) на своих главных маршрутизаторах выхода в интернет с целью контроля.
Теперь нам нужно выполнить приложение. Если вы просто напечатаете tcpdump в приглашении к вводу команды, то tcpdump будет пытаться прослушивать первый доступный сетевой интерфейс (или все интерфейсы, если это возможно) и выдаст все данные, которые она увидит. В зависимости от того, насколько занята ваша система, или от того, связана ли она с хабом или с портом монитора коммутатора, вы можете увидеть большие свитки текста. Вы можете заметить, что tcpdump, похоже, отображает только хосты, вовлеченные в сетевые транзакции, метку времени и некоторые другие IP-данные. Но где же содержание пакета? Очевидно, вам надо узнать больше об этом инструменте, чтобы заставить его сообщать вам больше информации.
tcpdump - мощный инструмент, но у него нет дружественного интерфейса. Подобно Netcat, nmap и другим чрезвычайно полезным инструментальным средствам, запускаемым из командной строки, которые мы описали ранее, утилита tcpdump становится полезной только после того, как вы овладеете синтаксисом и опциями командной строки.
Утилита tcpdump позволяет использовать AND, OR или NOT. Типичный формат выражения такой:
<Характеристика пакета> <значение>
Спецификаторы типа. Наиболее типичные характеристики пакета, называемые спецификаторами ( ) - спецификаторы типа: host (хост), net (сеть) и port (порт). Например, командная строка:
%tcpdump host 192.168.1.100
говорит о том, что мы хотим видеть только пакеты, идущие по адресу 192.168.1.100 или от него. Если нас интересует только Web-трафик, мы можем попробовать следующее:
%tcpdump host 192.168.1.100 and port 80
Это выражение позволяет нам иметь тот же самый уровень функциональности фильтра, который мы имели с программой BUTTSniffer. Но утилита tcpdump имеет еще несколько модификаторов, из которых вы можете выбирать. В данном случае, нам не надо сначала исключать весь трафик, чтобы сосредоточиться на определенном хосте.
Спецификаторы направления. tcpdump позволяет определять фильтры направлений. Например, если нас интересует только трафик, прибывающий с адреса 192.168.1.100, который предназначен чьему-то Web-порту, мы используем спецификаторы направлений src и :
%tcpdump src host 192.168.1.100 and dst port 80
Этот фильтр дает нам именно то, что мы ищем. Иначе, мы видели бы трафик, прибывающий из других мест на Web-сервер хоста 192.168.1.100, когда это нас совсем не интересует.
Если вы не указываете спецификатор направления для спецификатора типа, tcpdump подразумевает src или . Вторая команда, которую мы рассматривали, могла бы быть переписана следующим образом:
%tcpdump src or dst host 192.168.1.100 and src or dst port 80
tcpdump использует другие спецификаторы направления inbound (прибывающий) и outbound (исходящий).Спецификаторы протокола. У tcpdump также есть спецификаторы протокола, которые могут применяться к вашему выражению. Например, строка
%tcpdump src host 192.168.1.100 and udp dst port 53
даст исходящие DNS (Domain Name System) запросы с хоста 192.168.1.100. Обратите внимание на спецификатор протокола udp, расположенный перед спецификатором порта . Другие спецификаторы протокола для спецификаторов типа порта - tcp и icmp. Некоторые спецификаторы протокола используются при спецификаторах типа хоста, например ip, ip6, arp и ether.
Эта команда дает все arp-запросы на нашей локальной подсети:
%tcpdump arp net 192.168.1
Если мы знаем MAC-адрес определенного хоста, и хотим установить на него фильтр, то можно использовать следующую строку:
%tcpdump ether host 00:e0:29:38:b4:67
Если никакие спецификаторы протокола не даны, tcpdump подразумевает значения ip, arp или для спецификаторов типа хоста, и tcp или udp для спецификаторов типа порта.
Другие спецификаторы. До сих пор синтаксис для отдельного выражения, устанавливающего соответствие пакетов некоторым требованиям, выглядит так:
[Спецификатор протокола] [спецификатор направления] <спецификатор типа> значение
Несколько других необязательных спецификаторов, которые могут использоваться для определения дополнительных характеристик пакета, показаны в таблице 14.1.
| Спецификатор | Описание | Примеры |
|---|---|---|
gateway |
Отображает только пакеты, которые используют router1 в качестве шлюза (gateway). Значение, используемое с gateway, должно быть именем хоста, поскольку выражение должно разрешать имя хоста к IP-адресу (используя /etc/hosts или DNS), а также к Ethernet-адресу (используя /etc/ethers). | tcpdump gateway router1 (Чтобы использовать прямо IP- и MAC-адреса, используйте tcpdump ether host <mac_of_host> and not ip host <ip_of_host>, что эквивалентно использованию фильтра шлюза, но с адресами вместо имен хостов.) |
broadcast, multicast |
broadcast отображает только широковещательные пакеты, (в данном случае, пакеты с адресами получателя 192.168.1.0 или 192.168.1.255). multicast отображает только IP-пакеты, предназначенные группе адресов. | tcpdump ip broadcast net 192.168.1 |
proto |
Этот полезный спецификатор позволяет вам определять подпротоколы определенного протокола, даже если у tcpdump нет для этого встроенного ключевого слова. Названия протоколов нужно отделять, используя обратную наклонную черту, чтобы оградить tcpdump от интерпретации их, как ключевого слова, но вы можете также в этом месте использовать номера протоколов. Некоторые популярные номера IP-подпротоколов следующие: 1 (ICMP), 6 (TCP) и 17 (UDP). |
tcpdump ip proto 17. (Выражение ip host 192.168.1.100 and tcp port 80 может быть записано как ether proto \\ip and host 192.168.1.100 and ip proto \\tcp and port 80. Обратите внимание, как модификатор протокола в каждом случае расширяется к <protocol> proto <sub-protocol>.) |
mask |
Этот спецификатор может определить маску подсети для спецификаторов типа сети. Это редко используется, потому что можно указать |
tcpdump net 192.168.1.0 mask 255.255.255.0. (Или по другому, как tcpdump net 192.168.1.0/24.) |
len,_greater,_less |
Пакеты могут быть отфильтрованы по их размеру. Спецификаторы greater и less являются просто сокращением для длинных выражений, которые используют ключевое слово len. В обоих примерах показываются только пакеты, которые имеют размеры 80 байт или больше. | tcpdump greater 80 и tcpdump len>= 80. |
Packet_content_expressions |
Для опытных пользователей. Вы можете фильтровать пакеты, основываясь на их содержании. Используйте название протокола (такое как ether, ip или tcp), за ним значение смещения в байтах от искомого заголовка в квадратных скобках, как индекс массива (udp [4], чтобы определить длину UDP-дэйтаграммы), далее булевский оператор и другое выражение. Обратите внимание, что большинство выражений должно быть заключено в кавычки, потому что tcpdump. |
tcpdump 'udp[4] >= 24'. (В этом примере отображаются только UDP-пакеты, у которых размеры полезных данных превышают 24 байта. См. другие примеры в справке man.) |
Значения. Очевидно, что значения для спецификаторов зависят от используемого спецификатора. В общем виде, значение может быть или символическим названием, или соответствующим числом.
host - спецификаторы типа хостов имеют значения имен хостов или числовых адресов. (Являются ли они IP-адресами, MAC-адресами или другими адресами, зависит от предшествующего им спецификатора протокола.)port - спецификаторы типа портов используют символические названия (из /etc/services) для портов или непосредственно номера портов.net - спецификаторы типа сети используют сетевые адреса и маски сети написанные или с сетевыми октетами (типа 192.168), с последующим числом сетевых байтов (192.168.0.0/16), или с последующей proto - спецификаторы типа протокола используют символические названия ( ip, tcp, udp ) или номера протоколов, определенные в /etc/protocols.WinDump использует хосты и файлы служб, которые установлены в корневом каталоге Windows (например, C:\Windows\).Теперь давайте перейдем к рассмотрению более важных флагов и опций, описанных в таблице 14.2.
| Опция | Объяснение |
|---|---|
-a |
Разрешает IP-адреса к именам хостов. |
-c <num> |
Прослушивает до тех пор, пока мы не получили <num> пакетов, а затем выходит. |
-d, -dd, - |
Берет фильтр, который вы указали в командной строке и, вместо прослушивания, выводит пакеты, код которых соответствует этому фильтру, в скомпилированном ассемблерном коде, фрагментах программы на языке C, или в десятичном представлении. Используется главным образом для отладки и редко полезен для новичков и пользователей среднего уровня. |
-e |
Отображает заголовок канального (link-level) уровня. Например, если вы находитесь в сети Ethernet, вы можете отображать Ethernet-заголовки своих пакетов. Опция полезна, если вы интересуетесь низкоуровневыми деталями определенной части сетевого трафика (например, определением MAC-адреса другой машины). |
-F <file> |
Определяет выражение для фильтра из файла вместо командной строки. |
-i |
Прослушивает определенный интерфейс. В системе Unix вы можете использовать ifconfig, чтобы увидеть доступные сетевые интерфейсы. В Windows вы можете использовать windump-D, чтобы найти номер интерфейса, который соответствует интересующему вас сетевому интерфейсу. |
-l |
Осуществляет буферизацию строк, использующуюся в стандартном выводе tcpdump, так что вы можете просматривать файл постранично. Без этой опции, tcpdump. |
-n |
Не разрешает IP-адреса к именам хостов. |
-N |
Подавляет печать |
-O |
Подавляет оптимизатор кода фильтрации пакетов. Используйте эту опцию, если вам кажется, что пакетный фильтр, которым вы снабдили tcpdump, теряет нужные пакеты или наоборот включает пакеты, которые должны быть отфильтрованы. |
-p |
Вынуждает tcpdump не помещать сетевой интерфейс в смешанный режим. Опция полезна, если вы заинтересованы только в прослушивании локального трафика (то есть трафика, идущего к машине, на которой вы работаете, и от нее). |
-q |
Вынуждает tcpdump не печатать слишком много информации о заголовке пакета. Вы потеряете много практически важных деталей, но все еще будете видеть время передачи и вовлеченные хосты. |
-r <file> |
tcpdump может записать свой вывод в двоичный файл (см. -w). Эта опция вынуждает tcpdump читать этот файл и отображать его. Так как tcpdump перехватывает необработанные данные, основываясь на |
-s <bytes> |
Определяет, сколько байтов на пакет должна попытаться "схватить" утилита tcpdump. Значение по умолчанию - 68. Если сделать это значение слишком большим, tcpdump может начать пропускать пакеты. |
-S |
Вынуждает tcpdump печатать абсолютные порядковые номера TCP-пакетов. По умолчанию используются относительные порядковые номера так, чтобы вы могли видеть, на сколько байтов изменяется порядковый номер между пакетами за время TCP-подключения. Использование абсолютных номеров означает, что вам понадобится делать некоторые вычисления самостоятельно. |
-t, -tt |
Вынуждает tcpdump не печатать метку времени вообще, или печатать не отформатированную метку (число секунд, начиная с 1 января 1970). |
-T <type> |
tcpdump может естественно интерпретировать некоторые другие IP-протоколы, и отображать соответствующим образом отформатированный вывод для них, например DHCP, NBT и ARP. Эта опция вынуждает tcpdump особым образом интерпретировать выбранные пакеты, как определенный тип протокола, типа RPC или SNMP. |
-v, -vv, -vvv |
Управляет уровнем многословия утилиты tcpdump. Чем большее количество символов -v вы установили, тем больше получите информации. |
-w <file> |
Означает, что не надо переводить данные перехваченного пакета в удобочитаемый формат, а писать их в двоичный файл, с именем <file>. Опция полезна, если вы tcpdump или другой инструмент типа Ethereal, чтобы рассмотреть их позже различными способами (см. -r). Так как в этом случае данные не переводятся в удобочитаемый формат, это делает утилиту tcpdump более эффективной, и снижает вероятность пропуска пакетов. Полезно использовать в системе с чрезвычайно большим объемом трафика. |
-x |
Отображает пакет в шестнадцатеричном формате. Посидите с выводом этой команды и с книгой по TCP/IP, если вы хотите больше узнать о TCP-заголовках и такого рода вещах. Эта продвинутая функция может помочь в прослушивании пакетов, которые могут скрывать данные в опциях IP или другим способом искореженные пакеты. |
-X |
Подобна шестнадцатеричной опции, но это как раз та опция, которую мы искали! В дополнение к шестнадцатеричному дампу, она отображает содержание пакета в ASCII-коде, позволяя нам видеть любые ясные текстовые символьные данные, содержащиеся в пакете. Это та опция, с которой мы могли бы прослушивать имена пользователей, пароли и другую интересную информацию, плавающую в сети. |
В справке man для tcpdump раздел вывода является, вероятно, одним из самых больших разделов. Поскольку tcpdump пробует интерпретировать некоторые протоколы по-разному, то фактический вывод tcpdump изменится также в зависимости от опций, которыми вы ее снабдили и типа пакетов, которые вы фильтруете. Мы не можем рассмотреть здесь все, но рассмотрим некоторый основной вывод утилиты tcpdump и поговорим о том, что он значит.
Ниже приводится вывод утилиты tcpdump, полученный без опций.
20:11:28.527191 eth0 B somehost.netbios-ns > 192.168.1.255.netbios-ns:NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST 20:11:28.531361 eth0 arp who-has 192.168.1.1 tell originix (0:e0:29:38:b4:67) 20:11:28.531939 eth0 arp reply 192.168.1.1 is-at 0:4:5a:e3:44:a3 (0:e0:29:38:b4:67) 20:11:28.531994 eth0 originix.1024 ns01.domain: 49930+ PTR? 255.1.168.192.in-addr.arpa. (44) 20:11:28.630838 eth0 ns01.domain originix.1024: 49930 NXDomain* 0/1/0 (116) (DF) 20:11:28.632600 eth0 originix.1024 ns01.domain: 49931+ PTR? 1.1.168.192.in-addr.arpa. (42) 20:11:28.655958 eth0 ns01.domain originix.1024: 49931 NXDomain 0/1/0 (114) (DF) 20:11:28.657685 eth0 originix.1024 ns01.domain: 49932+ PTR? 150.1.1.10.in-addr.arpa. (41) 20:11:28.668566 eth0 ns01.domain originix.1024: 49932 1/2/2 PTR ns01. (162) (DF) 20:11:29.277025 eth0 B somehost.netbios-ns 192.168.1.255.netbios-ns:NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
Давайте вначале сосредоточимся на отдельной строке. Первое значение представляет собой временную метку для пакета. Заметьте, что заданный по умолчанию формат не включает дату. Следующая порция информации - это интерфейс, на котором этот пакет был получен. После интерфейса мы видим <, > или B. Это указание, был ли пакет входящим, выходящим или широковещательным. Затем мы видим имена хостов или IP-адреса, за которыми следует точка и имя порта или номер. Знак "больше" (>) указывает, что хост и порт отправителя будут всегда слева, а хост и порт получателя будут всегда справа.
Первый пакет распознан как NetBIOS поверх TCP- (NBT-) пакета. Поскольку tcpdump может интерпретировать часть информации о пакете, он сообщает вам, что somehost выполнял широковещательный запрос NetBIOS, вероятно пробуя искать имя хоста для сетевого IP-адреса.
Второй пакет оказался запросом протокола определения адресов (ARP). ARP отображает IP-адрес на MAC-адрес Ethernet и наоборот. Originix посылает запрос ARP, прося MAC-адрес, соответствующий адресу 192.168.1.1 (возможно, это его шлюз). На следующей строке шлюз отвечает со своим MAC-адресом. Теперь два адаптера Ethernet могут говорить друг с другом на канальном уровне (
Четвертая и последующие строки содержат то, что оказалось трафиком DNS. Originix делает запрос к ns01 через порт домена 53. Поскольку утилита tcpdump может также интерпретировать пакеты DNS, то она пытается дать информацию о фактическом содержании пакета, включая тип запроса и адрес, с которого он сделан. Из вывода следует, что сначала она выполняет обратный поиск на "широковещательном" адресе (192.168.1.255), затем она пробует обратный поиск на 192.168.1.1, и, наконец, она пробует разрешать 10.1.1.150. Первые два поиска оканчиваются неудачей и получением сообщений "NXDomain" или "несуществующий домен" с DNS-сервера. Но адрес 10.1.1.150 успешно разрешается к имени ns01, которое является именем самого сервера.
Выше был приведен пример некоторых пакетов, которые утилита tcpdump может естественно интерпретировать.
С другими пакетами, подобными нормальному telnet- или SSH-трафику, будет отображена только информация о пакетах, и ничего больше.
20:28:48.375504 eth0 <somehost.2765 > originix.ssh: P 13024:13068(44) ack 42597 win 64695 (DF) 20:28:48.375574 eth0 >originix.ssh > somehost.2765: P 42597:42877(280) ack 13068 win 32120 (DF) 20:28:48.377010 eth0 < somehost.2765 > originix.ssh: P 13068:13200(132) ack 42877 win 64415 (DF) 20:28:48.377081 eth0 >originix.ssh > somehost.2765: P 42877:43157(280) ack 13200 win 32120 (DF)
Здесь мы поймали середину SSH-сеанса между Originix и somehost. Мы можем видеть, что установлен флаг P (push). Мы можем также видеть размер пакетов, поскольку утилита отображает относительный порядковый номер TCP-пакета, за которым следует ожидаемый номер и размер пакета (13024:13068 (44)). Заметьте, что вторая строка дает ack 13068. Это оказывается подтверждением получения предыдущего пакета, и того, что 13068 является следующим номером пакета, который он ожидает. Размер TCP-окна (наибольшее количество данных, которые он может обрабатывать) сообщается хостом в каждом пакете, и в этом примере установлен бит "не фрагментировать", чтобы препятствовать
Вы можете многое узнать о внутренней работе TCP, выполняя tcpdump и наблюдать, что происходит, когда вы запускаете сеанс telnet. Проверьте следующее.
20:30:58.635657 eth0 < somehost.2910 > originix.telnet: S 213111209:213111209(0) win 65535 <mss 1460,nop,nop,sackOK> (DF) 20:30:58.636019 eth0 > originix.telnet > somehost.2910: S 1513461939:1513461939(0) ack 213111210 win 32120 <mss 1460,nop,nop,sackOK> (DF) 20:30:58.636659 eth0 < somehost.2910 > originix.telnet: . 1:1(0) ack 1 win 65535 (DF) 20:30:58.639213 eth0 < somehost.2910 > originix.telnet: P 1:4(3) ack 1 win 65535 (DF)
Выше приведен вывод, который дает tcpdump, встречая подключение telnet. В двух первых строчках обратите внимание на отличия от тех пакетов, которые мы рассматривали в сеансе SSH. Этот пакет начинает подключение. Мы можем это утверждать, потому что установлен флаг S (SYN). Мы также видим, что порядковые номера пакетов в двух первых строках намного больше. Дело в том, что tcpdump использует фактические порядковые номера TCP-пакетов (32-х битные значения из диапазона от 0 до 4294967295) в начале TCP-подключения. Для остальной части подключения по умолчанию используются значения относительных порядковых номеров так, чтобы пользователям было легче видеть изменения во время передвижения пакетов туда-сюда. Мы также видим некоторые опции TCP, по которым ведутся переговоры во время трехэтапного "квитирования" (mss1460, somehost начинает посылать данные (3 байта заслуживающих внимания данных).
Используя программу BUTTSniffer, мы наблюдали процесс входа в систему из сеанса telnet. Мы можем делать это и с помощью утилиты tcpdump, используя опцию -X, чтобы отобразить содержание пакета в ASCII-коде. Однако поскольку эта опция отображает и заголовки пакета, и данные, то трудно локализовать то, что мы ищем. Сеанс telnet особенно труден для прослушивания с помощью tcpdump, потому что пакет посылается для каждого символа, который печатается. Соединить это в одно целое вручную может быть трудно. Но таким путем все-таки можно подслушать любого клиента, который держит в памяти информацию о пользователе и о пароле, а затем посылает ее одновременно в одном пакете (подобно Web-транзакции по HTTP, или входу в систему по FTP).
Давайте попробуем подслушать сеанс FTP с помощью команды tcpdump -X . Поскольку FTP использует команды USER и PASS для пересылки имени пользователя и пароля, мы должны искать вывод, содержащий эти команды.
20:51:06.697724 somehost.2937 originix.ftp: P 0:10(10) ack 84 win 65452 (DF) 0x0000 4500 0032 5bd4 4000 8006 1ad8 c0a8 0165 E..2[.@........e 0x0010 c0a8 0164 0b79 0015 0cc6 3325 a621 9a45 ...d.y....3%.!.E 0x0020 5018 ffac 68a7 0000 5553 4552 2062 6f62 P...h...USER.bob 0x0030 0d0a .. 20:51:06.893543 somehost.2937 originix.ftp: . ack 116 win 65420 (DF) 0x0000 4500 0028 5fd4 4000 8006 16e2 c0a8 0165 E..(_.@........e 0x0010 c0a8 0164 0b79 0015 0cc6 332f a621 9a65 ...d.y....3/.!.e 0x0020 5010 ff8c a023 0000 0000 0000 0000 P....#........ 20:51:10.828077 somehost.2937 originix.ftp: P 10:23(13) ack 116 win 65420 (DF) 0x0000 4500 0035 64d4 4000 8006 11d5 c0a8 0165 E..5d.@........e 0x0010 c0a8 0164 0b79 0015 0cc6 332f a621 9a65 ...d.y....3/.!.e 0x0020 5018 ff8c fe75 0000 5041 5353 2062 6f62 P....u..PASS.bob 0x0030 3132 330d 0a 123 ..
Фильтруя только трафик, предназначенный для порта 21, и используя опцию -X, мы можем легко обнаруживать информацию FTP, предназначенную для входа в систему. В этом примере снова появился пользователь bob, регистрирующий вход на FTP-сервер на хосте originix с паролем bob123.
Инструмент Ethereal представляет собой хороший графический внешний интерфейс к файлам перехваченных пакетов, созданным несколькими различными перехватчиками пакетов ( ), включая tcpdump и WinDump. Он имеет также свои собственные "живые" способности перехвата пакетов, использующие библиотеку pcap. Применяя Ethereal к предварительно созданным файлам перехваченных данных, вы можете рассматривать детали зафиксированного сеанса, включая данные пакета.
Инструмент /. Для его работы требуется библиотека pcap. Также необходимо иметь установленную библиотеку GIMP Toolkit (GTK), потому что инструмент использует GTK для своего графического интерфейса. Пользователям Windows повезло, поскольку DLL-файлы GTK теперь поставляются в двоичном коде. За исключением опций установки инструмента, сама установка для обеих операционных систем достаточно похожа. Поскольку мы уже описали установку этих инструментов для Unix и Windows в предыдущих разделах, то перейдем сразу к более интересной части.
Ethereal состоит из нескольких встроенных инструментальных средств, которые должны устанавливаться по умолчанию и в Windows и в Unix. Путем выбора вы можете пропускать инсталляцию некоторых из этих компонентов, но мы рекомендуем включить все.Самый простой путь состоит в применении Ethereal к уже существующему файлу перехваченных пакетов, созданному с использованием командной строки tcpdump -w capture.. В этом случае мы можем открыть файл дампа File/Open (Файл/Открыть). Откроется диалоговое окно Open Capture File (Открытие перехваченного файла), показанное ниже.

В этом диалоговом окне вы можете выбрать открываемый файл, а также установить такие опции, как разрешение имен и дополнительные
Давайте откроем файл capture.
(рис 14.1) Отображение в Ethereal файла дампа сеанса telnet, созданного утилитой WinDump Как видно из рисунка, у Ethereal гораздо более понятный интерфейс, чем у tcpdump или WinDump. Верхняя панель содержит информацию, подобную той, которую дают два других инструмента, но здесь фактически мы можем перемещаться по этим данным. На рисунке выбран первый пакет подключения. В средней панели мы можем видеть детальную информацию о каждом заголовке пакета, включая TCP, IP и заголовочную информацию Ethernet. Третья панель содержит шестнадцатеричный и ASCII-дамп фактического содержания пакета. Таким образом, мы можем получить любой бит интересующей нас информации о любом пакете этого подключения, включая данные.
Графический интерфейс программы Ethereal облегчает создание пакетных фильтров как для файлов перехваченных пакетов (фильтры отображения) так и для "живого" перехвата (фильтры перехвата) через диалоговое окно Display Filter (Отображение фильтра), доступное по щелчку на кнопке Filter (Фильтр) в нижнем левом углу.

Вы можете дать имя своим фильтрам и сохранить их для последующего использования, чтобы загрузить их позже простым выбором и щелчком. После того как вы изучите синтаксис фильтров программы .
(рис 14.2) Добавление выражений к фильтру с помощью графического интерфейса, мы ищем только пакеты TCP SYN (начало TCP-подключений). Чтобы комбинировать фильтры, можно использовать
.
(рис 14.3) Отслеживание TCP-потокаВ окне, отображающем содержание, мы можем воссоздать части фактического TCP-сеанса. Мы можем использовать расшифровку ASCII или шестнадцатеричного кодов, рассматривать полный сеанс связи или его определенную часть, и сохранить это все в файле или напечатать. (В окне на рис 14.3 синим цветом отмечен текст, который приходит с сервера, а красным - текст, приходящий от клиента). Еще раз напомним, что мы перехватили здесь пароль бедного Боба (bob123).
Вы можете пытаться расшифровывать пакет, используя один из многих доступных протоколов. Обычно в этом нет никакой надобности, так как Ethereal определяет протокол и делает расшифровку автоматически для большинства перехваченных данных.
Из меню Tools вы можете также выполнить анализ TCP-потока по пропускной способности, по времени передачи туда и обратно и по номерам TCP-пакетов. На рис 14.4 показан анализ, использующий порядковые номера и время. Это дает вам представление о том, какой объем данных был послан на разных точках подключения, потому что порядковые номера увеличиваются на размер пакета данных.
(рис 14.4) График зависимости порядковых номеров от времениНа графике пропускной способности, показанном на рис 14.5 видно, что большинство данных в этом подключении было послано в начале подключения (вероятно, это опции telnet).
Каждый график, показанный на рис 14.4 и рис 14.5, имеет множество опций, включая изменение размера окна и ориентации.
Мы можем также обратиться к итоговому диалоговому окну, показанному на рис 14.6, которое анализирует подключение, в т.ч. длительность подключения в секундах, число пакетов, фильтр, использованный при перехвате пакетов, и информацию о скорости передачи. Чтобы открыть это диалоговое окно, выберите в меню Tools/Summary.

(рис 14.6) График пропускной способности(рис 14.5) Диалоговое окно Summary (Резюме) утилиты EtherealДиалоговое окно Protocol
Ethereal имеет несколько заданных по умолчанию характеристик, которые вы можете изменять, включая предпочитаемый протокол, макет графического интерфейса, и разрешение имен. Вы можете видеть список поддерживаемых протоколов, щелкая правой кнопкой мыши на любой характеристике пакета. Выберите опции Match (Установить соответствие) и Prepare (Подготовить), чтобы фильтровать пакеты на основе определенных характеристик. Выберите Match, если вы хотите создать и применить фильтр, основанный на соответствии, которое вы определите, или Prepare, если вы хотите только посмотреть инструкцию, созданную для фильтра, и возможно, изменить ее самостоятельно. Можете изменить так же способ форматирования данных и напечатать их. Возможности кажутся бесконечными.
Утилита dsniff представляет собой совокупность бесплатных инструментальных средств, которые первоначально были написаны для тестирования сети и возможностей проникновения в нее, но они могут использоваться и в неправедных целях для прослушивания и похищения чужой информации.
Утилита . Она требует также нескольких других пакетов, включая OpenSSL, libpcap, , libnet и libnids. Вам, вероятно, не составит труда найти двоичные версии этих пакетов для вашей конкретной операционной системы Unix.
libpcap должен быть установлен раньше, чем libnet, а libnet - раньше, чем libnids.dsniff компонуется подобно любому другому приложению Unix ( configure, make, make install ). Во время установки dsniff по умолчанию разместит все свои инструментальные средства в каталоге /usr/local/sbin.
Как уже упоминалось, dsniff фактически является совокупностью различных инструментальных средств. Мы кратко рассмотрим каждый индивидуальный инструмент, что он может делать, и как он может использоваться в хороших и дурных целях.
Мы говорили о том, как сетевые коммутаторы делают прослушивание более трудоемким, потому что коммутатор достаточно интеллектуален: он знает MAC-адреса Ethernet каждой машины на каждом порту, поэтому только машина адресата получает пакет. Однако прослушивание в переключаемых сетях все еще возможно путем Arpspoof позволяет это делать.
ARP - это протокол, использующийся для преобразования IP-адресов в MAC-адреса Ethernet. Поскольку ARP-запросы передаются "широковещательно" для всей сети (типа такого: "Эй, вы, которая из ваших Ethernet-карт имеет IP-адрес 192.168.1.100?"), то они всегда будут доходить до всех. Хост, выполняющий Arpspoof, может сообщить подателю ARP-запроса, что искомый IP-адрес у него, даже если на самом деле это не так. Вы можете обмануть хост, подавший ARP-запрос и переключить посылку пакета на себя вместо получателя, которому он предназначался. Затем вы можете сделать копию пакета и использовать механизм пересылки пакета, чтобы отправить пакет его первоначальному адресату подобно ретранслятору.
Использование arpspoof из командной строки следующее: arpspoof host_to_snarf_packets _from (то есть хост, у которого надо перехватить пакет). С помощью опции -i вы можете указать сетевой интерфейс, который надо использовать, а, используя опцию -t, вы можете указать определенные хосты, которые хотите обмануть. По умолчанию, Arpspoof подделывает MAC-адрес хоста, который указан в командной строке ( host_to_snarf_packets_from ), под все хосты локальной сети (LAN). Наиболее популярным хостом, подверженным ARP-
Этот инструмент работает подобно Arpspoof. Он позволяет подделывать DNS-ответы для DNS-сервера локальной сети. Поскольку DNS выполняется по протоколу пользовательских дейтаграмм (UDP), не требующему установки соединения, то DNS-клиент сделает запрос и будет ожидать ответа. Инструмент dnsspoof просто подделает ответ (сообщая клиенту, что имя хоста оказалось соответствующим его IP-адресу) и попытается получить информацию прежде, чем прибудет реальный ответ от соответствующего DNS-сервера. dnsspoof может подделывать ответы для всех DNS-запросов, которые он получает. Вы также можете создать файл в формате hosts(5) (с именем spoofhosts, например) для преобразования только определенных имен в ваш локальный IP-адрес, а затем выполнить утилиту dnsspoof с опцией f spoofhosts, чтобы подделывать результат преобразования только для определенных имен.
Кроме той же самой опции i, которую Arpspoof принимает для определения сетевого интерфейса, единственным дополнительным параметром, который принимает dnsspoof, является выражение для фильтра перехватываемых пакетов, аналогичное используемому в tcpdump. Инструмент dnsspoof будет использовать это выражение для поиска какого-нибудь DNS-трафика, где он мог бы подделывать ответы на любые входящие запросы в локальную сеть, которую он может видеть. Если вы сначала используете Arpspoof для подделки MAC-адреса DNS-сервера, которому предназначался запрос, то можете быть уверенны, что dnsspoof будет всегда получать DNS-запросы для локальной сети (LAN) и будет всегда способен дать в ответ фальсифицированный результат отображения имен хоста/IP-адреса.
Инструмент dsniff представляет собой перехватчик паролей ( password ), который распознает несколько различных протоколов, включая telnet, FTP, SMTP, POP (Ethereal, дают вам тонны дополнительной информации о подключении и об индивидуальных пакетах, инструмент dsniff используется в случае, если вас интересуют только имена пользователей и пароли. Инструмент весьма эффективен. Он сохраняет только "полезную" информацию в выходном файле
Флаги командной строки. Следующая таблица содержит опции флагов командной строки и пояснения к ним.
| Опция | Объяснение |
|---|---|
-c |
Включает полудуплексное ассемблирование TCP-потока, чтобы обеспечить корректную операцию прослушивания при использовании Arpspoof. |
-d |
Запускает |
-f <file> |
Загружает совокупность условий (то есть, типов служб для перехвата паролей) из файла с форматом /etc/services. |
-i <if> |
Использует определенный сетевой интерфейс. |
-m |
Использует файл dsniff.magic, чтобы попытаться автоматически определить протокол, используя характеристики, определенные в файле magic. |
-n |
Не выполняет поиска хостов. |
-r <file> |
Читает перехваченные данные из предварительно сохраненного сеанса (см. -w). |
-s <len> |
Перехватывает, по крайней мере <len> (количество байтов) первых байтов пакета, что полезно, если информация об имени пользователя и пароле приходит после 1024-байтового предела, который задан по умолчанию. |
-t <trigger> |
Загружает разделенный запятыми набор триггеров, используя формат port/proto=service ; например, по команде dsniff -t23/tcp=telnet, 21/tcp=ftp, 110/tcp=pop3 будет перехвачен пароль для сеансов telnet, FTP и SMTP. |
-w <file> |
Записывает перехваченные данные в двоичный файл для последующего анализа (см. -r ). |
Использование и вывод. Единственным дополнительным параметром, который может принимать dsniff является выражение для tcpdump так, чтобы вы могли определить, на какие хосты переданные или с каких хостов отправленные пароли вы хотите перехватить.
Давайте запустим dsniff и посмотрим, пытается ли наш друг Боб войти в какую-нибудь систему.
[root@originix sbin]# dsniff -t 21/tcp=ftp,23/tcp=telnet -n Kernel filter, protocol ALL, raw packet socket dsniff: listening on eth0 [] --------- 03/23/02 09:40:50 tcp 192.168.1.101.3482 -> 192.168.1.100.21 (ftp) USER bob PASS bob123 --------- 03/23/02 09:41:52 tcp 192.168.1.101.3483 -> 192.168.1.100.23 (telnet) root guessme jdoe password ls
Да, это Боб. Он устанавливает связь по FTP, и мы перехватили его пароль. А что можно сказать относительно сеанса telnet, который зарегистрирован ниже? dsniff, похоже, перехватил попытки получить вход в систему с привилегированным доступом ( root ) через telnet. Вход в систему, похоже, был неудачным, потому что пользователь затем попробовал войти в систему под именем jdoe с паролем password, и ему это удалось. Далее dsniff зарегистрировал выполнение команды ls. В настоящее время большинство систем не предоставляют доступ с привилегированными правами ( root ) через telnet, даже если вводится правильный пароль. Пароль guessme, вероятно, был паролем привилегированного доступа. И поскольку мы теперь знаем пароль для имени пользователя jdoe, мы можем проникнуть в систему и испытать ее.
Если бы пользователь jdoe попробовал дать команду su для привилегированного доступа позже, во время этого подключения, dsniff поймал бы так же и это. Именно поэтому dsniff перехватывает последующие команды так же, как и информацию, касающуюся входа в систему в сессии telnet. Вы заметите, что dsniff ждет окончания подключения прежде, чем он выведет свою информацию. Это происходит в том случае, если dsniff обнаружит любую другую полезную информацию, касающуюся имени пользователя/пароля, появившуюся не при изначальном входе в систему.
tcpdump может использоваться для прослушивания NFS-трафика. Инструмент filesnarf, фактически, может взять перехваченный файл и повторно собрать его на вашей системе. В любое время, когда кто-то передает файл по сети, используя NFS, вы можете перехватить его копию, даже если экспорт NFS вам не доступен.
И снова, вы можете использовать опцию -i, чтобы указать сетевой интерфейс. В командной строке вы можете также указать выражение tcpdump, чтобы использовать его для прослушивания соответствующего NFS-трафика и шаблона файла (перехватить только *.conf-файлы или файлы с именем passwd ). Если вы хотите перехватить все файлы кроме некоторых (скажем, вы хотите перехватить все, кроме файлов MP3), вы можете инвертировать соответствующий шаблон файла, используя опцию -v следующим образом.
filesnarf -v '*.mp3'
Инструмент macof заполнит локальную сеть случайными воображаемыми MAC-адресами в надежде, что коммутатор перестанет срабатывать, как полагается, и начнет действовать подобно хабу, позволяя инструменту dsniff действовать более успешно в сетевом окружении коммутатора. Вы можете выполнять macof без опций, чтобы сгенерировать случайный TCP/IP-трафик со случайными MAC-адресами, или можете определить тип трафика, используя флаги командной строки. Вы можете контролировать используемый сетевой интерфейс ( -i ), IP-адрес отправителя и получателя ( -s и -d ), порты отправителя и получателя ( -x и -y ), единственный -e ) и число выдуманных пакетов для пересылки ( -n ).
Так же как filesnarf предназначен для перехвата NFS, инструмент mailsnarf повторно собирает перехваченные почтовые сообщения из SMTP- и POP-протоколов. Он сохраняет сообщения в стандартном формате mbox так, чтобы вы могли просматривать их так же, как бы вы просматривали любой почтовый ящик Unix, используя утилиты mutt, pine или любое приложение Unix по вашему выбору. При этом используются точно такие же опции, за исключением того, что вместо указания интересующего вас шаблона файла, вы указываете обычные выражения, совпадение с которыми надо искать в заголовке или теле сообщения.
Подобно другим программам вида *snarf, msgsnarf выполняет ту же самую операцию для популярных программ интернет-чата:
Sshmitm является одним из самых опасных инструментальных средств, которые поставляются с комплектом dsniff. Предположим, вы выполняете утилиту dnsspoof, чтобы подделать имена хоста реальной машины. Утилита sshmitm, которая расшифровывается как "SSH Monkey in the Middle", может перехватить SSH-трафик, перенаправленный на вашу машину. Sshmitm поддерживает только протокол SSH версии 1 (серьезное основание, чтобы модернизировать инструмент к версии 2).
Как это сделано? Инструмент dnsspoof позволяет нам перехватить SSH-подключение к другой машине. Все, что надо сделать - это запустить sshmitm на порте 22 (мы можем изменять порт, который использует sshmitm с помощью опции -p ) и устанавливать его так, чтобы ретранслировать SSH-подключение к нужному хосту. Если мы выполняем dnsspoof, сообщая всем, что мы являемся хостом Originix, когда в действительности Originix - это машина с адресом 192.168.1.100, то когда somehost осуществляет SSH-запрос к Originix, он сначала ищет Originix и находит его по нашему подделанному IP-адресу. Так, что если мы выполняем команду sshmitm -p 22 192.168.1.100 22, мы можем перехватить SSH-подключение от somehost перед тем, как передать его к Originix. Что это нам дает? Когда SSH договариваются о ключах, которые будут использоваться для шифрования данных, sshmitm может перехватить ключ от somehost и заменить его известным нам ключом. Это позволит нам расшифровывать всю информацию на перехваченном подключении.
Этот инструмент пытается уничтожить действующее TCP-подключение, мистифицируя сброс, т.е. RST-пакет и вбрасывая его в законное подключение. Как и в других инструментах, опция -i позволяет выбрать ваш интерфейс, а для выбора типа подключений, которые вы хотите уничтожить, может использоваться выражение для tcpdump. Дополнительная опция, - <num>, где num - любое число от 1 до 9, сообщает tcpkill, как сильно надо стараться, чтобы уничтожить подключение. В быстрые подключения может быть труднее ввести пакет, чем в медленные. По умолчанию значение степени "уничтожения" равно 3.
Возможно так же, что вы не хотите уничтожить подключение полностью. Инструмент Tcpnice позволит вам немного замедлить его. Используете те же самые опции, которые используются в tcpkill, за исключением того, что вместо попытки вводить RST-пакеты с разным уровнем суровости, вы используете опцию -n <приращение>, чтобы определить, на сколько вы хотите замедлить подключение. Приращение 1 дает заданную по умолчанию скорость, а приращение 20 дает самую медленную скорость. Инструмент выполняет это замедление, регулируя то количество данных, которое хосты, "по их словам", могут обрабатывать.
Часть TCP-заголовка представляет собой размер окна, который позволяет хосту рекламировать максимальное количество данных, которые он может обрабатывать. Инструмент tcpnice прослушивает трафик, соответствующий вашему tcpdump -выражению -n, чтобы настроить, на сколько должно быть уменьшено окно. Это даст знать хосту на другом конце сеанса связи, что требуется прекратить посылку такого большого количества данных так быстро, и подключение замедлится. Чтобы подбавить "масло в огонь", вы можете использовать опцию -I для подделки исходных подавленных ответов ICMP, чтобы заставить хост на другом конце думать, что он загружает хост с большим количеством данных, чем тот может обработать. Это может еще больше замедлить подключение.
Urlsnarf работает так же, как все другие snarf-программы в этом наборе инструментов, но только с URL-адресами сети. Инструмент сохраняет любые URL, которые он перехватывает из трафика HTTP в регистрационный файл, который может быть проанализирован позже. Это быстрый и простой способ узнать, чем интересуются люди из вашей локальной сети в интернете.
Этот инструмент дает HTTPS (Web-трафик, защищенный протоколом SSL) то же, что sshmitm дает SSH. Он требует использования инструмента dnsspoof и работает в той же самой манере, вставляя поддельный
Этот последний инструмент в пакете dsniff немного несерьезен. Определяя IP-адрес хоста в вашей локальной сети, webspy перехватывает Web-трафик, посылаемый этим хостом. Всякий раз, когда этот хост перемещается в интернете к определенному URL-адресу, webspy будет загружать тот же самый URL на вашем броузере Netscape. Все, что вам требуется сделать - это запустить свой Web-броузер Netscape, перед запуском webspy. И можно рассматривать все то, что просматривает в сети ваш друг, сидящий этажом ниже. То есть речь идет о вторжении в личную жизнь!
Как видите, здесь были описаны некоторые чрезвычайно опасные инструментальные средства. Хотя авторы искренне предназначали их для использования в благих целях, очевидно, что хакеры могут применять эти инструментальные средства для перехвата всех видов секретной информации, которая им не принадлежит, и даже той информации, которая, как предполагается, будет зашифрована! Недостаток, конечно, как и с любым анализатором сетевых потоков, состоит в том, что вы должны находиться в той же самой локальной сети, где находится ваша жертва. Такие инструментальные средства должны заставить каждого администратора службы сетевой безопасности дважды подумать о
Мы уже говорили о системах обнаружения вторжений (IDS) в этой книге. Инструменты IDS также являются анализаторами сетевых потоков (nmap, или программы с потенциально уязвимыми местами ( ), как Code Red.
Snort - устойчивая IDS. Он выполняется на нескольких версиях системы Unix и на Windows. Кроме того, он абсолютно бесплатный (http: // www.snort.org/).
/.
Установить Snort не составляет труда. Нужно проделать обычные инсталляционные шаги. Трудная часть состоит в конфигурировании его так, чтобы он регистрировал и предупреждал только действительные угрозы и не вызывал Snort в разделе "Правила инструмента Snort: краткий обзор".
Snort может действовать, как автономный анализатор и перехватчик сетевых пакетов, как регистратор пакетов, или как система обнаружения вторжений (IDS). Первые два режима действительно не имеют никакого преимущества по отношению к другим анализаторам, за исключением того, что регистратор пакетов инструмента Snort может регистрировать пакеты на диск в каталоге с хорошо организованной структурой. Работа Snort с файлом правил (обычно snort.conf) вынудит его регистрировать только те пакеты, которые соответствуют правилам, указанным в этом файле.
Snort будет не только регистрировать пакеты, которые соответствуют вашим правилам. Его можно сконфигурировать так, чтобы он выполнялся в разных режимах предупреждений. Предупреждения могут быть зарегистрированы в специальном файле предупреждений инструмента Snort - syslog, как сообщение WinPopup на рабочей станции Windows, или даже во
Как уже упоминалось, пакеты могут быть зарегистрированы в каталоге с хорошо организованной, удобочитаемой структурой или в двоичном файле перехваченных данных tcpdump. Если вы находитесь в сети с большим объемом трафика, вы захотите использовать режим регистрации данных в двоичном формате просто для того, чтобы не вынуждать Snort делать анализ в реальном времени. Пытаясь отформатировать вывод перехваченных данных, он мог бы пропускать некоторые пакеты. Сохраните данные в двоичном формате и используйте другую программу (возможно, Ethereal ) чтобы проанализировать их позже.
Правила инструмента Snort похожи на выражения для tcpdump и Ethereal. Они могут отфильтровывать пакеты, основываясь на IP-адресах, портах, данных заголовка, флагах и содержании пакета. У Snort три вида правил.
Snort поставляется со стандартным набором правил, который проверяет такую деятельность, как скрытное сканирование с помощью nmap, поиск уязвимых мест (
По умолчанию сначала Snort проверяет пакет на соответствие правилам предупреждений, затем правилам пропуска, и, наконец, правилам регистрации. Эта установка отлично подходит для администратора, который еще только изучает Snort и планирует использовать заданный по умолчанию файл конфигурации и набор правил. Заданный по умолчанию набор правил Snort не включает никаких правил пропуска или регистрации. Однако запускать Snort без какой-либо настройки или конфигурации плохо, поскольку вы, без сомнения, будете завалены ложными предупреждениями.
Когда вы лучше познакомитесь с синтаксисом правил инструмента Snort, вам захочется написать правила игнорирования некоторого трафика. Например, в нашей сети, любое время было огромное количество DNS-запросов, отправленных нашему DNS-серверу другими DNS-серверами из интернета, Snort обнаруживал ложное UDP-сканирование портов и зондирование DNS. Очевидно, мы не хотели, чтобы наши файлы регистрации были завалены всеми этими ложными срабатываниями. Поэтому мы установили наш собственный файл правил и определили переменную DNS_SERVERS, которая содержала IP-адреса всех наших DNS-серверов. Затем мы написали следующие правила:
var DNS_SERVERS [192.168.1.150/32,192.168.1.151/32] pass udp $DNS_SERVERS 53 - $DNS_SERVERS 53 pass udp $EXTERNAL_NET 53 - $DNS_SERVERS 53
Эти правила вынудили Snort пропускать (или игнорировать) любой DNS-трафик между нашими DNS-серверами и пропускать весь DNS-трафик между нашими DNS-серверами и DNS-серверами во внешней сети ( EXTERNAL_NET, который определен в главном файле snort.conf). Но проблема все еще сохранялась. Поскольку правила соответствий проверяются в таком порядке: правила предупреждений, пропуска, регистрации, то пакеты все еще сначала вызывали предупреждения. Нам было необходимо изменить порядок проверки соответствий. К счастью, Snort предусматривает опцию -o, которая изменяет порядок проверки правил на пропуск, предупреждение, регистрацию.
-o, предпочтительнее, автор пакета не установил -o порядком, заданным по умолчанию, потому что люди писали плохие правила для пропуска, которые пропускали большее количество пакетов, чем нужно, и предупреждения оказывались пропущенными. Вы должны использовать опцию -o, только если хорошо овладели написанием правил.Наше второе правило пропуска фактически оставляет потенциальную дырку в нашем IDS. Мы предполагали, что только внешние DNS-серверы будут говорить с нашими DNS-серверами с порта отправителя 53. Если посторонний человек узнал бы об этом правиле, он мог бы перекинуть любой трафик мимо нашего IDS, сделав так, чтобы все были уверены, что DNS-запросы и попытки переноса зоны, прибывают с порта отправителя 53. Именно поэтому вы должны быть чрезвычайно осторожны при написании правил пропуска пакетов для Snort.
Детали, касающиеся синтаксиса правил инструмента /. Мы дадим краткое резюме того, как пишутся эти правила.
Основные правила Snort состоят из двух частей: заголовка и опций. Первая часть заголовка сообщает инструменту Snort, какого типа правило последует (предупреждение, регистрация, пропуск). Остальная часть заголовка указывает протокол (ip, udp, icmp или tcp), оператор направления (или - >, чтобы определить направление от отправителя к получателю или < >, чтобы определить двунаправленность), а также IP-адрес и порт отправителя и получателя. IP-адрес отправителя и получателя можно написать, используя синтаксис aaa.bbb.ccc.ddd/yy, где yy - число сетевых байтов (то есть
Опции правил содержат такие вещи, как предупреждающее сообщение для некоторого правила и содержания пакета, которое должно использоваться для идентификации соответствующих пакетов. Опции всегда заключаются в круглые скобки.
Ниже приводится пример правил для инструмента Snort, которые обнаруживают тех, кто пытается получить доступ к cmd.exe через IIS Web-сервер.
alert tcp $EXTERNAL_NET any - $HTTP_SERVERS 80 (msg:"WEB-IIS cmd.exe access"; flags: A+; content:"cmd.exe"; nocase; classtype:web-application-attack; sid:1002; rev:2;) alert tcp $EXTERNAL_NET any - $HTTP_SERVERS 80 (msg:"WEB-IIS cmd? access"; flags: A+; content:".cmd?"; nocase; classtype:web-application-attack; sid:1003; rev:2;)"
Заданный по умолчанию набор правил для Snort состоит из единственного файла, называемого snort.conf и нескольких файлов с расширением .rules. Файл snort.conf является главным файлом правил, но он включает другие файлы правил, используя инструкцию include. Это позволяет вам разбивать правила на логические разделы. Файл snort.conf позволяет вам также определять переменные, которые могут использоваться во всех ваших правилах. Это сделано с помощью команды var.
В предыдущем примере, мы определили переменную с именем DNS_SERVERS. Файл snort.conf позволяет вам определять несколько переменных такого рода, и вы можете указать в своих правилах, какие машины являются Web-серверами, какие - почтовыми серверами, SQL-серверами, DNS-серверами и так далее. Это поможет инструменту Snort применять правила соответствия более рационально и эффективно. Например, нет никакого смысла в применении правил, написанных для обнаружения программных средств Web-сервера (то есть использования этих средств с целью взлома), применительно к трафику, поступающему с машины, на которой отсутствует Web-сервер.
Другое специальное правило инструмента Snort - правило конфигурации (config rule), которое позволяет вам указать некоторые из опций конфигурации, которые вы обычно помешаете в командную строку, в файле snort.conf.
Вы можете выполнить много других задач, используя правила инструмента Snort в современных версиях. Snort позволяет вам определять свои собственные типы правил, позволяющих регистрировать данные в разных местах, используя различные методы с помощью модулей вывода, которые мы обсудим позже, в разделе "Модули вывода".
Недавно в Snort добавили также поддержку динамических правил, которые являются "активизируются" другими правилами инструмента Snort. Фактический метод, в котором это сделано, находится в центре реконструкции предпринятой разработчиками Snort, но концепция осталась той же самой. Правило, имеющее "активизирующий" тип, включит "динамическое" правило, которое с ним связано. Это чрезвычайно полезно. До появления этих типов правил, бывало, что если кто-то успешно применил программу взлома (Snort мог зарегистрировать этот факт, потому что пакет программы взлома соответствовал правилу. Но чтобы ни делал хакер после успешного применения программы взлома, никогда не регистрировалось, потому что оно не соответствовало никаким правилам. Если же мы используем активизирующий тип правила для обнаружения этой программы взлома, то оно может связаться с динамическим правилом, которое за
тем перехватит следующие 500 пакетов хакера,
которые позволят понять то, что он делал после успешного взлома.
Правила являются душой и сердцем инструмента Snort. Если вы овладеете этими правилами, то можете точно отрегулировать Snort, превращая его в чрезвычайно мощное оружие против потенциальных взломщиков.
Другое свежее дополнение к инструменту Snort содержит модули, расширяющие ее функциональные возможности. Snort включает два главных типа плагинов: предпроцессоры и модули вывода.
Предпроцессоры устанавливаются в файле snort.conf, с помощью команды Snort, но прежде, чем начнется применение правил соответствия. Таблица 14.3 описывает наиболее популярные предпроцессоры (те, которые имеются в версии Snort 1.8 ).
| Предпроцессор | Опции | Описание |
|---|---|---|
| http_decode | <port_list> |
Берет любые Web-URL, которые перехвачены из трафика передачи портов в <port_list>, и расшифровывает их в ASCII-текст. Так как URL не могут содержать некоторые специальные символы (например, пробелы), вы будете часто видеть символы подобные %21 в URL. Этот процессор преобразовывает эти символы к ASCII-коду так, чтобы правила были способны должным образом обнаружить предупреждения, основанные на совпадении URL. |
<network><num_ports><period><logfile> |
Одно из наиболее полезных дополнений к программе. Сканнер порта прослушивает <network> и регистрирует предупреждение в файл <logfile> всякий раз, как порт с номером <num_ports> или (и) другие порты в вашей сети задействуются в пределах интервала <period>, заданного в секундах. | |
<host_list> |
Вспомните наш пример с DNS-сервером. Мы не хотим получать сообщения о сканировании порта некоторых машин в нашей сети, потому что это фактически законный трафик. Здесь вы можете определить список IP-адресов (разделенный пробелами, а не запятыми) которые вы хотите игнорировать. | |
| frag2 | memcap <bytes> timeout <seconds> |
Выполняет дефрагментацию всех перехваченных фрагментированных пакетов. Использует заданный по умолчанию объем памяти в 4 мегабайта и 60-секундный перерыв для выполнения |
| stream4 | noinspect keepstats detect_scans detect_state_problems |
Позволяет Snort обрабатывать TCP-потоки (или сеансы) и делать инспекцию пакетов, давая заключение об их состоянии. Имеющиеся опции позволяют отключать инспекцию, регистрировать информацию о сеансе в файле, предупреждать о сканировании порта, и предупреждать о проблемах состояния (например, перепутанные порядковые номера пакетов), соответственно. |
Модули вывода также устанавливаются в файле snort.conf, с помощью команды output, которая управляет тем, как, где и в каком формате Snort хранит полученные данные. Для любого типа определенных вами правил можно указать определенный модуль вывода, который будет с ним использоваться. В таблице 14.4 описаны наиболее популярные модули вывода (в версии Snort 1.8).
| Модуль | Опции | Описание |
|---|---|---|
| alert_fast | <logfile> |
Так же как с режимом быстрых предупреждений, который может быть определен из командной строки как -A fast, вы можете в этом месте определить отдельный файл. Эта опция полезна, если вы определяете свои собственные правила и хотите, чтобы некоторые правила использовали модуль alert_fast для регистрации данных в одном файле, в то время как другие правила использовали модуль alert_fast для регистрации данных в другом файле. |
| alert_full | <logfile> |
Подобен модулю alert_fast за исключением того, что для предупреждений он использует заданный по умолчанию режим полной регистрации инструмента Snort. |
| alert_smb | <workstation_list_file> |
Подобно свойству -M, посылает предупреждения WinPopup рабочим станциям Windows, перечисленным в файле. |
| alert_syslog | <syslog_facility> <syslog_priority> |
Подобно опции -s, позволяет посылать предупреждающие сообщения инструмента Snort непосредственно в syslog, используя средства и приоритет, который вы определяете. |
| log_null | Модуль полезен при определении типов правил, когда вы хотите вывести предупреждение, но не заботитесь о регистрации данных пакета. | |
| log_tcpdump | <logfile> |
То же, что и работа Snort в двоичном формате регистрации данных (-b) и указания другого имени файла для регистрационного файла tcpdump (-L). |
| alert_unified, log_unified | <logfile> |
Новый, чрезвычайно эффективный метод регистрации, который скоро станет в инструменте Snort заданным по умолчанию способом регистрации данных. Оба формата регистрации будут сделаны в двоичном коде, и отдельные программы (типа Barnyard) будут использоваться при анализе двоичных файлов и приведении их в удобочитаемые форматы. |
| database | <rule_type> <database_type> < parameters > |
Сохраняет данные согласно правилам регистрации Snort или правилам предупреждений Snort (в зависимости от <rule_type>) во |
| xml | <rule_type> <parameters> |
Сохраняет данные согласно правилам регистрации Snort или правилам предупреждений Snort (в зависимости от <rule_type>) в файл в формате SNML (Simple Network Markup Language). Параметры <parameters> управляют местоположением и макетом файла. |
<logfile> <format> |
Выбор из доступных элементов тех, которые будут регистрироваться при выводе инструментом Snort в формате строки <format> в файл, названный <logfile> и содержащий значения, отделяемые друг от друга запятой. |
|
| trap_snmp | <event_type> <sensor_id> <trap_type> <address> <community> |
Посылает SNMP-предупреждение станции сетевого управления по адресу <address> в SNMP сообщество <community>. |
Как видим, и относительно легко создавать свои собственные. И вы определенно не найдете ничего лучшего.
Однако в использовании Snort есть несколько недостатков. Один из недостатков состоит в том, что его файлы регистрации и предупреждений довольно трудно интерпретировать, независимо от того, какое средство вывода вы используете. К счастью, несколько сторонних приложений, таких как Snort. Вам определенно потребуется одно из этих приложений, чтобы ежедневно продолжать свою деятельность по обнаружению вторжений.
Может потребоваться, чтобы ваш инструмент IDS активно пресекал некоторые виды деятельности, как только он их обнаружит (закрытие порта или блокировка IP-адреса). Изначально Snort этого не делает. Опять же, для выполнения этих задач доступны некоторые приложения (такие как Guardian и Hogwash).
Администрирование файлов правил и установка нескольких датчиков .
Видно, что заставить Snort работать с оптимальной эффективностью на начальном этапе достаточно сложно. Но как только вы установите и сконфигурируете различные части так, как вам надо, Snort станет непобедим.
Пример из жизни. Слежка за внутренним пользователем
Предположим, вы получаете телефонный звонок от одного из ваших пользователей, который жалуется, что ему не удается обратиться к Web-сайту суперновостей. Вы спрашиваете его, какое сообщение дает его броузер, и он отвечает: "Ошибка 403 - запрещен". Услышав это, вы говорите ему: "Хорошо, раз вы получили это сообщение, значит, броузер делает сетевое подключение к серверу, но сервер не посылает назад Web-страницу, как должно". Вы обвиняете в этом хозяев сайта суперновостей и советуете ему немного подождать. В течение дня вы продолжаете получать звонки о сайте суперновостей и непрерывно отвечаете звонящим, что вы ничего не можете сделать. Наконец, одна из ваших пользователей звонит вам и сообщает, что она смогла обратиться к этому сайту со своей, вызываемой по телефону учетной записи, но не из офиса. Это кажется неправдоподобным. Вы набираете свою собственную телефонную учетную запись и обнаруживаете, что она права; получается, что запрещен только трафик из этого офиса.
Вы находите контактную информацию Web-мастера сайта суперновостей и посылаете ему по электронной почте сообщение о возникшей проблеме. Вскоре вы получаете довольно грубый и краткий ответ, утверждающий, что кто-то с вашего IP-адреса злоупотребил Web-сервером и сетью суперновостей, выполняя сканирование портов, засылая саморазмножающиеся сетевые вирусы и даже применяя средства взлома (
К сожалению, у вас нет возможности узнать, кто этот злоумышленник. Файлы регистрации вашего брандмауэра установлены так, чтобы делать запись любого поступающего трафика, но в настоящее время вы не контролируете выходящий трафик. Вы подавляете свою гордость и признаетесь мастеру сайта суперновостей, что вы не имеете никаких файлов регистрации, по которым можно найти преступника. Вы просите его восстановить ваш IP-адрес с обещанием, что впредь будете внимательно контролировать деятельность, исходящую из вашей сети так, чтобы преступник мог быть найден и призван к порядку. Web-мастер неохотно соглашается на ваше предложение.
Ваши пользователи снова довольны, но теперь вы должны поработать на своем конце этой сделки. Начинается работа детектива: кто пробует взломать super_news.com?
Tcpdump: установка западни. Даже при том, что вы хорошо осознаете, что внутренний злоумышленник мог бы участвовать в подлых действиях и против других сайтов, ваша главная забота касается отслеживания любой деятельности, направленной к сайту суперновостей. Легче всего установить на своей сети анализатор сетевых потоков (
Поскольку в офисе вы используете преобразование сетевых адресов (NAT), с внешней стороны кажется, что весь ваш интернет-трафик исходит с единственного IP-адреса. Вы должны поместить свой анализатор перед NAT-блоком, чтобы видеть частные IP-адреса машин, говорящих с сайтом суперновостей. Кроме того, поскольку ваша сеть функционирует в коммутируемой среде, вы должны удостовериться, что блок вашего анализатора присоединен к порту коммутатора, который сконфигурирован для управления портами. Вы также должны удостовериться, что дата и время на блоке вашего анализатора точны, так, чтобы вы знали не только "кто" и "что" делал, но и "когда" делал.
После того, как вы все это сделали, проще всего использовать tcpdump. Вы набираете в командной строке:
tcpdump -w perp.dump dst host www.super_news.com -s 512
Эта команда вынуждает tcpdump делать запись только первых 512 байтов уходящих пакетов, предназначенных для Web-сервера суперновостей. Не ограничиваясь запросами к порту 80, вы могли бы зафиксировать любой другой вид сканирования портов или деятельности, направленной на взлом сайта суперновостей.
Поскольку вы записываете пакеты в двоичном файле, с именем perp.
Ethereal: идентификация подозреваемого. Через несколько дней после установки западни вы получаете еще один звонок от одного из ваших пользователей, сообщающий, что сайт суперновостей опять выключен. Вы делаете проверку и убеждаетесь, что суперновости снова блокировали доступ к своему сайту с вашего IP-адреса. Вам хотелось бы зафиксировать действия хакера раньше, чем это сделали суперновости, но, по крайней мере, вы знаете, что теперь в файле дампа tcpdump у вас достаточно информации, чтобы выяснить, кто ответствен за эти действия.
Вы останавливаете работу утилиты tcpdump и сначала просматриваете файл perp.tcpdump -r perp.. Сначала все, что вы можете видеть - это огромное количество запросов, идущих через порт 80, которые все кажутся нормальным и подлинным. Поэтому вы решаете посмотреть, какие запросы были сделаны не через порт 80, набрав команду tcpdump -r perp.. Вы видите некоторые ping-прослушивания с нескольких различных IP-адресов, а также подключение через порт 21 с локального IP-адреса 10.10.4.24. Суперновости могли бы иметь анонимную FTP-службу на этом блоке, так что он мог бы быть законным. Но секундой позже вы видите попытки telnet-подключения через порт 23 с того же самого IP-адреса. Итак, вы получаете вашего первого подозреваемого!
Затем вы захотите выяснить, до чего этот парень добрался; но вы знаете, что использование tcpdump из командной строки будет грубым, даже при использовании опции -X. Вместо этого вы делаете копию файла perp.Ethereal и готовите фильтр отображения для IP-адреса 10.10.4.24. Используя Ethereal, вы сможете выбрать и щелкнуть на каждом пакете, который был послан суперновостям. Рассматривая TCP-порты и метки времени, вы замечаете, что были выполнены несколько различных сканирований портов. Используя свойство пакета выдавать график производительности, вы получаете информацию относительно того, в какое время запускались атаки с адреса 10.10.4.24. И вы видите, что наиболее интенсивная деятельность происходила вчера ночью в 3:00 и, вероятнее всего, послужило катализатором для вторичного помещения вашего IP-адреса в черный список суперновостей.
Сосредоточившись на этом периоде - 3:00, вы используете инструмент "Follow TCP Stream" (Сопровождение TCP-потока), чтобы увидеть, что еще делал пользователь. Вы видите несколько попыток взлома с помощью CGI, которые были, очевидно, выполнены из скрипта, потому что много попыток сделано за короткий промежуток времени. Вы также видите, что пользователь пробовал применить грубую силу для получения учетной записи при проникновении в telnet, но потерпел неудачу. Теперь у вас достаточно информации, чтобы встретиться с преступником, но вы беспокоитесь, что файл perp может содержать информацию и о других попытках, кроме деятельности, характерной для неквалифицированных взломщиков "script-kiddy" и атак типа отказов в обслуживании (Denial-of-Service). Для начала вы блокируете посылку любого трафика уходящего к суперновостям с адреса 10.10.4.24. Теперь пришло время установить анализатор сетевых потоков (
Dsniff: сбор улик. Вы сверяетесь с политикой защиты личной информации, которой придерживается ваша компания, чтобы удостовериться, что вы имеете право следить за действиями этого пользователя при использовании оборудования компании и сетевых ресурсов. Как только вы убедились, что действительно имеете такое право, вы решаете использовать dsniff -утилиты перехвата инструмента dsniff, чтобы перехватить его сообщения электронной почты (mailsnarf), разговоры в чате (msgsnarf), посещения Web-сайтов (urlsnarf) и NFS-передачи (filesnarf).
Вы перехватываете сообщения электронной почты и мгновенные сообщения человеку со скрытым именем и адресом электронной почты SNSux. Ваш пользователь сообщает своему другу, что он запустил набор скриптов, которые он нашел в интернете, против сайта суперновостей, и хвастается, что ему уже дважды удалось сломать Web-сервер суперновостей. Очевидно, что преступник знает о взломе и сетях только ту информацию, которой достаточно, чтобы самому заиметь неприятности, поскольку он перепутал попадание адреса в черный список суперновостей, с отказом Web-сервера сайта суперновостей от обслуживания в результате собственных "успешных" действий.
Вы перехватываете ответы от SNSux, который сообщает, что он никогда не видел, чтобы Web-сайт сломался, но что у него есть друг из числа внутренних пользователей, который мог бы предоставить для них надежный вход в систему сети суперновостей. Это могло бы иметь серьезные последствия. Вы быстро понимаете, что выходите из "своей лиги" и скоро должны войти в контакт с властями. Вы собираете всю свою информацию и входите в контакт с web-мастером суперновостей по поводу ваших находок. Затем вы отдаете эти результаты своему менеджеру отдела, который убеждает вас, что проблема будет решена должным образом.
IDS: извлечение уроков. После недавних событий вы понимаете, что были хорошо подготовлены к любым внешним нападениям, входящим в вашу сеть, но вы совсем не были готовы к тому, чтобы ловить внутренних пользователей, совершающих внешние нападения. Вы устанавливаете IDS на вашей внутренней сети, и инструмент будет искать такие действия, как выходящее сканирование портов, CGI-нападения, попытки вызвать отказ в обслуживании (Denial-of-Service) и другое нежелательное в сети поведение. Это поможет в будущем избежать попадания в черный список.
Вы когда-либо задумывались о величине трафика, который интернет пропускает в течение каждого дня? Большинство людей сравнивают трафик в интернете с трафиком на скоростной магистрали крупного города, но это - не слишком точная аналогия. В то время как по скоростным магистралям люди и объекты обычно перемещаются от источника к месту назначения, интернет скорее напоминает сотни тысяч людей, находящихся на переполненной арене и обменивающихся друг с другом сообщениями. В действительности, когда вы подключаетесь к хосту в интернете, ваши данные редко идут непосредственно от вашего компьютера к компьютеру-адресату. Данные фактически пересекают несколько "промежуточных" пунктов, таких как маршрутизаторы, шлюзы, мосты и брандмауэры. Все эти устройства обрабатывают ваше сообщение, но так как сообщение адресовано не им, то предполагается, что они просто пропускают его.
Даже когда оба компьютера находятся в локальной сети (LAN), они не могут пропускать сообщения непосредственно друг другу. Например, если в локальной сети используется коммутатор, ваше сообщение должно быть послано непосредственно получателю и больше никому другому. Коммутаторы сетей Ethernet обладают достаточным интеллектом и определяют, MAC-адрес какого
Но если в вашей сети используются хабы, то они не столь умны. Они не знают, какая машина связана с каким портом, поэтому они передают сообщение всем портам, надеясь, что истинный получатель сам о себе заявит и скажет: "О, это я". Другие порты, как предполагается, игнорируют сообщение, так как оно им не предназначено, но, тем не менее, они могут его слышать. Даже коммутаторы часто имеют, по крайней мере, один порт, сконфигурированный для получения копии каждого сообщения, которое ходит в округе (обычно, для административного контроля). Это означает, что возможности подслушивания или перехвата ваших сообщений другими людьми существуют в изобилии. В этой лекции рассказывается об инструментальных средствах, которые позволяют воспользоваться этими возможностями и обеспечить им достойное применение.
Анализатор сетевых потоков ( ) может слушать и записывать любые необработанные данные, которые проходят через или мимо физического (аппаратного) сетевого интерфейса. Они работают на очень низком уровне (то есть на уровне ядра или приложения уровня операционной системы), так, чтобы они могли связываться непосредственно с сетевым интерфейсом на понятном ему языке. Например, анализатор сетевого потока может приказать сетевому адаптеру (NIC) посылать ему копию каждого отдельного фрейма Ethernet, который прибывает на интерфейс независимо от того, чем этот фрейм является или куда он идет.
Поскольку анализатор сетевых потоков работает на канальном уровне (
Как и многие другие средства защиты, анализаторы сетевых потоков приобрели своего рода мистические свойства. Каждый о них слышал и осознает их мощь, но многие люди за пределами сообщества сетевой защиты думают, что анализаторы сетевых потоков относятся к черной магии, которая используется только хакерами, ворами и другими хулиганами. Анализаторы сетевых потоков в действительности представляют собой просто еще один инструмент (многие из них доступны для загрузки свободно - любому). Да, они могут использоваться для того, чтобы завладеть информацией и паролями, которые вам не принадлежат, но их можно также использовать для диагностики сетевых проблем или точного определения дефектной части IP-подключения.
Одна из причин, по которой анализаторы сетевых потоков стали не так опасны, как раньше, состоит в том, что теперь наиболее важные данные зашифрованы. Открытые, незашифрованные службы быстро исчезают из интернета. Люди, которые имели обыкновение использовать утилиту telnet для доступа к учетным записям командного интерпретатора shell при проверке своей электронной почты (то есть посылающие свои пароли открытым, нешифрованным текстом, который могут видеть все промежуточные маршрутизаторы, хабы и коммутаторы), теперь используют протокол Secure Shell (SSH), который шифрует каждую часть "telnet-подобного" сеанса. Люди, которые теперь заходят на Web-сайты, делают это по протоколу SSL (Secure Sockets Layer), который выполняет для Web-трафика то же, что SSH для telnet. Вместо посылки
Итог такой: анализаторы сетевых потоков существуют, и мы знаем, что люди собираются злоупотреблять ими. Это ничем не отличается от прослушивания чужого телефона, наблюдения за чьей-либо комнатой или простого подслушивания разговора. Народ сует свой нос в ваши дела на регулярной основе. Вы должны принимать это во внимание. Если вы все еще передаете важные данные (Web-серфинг и загрузку общедоступной информации обычно можно делать открытым текстом) по интернету не зашифрованными, значит, вы заслуживаете то, что имеете.
Беспокоясь о возможности злонамеренного использования анализаторов сетевых потоков, помните следующее.
Переключаемые сети еще более затрудняют (но не делают невозможным, благодаря таким инструментальным средствам, как dsniff ) внутренним пользователям
Даже в этом случае, вероятно, не стоит опасаться анализаторов сетевых потоков. Да, они действительно могут помочь хакерам украсть жизненно важную информацию, но существует много методов и инструментальных средств, предназначенных для противодействия этому. Считайте анализаторы сетевых потоков просто одним из инструментов, понятным и простым, и посмотрите, какую пользу могут дать этически и морально благонадежные применения анализаторов в нашей повседневной жизни.
После того как мы потратили столько времени, дабы убедить вас, что анализаторы сетевых потоков могут быть респектабельными инструментами, используемыми респектабельными людьми в респектабельных целях, вполне логично, что первый такой инструмент в нашем обсуждении называется .) Это весьма функциональный, но довольно сложный в использовании инструмент, если вы не знакомы с его концепциями. Давайте преодолеем этот барьер.
Первый шаг в изучении того, как использовать анализаторы сетевых потоков, состоит в том, чтобы сообщить ему, что мы хотим узнать. Мы делаем это через командную строку. Когда мы выполняем BUTTSniffer без опций, мы получаем резюме возможных опций:
BUTTSniffer v0.9 (c) 1998, Cult of the Dead Cow
Usage: buttsniff -{idl} <arguments>
-i (interactive) arguments: <device number> <port>
-d (disk dump) arguments: <device number> <log file>
<dump type> [filter]
-l (list devices) arguments: (none)
Valid dump types are:
r (raw frames) Dumps raw network traffic
e (encapsulation) Dumps decoded packets with
encapsulation information
p (protocol) Dumps fully decoded packets with
protocol information
Valid filters are:
A single number representing a port to be monitored (e.g. 80)
A port range to be monitored (e.g. 141-1024)
A filename containing a list of IP and port filter rules
Read the 'readme.txt' for more information and examples.
Filters are only active on dump type 'p'.
Итак, получается, что у BUTTSniffer есть только три режима: перечисление устройств, диалоговый и дамп на диск. Режим перечисления устройств сообщает, какие сетевые интерфейсы находятся на вашей машине. Каждому сетевому интерфейсу, даже адаптерам коммутируемой линии, назначены номера устройств. В двух других режимах инструмента BUTTSniffer вы должны знать номер устройства интерфейса, на котором хотите прослушивать трафик, так что режим перечисления устройств является первым шагом. Режимы дампа на диске и диалоговый немного сложнее в работе, они описаны далее.
Мы начнем с диалогового режима, потому что он сделан с расчетом на новичков. Командная строка для диалогового режима просит вас указать номер устройства (для интерфейса, который вы хотите прослушивать) и порт. Теперь речь идет совсем не о том порте, о котором вы думаете. Вас спрашивают не о том, на каком порте вы хотите прослушивать трафик; вас просят, чтобы вы обеспечили доступный порт, с которым может связываться демон. Диалоговый режим устанавливает демона на указанном порте, скажем на порте 8888 (вы вводите buttsniff -i 0 8888 ). Затем вы можете напечатать telnet localhost 8888 в приглашении на ввод команды, и будете связаны с демоном. Вы должны увидеть главное меню диалогового режима программы BUTTSniffer со следующими опциями.

Monitor Connections. Первая опция, Monitor Connections (Прослушивание подключений), делает только то, что обозначено в названии. Любые IP-сеансы, которые ретранслируются, проходят мимо или через интерфейс, который мы наблюдаем (в нашем примере командной строки это интерфейс с номером устройства 0), должны здесь показываться. Мы можем исследовать эту опцию, открывая несколько Web- и telnet-подключений, и наблюдать, что получается в результате. Выберите Monitor Connections и нажмите клавишу ENTER.

Мы видим telnet и несколько Web-сеансов с моим IP-адресом. Если мы прокрутим список до определенного подключения, мы можем прослушивать это подключение. Здесь мы прослушиваем сессию telnet.

Вывод информации выглядит не очень привлекательно, но если вы внимательно посмотрите, то сможете увидеть, что мы только что перехватили пароль привилегированного (root) пользователя в этом блоке (guessme). Нажатия клавиши пользователя отображены в нижней части экрана, а вывод от команд выведен в верхнюю часть. После того как пользователь напечатал su, он напечатал также пароль привилегированного пользователя guessme. Как видно из вывода в верхней части экрана, он успешно получил привилегированный доступ. Если вы посмотрите вниз экрана, то увидите некоторые опции отображения, которые можно выбирать. Опция Full Screen (Весь экран) особенно полезна, если вас интересует только то, что печатает пользователь.
Помните заявление о том, что никто больше не должен пользоваться утилитой telnet? Причина как раз в этом. С помощью такого инструмента весь ваш трафик может читаться любым, кто сможет вклиниться между вами и вашим адресатом. Теперь взгляните на результат прослушивания SSH-сеанса в ответ на точно такие же действия и команды.

Не очень полезный результат, не так ли? Тем не менее, мы все еще можем наблюдать любой незашифрованный трафик, прибывающий на нашу машину или покидающий ее.
Password Sniffer. Мы сумели перехватить пароль в сессии telnet, но опция Password ищет только попытки входа в систему и пытается перехватывать любые имена пользователя и пароли, которые проходят в открытом виде. В следующем примере пользователь связывается с Originix с помощью telnet как пользователь "bob", а затем становится привилегированным пользователем. BUTTSniffer достаточно умен, чтобы выделить начальный вход в систему со словом "bob", потому что это начало подключения, но он не будет подбирать su привилегированного пользователя. Это означает, что мы все еще должны были бы вести наблюдение с использованием режима Monitor Connections, чтобы подобрать пароль. Многие системы не позволят вам использовать telnet для привилегированного пользователя.

Диалоговый режим довольно легко использовать, но в нем нигде не делается запись каких-либо из полученных данных. Вы узнаете, как это делать, когда мы опишем режим дампа на диск в разделе "Режим Disk
Configure. Что, если вы оказались на машине, которая сильно перегружена сотнями подключений, происходящих в одно и то же время? Как бы вы смогли рассортировать весь этот "шум" и найти информацию, которую ищете?
Эта опция меню позволяет устанавливать фильтры для диалогового режима. Она заставляет BUTTSniffer наблюдать только за определенными видами сетевого трафика, идущего к или от определенных хостов. Важно понять, как эти фильтры работают, потому что мы будем определять их в текстовых файлах, когда перейдем к следующему режиму программы (дамп на диск).
Основная цель опции Configure - включить фильтры. На следующей иллюстрации обратите внимание, что мы сначала задаем исключение всех IP-адресов (*.*.*.*), а затем включаем только 192.168.1.100. Способ работы программы BUTTSniffer таков, что по умолчанию он включает все, что только возможно. Прежде чем вы сможете определить, на каких хостах и портах вы хотите сосредоточиться, нужно исключить те, которые вас не интересуют.

Внутри этой опции имеется еще две возможности. Сначала мы можем выбирать прослушивание только допустимых TCP-подключений. Необычные подключения (подобные тем, которые делают проходы сканеров nmap , когда просматривают сетевые порты) будут игнорироваться. Вторая опция, War Mode (Военный режим), является переключением на применение этого анализатора сетевых потоков в качестве дополнительного модуля ( plug-in ) к хакерскому закулисному пакету Back Orifice. Хотя BUTTSniffer первоначально предназначался для того, чтобы помогать контролировать сетевой трафик на собственном блоке Windows, привлечение режима War Mode позволяет пользователю захватывать некоторые сетевые подключения и сбрасывать их, срывая работу неосведомленных пользователей системы.
BUTTSniffer в диалоговом режиме, используйте некоторые из инструментальных средств, о которых мы говорили в предыдущих лекциях. В местном масштабе утилита netstat (лекции "Системные средства с открытым программным кодом: основы" и "Компоновка и использование набора инструментов для расследования хакерских атак...") сообщит вам, что порты TCP открыты и прослушиваются на вашем блоке Windows. Если вы видите что-то, чего не можете распознать, свяжитесь с ним с помощью утилиты telnet и посмотрите, что произойдет. В удаленном масштабе сканеры портов типа nmap или SuperScan (лекция "Сканеры портов") могут идентифицировать необычные TCP-порты. Так как некоторые из этих инструментальных средств могут фактически захватывать баннеры с портов,
то вы получите связку мусора с
порта демона программы BUTTSniffer. Вы можете применить telnet непосредственно к этому порту, чтобы подтвердить его присутствие.Если вы хотите контролировать некоторые виды деятельности в течение длительного периода времени, намного легче использовать режим дампа на диске. В этом режиме вы теряете многие из свойств "легкого использования" диалогового режима, но получаете возможность записывать эту деятельность в файл в определенных форматах, который позволяет вам запустить анализатор сетевых потоков ( ), оставить его работающим в течение дня и затем позже анализировать полученный журнал ( logfile ). Хакеры или системные администраторы могли бы даже писать скрипты для создания отчетов на основе выходных файлов анализатора.
Так же как и в диалоговом режиме, командная строка для режима дампа на диске в качестве первого параметра содержит номер устройства вашего интерфейса (полученный при первом выполнением команды buttsniff -l ). Второй параметр - это имя файла, который вы хотите использовать в качестве журнала регистрации. Третья опция - вид файла регистрации, который вы хотите получить. Для этой опции возможны три варианта: raw (r) (необработанный), encapsulation (e) (инкапсулированный) и protocol (p) (протокол). Варианты raw (r) и encapsulation (e) полезны только в том случае, если вы имеете шестнадцатеричный редактор и хорошее знание протокола, который вы прослушиваете, чтобы быть способным перебрать информацию байт за байтом. Большинство из нас выберут опцию протокола, поскольку в ней TCP-пакеты расшифровываются и отображаются в информативном, но простом для чтения файле регистрации.
Ниже приведена часть вывода из файла регистрации, полученного при использовании команды buttsniff -d 1 proto.log p:
Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 0 Source Port: 2111 Target Port: 23 Seq: 0919F2F2 Ack: 00000000 Flags: S Window: 65535 TCP ChkSum: 64163 UrgPtr: 0 Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 0 Source Port: 23 Target Port: 2111 Seq: 7BFD410D Ack: 0919F2F3 Flags: SA Window: 32120 TCP ChkSum: 49167 UrgPtr: 0 Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 0 Source Port: 2111 Target Port: 23 Seq: 0919F2F3 Ack: 7BFD410E Flags: A Window: 65535 TCP ChkSum: 27212 UrgPtr: 0 Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 3 Source Port: 2111 Target Port: 23 Seq: 0919F2F3 Ack: 7BFD410E Flags: PA Window: 65535 TCP ChkSum: 19269 UrgPtr: 0 00000000: FF FB 1F яы. Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 0 Source Port: 23 Target Port: 2111 Seq: 7BFD410E Ack: 0919F2F6 Flags: A Window: 32120 TCP ChkSum: 60624 UrgPtr: 0 Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 18 Source Port: 2111 Target Port: 23 Seq: 0919F2F6 Ack: 7BFD410E Flags: PA Window: 65535 TCP ChkSum: 10271 UrgPtr: 0 00000000: FF FB 20 FF FB 18 FF FB 27 FF FD 01 FF FB 03 FF яы яы.яы"яы.яы.я 00000010: FD 03 э
Мы вывели здесь совсем немного информации, так что давайте слегка разберемся с ней.
Ясно, что каждый пакет имеет свою собственную запись в журнале. Из первого пакета мы видим, что с адреса 192.168.1.101 послан пакет на адрес 192.168.1.100 с портом назначения 23 (telnet). Если мы посмотрим на флаги на этом пакете, то увидим, что установлен флаг S (или SYN ). Флаг SYN указывает на инициирование TCP-подключения. Следующая строка показывает ответ с адреса 192.168.100 обратно по адресу 192.168.1.101 к порту назначения (2111, в этом случае) с установленным флагом SA (или SYN/ACK ). Следующая строка показывает пакет с адреса 192.168.1.101 с установленным флагом A (или ACK ). Все это представляет методологию TCP - "трехэтапное квитирование" для установления соединения.
Итак, мы зафиксировали начало telnet подключения между этими двумя хостами. Ни один из первых трех пакетов не имеет никаких данных вне TCP-заголовков, но если мы посмотрим несколько ниже, то увидим шестнадцатеричный и ASCII-дамп некоторого "мусора", извлеченного из поля данных TCP-пакетов. Помните, что прежде чем telnet предоставит вам приглашение на вход в систему, клиент и сервер ведут переговоры относительно некоторых опций telnet (тип терминала, например). Этот "мусор" как раз и содержит такие переговоры. Пропустив их, мы должны найти более ценную информацию. Вот полезный текст:
Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 7 Source Port: 23 Target Port: 2111 Seq: 7BFD418A Ack: 0919F33F Flags: PA Window: 32120 TCP ChkSum: 35305 UrgPtr: 0 00000000: 6C 6F 67 69 6E 3A 20 login: Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 0 Source Port: 2111 Target Port: 23 Seq: 0919F33F Ack: 7BFD4191 Flags: A Window: 65404 TCP ChkSum: 27136 UrgPtr: 0 Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 1 Source Port: 2111 Target Port: 23 Seq: 0919F33F Ack: 7BFD4191 Flags: PA Window: 65404 TCP ChkSum: 2039 UrgPtr: 0 00000000: 62 b Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 1 Source Port: 23 Target Port: 2111 Seq: 7BFD4191 Ack: 0919F340 Flags: PA Window: 32120 TCP ChkSum: 35322 UrgPtr: 0 00000000: 62 b Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 1 Source Port: 2111 Target Port: 23 Seq: 0919F340 Ack: 7BFD4192 Flags: PA Window: 65403 TCP ChkSum: 64245 UrgPtr: 0 00000000: 6F o Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 1 Source Port: 23 Target Port: 2111 Seq: 7BFD4192 Ack: 0919F341 Flags: PA Window: 32120 TCP ChkSum: 31992 UrgPtr: 0 00000000: 6F o Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 1 Source Port: 2111 Target Port: 23 Seq: 0919F341 Ack: 7BFD4193 Flags: PA Window: 65402 TCP ChkSum: 2037 UrgPtr: 0 00000000: 62 b Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 1 Source Port: 23 Target Port: 2111 Seq: 7BFD4193 Ack: 0919F342 Flags: PA Window: 32120 TCP ChkSum: 35318 UrgPtr: 0 00000000: 62 b
Адрес 192.168.1.101 был представлен с приглашением входа в систему. Если мы сосредоточимся на пакетах, прибывающих с адреса отправителя 192.168.1.101 и направленных получателю 192.168.1.100, мы увидим, что пользователь набрал b-o-b. Каждый раз, когда хост с адресом 192.168.1.101 посылает символ, хост с адресом 192.168.1.100 повторяет его в обратном направлении. Сервер telnet "повторяет" то, что мы набрали, когда подтверждает получение наших символов. Другими словами, все, что мы набрали, никогда не должно отображаться у клиента. С протоколом telnet нажатия клавиши немедленно посылаются серверу вместо попадания в буфер клиента.
Если мы посмотрим еще ниже, то найдем действительно полезную информацию:
Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 10 Source Port: 23 Target Port: 2111 Seq: 7BFD4196 Ack: 0919F344 Flags: PA Window: 32120 TCP ChkSum: 1056 UrgPtr: 0 00000000: 50 61 73 73 77 6F 72 64 3A 20 Password: Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 0 Source Port: 2111 Target Port: 23 Seq: 0919F344 Ack: 7BFD41A0 Flags: A Window: 65389 TCP ChkSum: 27131 UrgPtr: 0 Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 1 Source Port: 2111 Target Port: 23 Seq: 0919F344 Ack: 7BFD41A0 Flags: PA Window: 65389 TCP ChkSum: 2034 UrgPtr: 0 00000000: 62 b Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 0 Source Port: 23 Target Port: 2111 Seq: 7BFD41A0 Ack: 0919F345 Flags: A Window: 32120 TCP ChkSum: 60399 UrgPtr: 0 Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 1 Source Port: 2111 Target Port: 23 Seq: 0919F345 Ack: 7BFD41A0 Flags: PA Window: 65389 TCP ChkSum: 64240 UrgPtr: 0 00000000: 6F o Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 0 Source Port: 23 Target Port: 2111 Seq: 7BFD41A0 Ack: 0919F346 Flags: A Window: 32120 TCP ChkSum: 60398 UrgPtr: 0 Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 1 Source Port: 2111 Target Port: 23 Seq: 0919F346 Ack: 7BFD41A0 Flags: PA Window: 65389 TCP ChkSum: 2032 UrgPtr: 0 00000000: 62 b Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 0 Source Port: 23 Target Port: 2111 Seq: 7BFD41A0 Ack: 0919F347 Flags: A Window: 32120 TCP ChkSum: 60397 UrgPtr: 0 Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 1 Source Port: 2111 Target Port: 23 Seq: 0919F347 Ack: 7BFD41A0 Flags: PA Window: 65389 TCP ChkSum: 14575 UrgPtr: 0 00000000: 31 1 Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 0 Source Port: 23 Target Port: 2111 Seq: 7BFD41A0 Ack: 0919F348 Flags: A Window: 32120 TCP ChkSum: 60396 UrgPtr: 0 Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 1 Source Port: 2111 Target Port: 23 Seq: 0919F348 Ack: 7BFD41A0 Flags: PA Window: 65389 TCP ChkSum: 14318 UrgPtr: 0 00000000: 32 2 Source IP: 192.168.1.100 Target IP: 192.168.1.101 TCP Length: 0 Source Port: 23 Target Port: 2111 Seq: 7BFD41A0 Ack: 0919F349 Flags: A Window: 32120 TCP ChkSum: 60395 UrgPtr: 0 Source IP: 192.168.1.101 Target IP: 192.168.1.100 TCP Length: 1 Source Port: 2111 Target Port: 23 Seq: 0919F349 Ack: 7BFD41A0 Flags: PA Window: 65389 TCP ChkSum: 14061 UrgPtr: 0 00000000: 33 3
Похоже на то, что мы подслушали нехитрый пароль Боба. Снова, сосредотачиваясь только на пакетах, прибывающих с адреса отправителя 192.168.1.101 получателю 192.168.1.100, мы видим, что пользователь набрал b-o-b-1-2-3. Обратите внимание, что пакеты подтверждения от сервера telnet не делают повторения ввода, как это произошло с именем пользователя. Так и должно быть, потому что когда мы вводим пароль, мы не видим его напечатанным на экране telnet.
Анализаторы сетевых потоков дают также отличную возможность узнать больше о TCP/IP. Здесь видно, как размер пакетов данных влияет на порядковый номер пакета, и как используются флаги.
Аналогично тому, как диалоговый режим инструмента BUTTSniffer имеет фильтры, режим дампа диска имеет необязательный "файл фильтра", который может быть указан в конце командной строки. Файл использует ту же самую методику, которая используется в диалоговом меню. Пустой файл фильтра означает, что BUTTSniffer должен регистрировать все. Если вы хотите сосредоточиться на определенном IP-адресе или порте, вы сначала должны исключить все остальное.
Ниже приводится синтаксис файла фильтра, который устанавливает тот же самый фильтр, который мы использовали в диалоговом режиме:
-*.*.*.* +192.168.1.100 -0-65535 +23 +80
Выглядит незамысловато. Сохраните этот текст как myfilter.fil, а затем выполните команду buttsniff-d 1 sniff.log p myfilter.fil, чтобы прослушивать только telnet и деятельность сети, направленную по адресу 192.168.1.100 и обратно.
myfilter.fil в этом примере единственным номером порта или диапазоном номеров порта, например, buttsniff-d l sniff.log p 23. Если вы хотите определить несколько портов не из диапазона, вам надо будет использовать файл фильтра.Загружаемый с сайта http://www.tcpdump.org, tcpdump является широко конфигурируемым пакетом анализатора сетевых потоков, который управляется из командной строки и предназначен для системы Unix. В то время как BUTTSniffer первоначально предназначался как дополнительный хакерский модуль ( plug-in ) для подслушивания на собственной системе, tcpdump был сделан специально для прослушивания сети, анализа и тестирования трафика и для перехвата пакетов.
tcpdump, скорее, представляет собой анализатор сетевых пакетов, чем сетевых потоков. Его способности фильтрации превосходят многие другие инструментальные средства, но он не обязательно облегчит вам перехват пакетов данных. Утилита действительно позволяет получать много интересной низкоуровневой информации о пакетах, передающихся по вашей сети, и может помочь вам диагностировать все виды сетевых проблем.
Утилиты Tcpdump и WinDump, ее воплощение под Windows, используют библиотеку pcap, набор подпрограмм по перехвату пакетов данных, написанный в Национальной лаборатории Лоренса Беркелея (Lawrence Berkeley National Laboratory). Программы pcap обеспечивают интерфейс и функциональность для фильтрации пакетов на уровне операционной системы и дизассемблирование IP-пакетов в необработанные данные.
Сначала необходимо загрузить и установить . Библиотека libpcap работает только в том случае, если ваша система использует механизм фильтрации пакетов уровня ядра, который она может распознать. У Linux есть свой собственный встроенный "пакетный" протокол, который libpcap признает и с которым она работает, при условии, что ваше ядро Linux скомпилировано с надлежащими опциями. Варианты BSD (Berkeley Software Distribution) и другие клоны операционной системы Unix используют BPF (Berkeley Packet Filtering).
После того как вы загрузили библиотеку libpcap и разархивировали ее, выполните скрипт выбора конфигурации. Ищите строку, в которой написано "checking packet capture type" (проверка типа перехвата пакета), чтобы выяснить какой механизм использует ваша система. Если libpcap не признает ваш пакетный фильтр, вам потребуется обратиться к сопровождающей систему документации, чтобы выяснить, как решить эту проблему. В противном случае, вы можете продолжить установку libpcap так, как вы бы устанавливали любой другой исходный файл под Unix (make и make install). После установки libpcap утилита tcpdump может быть установлена таким же способом.
Как и в случае с Unix, перед установкой . У WinPcap нет никаких опций установки. Устанавливается в течение примерно пяти секунд.
Теперь все, что вы должны сделать, это направиться на сайт http://netgroup-serv.polito.it/windump/ и загрузить windump.exe. Все готово!
WinDump - это просто порт Windows утилиты tcpdump. Использование tcpdump и WinDump почти взаимозаменяемо. В этой лекции мы сосредоточимся на утилите tcpdump, отмечая все различия между WinDump и tcpdump по мере продвижения. Вообще, если вы работаете дома, один, то можете использовать tcpdump вместо WinDump.
Первое обстоятельство, которое нужно иметь в виду, заключается в том, что утилита tcpdump обычно требует привилегированного доступа (root). Она должна выполняться с доступом root или tcpdump и библиотеке libpcap для того, чтобы иметь очень низкий уровень доступа (то есть уровень ядра) к сетевым интерфейсам и сетевым данным. Это также удерживает "пользователя Джо" от установки анализатора сетевых пакетов для неуместного использования. Некоторые системы Unix требуют большего, а некоторые меньшего доступа - детали смотрите с помощью утилиты man или в файле README.
WinDump / WinPcap сделана немного слабее, чем защита tcpdump / libpcap. Когда выполняется WinDump, она пытается загружать файл WinPcap DLL, если он еще не выполняется. Загружать эту библиотеку DLL можно только с привилегиями администратора. Однако если WinPcap уже выполняется, то любой пользователь может с этого момента использовать его до тех пор, пока система не будет перезагружена или не будет остановлена служба Netgroup Другая причина, по которой пользователи libpcap и WinPcap нуждаются в низкоуровневом доступе, состоит в том, что по умолчанию эти анализаторы сетевых потоков переводят сетевой интерфейс, на котором они работают, в смешанный режим. Если вы помните наше обсуждение в начале лекции, некоторые сетевые устройства, типа хабов Ethernet, фактически передают пакет ко всем портам хаба, надеясь, что законный получатель обнаружит себя и примет пакет. Другие хосты, связанные с хабом, также получают этот пакет, но они, как предполагается, игнорируют его. Смешанный (Promiscuous) режим предписывает интерфейсу вмешиваться в чужие дела, и это позволяет утилите tcpdump видеть весь сетевой трафик на хабе, а не только трафик, который направлен к хабу или от него. То же самое происходит, если вы выполняете tcpdump на маршрутизаторе или брандмауэре. Если интерфейс не находится в смешанном режиме, вы видите только трафик, направленный непосредственно маршрутизатору. Н
о если мы помещаем интерфейс в смешанный режим,
то можем прослушивать каждый пакет, который проходит через устройство. Многие организации захотят установить анализатор сетевых пакетов ( ) на своих главных маршрутизаторах выхода в интернет с целью контроля.
Теперь нам нужно выполнить приложение. Если вы просто напечатаете tcpdump в приглашении к вводу команды, то tcpdump будет пытаться прослушивать первый доступный сетевой интерфейс (или все интерфейсы, если это возможно) и выдаст все данные, которые она увидит. В зависимости от того, насколько занята ваша система, или от того, связана ли она с хабом или с портом монитора коммутатора, вы можете увидеть большие свитки текста. Вы можете заметить, что tcpdump, похоже, отображает только хосты, вовлеченные в сетевые транзакции, метку времени и некоторые другие IP-данные. Но где же содержание пакета? Очевидно, вам надо узнать больше об этом инструменте, чтобы заставить его сообщать вам больше информации.
tcpdump - мощный инструмент, но у него нет дружественного интерфейса. Подобно Netcat, nmap и другим чрезвычайно полезным инструментальным средствам, запускаемым из командной строки, которые мы описали ранее, утилита tcpdump становится полезной только после того, как вы овладеете синтаксисом и опциями командной строки.
Утилита tcpdump позволяет использовать AND, OR или NOT. Типичный формат выражения такой:
<Характеристика пакета> <значение>
Спецификаторы типа. Наиболее типичные характеристики пакета, называемые спецификаторами ( ) - спецификаторы типа: host (хост), net (сеть) и port (порт). Например, командная строка:
%tcpdump host 192.168.1.100
говорит о том, что мы хотим видеть только пакеты, идущие по адресу 192.168.1.100 или от него. Если нас интересует только Web-трафик, мы можем попробовать следующее:
%tcpdump host 192.168.1.100 and port 80
Это выражение позволяет нам иметь тот же самый уровень функциональности фильтра, который мы имели с программой BUTTSniffer. Но утилита tcpdump имеет еще несколько модификаторов, из которых вы можете выбирать. В данном случае, нам не надо сначала исключать весь трафик, чтобы сосредоточиться на определенном хосте.
Спецификаторы направления. tcpdump позволяет определять фильтры направлений. Например, если нас интересует только трафик, прибывающий с адреса 192.168.1.100, который предназначен чьему-то Web-порту, мы используем спецификаторы направлений src и :
%tcpdump src host 192.168.1.100 and dst port 80
Этот фильтр дает нам именно то, что мы ищем. Иначе, мы видели бы трафик, прибывающий из других мест на Web-сервер хоста 192.168.1.100, когда это нас совсем не интересует.
Если вы не указываете спецификатор направления для спецификатора типа, tcpdump подразумевает src или . Вторая команда, которую мы рассматривали, могла бы быть переписана следующим образом:
%tcpdump src or dst host 192.168.1.100 and src or dst port 80
tcpdump использует другие спецификаторы направления inbound (прибывающий) и outbound (исходящий).Спецификаторы протокола. У tcpdump также есть спецификаторы протокола, которые могут применяться к вашему выражению. Например, строка
%tcpdump src host 192.168.1.100 and udp dst port 53
даст исходящие DNS (Domain Name System) запросы с хоста 192.168.1.100. Обратите внимание на спецификатор протокола udp, расположенный перед спецификатором порта . Другие спецификаторы протокола для спецификаторов типа порта - tcp и icmp. Некоторые спецификаторы протокола используются при спецификаторах типа хоста, например ip, ip6, arp и ether.
Эта команда дает все arp-запросы на нашей локальной подсети:
%tcpdump arp net 192.168.1
Если мы знаем MAC-адрес определенного хоста, и хотим установить на него фильтр, то можно использовать следующую строку:
%tcpdump ether host 00:e0:29:38:b4:67
Если никакие спецификаторы протокола не даны, tcpdump подразумевает значения ip, arp или для спецификаторов типа хоста, и tcp или udp для спецификаторов типа порта.
Другие спецификаторы. До сих пор синтаксис для отдельного выражения, устанавливающего соответствие пакетов некоторым требованиям, выглядит так:
[Спецификатор протокола] [спецификатор направления] <спецификатор типа> значение
Несколько других необязательных спецификаторов, которые могут использоваться для определения дополнительных характеристик пакета, показаны в таблице 14.1.
| Спецификатор | Описание | Примеры |
|---|---|---|
gateway |
Отображает только пакеты, которые используют router1 в качестве шлюза (gateway). Значение, используемое с gateway, должно быть именем хоста, поскольку выражение должно разрешать имя хоста к IP-адресу (используя /etc/hosts или DNS), а также к Ethernet-адресу (используя /etc/ethers). | tcpdump gateway router1 (Чтобы использовать прямо IP- и MAC-адреса, используйте tcpdump ether host <mac_of_host> and not ip host <ip_of_host>, что эквивалентно использованию фильтра шлюза, но с адресами вместо имен хостов.) |
broadcast, multicast |
broadcast отображает только широковещательные пакеты, (в данном случае, пакеты с адресами получателя 192.168.1.0 или 192.168.1.255). multicast отображает только IP-пакеты, предназначенные группе адресов. | tcpdump ip broadcast net 192.168.1 |
proto |
Этот полезный спецификатор позволяет вам определять подпротоколы определенного протокола, даже если у tcpdump нет для этого встроенного ключевого слова. Названия протоколов нужно отделять, используя обратную наклонную черту, чтобы оградить tcpdump от интерпретации их, как ключевого слова, но вы можете также в этом месте использовать номера протоколов. Некоторые популярные номера IP-подпротоколов следующие: 1 (ICMP), 6 (TCP) и 17 (UDP). |
tcpdump ip proto 17. (Выражение ip host 192.168.1.100 and tcp port 80 может быть записано как ether proto \\ip and host 192.168.1.100 and ip proto \\tcp and port 80. Обратите внимание, как модификатор протокола в каждом случае расширяется к <protocol> proto <sub-protocol>.) |
mask |
Этот спецификатор может определить маску подсети для спецификаторов типа сети. Это редко используется, потому что можно указать |
tcpdump net 192.168.1.0 mask 255.255.255.0. (Или по другому, как tcpdump net 192.168.1.0/24.) |
len,_greater,_less |
Пакеты могут быть отфильтрованы по их размеру. Спецификаторы greater и less являются просто сокращением для длинных выражений, которые используют ключевое слово len. В обоих примерах показываются только пакеты, которые имеют размеры 80 байт или больше. | tcpdump greater 80 и tcpdump len>= 80. |
Packet_content_expressions |
Для опытных пользователей. Вы можете фильтровать пакеты, основываясь на их содержании. Используйте название протокола (такое как ether, ip или tcp), за ним значение смещения в байтах от искомого заголовка в квадратных скобках, как индекс массива (udp [4], чтобы определить длину UDP-дэйтаграммы), далее булевский оператор и другое выражение. Обратите внимание, что большинство выражений должно быть заключено в кавычки, потому что tcpdump. |
tcpdump 'udp[4] >= 24'. (В этом примере отображаются только UDP-пакеты, у которых размеры полезных данных превышают 24 байта. См. другие примеры в справке man.) |
Значения. Очевидно, что значения для спецификаторов зависят от используемого спецификатора. В общем виде, значение может быть или символическим названием, или соответствующим числом.
host - спецификаторы типа хостов имеют значения имен хостов или числовых адресов. (Являются ли они IP-адресами, MAC-адресами или другими адресами, зависит от предшествующего им спецификатора протокола.)port - спецификаторы типа портов используют символические названия (из /etc/services) для портов или непосредственно номера портов.net - спецификаторы типа сети используют сетевые адреса и маски сети написанные или с сетевыми октетами (типа 192.168), с последующим числом сетевых байтов (192.168.0.0/16), или с последующей proto - спецификаторы типа протокола используют символические названия ( ip, tcp, udp ) или номера протоколов, определенные в /etc/protocols.WinDump использует хосты и файлы служб, которые установлены в корневом каталоге Windows (например, C:\Windows\).Теперь давайте перейдем к рассмотрению более важных флагов и опций, описанных в таблице 14.2.
| Опция | Объяснение |
|---|---|
-a |
Разрешает IP-адреса к именам хостов. |
-c <num> |
Прослушивает до тех пор, пока мы не получили <num> пакетов, а затем выходит. |
-d, -dd, - |
Берет фильтр, который вы указали в командной строке и, вместо прослушивания, выводит пакеты, код которых соответствует этому фильтру, в скомпилированном ассемблерном коде, фрагментах программы на языке C, или в десятичном представлении. Используется главным образом для отладки и редко полезен для новичков и пользователей среднего уровня. |
-e |
Отображает заголовок канального (link-level) уровня. Например, если вы находитесь в сети Ethernet, вы можете отображать Ethernet-заголовки своих пакетов. Опция полезна, если вы интересуетесь низкоуровневыми деталями определенной части сетевого трафика (например, определением MAC-адреса другой машины). |
-F <file> |
Определяет выражение для фильтра из файла вместо командной строки. |
-i |
Прослушивает определенный интерфейс. В системе Unix вы можете использовать ifconfig, чтобы увидеть доступные сетевые интерфейсы. В Windows вы можете использовать windump-D, чтобы найти номер интерфейса, который соответствует интересующему вас сетевому интерфейсу. |
-l |
Осуществляет буферизацию строк, использующуюся в стандартном выводе tcpdump, так что вы можете просматривать файл постранично. Без этой опции, tcpdump. |
-n |
Не разрешает IP-адреса к именам хостов. |
-N |
Подавляет печать |
-O |
Подавляет оптимизатор кода фильтрации пакетов. Используйте эту опцию, если вам кажется, что пакетный фильтр, которым вы снабдили tcpdump, теряет нужные пакеты или наоборот включает пакеты, которые должны быть отфильтрованы. |
-p |
Вынуждает tcpdump не помещать сетевой интерфейс в смешанный режим. Опция полезна, если вы заинтересованы только в прослушивании локального трафика (то есть трафика, идущего к машине, на которой вы работаете, и от нее). |
-q |
Вынуждает tcpdump не печатать слишком много информации о заголовке пакета. Вы потеряете много практически важных деталей, но все еще будете видеть время передачи и вовлеченные хосты. |
-r <file> |
tcpdump может записать свой вывод в двоичный файл (см. -w). Эта опция вынуждает tcpdump читать этот файл и отображать его. Так как tcpdump перехватывает необработанные данные, основываясь на |
-s <bytes> |
Определяет, сколько байтов на пакет должна попытаться "схватить" утилита tcpdump. Значение по умолчанию - 68. Если сделать это значение слишком большим, tcpdump может начать пропускать пакеты. |
-S |
Вынуждает tcpdump печатать абсолютные порядковые номера TCP-пакетов. По умолчанию используются относительные порядковые номера так, чтобы вы могли видеть, на сколько байтов изменяется порядковый номер между пакетами за время TCP-подключения. Использование абсолютных номеров означает, что вам понадобится делать некоторые вычисления самостоятельно. |
-t, -tt |
Вынуждает tcpdump не печатать метку времени вообще, или печатать не отформатированную метку (число секунд, начиная с 1 января 1970). |
-T <type> |
tcpdump может естественно интерпретировать некоторые другие IP-протоколы, и отображать соответствующим образом отформатированный вывод для них, например DHCP, NBT и ARP. Эта опция вынуждает tcpdump особым образом интерпретировать выбранные пакеты, как определенный тип протокола, типа RPC или SNMP. |
-v, -vv, -vvv |
Управляет уровнем многословия утилиты tcpdump. Чем большее количество символов -v вы установили, тем больше получите информации. |
-w <file> |
Означает, что не надо переводить данные перехваченного пакета в удобочитаемый формат, а писать их в двоичный файл, с именем <file>. Опция полезна, если вы tcpdump или другой инструмент типа Ethereal, чтобы рассмотреть их позже различными способами (см. -r). Так как в этом случае данные не переводятся в удобочитаемый формат, это делает утилиту tcpdump более эффективной, и снижает вероятность пропуска пакетов. Полезно использовать в системе с чрезвычайно большим объемом трафика. |
-x |
Отображает пакет в шестнадцатеричном формате. Посидите с выводом этой команды и с книгой по TCP/IP, если вы хотите больше узнать о TCP-заголовках и такого рода вещах. Эта продвинутая функция может помочь в прослушивании пакетов, которые могут скрывать данные в опциях IP или другим способом искореженные пакеты. |
-X |
Подобна шестнадцатеричной опции, но это как раз та опция, которую мы искали! В дополнение к шестнадцатеричному дампу, она отображает содержание пакета в ASCII-коде, позволяя нам видеть любые ясные текстовые символьные данные, содержащиеся в пакете. Это та опция, с которой мы могли бы прослушивать имена пользователей, пароли и другую интересную информацию, плавающую в сети. |
В справке man для tcpdump раздел вывода является, вероятно, одним из самых больших разделов. Поскольку tcpdump пробует интерпретировать некоторые протоколы по-разному, то фактический вывод tcpdump изменится также в зависимости от опций, которыми вы ее снабдили и типа пакетов, которые вы фильтруете. Мы не можем рассмотреть здесь все, но рассмотрим некоторый основной вывод утилиты tcpdump и поговорим о том, что он значит.
Ниже приводится вывод утилиты tcpdump, полученный без опций.
20:11:28.527191 eth0 B somehost.netbios-ns > 192.168.1.255.netbios-ns:NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST 20:11:28.531361 eth0 arp who-has 192.168.1.1 tell originix (0:e0:29:38:b4:67) 20:11:28.531939 eth0 arp reply 192.168.1.1 is-at 0:4:5a:e3:44:a3 (0:e0:29:38:b4:67) 20:11:28.531994 eth0 originix.1024 ns01.domain: 49930+ PTR? 255.1.168.192.in-addr.arpa. (44) 20:11:28.630838 eth0 ns01.domain originix.1024: 49930 NXDomain* 0/1/0 (116) (DF) 20:11:28.632600 eth0 originix.1024 ns01.domain: 49931+ PTR? 1.1.168.192.in-addr.arpa. (42) 20:11:28.655958 eth0 ns01.domain originix.1024: 49931 NXDomain 0/1/0 (114) (DF) 20:11:28.657685 eth0 originix.1024 ns01.domain: 49932+ PTR? 150.1.1.10.in-addr.arpa. (41) 20:11:28.668566 eth0 ns01.domain originix.1024: 49932 1/2/2 PTR ns01. (162) (DF) 20:11:29.277025 eth0 B somehost.netbios-ns 192.168.1.255.netbios-ns:NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
Давайте вначале сосредоточимся на отдельной строке. Первое значение представляет собой временную метку для пакета. Заметьте, что заданный по умолчанию формат не включает дату. Следующая порция информации - это интерфейс, на котором этот пакет был получен. После интерфейса мы видим <, > или B. Это указание, был ли пакет входящим, выходящим или широковещательным. Затем мы видим имена хостов или IP-адреса, за которыми следует точка и имя порта или номер. Знак "больше" (>) указывает, что хост и порт отправителя будут всегда слева, а хост и порт получателя будут всегда справа.
Первый пакет распознан как NetBIOS поверх TCP- (NBT-) пакета. Поскольку tcpdump может интерпретировать часть информации о пакете, он сообщает вам, что somehost выполнял широковещательный запрос NetBIOS, вероятно пробуя искать имя хоста для сетевого IP-адреса.
Второй пакет оказался запросом протокола определения адресов (ARP). ARP отображает IP-адрес на MAC-адрес Ethernet и наоборот. Originix посылает запрос ARP, прося MAC-адрес, соответствующий адресу 192.168.1.1 (возможно, это его шлюз). На следующей строке шлюз отвечает со своим MAC-адресом. Теперь два адаптера Ethernet могут говорить друг с другом на канальном уровне (
Четвертая и последующие строки содержат то, что оказалось трафиком DNS. Originix делает запрос к ns01 через порт домена 53. Поскольку утилита tcpdump может также интерпретировать пакеты DNS, то она пытается дать информацию о фактическом содержании пакета, включая тип запроса и адрес, с которого он сделан. Из вывода следует, что сначала она выполняет обратный поиск на "широковещательном" адресе (192.168.1.255), затем она пробует обратный поиск на 192.168.1.1, и, наконец, она пробует разрешать 10.1.1.150. Первые два поиска оканчиваются неудачей и получением сообщений "NXDomain" или "несуществующий домен" с DNS-сервера. Но адрес 10.1.1.150 успешно разрешается к имени ns01, которое является именем самого сервера.
Выше был приведен пример некоторых пакетов, которые утилита tcpdump может естественно интерпретировать.
С другими пакетами, подобными нормальному telnet- или SSH-трафику, будет отображена только информация о пакетах, и ничего больше.
20:28:48.375504 eth0 <somehost.2765 > originix.ssh: P 13024:13068(44) ack 42597 win 64695 (DF) 20:28:48.375574 eth0 >originix.ssh > somehost.2765: P 42597:42877(280) ack 13068 win 32120 (DF) 20:28:48.377010 eth0 < somehost.2765 > originix.ssh: P 13068:13200(132) ack 42877 win 64415 (DF) 20:28:48.377081 eth0 >originix.ssh > somehost.2765: P 42877:43157(280) ack 13200 win 32120 (DF)
Здесь мы поймали середину SSH-сеанса между Originix и somehost. Мы можем видеть, что установлен флаг P (push). Мы можем также видеть размер пакетов, поскольку утилита отображает относительный порядковый номер TCP-пакета, за которым следует ожидаемый номер и размер пакета (13024:13068 (44)). Заметьте, что вторая строка дает ack 13068. Это оказывается подтверждением получения предыдущего пакета, и того, что 13068 является следующим номером пакета, который он ожидает. Размер TCP-окна (наибольшее количество данных, которые он может обрабатывать) сообщается хостом в каждом пакете, и в этом примере установлен бит "не фрагментировать", чтобы препятствовать
Вы можете многое узнать о внутренней работе TCP, выполняя tcpdump и наблюдать, что происходит, когда вы запускаете сеанс telnet. Проверьте следующее.
20:30:58.635657 eth0 < somehost.2910 > originix.telnet: S 213111209:213111209(0) win 65535 <mss 1460,nop,nop,sackOK> (DF) 20:30:58.636019 eth0 > originix.telnet > somehost.2910: S 1513461939:1513461939(0) ack 213111210 win 32120 <mss 1460,nop,nop,sackOK> (DF) 20:30:58.636659 eth0 < somehost.2910 > originix.telnet: . 1:1(0) ack 1 win 65535 (DF) 20:30:58.639213 eth0 < somehost.2910 > originix.telnet: P 1:4(3) ack 1 win 65535 (DF)
Выше приведен вывод, который дает tcpdump, встречая подключение telnet. В двух первых строчках обратите внимание на отличия от тех пакетов, которые мы рассматривали в сеансе SSH. Этот пакет начинает подключение. Мы можем это утверждать, потому что установлен флаг S (SYN). Мы также видим, что порядковые номера пакетов в двух первых строках намного больше. Дело в том, что tcpdump использует фактические порядковые номера TCP-пакетов (32-х битные значения из диапазона от 0 до 4294967295) в начале TCP-подключения. Для остальной части подключения по умолчанию используются значения относительных порядковых номеров так, чтобы пользователям было легче видеть изменения во время передвижения пакетов туда-сюда. Мы также видим некоторые опции TCP, по которым ведутся переговоры во время трехэтапного "квитирования" (mss1460, somehost начинает посылать данные (3 байта заслуживающих внимания данных).
Используя программу BUTTSniffer, мы наблюдали процесс входа в систему из сеанса telnet. Мы можем делать это и с помощью утилиты tcpdump, используя опцию -X, чтобы отобразить содержание пакета в ASCII-коде. Однако поскольку эта опция отображает и заголовки пакета, и данные, то трудно локализовать то, что мы ищем. Сеанс telnet особенно труден для прослушивания с помощью tcpdump, потому что пакет посылается для каждого символа, который печатается. Соединить это в одно целое вручную может быть трудно. Но таким путем все-таки можно подслушать любого клиента, который держит в памяти информацию о пользователе и о пароле, а затем посылает ее одновременно в одном пакете (подобно Web-транзакции по HTTP, или входу в систему по FTP).
Давайте попробуем подслушать сеанс FTP с помощью команды tcpdump -X . Поскольку FTP использует команды USER и PASS для пересылки имени пользователя и пароля, мы должны искать вывод, содержащий эти команды.
20:51:06.697724 somehost.2937 originix.ftp: P 0:10(10) ack 84 win 65452 (DF) 0x0000 4500 0032 5bd4 4000 8006 1ad8 c0a8 0165 E..2[.@........e 0x0010 c0a8 0164 0b79 0015 0cc6 3325 a621 9a45 ...d.y....3%.!.E 0x0020 5018 ffac 68a7 0000 5553 4552 2062 6f62 P...h...USER.bob 0x0030 0d0a .. 20:51:06.893543 somehost.2937 originix.ftp: . ack 116 win 65420 (DF) 0x0000 4500 0028 5fd4 4000 8006 16e2 c0a8 0165 E..(_.@........e 0x0010 c0a8 0164 0b79 0015 0cc6 332f a621 9a65 ...d.y....3/.!.e 0x0020 5010 ff8c a023 0000 0000 0000 0000 P....#........ 20:51:10.828077 somehost.2937 originix.ftp: P 10:23(13) ack 116 win 65420 (DF) 0x0000 4500 0035 64d4 4000 8006 11d5 c0a8 0165 E..5d.@........e 0x0010 c0a8 0164 0b79 0015 0cc6 332f a621 9a65 ...d.y....3/.!.e 0x0020 5018 ff8c fe75 0000 5041 5353 2062 6f62 P....u..PASS.bob 0x0030 3132 330d 0a 123 ..
Фильтруя только трафик, предназначенный для порта 21, и используя опцию -X, мы можем легко обнаруживать информацию FTP, предназначенную для входа в систему. В этом примере снова появился пользователь bob, регистрирующий вход на FTP-сервер на хосте originix с паролем bob123.
Инструмент Ethereal представляет собой хороший графический внешний интерфейс к файлам перехваченных пакетов, созданным несколькими различными перехватчиками пакетов ( ), включая tcpdump и WinDump. Он имеет также свои собственные "живые" способности перехвата пакетов, использующие библиотеку pcap. Применяя Ethereal к предварительно созданным файлам перехваченных данных, вы можете рассматривать детали зафиксированного сеанса, включая данные пакета.
Инструмент /. Для его работы требуется библиотека pcap. Также необходимо иметь установленную библиотеку GIMP Toolkit (GTK), потому что инструмент использует GTK для своего графического интерфейса. Пользователям Windows повезло, поскольку DLL-файлы GTK теперь поставляются в двоичном коде. За исключением опций установки инструмента, сама установка для обеих операционных систем достаточно похожа. Поскольку мы уже описали установку этих инструментов для Unix и Windows в предыдущих разделах, то перейдем сразу к более интересной части.
Ethereal состоит из нескольких встроенных инструментальных средств, которые должны устанавливаться по умолчанию и в Windows и в Unix. Путем выбора вы можете пропускать инсталляцию некоторых из этих компонентов, но мы рекомендуем включить все.Самый простой путь состоит в применении Ethereal к уже существующему файлу перехваченных пакетов, созданному с использованием командной строки tcpdump -w capture.. В этом случае мы можем открыть файл дампа File/Open (Файл/Открыть). Откроется диалоговое окно Open Capture File (Открытие перехваченного файла), показанное ниже.

В этом диалоговом окне вы можете выбрать открываемый файл, а также установить такие опции, как разрешение имен и дополнительные
Давайте откроем файл capture.
(рис 14.1) Отображение в Ethereal файла дампа сеанса telnet, созданного утилитой WinDump Как видно из рисунка, у Ethereal гораздо более понятный интерфейс, чем у tcpdump или WinDump. Верхняя панель содержит информацию, подобную той, которую дают два других инструмента, но здесь фактически мы можем перемещаться по этим данным. На рисунке выбран первый пакет подключения. В средней панели мы можем видеть детальную информацию о каждом заголовке пакета, включая TCP, IP и заголовочную информацию Ethernet. Третья панель содержит шестнадцатеричный и ASCII-дамп фактического содержания пакета. Таким образом, мы можем получить любой бит интересующей нас информации о любом пакете этого подключения, включая данные.
Графический интерфейс программы Ethereal облегчает создание пакетных фильтров как для файлов перехваченных пакетов (фильтры отображения) так и для "живого" перехвата (фильтры перехвата) через диалоговое окно Display Filter (Отображение фильтра), доступное по щелчку на кнопке Filter (Фильтр) в нижнем левом углу.

Вы можете дать имя своим фильтрам и сохранить их для последующего использования, чтобы загрузить их позже простым выбором и щелчком. После того как вы изучите синтаксис фильтров программы .
(рис 14.2) Добавление выражений к фильтру с помощью графического интерфейса, мы ищем только пакеты TCP SYN (начало TCP-подключений). Чтобы комбинировать фильтры, можно использовать
.
(рис 14.3) Отслеживание TCP-потокаВ окне, отображающем содержание, мы можем воссоздать части фактического TCP-сеанса. Мы можем использовать расшифровку ASCII или шестнадцатеричного кодов, рассматривать полный сеанс связи или его определенную часть, и сохранить это все в файле или напечатать. (В окне на рис 14.3 синим цветом отмечен текст, который приходит с сервера, а красным - текст, приходящий от клиента). Еще раз напомним, что мы перехватили здесь пароль бедного Боба (bob123).
Вы можете пытаться расшифровывать пакет, используя один из многих доступных протоколов. Обычно в этом нет никакой надобности, так как Ethereal определяет протокол и делает расшифровку автоматически для большинства перехваченных данных.
Из меню Tools вы можете также выполнить анализ TCP-потока по пропускной способности, по времени передачи туда и обратно и по номерам TCP-пакетов. На рис 14.4 показан анализ, использующий порядковые номера и время. Это дает вам представление о том, какой объем данных был послан на разных точках подключения, потому что порядковые номера увеличиваются на размер пакета данных.
(рис 14.4) График зависимости порядковых номеров от времениНа графике пропускной способности, показанном на рис 14.5 видно, что большинство данных в этом подключении было послано в начале подключения (вероятно, это опции telnet).
Каждый график, показанный на рис 14.4 и рис 14.5, имеет множество опций, включая изменение размера окна и ориентации.
Мы можем также обратиться к итоговому диалоговому окну, показанному на рис 14.6, которое анализирует подключение, в т.ч. длительность подключения в секундах, число пакетов, фильтр, использованный при перехвате пакетов, и информацию о скорости передачи. Чтобы открыть это диалоговое окно, выберите в меню Tools/Summary.

(рис 14.6) График пропускной способности(рис 14.5) Диалоговое окно Summary (Резюме) утилиты EtherealДиалоговое окно Protocol
Ethereal имеет несколько заданных по умолчанию характеристик, которые вы можете изменять, включая предпочитаемый протокол, макет графического интерфейса, и разрешение имен. Вы можете видеть список поддерживаемых протоколов, щелкая правой кнопкой мыши на любой характеристике пакета. Выберите опции Match (Установить соответствие) и Prepare (Подготовить), чтобы фильтровать пакеты на основе определенных характеристик. Выберите Match, если вы хотите создать и применить фильтр, основанный на соответствии, которое вы определите, или Prepare, если вы хотите только посмотреть инструкцию, созданную для фильтра, и возможно, изменить ее самостоятельно. Можете изменить так же способ форматирования данных и напечатать их. Возможности кажутся бесконечными.
Утилита dsniff представляет собой совокупность бесплатных инструментальных средств, которые первоначально были написаны для тестирования сети и возможностей проникновения в нее, но они могут использоваться и в неправедных целях для прослушивания и похищения чужой информации.
Утилита . Она требует также нескольких других пакетов, включая OpenSSL, libpcap, , libnet и libnids. Вам, вероятно, не составит труда найти двоичные версии этих пакетов для вашей конкретной операционной системы Unix.
libpcap должен быть установлен раньше, чем libnet, а libnet - раньше, чем libnids.dsniff компонуется подобно любому другому приложению Unix ( configure, make, make install ). Во время установки dsniff по умолчанию разместит все свои инструментальные средства в каталоге /usr/local/sbin.
Как уже упоминалось, dsniff фактически является совокупностью различных инструментальных средств. Мы кратко рассмотрим каждый индивидуальный инструмент, что он может делать, и как он может использоваться в хороших и дурных целях.
Мы говорили о том, как сетевые коммутаторы делают прослушивание более трудоемким, потому что коммутатор достаточно интеллектуален: он знает MAC-адреса Ethernet каждой машины на каждом порту, поэтому только машина адресата получает пакет. Однако прослушивание в переключаемых сетях все еще возможно путем Arpspoof позволяет это делать.
ARP - это протокол, использующийся для преобразования IP-адресов в MAC-адреса Ethernet. Поскольку ARP-запросы передаются "широковещательно" для всей сети (типа такого: "Эй, вы, которая из ваших Ethernet-карт имеет IP-адрес 192.168.1.100?"), то они всегда будут доходить до всех. Хост, выполняющий Arpspoof, может сообщить подателю ARP-запроса, что искомый IP-адрес у него, даже если на самом деле это не так. Вы можете обмануть хост, подавший ARP-запрос и переключить посылку пакета на себя вместо получателя, которому он предназначался. Затем вы можете сделать копию пакета и использовать механизм пересылки пакета, чтобы отправить пакет его первоначальному адресату подобно ретранслятору.
Использование arpspoof из командной строки следующее: arpspoof host_to_snarf_packets _from (то есть хост, у которого надо перехватить пакет). С помощью опции -i вы можете указать сетевой интерфейс, который надо использовать, а, используя опцию -t, вы можете указать определенные хосты, которые хотите обмануть. По умолчанию, Arpspoof подделывает MAC-адрес хоста, который указан в командной строке ( host_to_snarf_packets_from ), под все хосты локальной сети (LAN). Наиболее популярным хостом, подверженным ARP-
Этот инструмент работает подобно Arpspoof. Он позволяет подделывать DNS-ответы для DNS-сервера локальной сети. Поскольку DNS выполняется по протоколу пользовательских дейтаграмм (UDP), не требующему установки соединения, то DNS-клиент сделает запрос и будет ожидать ответа. Инструмент dnsspoof просто подделает ответ (сообщая клиенту, что имя хоста оказалось соответствующим его IP-адресу) и попытается получить информацию прежде, чем прибудет реальный ответ от соответствующего DNS-сервера. dnsspoof может подделывать ответы для всех DNS-запросов, которые он получает. Вы также можете создать файл в формате hosts(5) (с именем spoofhosts, например) для преобразования только определенных имен в ваш локальный IP-адрес, а затем выполнить утилиту dnsspoof с опцией f spoofhosts, чтобы подделывать результат преобразования только для определенных имен.
Кроме той же самой опции i, которую Arpspoof принимает для определения сетевого интерфейса, единственным дополнительным параметром, который принимает dnsspoof, является выражение для фильтра перехватываемых пакетов, аналогичное используемому в tcpdump. Инструмент dnsspoof будет использовать это выражение для поиска какого-нибудь DNS-трафика, где он мог бы подделывать ответы на любые входящие запросы в локальную сеть, которую он может видеть. Если вы сначала используете Arpspoof для подделки MAC-адреса DNS-сервера, которому предназначался запрос, то можете быть уверенны, что dnsspoof будет всегда получать DNS-запросы для локальной сети (LAN) и будет всегда способен дать в ответ фальсифицированный результат отображения имен хоста/IP-адреса.
Инструмент dsniff представляет собой перехватчик паролей ( password ), который распознает несколько различных протоколов, включая telnet, FTP, SMTP, POP (Ethereal, дают вам тонны дополнительной информации о подключении и об индивидуальных пакетах, инструмент dsniff используется в случае, если вас интересуют только имена пользователей и пароли. Инструмент весьма эффективен. Он сохраняет только "полезную" информацию в выходном файле
Флаги командной строки. Следующая таблица содержит опции флагов командной строки и пояснения к ним.
| Опция | Объяснение |
|---|---|
-c |
Включает полудуплексное ассемблирование TCP-потока, чтобы обеспечить корректную операцию прослушивания при использовании Arpspoof. |
-d |
Запускает |
-f <file> |
Загружает совокупность условий (то есть, типов служб для перехвата паролей) из файла с форматом /etc/services. |
-i <if> |
Использует определенный сетевой интерфейс. |
-m |
Использует файл dsniff.magic, чтобы попытаться автоматически определить протокол, используя характеристики, определенные в файле magic. |
-n |
Не выполняет поиска хостов. |
-r <file> |
Читает перехваченные данные из предварительно сохраненного сеанса (см. -w). |
-s <len> |
Перехватывает, по крайней мере <len> (количество байтов) первых байтов пакета, что полезно, если информация об имени пользователя и пароле приходит после 1024-байтового предела, который задан по умолчанию. |
-t <trigger> |
Загружает разделенный запятыми набор триггеров, используя формат port/proto=service ; например, по команде dsniff -t23/tcp=telnet, 21/tcp=ftp, 110/tcp=pop3 будет перехвачен пароль для сеансов telnet, FTP и SMTP. |
-w <file> |
Записывает перехваченные данные в двоичный файл для последующего анализа (см. -r ). |
Использование и вывод. Единственным дополнительным параметром, который может принимать dsniff является выражение для tcpdump так, чтобы вы могли определить, на какие хосты переданные или с каких хостов отправленные пароли вы хотите перехватить.
Давайте запустим dsniff и посмотрим, пытается ли наш друг Боб войти в какую-нибудь систему.
[root@originix sbin]# dsniff -t 21/tcp=ftp,23/tcp=telnet -n Kernel filter, protocol ALL, raw packet socket dsniff: listening on eth0 [] --------- 03/23/02 09:40:50 tcp 192.168.1.101.3482 -> 192.168.1.100.21 (ftp) USER bob PASS bob123 --------- 03/23/02 09:41:52 tcp 192.168.1.101.3483 -> 192.168.1.100.23 (telnet) root guessme jdoe password ls
Да, это Боб. Он устанавливает связь по FTP, и мы перехватили его пароль. А что можно сказать относительно сеанса telnet, который зарегистрирован ниже? dsniff, похоже, перехватил попытки получить вход в систему с привилегированным доступом ( root ) через telnet. Вход в систему, похоже, был неудачным, потому что пользователь затем попробовал войти в систему под именем jdoe с паролем password, и ему это удалось. Далее dsniff зарегистрировал выполнение команды ls. В настоящее время большинство систем не предоставляют доступ с привилегированными правами ( root ) через telnet, даже если вводится правильный пароль. Пароль guessme, вероятно, был паролем привилегированного доступа. И поскольку мы теперь знаем пароль для имени пользователя jdoe, мы можем проникнуть в систему и испытать ее.
Если бы пользователь jdoe попробовал дать команду su для привилегированного доступа позже, во время этого подключения, dsniff поймал бы так же и это. Именно поэтому dsniff перехватывает последующие команды так же, как и информацию, касающуюся входа в систему в сессии telnet. Вы заметите, что dsniff ждет окончания подключения прежде, чем он выведет свою информацию. Это происходит в том случае, если dsniff обнаружит любую другую полезную информацию, касающуюся имени пользователя/пароля, появившуюся не при изначальном входе в систему.
tcpdump может использоваться для прослушивания NFS-трафика. Инструмент filesnarf, фактически, может взять перехваченный файл и повторно собрать его на вашей системе. В любое время, когда кто-то передает файл по сети, используя NFS, вы можете перехватить его копию, даже если экспорт NFS вам не доступен.
И снова, вы можете использовать опцию -i, чтобы указать сетевой интерфейс. В командной строке вы можете также указать выражение tcpdump, чтобы использовать его для прослушивания соответствующего NFS-трафика и шаблона файла (перехватить только *.conf-файлы или файлы с именем passwd ). Если вы хотите перехватить все файлы кроме некоторых (скажем, вы хотите перехватить все, кроме файлов MP3), вы можете инвертировать соответствующий шаблон файла, используя опцию -v следующим образом.
filesnarf -v '*.mp3'
Инструмент macof заполнит локальную сеть случайными воображаемыми MAC-адресами в надежде, что коммутатор перестанет срабатывать, как полагается, и начнет действовать подобно хабу, позволяя инструменту dsniff действовать более успешно в сетевом окружении коммутатора. Вы можете выполнять macof без опций, чтобы сгенерировать случайный TCP/IP-трафик со случайными MAC-адресами, или можете определить тип трафика, используя флаги командной строки. Вы можете контролировать используемый сетевой интерфейс ( -i ), IP-адрес отправителя и получателя ( -s и -d ), порты отправителя и получателя ( -x и -y ), единственный -e ) и число выдуманных пакетов для пересылки ( -n ).
Так же как filesnarf предназначен для перехвата NFS, инструмент mailsnarf повторно собирает перехваченные почтовые сообщения из SMTP- и POP-протоколов. Он сохраняет сообщения в стандартном формате mbox так, чтобы вы могли просматривать их так же, как бы вы просматривали любой почтовый ящик Unix, используя утилиты mutt, pine или любое приложение Unix по вашему выбору. При этом используются точно такие же опции, за исключением того, что вместо указания интересующего вас шаблона файла, вы указываете обычные выражения, совпадение с которыми надо искать в заголовке или теле сообщения.
Подобно другим программам вида *snarf, msgsnarf выполняет ту же самую операцию для популярных программ интернет-чата:
Sshmitm является одним из самых опасных инструментальных средств, которые поставляются с комплектом dsniff. Предположим, вы выполняете утилиту dnsspoof, чтобы подделать имена хоста реальной машины. Утилита sshmitm, которая расшифровывается как "SSH Monkey in the Middle", может перехватить SSH-трафик, перенаправленный на вашу машину. Sshmitm поддерживает только протокол SSH версии 1 (серьезное основание, чтобы модернизировать инструмент к версии 2).
Как это сделано? Инструмент dnsspoof позволяет нам перехватить SSH-подключение к другой машине. Все, что надо сделать - это запустить sshmitm на порте 22 (мы можем изменять порт, который использует sshmitm с помощью опции -p ) и устанавливать его так, чтобы ретранслировать SSH-подключение к нужному хосту. Если мы выполняем dnsspoof, сообщая всем, что мы являемся хостом Originix, когда в действительности Originix - это машина с адресом 192.168.1.100, то когда somehost осуществляет SSH-запрос к Originix, он сначала ищет Originix и находит его по нашему подделанному IP-адресу. Так, что если мы выполняем команду sshmitm -p 22 192.168.1.100 22, мы можем перехватить SSH-подключение от somehost перед тем, как передать его к Originix. Что это нам дает? Когда SSH договариваются о ключах, которые будут использоваться для шифрования данных, sshmitm может перехватить ключ от somehost и заменить его известным нам ключом. Это позволит нам расшифровывать всю информацию на перехваченном подключении.
Этот инструмент пытается уничтожить действующее TCP-подключение, мистифицируя сброс, т.е. RST-пакет и вбрасывая его в законное подключение. Как и в других инструментах, опция -i позволяет выбрать ваш интерфейс, а для выбора типа подключений, которые вы хотите уничтожить, может использоваться выражение для tcpdump. Дополнительная опция, - <num>, где num - любое число от 1 до 9, сообщает tcpkill, как сильно надо стараться, чтобы уничтожить подключение. В быстрые подключения может быть труднее ввести пакет, чем в медленные. По умолчанию значение степени "уничтожения" равно 3.
Возможно так же, что вы не хотите уничтожить подключение полностью. Инструмент Tcpnice позволит вам немного замедлить его. Используете те же самые опции, которые используются в tcpkill, за исключением того, что вместо попытки вводить RST-пакеты с разным уровнем суровости, вы используете опцию -n <приращение>, чтобы определить, на сколько вы хотите замедлить подключение. Приращение 1 дает заданную по умолчанию скорость, а приращение 20 дает самую медленную скорость. Инструмент выполняет это замедление, регулируя то количество данных, которое хосты, "по их словам", могут обрабатывать.
Часть TCP-заголовка представляет собой размер окна, который позволяет хосту рекламировать максимальное количество данных, которые он может обрабатывать. Инструмент tcpnice прослушивает трафик, соответствующий вашему tcpdump -выражению -n, чтобы настроить, на сколько должно быть уменьшено окно. Это даст знать хосту на другом конце сеанса связи, что требуется прекратить посылку такого большого количества данных так быстро, и подключение замедлится. Чтобы подбавить "масло в огонь", вы можете использовать опцию -I для подделки исходных подавленных ответов ICMP, чтобы заставить хост на другом конце думать, что он загружает хост с большим количеством данных, чем тот может обработать. Это может еще больше замедлить подключение.
Urlsnarf работает так же, как все другие snarf-программы в этом наборе инструментов, но только с URL-адресами сети. Инструмент сохраняет любые URL, которые он перехватывает из трафика HTTP в регистрационный файл, который может быть проанализирован позже. Это быстрый и простой способ узнать, чем интересуются люди из вашей локальной сети в интернете.
Этот инструмент дает HTTPS (Web-трафик, защищенный протоколом SSL) то же, что sshmitm дает SSH. Он требует использования инструмента dnsspoof и работает в той же самой манере, вставляя поддельный
Этот последний инструмент в пакете dsniff немного несерьезен. Определяя IP-адрес хоста в вашей локальной сети, webspy перехватывает Web-трафик, посылаемый этим хостом. Всякий раз, когда этот хост перемещается в интернете к определенному URL-адресу, webspy будет загружать тот же самый URL на вашем броузере Netscape. Все, что вам требуется сделать - это запустить свой Web-броузер Netscape, перед запуском webspy. И можно рассматривать все то, что просматривает в сети ваш друг, сидящий этажом ниже. То есть речь идет о вторжении в личную жизнь!
Как видите, здесь были описаны некоторые чрезвычайно опасные инструментальные средства. Хотя авторы искренне предназначали их для использования в благих целях, очевидно, что хакеры могут применять эти инструментальные средства для перехвата всех видов секретной информации, которая им не принадлежит, и даже той информации, которая, как предполагается, будет зашифрована! Недостаток, конечно, как и с любым анализатором сетевых потоков, состоит в том, что вы должны находиться в той же самой локальной сети, где находится ваша жертва. Такие инструментальные средства должны заставить каждого администратора службы сетевой безопасности дважды подумать о
Мы уже говорили о системах обнаружения вторжений (IDS) в этой книге. Инструменты IDS также являются анализаторами сетевых потоков (nmap, или программы с потенциально уязвимыми местами ( ), как Code Red.
Snort - устойчивая IDS. Он выполняется на нескольких версиях системы Unix и на Windows. Кроме того, он абсолютно бесплатный (http: // www.snort.org/).
/.
Установить Snort не составляет труда. Нужно проделать обычные инсталляционные шаги. Трудная часть состоит в конфигурировании его так, чтобы он регистрировал и предупреждал только действительные угрозы и не вызывал Snort в разделе "Правила инструмента Snort: краткий обзор".
Snort может действовать, как автономный анализатор и перехватчик сетевых пакетов, как регистратор пакетов, или как система обнаружения вторжений (IDS). Первые два режима действительно не имеют никакого преимущества по отношению к другим анализаторам, за исключением того, что регистратор пакетов инструмента Snort может регистрировать пакеты на диск в каталоге с хорошо организованной структурой. Работа Snort с файлом правил (обычно snort.conf) вынудит его регистрировать только те пакеты, которые соответствуют правилам, указанным в этом файле.
Snort будет не только регистрировать пакеты, которые соответствуют вашим правилам. Его можно сконфигурировать так, чтобы он выполнялся в разных режимах предупреждений. Предупреждения могут быть зарегистрированы в специальном файле предупреждений инструмента Snort - syslog, как сообщение WinPopup на рабочей станции Windows, или даже во
Как уже упоминалось, пакеты могут быть зарегистрированы в каталоге с хорошо организованной, удобочитаемой структурой или в двоичном файле перехваченных данных tcpdump. Если вы находитесь в сети с большим объемом трафика, вы захотите использовать режим регистрации данных в двоичном формате просто для того, чтобы не вынуждать Snort делать анализ в реальном времени. Пытаясь отформатировать вывод перехваченных данных, он мог бы пропускать некоторые пакеты. Сохраните данные в двоичном формате и используйте другую программу (возможно, Ethereal ) чтобы проанализировать их позже.
Правила инструмента Snort похожи на выражения для tcpdump и Ethereal. Они могут отфильтровывать пакеты, основываясь на IP-адресах, портах, данных заголовка, флагах и содержании пакета. У Snort три вида правил.
Snort поставляется со стандартным набором правил, который проверяет такую деятельность, как скрытное сканирование с помощью nmap, поиск уязвимых мест (
По умолчанию сначала Snort проверяет пакет на соответствие правилам предупреждений, затем правилам пропуска, и, наконец, правилам регистрации. Эта установка отлично подходит для администратора, который еще только изучает Snort и планирует использовать заданный по умолчанию файл конфигурации и набор правил. Заданный по умолчанию набор правил Snort не включает никаких правил пропуска или регистрации. Однако запускать Snort без какой-либо настройки или конфигурации плохо, поскольку вы, без сомнения, будете завалены ложными предупреждениями.
Когда вы лучше познакомитесь с синтаксисом правил инструмента Snort, вам захочется написать правила игнорирования некоторого трафика. Например, в нашей сети, любое время было огромное количество DNS-запросов, отправленных нашему DNS-серверу другими DNS-серверами из интернета, Snort обнаруживал ложное UDP-сканирование портов и зондирование DNS. Очевидно, мы не хотели, чтобы наши файлы регистрации были завалены всеми этими ложными срабатываниями. Поэтому мы установили наш собственный файл правил и определили переменную DNS_SERVERS, которая содержала IP-адреса всех наших DNS-серверов. Затем мы написали следующие правила:
var DNS_SERVERS [192.168.1.150/32,192.168.1.151/32] pass udp $DNS_SERVERS 53 - $DNS_SERVERS 53 pass udp $EXTERNAL_NET 53 - $DNS_SERVERS 53
Эти правила вынудили Snort пропускать (или игнорировать) любой DNS-трафик между нашими DNS-серверами и пропускать весь DNS-трафик между нашими DNS-серверами и DNS-серверами во внешней сети ( EXTERNAL_NET, который определен в главном файле snort.conf). Но проблема все еще сохранялась. Поскольку правила соответствий проверяются в таком порядке: правила предупреждений, пропуска, регистрации, то пакеты все еще сначала вызывали предупреждения. Нам было необходимо изменить порядок проверки соответствий. К счастью, Snort предусматривает опцию -o, которая изменяет порядок проверки правил на пропуск, предупреждение, регистрацию.
-o, предпочтительнее, автор пакета не установил -o порядком, заданным по умолчанию, потому что люди писали плохие правила для пропуска, которые пропускали большее количество пакетов, чем нужно, и предупреждения оказывались пропущенными. Вы должны использовать опцию -o, только если хорошо овладели написанием правил.Наше второе правило пропуска фактически оставляет потенциальную дырку в нашем IDS. Мы предполагали, что только внешние DNS-серверы будут говорить с нашими DNS-серверами с порта отправителя 53. Если посторонний человек узнал бы об этом правиле, он мог бы перекинуть любой трафик мимо нашего IDS, сделав так, чтобы все были уверены, что DNS-запросы и попытки переноса зоны, прибывают с порта отправителя 53. Именно поэтому вы должны быть чрезвычайно осторожны при написании правил пропуска пакетов для Snort.
Детали, касающиеся синтаксиса правил инструмента /. Мы дадим краткое резюме того, как пишутся эти правила.
Основные правила Snort состоят из двух частей: заголовка и опций. Первая часть заголовка сообщает инструменту Snort, какого типа правило последует (предупреждение, регистрация, пропуск). Остальная часть заголовка указывает протокол (ip, udp, icmp или tcp), оператор направления (или - >, чтобы определить направление от отправителя к получателю или < >, чтобы определить двунаправленность), а также IP-адрес и порт отправителя и получателя. IP-адрес отправителя и получателя можно написать, используя синтаксис aaa.bbb.ccc.ddd/yy, где yy - число сетевых байтов (то есть
Опции правил содержат такие вещи, как предупреждающее сообщение для некоторого правила и содержания пакета, которое должно использоваться для идентификации соответствующих пакетов. Опции всегда заключаются в круглые скобки.
Ниже приводится пример правил для инструмента Snort, которые обнаруживают тех, кто пытается получить доступ к cmd.exe через IIS Web-сервер.
alert tcp $EXTERNAL_NET any - $HTTP_SERVERS 80 (msg:"WEB-IIS cmd.exe access"; flags: A+; content:"cmd.exe"; nocase; classtype:web-application-attack; sid:1002; rev:2;) alert tcp $EXTERNAL_NET any - $HTTP_SERVERS 80 (msg:"WEB-IIS cmd? access"; flags: A+; content:".cmd?"; nocase; classtype:web-application-attack; sid:1003; rev:2;)"
Заданный по умолчанию набор правил для Snort состоит из единственного файла, называемого snort.conf и нескольких файлов с расширением .rules. Файл snort.conf является главным файлом правил, но он включает другие файлы правил, используя инструкцию include. Это позволяет вам разбивать правила на логические разделы. Файл snort.conf позволяет вам также определять переменные, которые могут использоваться во всех ваших правилах. Это сделано с помощью команды var.
В предыдущем примере, мы определили переменную с именем DNS_SERVERS. Файл snort.conf позволяет вам определять несколько переменных такого рода, и вы можете указать в своих правилах, какие машины являются Web-серверами, какие - почтовыми серверами, SQL-серверами, DNS-серверами и так далее. Это поможет инструменту Snort применять правила соответствия более рационально и эффективно. Например, нет никакого смысла в применении правил, написанных для обнаружения программных средств Web-сервера (то есть использования этих средств с целью взлома), применительно к трафику, поступающему с машины, на которой отсутствует Web-сервер.
Другое специальное правило инструмента Snort - правило конфигурации (config rule), которое позволяет вам указать некоторые из опций конфигурации, которые вы обычно помешаете в командную строку, в файле snort.conf.
Вы можете выполнить много других задач, используя правила инструмента Snort в современных версиях. Snort позволяет вам определять свои собственные типы правил, позволяющих регистрировать данные в разных местах, используя различные методы с помощью модулей вывода, которые мы обсудим позже, в разделе "Модули вывода".
Недавно в Snort добавили также поддержку динамических правил, которые являются "активизируются" другими правилами инструмента Snort. Фактический метод, в котором это сделано, находится в центре реконструкции предпринятой разработчиками Snort, но концепция осталась той же самой. Правило, имеющее "активизирующий" тип, включит "динамическое" правило, которое с ним связано. Это чрезвычайно полезно. До появления этих типов правил, бывало, что если кто-то успешно применил программу взлома (Snort мог зарегистрировать этот факт, потому что пакет программы взлома соответствовал правилу. Но чтобы ни делал хакер после успешного применения программы взлома, никогда не регистрировалось, потому что оно не соответствовало никаким правилам. Если же мы используем активизирующий тип правила для обнаружения этой программы взлома, то оно может связаться с динамическим правилом, которое за
тем перехватит следующие 500 пакетов хакера,
которые позволят понять то, что он делал после успешного взлома.
Правила являются душой и сердцем инструмента Snort. Если вы овладеете этими правилами, то можете точно отрегулировать Snort, превращая его в чрезвычайно мощное оружие против потенциальных взломщиков.
Другое свежее дополнение к инструменту Snort содержит модули, расширяющие ее функциональные возможности. Snort включает два главных типа плагинов: предпроцессоры и модули вывода.
Предпроцессоры устанавливаются в файле snort.conf, с помощью команды Snort, но прежде, чем начнется применение правил соответствия. Таблица 14.3 описывает наиболее популярные предпроцессоры (те, которые имеются в версии Snort 1.8 ).
| Предпроцессор | Опции | Описание |
|---|---|---|
| http_decode | <port_list> |
Берет любые Web-URL, которые перехвачены из трафика передачи портов в <port_list>, и расшифровывает их в ASCII-текст. Так как URL не могут содержать некоторые специальные символы (например, пробелы), вы будете часто видеть символы подобные %21 в URL. Этот процессор преобразовывает эти символы к ASCII-коду так, чтобы правила были способны должным образом обнаружить предупреждения, основанные на совпадении URL. |
<network><num_ports><period><logfile> |
Одно из наиболее полезных дополнений к программе. Сканнер порта прослушивает <network> и регистрирует предупреждение в файл <logfile> всякий раз, как порт с номером <num_ports> или (и) другие порты в вашей сети задействуются в пределах интервала <period>, заданного в секундах. | |
<host_list> |
Вспомните наш пример с DNS-сервером. Мы не хотим получать сообщения о сканировании порта некоторых машин в нашей сети, потому что это фактически законный трафик. Здесь вы можете определить список IP-адресов (разделенный пробелами, а не запятыми) которые вы хотите игнорировать. | |
| frag2 | memcap <bytes> timeout <seconds> |
Выполняет дефрагментацию всех перехваченных фрагментированных пакетов. Использует заданный по умолчанию объем памяти в 4 мегабайта и 60-секундный перерыв для выполнения |
| stream4 | noinspect keepstats detect_scans detect_state_problems |
Позволяет Snort обрабатывать TCP-потоки (или сеансы) и делать инспекцию пакетов, давая заключение об их состоянии. Имеющиеся опции позволяют отключать инспекцию, регистрировать информацию о сеансе в файле, предупреждать о сканировании порта, и предупреждать о проблемах состояния (например, перепутанные порядковые номера пакетов), соответственно. |
Модули вывода также устанавливаются в файле snort.conf, с помощью команды output, которая управляет тем, как, где и в каком формате Snort хранит полученные данные. Для любого типа определенных вами правил можно указать определенный модуль вывода, который будет с ним использоваться. В таблице 14.4 описаны наиболее популярные модули вывода (в версии Snort 1.8).
| Модуль | Опции | Описание |
|---|---|---|
| alert_fast | <logfile> |
Так же как с режимом быстрых предупреждений, который может быть определен из командной строки как -A fast, вы можете в этом месте определить отдельный файл. Эта опция полезна, если вы определяете свои собственные правила и хотите, чтобы некоторые правила использовали модуль alert_fast для регистрации данных в одном файле, в то время как другие правила использовали модуль alert_fast для регистрации данных в другом файле. |
| alert_full | <logfile> |
Подобен модулю alert_fast за исключением того, что для предупреждений он использует заданный по умолчанию режим полной регистрации инструмента Snort. |
| alert_smb | <workstation_list_file> |
Подобно свойству -M, посылает предупреждения WinPopup рабочим станциям Windows, перечисленным в файле. |
| alert_syslog | <syslog_facility> <syslog_priority> |
Подобно опции -s, позволяет посылать предупреждающие сообщения инструмента Snort непосредственно в syslog, используя средства и приоритет, который вы определяете. |
| log_null | Модуль полезен при определении типов правил, когда вы хотите вывести предупреждение, но не заботитесь о регистрации данных пакета. | |
| log_tcpdump | <logfile> |
То же, что и работа Snort в двоичном формате регистрации данных (-b) и указания другого имени файла для регистрационного файла tcpdump (-L). |
| alert_unified, log_unified | <logfile> |
Новый, чрезвычайно эффективный метод регистрации, который скоро станет в инструменте Snort заданным по умолчанию способом регистрации данных. Оба формата регистрации будут сделаны в двоичном коде, и отдельные программы (типа Barnyard) будут использоваться при анализе двоичных файлов и приведении их в удобочитаемые форматы. |
| database | <rule_type> <database_type> < parameters > |
Сохраняет данные согласно правилам регистрации Snort или правилам предупреждений Snort (в зависимости от <rule_type>) во |
| xml | <rule_type> <parameters> |
Сохраняет данные согласно правилам регистрации Snort или правилам предупреждений Snort (в зависимости от <rule_type>) в файл в формате SNML (Simple Network Markup Language). Параметры <parameters> управляют местоположением и макетом файла. |
<logfile> <format> |
Выбор из доступных элементов тех, которые будут регистрироваться при выводе инструментом Snort в формате строки <format> в файл, названный <logfile> и содержащий значения, отделяемые друг от друга запятой. |
|
| trap_snmp | <event_type> <sensor_id> <trap_type> <address> <community> |
Посылает SNMP-предупреждение станции сетевого управления по адресу <address> в SNMP сообщество <community>. |
Как видим, и относительно легко создавать свои собственные. И вы определенно не найдете ничего лучшего.
Однако в использовании Snort есть несколько недостатков. Один из недостатков состоит в том, что его файлы регистрации и предупреждений довольно трудно интерпретировать, независимо от того, какое средство вывода вы используете. К счастью, несколько сторонних приложений, таких как Snort. Вам определенно потребуется одно из этих приложений, чтобы ежедневно продолжать свою деятельность по обнаружению вторжений.
Может потребоваться, чтобы ваш инструмент IDS активно пресекал некоторые виды деятельности, как только он их обнаружит (закрытие порта или блокировка IP-адреса). Изначально Snort этого не делает. Опять же, для выполнения этих задач доступны некоторые приложения (такие как Guardian и Hogwash).
Администрирование файлов правил и установка нескольких датчиков .
Видно, что заставить Snort работать с оптимальной эффективностью на начальном этапе достаточно сложно. Но как только вы установите и сконфигурируете различные части так, как вам надо, Snort станет непобедим.
Пример из жизни. Слежка за внутренним пользователем
Предположим, вы получаете телефонный звонок от одного из ваших пользователей, который жалуется, что ему не удается обратиться к Web-сайту суперновостей. Вы спрашиваете его, какое сообщение дает его броузер, и он отвечает: "Ошибка 403 - запрещен". Услышав это, вы говорите ему: "Хорошо, раз вы получили это сообщение, значит, броузер делает сетевое подключение к серверу, но сервер не посылает назад Web-страницу, как должно". Вы обвиняете в этом хозяев сайта суперновостей и советуете ему немного подождать. В течение дня вы продолжаете получать звонки о сайте суперновостей и непрерывно отвечаете звонящим, что вы ничего не можете сделать. Наконец, одна из ваших пользователей звонит вам и сообщает, что она смогла обратиться к этому сайту со своей, вызываемой по телефону учетной записи, но не из офиса. Это кажется неправдоподобным. Вы набираете свою собственную телефонную учетную запись и обнаруживаете, что она права; получается, что запрещен только трафик из этого офиса.
Вы находите контактную информацию Web-мастера сайта суперновостей и посылаете ему по электронной почте сообщение о возникшей проблеме. Вскоре вы получаете довольно грубый и краткий ответ, утверждающий, что кто-то с вашего IP-адреса злоупотребил Web-сервером и сетью суперновостей, выполняя сканирование портов, засылая саморазмножающиеся сетевые вирусы и даже применяя средства взлома (
К сожалению, у вас нет возможности узнать, кто этот злоумышленник. Файлы регистрации вашего брандмауэра установлены так, чтобы делать запись любого поступающего трафика, но в настоящее время вы не контролируете выходящий трафик. Вы подавляете свою гордость и признаетесь мастеру сайта суперновостей, что вы не имеете никаких файлов регистрации, по которым можно найти преступника. Вы просите его восстановить ваш IP-адрес с обещанием, что впредь будете внимательно контролировать деятельность, исходящую из вашей сети так, чтобы преступник мог быть найден и призван к порядку. Web-мастер неохотно соглашается на ваше предложение.
Ваши пользователи снова довольны, но теперь вы должны поработать на своем конце этой сделки. Начинается работа детектива: кто пробует взломать super_news.com?
Tcpdump: установка западни. Даже при том, что вы хорошо осознаете, что внутренний злоумышленник мог бы участвовать в подлых действиях и против других сайтов, ваша главная забота касается отслеживания любой деятельности, направленной к сайту суперновостей. Легче всего установить на своей сети анализатор сетевых потоков (
Поскольку в офисе вы используете преобразование сетевых адресов (NAT), с внешней стороны кажется, что весь ваш интернет-трафик исходит с единственного IP-адреса. Вы должны поместить свой анализатор перед NAT-блоком, чтобы видеть частные IP-адреса машин, говорящих с сайтом суперновостей. Кроме того, поскольку ваша сеть функционирует в коммутируемой среде, вы должны удостовериться, что блок вашего анализатора присоединен к порту коммутатора, который сконфигурирован для управления портами. Вы также должны удостовериться, что дата и время на блоке вашего анализатора точны, так, чтобы вы знали не только "кто" и "что" делал, но и "когда" делал.
После того, как вы все это сделали, проще всего использовать tcpdump. Вы набираете в командной строке:
tcpdump -w perp.dump dst host www.super_news.com -s 512
Эта команда вынуждает tcpdump делать запись только первых 512 байтов уходящих пакетов, предназначенных для Web-сервера суперновостей. Не ограничиваясь запросами к порту 80, вы могли бы зафиксировать любой другой вид сканирования портов или деятельности, направленной на взлом сайта суперновостей.
Поскольку вы записываете пакеты в двоичном файле, с именем perp.
Ethereal: идентификация подозреваемого. Через несколько дней после установки западни вы получаете еще один звонок от одного из ваших пользователей, сообщающий, что сайт суперновостей опять выключен. Вы делаете проверку и убеждаетесь, что суперновости снова блокировали доступ к своему сайту с вашего IP-адреса. Вам хотелось бы зафиксировать действия хакера раньше, чем это сделали суперновости, но, по крайней мере, вы знаете, что теперь в файле дампа tcpdump у вас достаточно информации, чтобы выяснить, кто ответствен за эти действия.
Вы останавливаете работу утилиты tcpdump и сначала просматриваете файл perp.tcpdump -r perp.. Сначала все, что вы можете видеть - это огромное количество запросов, идущих через порт 80, которые все кажутся нормальным и подлинным. Поэтому вы решаете посмотреть, какие запросы были сделаны не через порт 80, набрав команду tcpdump -r perp.. Вы видите некоторые ping-прослушивания с нескольких различных IP-адресов, а также подключение через порт 21 с локального IP-адреса 10.10.4.24. Суперновости могли бы иметь анонимную FTP-службу на этом блоке, так что он мог бы быть законным. Но секундой позже вы видите попытки telnet-подключения через порт 23 с того же самого IP-адреса. Итак, вы получаете вашего первого подозреваемого!
Затем вы захотите выяснить, до чего этот парень добрался; но вы знаете, что использование tcpdump из командной строки будет грубым, даже при использовании опции -X. Вместо этого вы делаете копию файла perp.Ethereal и готовите фильтр отображения для IP-адреса 10.10.4.24. Используя Ethereal, вы сможете выбрать и щелкнуть на каждом пакете, который был послан суперновостям. Рассматривая TCP-порты и метки времени, вы замечаете, что были выполнены несколько различных сканирований портов. Используя свойство пакета выдавать график производительности, вы получаете информацию относительно того, в какое время запускались атаки с адреса 10.10.4.24. И вы видите, что наиболее интенсивная деятельность происходила вчера ночью в 3:00 и, вероятнее всего, послужило катализатором для вторичного помещения вашего IP-адреса в черный список суперновостей.
Сосредоточившись на этом периоде - 3:00, вы используете инструмент "Follow TCP Stream" (Сопровождение TCP-потока), чтобы увидеть, что еще делал пользователь. Вы видите несколько попыток взлома с помощью CGI, которые были, очевидно, выполнены из скрипта, потому что много попыток сделано за короткий промежуток времени. Вы также видите, что пользователь пробовал применить грубую силу для получения учетной записи при проникновении в telnet, но потерпел неудачу. Теперь у вас достаточно информации, чтобы встретиться с преступником, но вы беспокоитесь, что файл perp может содержать информацию и о других попытках, кроме деятельности, характерной для неквалифицированных взломщиков "script-kiddy" и атак типа отказов в обслуживании (Denial-of-Service). Для начала вы блокируете посылку любого трафика уходящего к суперновостям с адреса 10.10.4.24. Теперь пришло время установить анализатор сетевых потоков (
Dsniff: сбор улик. Вы сверяетесь с политикой защиты личной информации, которой придерживается ваша компания, чтобы удостовериться, что вы имеете право следить за действиями этого пользователя при использовании оборудования компании и сетевых ресурсов. Как только вы убедились, что действительно имеете такое право, вы решаете использовать dsniff -утилиты перехвата инструмента dsniff, чтобы перехватить его сообщения электронной почты (mailsnarf), разговоры в чате (msgsnarf), посещения Web-сайтов (urlsnarf) и NFS-передачи (filesnarf).
Вы перехватываете сообщения электронной почты и мгновенные сообщения человеку со скрытым именем и адресом электронной почты SNSux. Ваш пользователь сообщает своему другу, что он запустил набор скриптов, которые он нашел в интернете, против сайта суперновостей, и хвастается, что ему уже дважды удалось сломать Web-сервер суперновостей. Очевидно, что преступник знает о взломе и сетях только ту информацию, которой достаточно, чтобы самому заиметь неприятности, поскольку он перепутал попадание адреса в черный список суперновостей, с отказом Web-сервера сайта суперновостей от обслуживания в результате собственных "успешных" действий.
Вы перехватываете ответы от SNSux, который сообщает, что он никогда не видел, чтобы Web-сайт сломался, но что у него есть друг из числа внутренних пользователей, который мог бы предоставить для них надежный вход в систему сети суперновостей. Это могло бы иметь серьезные последствия. Вы быстро понимаете, что выходите из "своей лиги" и скоро должны войти в контакт с властями. Вы собираете всю свою информацию и входите в контакт с web-мастером суперновостей по поводу ваших находок. Затем вы отдаете эти результаты своему менеджеру отдела, который убеждает вас, что проблема будет решена должным образом.
IDS: извлечение уроков. После недавних событий вы понимаете, что были хорошо подготовлены к любым внешним нападениям, входящим в вашу сеть, но вы совсем не были готовы к тому, чтобы ловить внутренних пользователей, совершающих внешние нападения. Вы устанавливаете IDS на вашей внутренней сети, и инструмент будет искать такие действия, как выходящее сканирование портов, CGI-нападения, попытки вызвать отказ в обслуживании (Denial-of-Service) и другое нежелательное в сети поведение. Это поможет в будущем избежать попадания в черный список.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.