Инструментальные средства проверки TCP/IP-стека
Проверка стека TCP/IP вашего брандмауэра, Web-сервера или маршрутизатора не входит в ежедневный осмотр системы с целью обеспечения ее безопасности и даже не входит в еженедельную ревизию. Однако инструментальные средства, предназначенные для проверки стека, могут помочь вам проверить списки управления доступом и исправить уровни доступа. Они также анализируют то, как ваши серверы могут отвечать на атаки, вызывающие отказ в обслуживании (Denial-of-Service) или на другие критические сетевые условия. Некоторые из этих инструментальных средств могут также использоваться для создания произвольных TCP-, UDP- или даже DNS-пакетов. Эти функциональные возможности позволяют вам создавать собственные специфические тесты сценариев - от испытаний допустимой нагрузки, до тестирования совместимости протоколов. Если вам когда-либо приходилось программировать сокеты в системе Unix, то вы обнаружите, что эти инструментальные средства значительно сокращают время, необходимое для создания удобной программы.
ISIC: инструмент для проверки работоспособности IP-стека
Проверка IP-стека своей системы Windows, Linux, Mac или BSD могла бы выглядеть чисто академическим занятием. В конце концов, не так легко делать отладку сетевого кода операционной системы, независимо от того, имеете ли вы исходный текст. С другой стороны, выполнение нескольких тестов в отношении брандмауэров, маршрутизаторов или других хостов, являющихся оплотом защиты вашей сети, дают некоторое полезное представление о том, как каждое устройство реагирует на разнообразный трафик. Это важно при тестировании списков управления доступом, мер защиты от надувательства (anti-spoofing) и сопротивления некоторым типам атак, вызывающим отказ в обслуживания (Denial-of-Service).
Реализация
Комплект ISIC постоянно находится в каталоге /security дистрибутива BSD или может быть загружен с сайта http://www.packetfactory.net/Projects/ISIC/. Он основан на использовании библиотеки создания пакетов libnet, которая должна быть установлена на вашей системе. Приложение ISIC представляет собой комплект из пяти программ: ISIC, tcpsic, udpsic, icmpsic и esic. Каждая из этих программ генерирует различные типы допустимых и недопустимых пакетов для протоколов IP, TCP, UDP, ICMP и ARP. Это дает возможность тестировать не только общие сетевые протоколы (IP), но также и более специфические.
Isic
Утилита ISIC имеет дело с тестами IP-уровня, включая IP-адреса отправителя и получателя, номер версии IP и длину заголовка. Когда вы запускаете программу ISIC, она действует как пакетная пушка, выбрасывая IP-пакеты в сеть с максимальной скоростью. Некоторые из этих пакетов преднамеренно искажены. Используйте процентные опции, чтобы изменить соотношение между дефектными и хорошими пакетами.
Использование:
isic [-v] [-D] -s <ip отправителя> -d <ip получателя> [-p <количество генерируемых пакетов>] [-k <пропущенные пакеты>] [-x <посылать пакет X раз>] [-r <случайное начальное число>] [-m <максимальная скорость генерации (КБ/с)>] Процентные опции: [-F фрагментирование] [-V <Плохая версия IP>] [-I <Случайная длина заголовка IP>]
Например, вы можете посмотреть, как шлюз обрабатывает большое количество искаженных пакетов, чтобы определить влияние DoS-атак на пропускную способность сети. Следующая команда посылает пустые IP-пакеты с адреса 192.168.0.12 на адрес 192.168.0.1. В процессе генерации трафика 10% от общего количества пакетов будут содержать неверный номер версии IP (версия, отличная от "4"); не будут генерироваться пакеты, содержащие неподходящую длину заголовка и 50% пакетов будут разделены на фрагменты.
# isic -s 192.168.0.12 -d 192.168.0.1 -F50 -V10 -I0 Compiled against Libnet 1.0.2a Installing Signal Handlers. Seeding with 13584 No Maximum traffic limiter Bad IP Version = 10% Odd IP Header Length = 0% Frag'd Pcnt = 50% 1000 @ 6192.1 pkts/sec and 3036.2 k/s 2000 @ 5175.3 pkts/sec and 2109.4 k/s 3000 @ 6040.3 pkts/sec and 2208.7 k/s 4000 @ 6009.8 pkts/sec and 2329.2 k/s 5000 @ 6072.4 pkts/sec and 2335.6 k/s 6000 @ 5325.1 pkts/sec and 2018.3 k/s 7000 @ 6170.7 pkts/sec and 2327.2 k/s
Статистические данные пакетов выводятся для групп в тысячу пакетов. В предыдущем примере ISIC генерирует приблизительно 6000 пакетов в секунду, что грубо соответствует производительности в 2-3 Мбит/с. Помните, 50% от всех этих пакетов фрагментированы и требуют, чтобы брандмауэр (или принимающее устройство) восстанавливал пакеты, что может быть слишком интенсивной нагрузкой на процессор или память, или даже привести к обходу системы обнаружения вторжений. Другие 10% от общего количества пакетов имеют неправильный номер версии IP. К счастью, стек принимающей сети опускает эти пакеты с минимальным влиянием на систему.
Если вы хотите ограничить производительность утилиты ISIC, сожмите ее с помощью опции -m. Это ограничит скорость генерации пакетов определенным количеством килобайт в секунду. Это можно сделать иначе, используя опцию -p, ограничивая отправку определенным числом пакетов.
Никакое тестирование не пойдет впрок, если вы не сможете повторить ввод или сделать запись результатов. Опция -D позволяет регистрировать содержание каждого пакета по мере его выхода в сеть.
192.168.0.12 -> 192.168.0.1 tos [27] id [0] ver [4] frag [0] 192.168.0.12 -> 192.168.0.1 tos [250] id [1] ver [4] frag [56006] 192.168.0.12 -> 192.168.0.1 tos [34] id [2] ver [4] frag [0] 192.168.0.12 -> 192.168.0.1 tos [213] id [3] ver [4] frag [39249] 192.168.0.12 -> 192.168.0.1 tos [249] id [4] ver [4] frag [0] 192.168.0.12 -> 192.168.0.1 tos [91] id [5] ver [4] frag [0] 192.168.0.12 -> 192.168.0.1 tos [26] id [6] ver [4] frag [0]
На первый взгляд, это может показаться не очень полезным, но взгляните на поле IPID. Каждый последующий пакет увеличивает это значение на единицу. Следовательно, вы можете просмотреть файл регистрации, например брандмауэра, чтобы увидеть, какой именно пакет вызвал ошибку. Посмотрите раздел "Советы и уловки" далее в этой лекции, чтобы познакомиться с множеством примеров того, как отслеживать ошибки.
Tcpsic
Приставка TCP в названии утилиты указывает на то, что она предназначена для генерации случайных TCP-пакетов и данных. Ее использование подобно использованию программы ISIC, но вы можете также указывать порты получателя и отправителя. Это дает вам возможность тестировать службы Web (порт 80), почты (порт 25) или VPN (несколько портов) в дополнение к тестированию системы. Обратите внимание, что у tcpsic добавлены другие процентные опции для хорошего и плохого трафика, который она генерирует.
Использование:
tcpsic [-v] [-D] -s <ip отправителя> [, порт] -d <ip получателя> [, порт] [-r начальное случайное число] [-m <максимальная скорость генерации (КБ/с)>] [-p <количество генерируемых пакетов>] [-k <пропускаемые пакеты>] [-x <посылать пакет X раз>] Процентные опции: [-F фрагментирование] [-V <Плохая версия IP>] [-I <Опции IP>] [-T <Опции TCP>] [-u <срочные данные>] [-t <контрольная сумма TCP>]
Не забудьте ставить запятую между номером порта и IP-адресом. Если вы опускаете номер порта, то tcpsic выбирает случайный порт для каждого пакета.
# tcpsic -s 192.168.0.12,1212 -d 192.168.0.1,80
Udpsic
Утилита udpsic также позволяет определять порты наряду с IP-адресами отправителя и получателя. У протокола UDP нет таких возможностей, как у TCP, и меньше процентных опций, которые нужно определять.
Использование:
udpsic [-v] [-D]-s <ip отправителя> [,порт]-d <ip получателя> [,порт] [-r начальное случайное число] [-m <максимальная скорость генерации (КБ/с)>] [-p <число генерируемых пакетов>] [-k < пропускаемые пакеты >] [-x <посылать пакет X раз>] Процентные опции: [-F фрагментирование] [-V <Плохая версия IP>] [-I <Опции IP>] [-U <Контрольная сумма UDP>]
UDP составляет меньшую часть IP-трафика. Обычно он относится к DNS-трафику.
# udpsic -s 192.168.0.12,1212 -d 192.168.0.1,53
Однако этот инструмент может также использоваться для тестирования серверов, выполняющих протоколы поточной передачи ( streaming ) типа протоколов, использующихся в медиа-серверах ( media servers ) и в сетевых играх.