Авторские статьи WinDump [сниффер] и его использование.

Discussion in 'Статьи' started by rijy, 24 Dec 2006.

  1. rijy

    rijy Banned

    Joined:
    25 Sep 2006
    Messages:
    394
    Likes Received:
    386
    Reputations:
    175
    Хочу рассмотреть работу такого сетевого анализатора (network sniffer), как WinDump.
    Зачем вообще нужны анализаторы? Они позволяют прослушивать пакеты определенного сегмента сети на наличие некоторых шаблонов, исправлять определенные проблемы и выявлять подозрительную активность, могут котролировать широковещательный трафик и выявлять порты-"зеркала" используемые недругами для контроля других портов. Но это все фигня) Перехватывая данные, передаваемые по сети мы вполне можем подсмотреть пароли для различных систем, содержимое почтовых сообщений и другие критичные данные, как внутренние, так и внешние, так как большинство систем не шифрует свой трафик в локальной сети.

    Установка WinDump.
    Платформы: Windows 95, 98, ME, NT4, 2000, XP
    Качать WinDump тут: www.windump.polito.it/install/default.htm

    Cначала, до того как можно будет запускать WinDump, необходимо установить библиотеки перехвата пакетов. Специальная версия библиотек для Windows называется WinPcap. Скачать WinPcap можно тут для разных платформ можно тут:
    Windows 95/98/ME
    Windows NT4/2000
    Windows XP/2003 (x86 only)
    Windows Vista Beta 1 (x86 only)

    http://www.winpcap.org/install/bin/WinPcap_3_1.exe

    Windows NT4/2000
    Windows XP/2003 (x86 and x64)
    Windows Vista RTM (x86 only)

    http://www.winpcap.org/install/bin/WinPcap_4_0_beta3.exe

    WinPcap for Windows CE
    http://www.winpcap.org/install/bin/PacketCE.zip

    После установки WinPcap загрузите исполнимый файл WinDump и поместите его в каталог, откуда он должен запускаться.
    Никаких дополнительных действий по установке не требуется.

    Юзаем WinDump.
    WinDump юзается из командной строки. Просто перейдите в командный режим в Windows и выполните команду в каталоге, в котором находится исполнимый файл WinDump. Если вбить в командной строке просто:
    Code:
     windump
    то мы увидим весь нефильтрованый TCP прохоящий через сетевуху. Это может выглядеть примерно так:

    Тут первое число - временная метка с точностью до долей секунды, второе число - IP-адрес отправителя пакета, за которым следует > (знак больше), а затем целевой адрес.. потом идет информационное поле, которое показывает, что делает пакет и комментарии. Однако запускать WinDump без параметроф неэффективно, т.к. быстро теряешься в нагромождении трафа.. Поэтому будем запускать с параметрами в таком виде:
    Code:
    windump параметры выражения
    Параметры могут быть такими:
    -D Печатает список доступных сетевых интерфейсов в вашей системе. Выводится имя интерфейса, его номер и описание, если таковое имеется. Эти параметры можно использовать для задания интерфейса перехвата с помощью ключа winjdump -i
    -a Пытается преобразовать адреса в имена. Это создает дополнительную нагрузку на систему и может привести к потере пакетов
    -c число Останавливает windump после обработки заданного числа пакетов
    -C размер_файла Ограничивает размер выходных файлов заданным числом байт
    -d Выдает процедуру сопоставления пакетов с образцом в удобочитаемом виде и затем останавливается
    -dd Выдает процедуру сопоставления пакетов с образцом в виде фрагмента программы на языке Си
    -ddd Выдает процедуру сопоставления пакетов с образцом в виде десятичных чисел
    -e В каждой строке выдачи печатает заголовок канального уровня (в сетях Ethernet это MAC-адрес)
    -F файл Использует файл (а не сеть) для ввода данных. Это удобно для анализа событий "постфактум".
    -i интерфейс Читает из заданного интерфейса, когда на анализирующей машине имеется несколько сетевых интерфейсов.
    -n Не преобразовывает адреса в имена
    -N Не печатает в именах хостов имя домена вышележащего уровня.
    -p Не переводит интерфейс в режим прослушивания. Используется только при исследовании трафика, направленного в анализирующий компьютер
    -q Печатает быстрый вывод. Печатается меньше протокольной информации, поэтому строки оказываются короче
    -T тип Заставляет интерпретировать пакеты, выбранные заданным в выражении фильтром, в соответствии с указанным типом
    -t Не печатает метку времени в каждой строке
    -tt Печатает неформатированную метку времени в каждой строке
    -ttt Печатает интервал времени между пакетами
    -tttt Печатает в каждой строке дату, а затем метку времени в подразумеваемом формате
    -v Использует более подробный вывод, включающий время жизни, идентификатор, общую длину и поля опций каждого пакета
    -vv Предоставляет более детальный вывод. Пакеты NFS и SMB полностью декодируются
    -vvv Предоставляет еще более подробный вывод. Это может существенно замедлить работу анализатора
    -w имя_файла Записывает пакеты в указанный файл вместо вывода их на экран. Таким образом результаты можно сохранить и проанализировать их позже. Например, если в вашей сети происходят какие-то странные вещи, вы можете запустить windump на ночь, чтобы перехватить весь необычный трафик. Не забудьте написать хороший фильтр, иначе утром файл может занять весь хард..
    -x Выводит каждый пакет (без заголовка канального уровня) в шестнадцатеричном виде.
    -X Выводит содержимое пакетов и в шестнадцатеричном, и в текстовом видах

    Выражения windump определяют выбор отображаемых сетевых пакетов. Выдаются только те объекты, которые соответствуют выражению; если выражения не заданы, отображаться будут все пакеты. Выражение windump состоит из одной или нескольких директив, называемых примитивами, которые, в свою очередь, состоят из идентификатора и следующего за ним квалификатора.

    Используемые квалификаторы:
    тип
    Определяет, к чему относится идентификатор, заданный как имя или номер. Возможными типами служат host, net и port. Например, host foo, net 128.3 или port 20
    направление
    Определяет направление трафика от определенного идентификатора. Возможными направлениями служат src; dst; src or dst и src and dst (src обозначает исходный адрес, dst - целевой)
    протокол
    Позволяет определить протокол для фильтрации. Возможными протоколами являются ether, fddi, tr, ip, ipv6, arp, rarp, decnet, tcp и udp. Если протокол не задан, то допустимы все протоколы, совместимые с остальной частью выражения. При помощи фильтров с этим квалификатором можно определить, какая машина делает чрезмерное количество arp-запросов, или для отбрасывания на фильтре udp-запросов, которых немало во многих сетях, так как DNS использует udp

    Комбинации примитивов:
    dst host хост Показывает только трафик, адресованный хосту, который может быть задан IP-адресом или именем
    src host хост Показывает только трафик, исходящий из хоста
    host хост Показывает как исходящий, так и входящий трафик хоста
    ether dst Ethernet-хост Показывает трафик, предназначенный для указанного Ethernet-хоста, который может быть задан либо именем, либо MAC-адресом
    ether src Ethernet-хост Показывает трафик, исходящий из Ethernet-хоста
    ether host Ethernet-хост Показывает как исходящий, так и входящий трафик Ethernet-хоста
    gateway хост Показывает любой трафик, использующий хост в качестве шлюза. Иными словами, трафик, переправляемый с хоста. Так происходит, когда IP-адрес отправителя или получателя не соответствует Ethernet-адресу хоста. Данную возможность целесообразно использовать, когда необходимо отследить весь трафик, проходящий через Интернет-шлюз или некоторый конкретный маршрутизатор
    dst net сеть Фильтрует трафик, предназначенный для конкретной сети, заданной в нотации 0.0.0.0. Аналогично ether dst Ethernet-хост за исключением того, что это может быть значительно больше, чем один хост.
    src net сеть Фильтрует сеть отправителя
    net сеть То же, что и две предыдущие инструкции, но трафик разрешен как в заданную сеть, так и из нее
    net сеть mask маска_сети Сопоставляется с трафиком в заданную сеть или из нее, с указанной маской сети. Применяется для задания точного размера сети с шагом меньше, чем класс C. В этой комбинации допускается использование примитивов src и dst для указания направления потоков данных
    net сеть/длина_маски Сопоставляется с трафиком с сетевыми адресами из указанной сети и заданным числом бит в маске сети. Аналогична предыдущей комбинации
    dst port порт Фильтрует трафик TCP и UDP с заданным целевым портом. Здесь можно также специфицировать тип перехватываемого трафика, TCP или UDP. По умолчанию отображается трафик обоих типов
    src port порт То же, что и предыдущая комбинация, только перехватывается трафик с заданным исходным портом
    less длина Отображает пакеты с длиной, меньшей или равной заданной. Допустима также комбинация len <= длина
    greater длина То же, что и предыдущая комбинация, только перехватывается трафик с длиной пакетов больше или равной указанной
    ip proto протокол Перехватывает трафик заданного протокола. Допустимыми протоколами служат icmp, icmpv6, igmp, igrp, pim, ah, esp, vrrp, udp и tcp. Имена tcp, udp и icmp должны помещаться между двумя обратными косыми чертами, чтобы они не читались как ключевые слова. Пример: ip proto \tcp\
    ip6 proto протокол Аналогично предыдущей комбинация, но для пакетов и типов IPv6
    ip6 protochain протокол Ищет пакеты IPv6, имеющие заголовок указанного протокола
    ip protochain протокол То же, что и выше, но для пакетов IPv4
    ip broadcast Идентифицирует только широковещательный трафик, то есть трафик, имеющий все нули или все единицы в поле целевого адреса
    ether multicast Регистрирует вещательные пакеты Ethernet
    ip multicast Регистрирует пакеты IP
    ip6 multicast Регистрирует пакеты IPv6
    ether proto протокол Отображает трафик, который имеет указанный тип протокола Ethernet. Допустимыми именами протоколов служат ip, ipv6, arp, rarp, atalk, aarp, decnet, sca, lat, mopdl, moprc, iso, stp, ipx и netbeui. Эти имена являются также идентификаторами, поэтому они должны быть экранированы с помощью обратных косых черт
    decnet src хост Перехватывает трафик DECnet с исходным адресом хоста
    decnet dst хост Аналогична предыдущей комбинация, но фильтрует целевой адрес хоста
    decnet хост Фильтрует трафик DECnet с исходным или целевым адресом хоста
    ip Ловит трафик, соответствующий Ethernet-протоколу ip
    ip6 Ловит трафик ip6
    arp Ловит трафик arp
    rarp Ловит трафик rarp
    atalk Ловит трафик atalk
    aarp Ловит трафик aarp
    decnet Ловит трафик decnet
    iso Ловит трафик iso
    stp Ловит трафик stp
    ipx Ловит трафику ipx
    netbeui Ловит трафик netbeui
    vlan идентификатор_ВЛВС Перехватывает пакеты на основе стандарта 802.1Q VLAN. Идентификатор виртуальной локальной сети можно опускать
    tcp Сокращенная форма комбинации ip proto tcp
    udp Сокращенная форма ip proto udp
    icmp Сокращенная форма ip proto icmp
    iso proto протокол Перехватывает пакеты ВОС с заданным типом протокола - clnp, esis или isis
    clnp Сокращенная форма описанной выше комбинации с clnp в качестве протокола
    esis Сокращенная форма комбинации iso proto протокол с esis в качестве протокола
    isis Сокращенная форма комбинации iso proto протокол с isis в качестве протокола

    Существуют также более сложные выражения, которые можно строить с помощью булевых операций, таких как И, ИЛИ, НЕ, и операций сравнения (больше, меньше и т.п.).

    Все эти опции и комбинации все равно не будт использоваться, поэтому приведу ннесколько примеров:
    Просмотр всего входящего и исходящего трафика определенного хоста.
    Если вы хотите отслеживать только входящий и исходящий трафик определенного хоста, то можно отфильтровать все остальное с помощью простого выражения "host". Например, чтобы следить за хостом с IP-адресом 192.168.1.1, нужно выполнить инструкцию:
    Code:
    windump -n host 192.168.1.1
    Наблюдение за входящим и исходящим трафиком определенного порта.
    Если вы хотите проследить за использованием определенного приложения, можно применить windump для улавливания всего трафика, направляемого в определенный порт TCP/UDP. Если приложением, за которым вы пытаетесь наблюдать, является Telnet (порт 23), то это можно сделать с помощью следующего выражения windump:
    Code:
    windump -n port 23
    Просмотр всего входящего и исходящего трафика определенного хоста, за исключением некоторых видов трафика.
    Предположим, что вы хотите следить за одним хостом, как в первом примере, но желаете отфильтровать трафик SSH (если вы подключаетесь к этому хосту посредством SSH, то нефильтрованный вывод windump будет отображать трафик вашего собственного соединения). Это можно сделать, добавив выражение port с булевой операцией НЕ. Вот как выглядит команда:
    Code:
    windump -n host 192.163.1.1 and not port 22
    Выявление вредоносной рабочей станции.
    Если возникли траблы и вы подозреваете, что вас ддосят, можно применить windump для быстрого прослеживания виновника. Вне зависимости от того, будет ли это неисправная сетевая плата или ПК с трояном, вызывающим атаку на доступность, windump поможет определиться. Сначала попробуйте просто запустить windump без фильтрации и посмотреть, что порождает большую часть трафика. Используйте опции -a и -e для генерации имен и MAC-адресов.
    Code:
    windump -ae
    Можно объединять две буквы с одним дефисом. Если вывод на экране проскальзывает слишком быстро, используйте опцию -c 1000, чтобы остановиться после получения 1000 пакетов.

    Слежение за определенной рабочей станцией.
    С помощью windump вы легко можете запротоколировать трафик, исходящий из определенной рабочей станции, для последующего анализа. Используем инструкцию windump из первого примера с ключом -w для записи в файл. Если в сети применяется динамическое конфигурирование хостов по протоколу DHCP, то предпочтительным может оказаться использование имен SMB (Windows). Пример:
    Code:
    windump -w logfile host 192.168.1.1
    где logfile представляет файл протокола. Можно также добавить опции -c или -C для ограничения размера файла вывода.

    Поиск подозрительного сетевого трафика.
    Можно запустить windump с установленным флагом gateway 192.168.0.1, заменяя IP-адрес на адрес своего Интернет-шлюза. Если ваша домашняя сеть использует IP-диапазон от 192.168.0.0 до 192.168.0.254, в этом случае будет помечаться весь трафик, проходящий через шлюз Интернета. Если имеется внутренний почтовый сервер, и вы не хотите протоколировать этот трафик, так как он допустим, можно добавить инструкцию:
    Code:
    and host != 192.168.0.2
    где IP-адрес является адресом почтового сервера. Восклицательный знак действует как булева операция НЕ. Будет помечаться весь входящий трафик, не предназначенный для почтового сервера. Выражение может выглядеть следующим образом:
    Code:
    windump -w logfile gateway 192.168.0.1 and 
    host != 192.168.1.2
    Для выявления пользователей, применяющих определенное приложение, например, программы потокового видео или аудио, можно уточнить выражение, если известен номер порта. Если вы знаете, что используется порт TCP 1000, то можно применить примитив port для перехвата трафика подозрительного приложения. Пример:
    Code:
    windump -w logfile gateway 192.168.0.1 and 
    host != 192.168.1.2 
    dst port 1000
    з.ы. при написании этого использовались различные учебные материалы, перевод хелпа и собственные эксперименты над бедной и заюзаной сетью родного универа...
     
    #1 rijy, 24 Dec 2006
    Last edited: 24 Dec 2006