Тестируем сетевые устройства с помощью Stack Integrity Checker (ISIC)

IP Stack Integrity Checker (ISIC) – набор утилит по тестированию стека tcp-ip без application layer. Им активно пользуются лаборатории по тестированию при тестировании firewall/ips, совместно с BreakingPoint stack scrambler. Пример CVE-2008-1746 на CUCM.

Version > 0.07 ISIC supports IPv6 (*sic6)

- Suite of utilities to exercise the stability of an IP Stack and its component stacks (TCP, UDP, ICMP)
- Good to test fragments etc.
- Includes isic, tcpsic, udpsic, icmpsic, esic
- Test firewall rulesets and their behavior under pressure for exampleCan be used in shell scripts
- ISIC to test the implementation of IDS/firewalls

CVE-2008-1746
The SNMP Trap Agent service in Cisco Unified Communications Manager (CUCM) 4.1 before 4.1(3)SR6, 4.2 before 4.2(3)SR3, 4.3 before 4.3(2), 5.x before 5.1(3), and 6.x before 6.1(1) allows remote attackers to cause a denial of service (core dump and service restart) via a series of malformed UDP packets, as demonstrated by the IP Stack Integrity Checker (ISIC), aka Bug ID CSCsj24113.

The UnityOne performed consistently and reliably throughout our tests, continuing to pass legitimate traffic while blocking attack traffic in a consistent manner. Exposing the sensor interface to an extended run of IP Stack Integrity Checker (ISIC)-generated traffic had no adverse effect, and the device continued to detect and block all other exploits throughout and following the ISIC attack.

This test stresses the protocol stacks of the DUT by exposing it to traffic from various protocol randomizer and mutation tools. Several of the tools in this category are based on the ISIC test suite and the BreakingPoint Stack Scrambler component.
Использование
  • описание опций и примеры можно посмотреть в самих утилитах запуская их без параметров
  • intuit, подробно с примерами
  • еще примеры 1, 2
./esic -i enp2s0 -s rand -d rand -p rand -m 50000
./multisic -s rand -d rand -i enp2s0 -p 500000 -F 500 -z ff:ff:ff:ff:ff:ff
./isic -s rand -d rand -F 50 -p 1000000000 -k 20 -r 10
./tcpsic -s 172.16.0.23 -d 172.16.0.22 -x 2 -m 1000 -T 30 -t 50
./udpsic -s 172.16.0.23 -d 172.16.0.22 -x 2 -m 1000 -T 30 -t 50
./icmpsic -s 172.16.0.23 -d 172.16.0.22 -x 2 -m 1000
./isic6 -s rand -d 2001:db8:0:f101::2 -p 1000000 -k 20 -r 10
./tcpsic6 -s rand -d 2001:db8:0:f101::2 -p 1000000 -I 90 -U 20
./udpsic6 -s rand -d 2001:db8:0:f101::2 -p 1000000 -I 90 -U 20
./icmpsic6 -s rand -d 2001:db8:0:f101::2 -x 2 -m 1000

Можно и из vrf генерировать.
ip netns exec VRF1 ./tcpsic -s rand -d 172.17.0.1 -m 1000
ip netns exec VRF2 ./tcpsic -s 172.16.0.23,69 -d 172.16.0.22 -x 2 -m 1000 -T 30 -t 50

Вывод

Default

./tcpsic -s rand -d 172.17.0.1
Bad IP Version = 10% IP Opts Pcnt = 10%
Frag'd Pcnt = 10% Urg Pcnt = 10%
Bad TCP Cksm = 10% TCP Opts Pcnt = 10%

Полезные опции

[-D] causes packet info to be printed out -- DEBUGGING

Добавьте опцию -D, чтобы получить список, содержащий информацию об отладке (содержание пакета) для любого из пакетов *sic. На первый взгляд, это может показаться не очень полезным, но взгляните на поле IPID. Каждый последующий пакет увеличивает это значение на единицу. Следовательно, вы можете просмотреть файл регистрации, например брандмауэра, чтобы увидеть, какой именно пакет вызвал ошибку. Посмотрите раздел "Советы и уловки" далее в этой лекции, чтобы познакомиться с множеством примеров того, как отслеживать ошибки.

Перевоспроизведение трафика, вызвавшего проблему, достигается через использование того же SID value для генератора “случайных” пакетов. Конкретный пакет можно узнать с помощью дебага с -D и генерируя только этот подозрительный пакет с помощью skip всех предыдущих + никто не мешает собирать дамп wireshark.

ex: -s rand -d rand -k 10000 -p 10001 -r 666
Will only send the 10001 packet with random seed 666
this is especially useful if you suspect that packet is
causing a problem with the target stack.

./tcpsic -s rand -d 172.16.0.1 -m 1000 -r 666 -D
235.107.111.18 -> 172.16.0.1 tos[9] id[0] ver[4] frag[0]
208.215.208.255 -> 172.16.0.1 tos[55] id[1] ver[4] frag[0]
18.83.84.33 -> 172.16.0.1 tos[20] id[2] ver[4] frag[5174]
24.157.104.38 -> 172.16.0.1 tos[202] id[3] ver[4] frag[0]
252.150.1.118 -> 172.16.0.1 tos[53] id[4] ver[4] frag[0]
165.185.17.177 -> 172.16.0.1 tos[206] id[5] ver[4] frag[0]

./tcpsic -s rand -d 172.16.0.1 -m 1000 -r 666 -D
235.107.111.18 -> 172.16.0.1 tos[9] id[0] ver[4] frag[0]
208.215.208.255 -> 172.16.0.1 tos[55] id[1] ver[4] frag[0]
18.83.84.33 -> 172.16.0.1 tos[20] id[2] ver[4] frag[5174]
24.157.104.38 -> 172.16.0.1 tos[202] id[3] ver[4] frag[0]
252.150.1.118 -> 172.16.0.1 tos[53] id[4] ver[4] frag[0]
165.185.17.177 -> 172.16.0.1 tos[206] id[5] ver[4] frag[0]
Установка
apt-get install gcc
apt-get install libnet1-dev
dpkg -L libnet1-dev
isic-master# ./configure && make
Ошибки установки/запуска
  • проблемы и решения 1 2 3

Если не хватает make, то пересобираем build-essential

-su: make: command not found
apt-get install --reinstall build-essential

Если выдает “Nothing to be done” то, возможно, вы поместили в папку с исходниками уже скомпилированный код (или по крайней мере логи отработки make).

make: Nothing to be done for 'all'.

Если выдает “No such device” – значит не тот интерфейс.

Can not initialize libnet: libnet_check_iface() ioctl: No such device

Если выдает “Network is unreachable” – значит нет маршрута к сети или даже IP адреса на интерфейсе. При этом пакеты по факту передаются.

Failed to send packet: Network is unreachable

Leave a Reply