Инструментальные средства проверки TCP/IP-стека
Iptest
Утилита Iptest формализует типы тестов, которые комплект isic выполняет свободно. У нее много различных опций, которые вы можете использовать, чтобы сгенерировать результаты очень узкоспециализированного тестирования, типа случайных значений TTL в заголовке IP или TCP-пакетах с порядковыми номерами пакетов, попадающих на определенные разрядные границы. Это тестирование выросло из проекта Unix IP Filter (http://coombs.anu.edu.au/ipfilter/). Фильтр IP является брандмауэром и программным обеспечением NAT для ядра BSD и Linux 2.0.x (плюс версии для Solaris, HP-UX и QNX). Его первоначальная цель заключалась в проверке на устойчивость брандмауэра к ошибкам в критических сетевых условиях.
Реализация
Все тесты требуют четырех опций для определения отправителя и получателя каждого пакета. IP-адрес отправителя определяется опцией -s; получатель всегда задается последним аргументом (без флага опции).
# iptest -s 172.16.34.213 192.168.12.84
Если IP-адрес отправителя не принадлежит физической сетевой карте (NIC), использующейся для генерации трафика, вам может понадобиться определить также сетевой интерфейс ( -d ) и шлюз ( -g ) в командной строке.
# iptest -s 10.87.34.213 -d le0 -g 192.168.12.1 192.168.12.84
Затем вы можете позволить инструменту Iptest пройти весь список встроенных тестов, или выбрать более узко направленные тесты с помощью опций -n и -pt, где n - число в интервале от одного до семи, а t - номер "точечного теста" (point test) для соответствующего n. Другими словами, вы выбираете опцию между единицей и семеркой. Например, опция пять ( -5 ) содержит большинство TCP-тестов. В пределах пятой опции есть восемь точечных тестов ( -p ). Окончательно команда, предназначенная для выполнения пятой опции с ее первым точечным тестом, будет выглядеть следующим образом:
# iptest -s 10.87.34.213-d le0-g 192.168.12.1 -5 -p1 192.168.12.84
В этом примере будут проверены все комбинации флагов TCP. В таблице 17.3 описаны более полезные опции меню.
Номер опции | Точечный тест | Описание |
---|---|---|
Опции iptest | ||
-1 | 7 | Генерирует пакеты с фрагментами нулевой длины. |
-1 | 8 | Создает пакеты длиной более 64 килобайт после сборки. Это могло бы вызвать переполнение буфера в плохих сетевых стеках. |
-2 | 1 | Создает пакеты с длиной опции IP, которая больше, чем длина пакета. |
-6 | n/a | Генерирует фрагменты пакета, которые перекрываются при реконструкции. Это может наносить ущерб менее устойчивым стекам TCP/IP. Если вы используете этот тест, выполняйте его отдельно от других. |
-7 | n/a | Генерирует 1024 случайных IP-пакета. Поля IP-уровня будут правильны, но данные пакета - случайны. |
Опции UDP теста | ||
-4 | 1,2 | Создает длину полезной нагрузки UDP протокола, которая меньше (1) или больше (2), чем длина пакета. |
-4 | 3,4 | Создает UDP-пакет, в котором номер порта отправителя (3) или получателя (4) попадает на границу байта: например, 0, 1, 32767, 32768, 65535. Этот тест может обнаружить граничные (off-by-one) ошибки. |
Опции ICMP теста | ||
-3 | с 1 по 7 | Генерирует различные нестандартные ICMP-типы и коды. Может выявить ошибки в списке контроля доступа ACL, которые, как предполагается, блокируют ICMP-сообщения. |
Опции TCP теста | ||
-5 | 1 | Генерирует все возможные комбинации флагов опций TCP. Этот тест может выявить логические проблемы в способах, которыми стек TCP/IP обрабатывает или игнорирует пакеты. |
-5 | 2,3 | Создает пакеты, в которых номера пакетов (2) и номера подтверждения (3) попадают на границы байта. Этот тест может выявить граничные ( off-by-one ) ошибки. |
-5 | 4 | Создает SYN -пакеты различных размеров. SYN -пакет с нулевым размером является повсеместным пакетом сканирования порта. Система обнаружения вторжений или брандмауэр должны отслеживать все виды SYN -пакетов, соответствующих подозрительной деятельности. |
-5 | 7,8 | Создает пакеты, в которых номер порта отправителя (7) или порта получателя (8) попадает на границу байта. Например, 0, 1, 32767, 32768, 65535. Может выявить граничные ошибки ( off-by-one ). |
Пример из жизни. Эксплуатационные качества брандмауэра
Сетевых администраторов всегда интересует, как хорошо брандмауэр защищает сеть, как он действует при активных нападениях (таких как атаки, вызывающие отказ в обслуживании, и интенсивное сканирование) и как он справляется с тяжелыми нагрузками. В связи с этим Джек намерен проверить свой брандмауэр. Он берет следующий сценарий и загружает его на свой лэптоп с системой FreeBSD. Этот лэптоп помещен перед брандмауэром. Это означает, что он представляет трафик, приходящий из интернета.
#!/bin/sh # IP Stack test # usage: test.sh gateway source destination # note, change "le1" to your interface iptest -1 -d le1 -g $1 -s $2 $3 iptest -2 -d le1 -g $1 -s $2 $3 iptest -3 -d le1 -g $1 -s $2 $3 iptest -4 -d le1 -g $1 -s $2 $3 iptest -5 -d le1 -g $1 -s $2 $3 iptest -6 -d le1 -g $1 -s $2 $3 iptest -7 -d le1 -g $1 -s $2 $3 isic -s $2 -d $3 -p10000 tcpsic -s $2 -d $3 -p10000
Затем берет другой лэптоп и размещает его за брандмауэром. Эта сеть имеет высокую пропускную способность. Она содержит только коммутаторы, и это значит, что ему надо будет подключиться к так называемому спэн-порту (span - Switched Port Analyzer), чтобы перехватить весь трафик с помощью утилиты tcpdump. К счастью, система обнаружения вторжений уже находится на спэн-порте. Поскольку система обнаружения вторжений (IDS) не уловила никаких атак в течение последних двух месяцев, и тест выполняется после окончания рабочего времени, то никто не может пожаловаться, что IDS была выключена в течение нескольких минут. Джек отключает IDS и подключает свой лэптоп, выполняющий tcpdump. Он запускает тест :, но ничего не происходит!
После нескольких минут перепроверки сценария теста IP-стека, Джек осознает, что спэн-порт, который прослушивался IDS, никогда, фактически, не был установлен на режим спэн. Другими словами, в течение последних двух месяцев IDS был способен перехватить только трафик, который был послан непосредственно ему. Джек быстро исправляет ошибку и продолжает тест брандмауэра, но все это показывает, что регулярное тестирование необходимо для поддержания жизнеспособности вашей сети, даже если вы не пытаетесь решить определенную проблему!