Перейти к содержанию полного руководства пользователя ZMap на русском языке.
[su_accordion]
[su_spoiler title=»Содержание темы»]
- ICMP эхо-сканирование
- UDP Datagram сканирование
- Файлы конфигурации
- Verbosity
- Вывод результатов
- Черный список и белый список
- Ограничение и выбор скорости
- Отправка нескольких пакетов
[/su_spoiler]
[/su_accordion]
Дополнительная информация по сканеру ZMap
При выполнении сканирования TCP SYN ZMap требуется один целевой порт и поддержка диапазона исходных портов, из которых сканирование берет начало.
-p, —target-port=port – TCP номер порта для сканирования (например, 443).
-s, —source-port=port|range – исходный порт (порты) для пакетов сканирования (например, 40000-50000).
ZMap опирается на ядро Linux, чтобы поддерживать SYN/ACK пакеты и закрыть открытые соединения с помощью сканера. ZMap посылает пакеты на уровне протокола Ethernet, чтобы защитить ядро от отслеживания открытых соединений TCP и выполнения маршрута поиска.
Поэтому, если на вашем брандмауэре установленные соединения отслеживаются как -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
, это приведет к блокировке SYN / ACK-пакетов.
Это не помешает ZMap записывать ответы, но будет препятствовать обратной отправке RST пакетов, в конечном итоге использование сканированного хоста будет продолжаться до окончания соединения.
Мы настоятельно рекомендуем вам выбрать диапазон неиспользованных портов на сканированном хосте, который может быть допущен вашим брандмауэром. При работе ZMap он будет идентифицирован с помощью флага -s
(например, -s '50000-60000'
).
ICMP эхо-сканирование
В то время как TCP SYN сканирование выполняется по умолчанию, ZMap также поддерживает эхо-сканирование ICMP, в котором ICMP пакеты отправляются в каждый из хостов, а тип ICMP протокола, полученного в ответ, является обозначенным.
ICMP сканирование можно выполнить путем выбора icmp_echoscan модуля, который является аналогичным следующему:
$ zmap --probe-module=icmp_echoscan
UDP Datagram сканирование
Сканер ZMap дополнительно поддерживает UDP-зонды, где он посылает произвольную UDP дейтаграмму для каждого хоста и получает UDP или ICMP ответы.
ZMap поддерживает четыре различных способа установки полезной UDP нагрузки с помощью опции командной строки. Это ‘text’ для ASCII-печати полезных нагрузок, ‘hex’ для шестнадцатеричных полезных нагрузок, установленных в командной строке, ‘file’ для полезных нагрузок, содержащихся во внешнем файле, и ‘template’ для полезных нагрузок, требующих генерации динамического поля. Для того, чтобы получить ответ UDP, убедитесь, что вы указываете ‘data’ в качестве одного из отчетных полей с помощью опции -f.
В приведенном ниже примере отправлено два байта ‘ST’ на UDP порт 5632:
$ zmap -M udp -p 5632 --probe-args=text:ST -N 100 -f saddr,data -o –
В приведенном ниже примере отправлено байт ‘0x02’, запрос SQL ‘client broadcast’ на UDP порт 1434:
$ zmap -M udp -p 1434 --probe-args=hex:02 -N 100 -f saddr,data -o –
В приведенном ниже примере отправлено NetBIOS запрос на UDP порт 137. При этом используется файл полезной нагрузки, который включен в ZMap рассылку:
$ zmap -M udp -p 1434 --probe-args=file:netbios_137.pkt -N 100 -f saddr,data -o –
В приведенном ниже примере отправлено запрос SIP ‘OPTIONS ‘ на UDP порт 5060. При этом используется файл шаблона, который входит в дистрибутив ZMap:
$ zmap -M udp -p 1434 --probe-args=file:sip_options.tpl -N 100 -f saddr,data -o -
UDP шаблоны полезной нагрузки все еще имеют экспериментальный характер. Вы можете столкнуться со сбоями при использовании более одного отправленного запроса (-T) и значительным снижением производительности по сравнению со статически полезной нагрузкой.
Шаблон – это просто файл полезной нагрузки, в котором содержится один или несколько полей, оформленных в ${} ряд. Некоторые протоколы, в частности, SIP, требуют полезной нагрузки для отражения источника и назначения пакета. Другие протоколы, такие как portmapper и DNS, содержат поля, должны быть рандомизированы, согласно с запросом, или могут быть разбиты многодомными системами, которые сканирует ZMap.
Шаблон полезной нагрузки отправляет запрос SIP OPTIONS для каждого пункта назначения:
OPTIONS sip:${RAND_ALPHA=8}@${DADDR} SIP/2.0 Via: SIP/2.0/UDP ${SADDR}:${SPORT};branch=${RAND_ALPHA=6}.${RAND_DIGIT=10};rport;alias From: sip:${RAND_ALPHA=8}@${SADDR}:${SPORT};tag=${RAND_DIGIT=8} To: sip:${RAND_ALPHA=8}@${DADDR} Call-ID: ${RAND_DIGIT=10}@${SADDR} CSeq: 1 OPTIONS Contact: sip:${RAND_ALPHA=8}@${SADDR}:${SPORT} Content-Length: 0 Max-Forwards: 20 User-Agent: ${RAND_ALPHA=8} Accept: text/plain
В приведенном примере обратите внимание, что линия окончаний \r\n и окончание этого запроса должны содержать \r\n\r\n, чтобы SIP реализации были корректно обработаны.
Представленные шаблонные поля уже выполнены:
- SADDR: исходный IP-адрес в четырехзначном формате;
- SADDR_N: IP-адрес источника в сетевом порядке байтов;
- DADDR: IP-адрес назначения в четырёхзначном формате;
- DADDR_N: IP-адрес назначения в сетевом порядке байт;
- SPORT: порт источника в формате ASCII;
- SPORT_N: исходный порт в сетевом порядке байт;
- DPORT: порт назначения в формате ASCII;
- DPORT_N: порт назначения в сетевом порядке байтов;
- RAND_BYTE: случайный байт (0-255), длина обозначается с помощью параметра =(length);
- RAND_DIGIT: случайные цифры от 0 до 9, длина обозначается через параметр =(length);
- RAND_ALPHA: случайные буквы A-Z, длина указывается с помощью параметра =(length);
- RAND_ALPHANUM: случайные буквы A-Z и цифры 0-9, длина обозначается с помощью =(length).
Файлы конфигурации
ZMap поддерживает файлы конфигурации вместо того, чтобы требовать все опции в командной строке. Конфигурация может быть создана путем определения одной опции и значением в каждой строке, например:
interface "eth1" source-ip 1.1.1.4-1.1.1.8 gateway-mac b4:23:f9:28:fa:2d # upstream gateway cooldown-time 300 # seconds blacklist-file /etc/zmap/blacklist.conf output-file ~/zmap-output quiet summary
Сканер ZMap может быть запущен с помощью файла конфигурации и добавлением необходимых параметров:
$ zmap --config=~/.zmap.conf --target-port=443
Verbosity
Существует несколько типов вывода на экран, которые производит ZMap. По умолчанию сканер выведет основную информацию о ходе работы раз в 1 секунду. Эту функцию можно отключить путем установки флага --quiet
.
0:01 12%; send: 10000 done (15.1 Kp/s avg); recv: 144 143 p/s (141 p/s avg); hits: 1.44%
ZMap также выводит информационные сообщения во время конфигурации сканера, которыми можно управлять с помощью аргумента --verbosity
.
Aug 11 16:16:12.813 [INFO] zmap: started Aug 11 16:16:12.817 [DEBUG] zmap: no interface provided. will use eth0 Aug 11 16:17:03.971 [DEBUG] cyclic: primitive root: 3489180582 Aug 11 16:17:03.971 [DEBUG] cyclic: starting point: 46588 Aug 11 16:17:03.975 [DEBUG] blacklist: 3717595507 addresses allowed to be scanned Aug 11 16:17:03.975 [DEBUG] send: will send from 1 address on 28233 source ports Aug 11 16:17:03.975 [DEBUG] send: using bandwidth 10000000 bits/s, rate set to 14880 pkt/s Aug 11 16:17:03.985 [DEBUG] recv: thread started
ZMap также поддерживает вывод на печать резюме в конце сканирования, которое может быть вызвано с помощью флага —summary.
cnf target-port 443 cnf source-port-range-begin 32768 cnf source-port-range-end 61000 cnf source-addr-range-begin 1.1.1.4 cnf source-addr-range-end 1.1.1.8 cnf maximum-packets 4294967295 cnf maximum-runtime 0 cnf permutation-seed 0 cnf cooldown-period 300 cnf send-interface eth1 cnf rate 45000 env nprocessors 16 exc send-start-time Fri Jan 18 01:47:35 2013 exc send-end-time Sat Jan 19 00:47:07 2013 exc recv-start-time Fri Jan 18 01:47:35 2013 exc recv-end-time Sat Jan 19 00:52:07 2013 exc sent 3722335150 exc blacklisted 572632145 exc first-scanned 1318129262 exc hit-rate 0.874102 exc synack-received-unique 32537000 exc synack-received-total 36689941 exc synack-cooldown-received-unique 193 exc synack-cooldown-received-total 1543 exc rst-received-unique 141901021 exc rst-received-total 166779002 adv source-port-secret 37952 adv permutation-gen 4215763218
Вывод результатов
ZMap может давать результаты в нескольких форматах за счет использования модулей вывода. По умолчанию ZMap поддерживает только вывод csv, однако поддержка redis и json также может быть скомпилирована. Результаты, которые отправляются на эти выходные модули, могут быть отфильтрованы с помощью выходного фильтра. Поля выходного модуля задаются пользователем.
По умолчанию ZMap будет возвращать результаты в формате csv, однако, если не указан выходной файл, ZMap не даст конкретных результатов. Также есть возможность написать собственный модуль – чтобы узнать детали, смотрите «Написание выходных модулей».
- -o, —output-file=p – файл для записи выхода;
- -O, —output-module=p – вызов пользовательского модуля вывода;
- -f, —output-fields=p – поля для вывода, разделенные запятой;
- —output-filter=filter – укажите выходной фильтр на поля для данного зонда;
- —list-output-modules – список доступных выходных модулей;
- —list-output-fields – список доступных выходных полей для данного зонда.
Выходные поля
ZMap имеет множество полей, которые он может выводить за пределы IP-адреса. Эти поля можно рассматривать для данного модуля зонда с помощью флага --list-output-fields
.
$ zmap --probe-module="tcp_synscan" --list-output-fields saddr string: source IP address of response saddr-raw int: network order integer form of source IP address daddr string: destination IP address of response daddr-raw int: network order integer form of destination IP address ipid int: IP identification number of response ttl int: time-to-live of response packet sport int: TCP source port dport int: TCP destination port seqnum int: TCP sequence number acknum int: TCP acknowledgement number window int: TCP window classification string: packet classification success int: is response considered success repeat int: is response a repeat response from host cooldown int: Was response received during the cooldown period timestamp-str string: timestamp of when response arrived in ISO8601 format. timestamp-ts int: timestamp of when response arrived in seconds since Epoch timestamp-us int: microsecond part of timestamp (e.g. microseconds since 'timestamp-ts')
Чтобы выбрать поля для вывода, можно использовать любую комбинацию выходных полей, разделенных запятыми, в виде списка. Для этого используется флаг --output-fields=fields
или -f
. Например:
$ zmap -p 80 -f "response,saddr,daddr,sport,seq,ack,in_cooldown,is_repeat,timestamp" -o output.csv
Фильтрация выхода
Результаты, полученные с помощью модуля зонда, могут быть отфильтрованы перед передачей в модуль вывода. Фильтры устанавливаются над выходными полями исследовательского модуля. Они написаны на простом языке фильтрации, как, например, SQL, и передаются ZMap с помощью опции —output-filter . Выходные фильтры обычно используются, чтобы отфильтровать повторяющиеся результаты, или чтобы передать успешные ответы на выходной модуль.
Фильтры представлены в форме <fieldname> <operation> <value>
. Тип <value>
должен быть строкой или целым числом и соответствовать типу <fieldname>
.
Действующие операции для целых сравнений: = !=, <, >, <=, >=
. Операции для сравнения строк: =, !=. Флаг --list-output-fields
напечатает, какие поля и типы доступны для выбранного модуля, а после этого выйдет.
Соединение фильтров может быть создано с помощью объединения выражений фильтра с помощью круглых скобок, чтобы указать порядок операций, &&
(логическое И) и ||
(логическое ИЛИ).
Пример:
Написать фильтр для исключительно успешных, неповторяющихся ответов.
--output-filter="success = 1 && repeat = 0"
Фильтр для пакетов, которые имеют классификации RST и TTL больше чем 10, или для пакетов с классификацией SYNACK.
--output-filter="(classification = rst && ttl > 10) || classification = synack"
CSV
Модуль CSV будет производить файл запрашиваемых выходных полей. Например, следующая команда производит CSV в файле под именем output.csv
.
$ zmap -p 80 -f "response,saddr,daddr,sport,seq,ack,in_cooldown,is_repeat,timestamp" -o output.csv response, saddr, daddr, sport, dport, seq, ack, in_cooldown, is_repeat, timestamp synack, 159.174.153.144, 10.0.0.9, 80, 40555, 3050964427, 3515084203, 0, 0,2013-08-15 18:55:47.681 rst, 141.209.175.1, 10.0.0.9, 80, 40136, 0, 3272553764, 0, 0,2013-08-15 18:55:47.683 rst, 72.36.213.231, 10.0.0.9, 80, 56642, 0, 2037447916, 0, 0,2013-08-15 18:55:47.691 rst, 148.8.49.150, 10.0.0.9, 80, 41672, 0, 1135824975, 0, 0,2013-08-15 18:55:47.692 rst, 50.165.166.206, 10.0.0.9, 80, 38858, 0, 535206863, 0, 0,2013-08-15 18:55:47.694 rst, 65.55.203.135, 10.0.0.9, 80, 50008, 0, 4071709905, 0, 0,2013-08-15 18:55:47.700 synack, 50.57.166.186, 10.0.0.9, 80, 60650, 2813653162, 993314545, 0, 0,2013-08-15 18:55:47.704 synack, 152.75.208.114, 10.0.0.9, 80, 52498, 460383682, 4040786862, 0, 0,2013-08-15 18:55:47.707 synack, 23.72.138.74, 10.0.0.9, 80, 33480, 810393698, 486476355, 0, 0,2013-08-15 18:55:47.710
Модуль Redis
Выходной модуль Redis добавляет адреса в очередь, вместо того, чтобы сохранить в файл, который, в конечном счете, позволяет ZMap использовать инструменты постобработки.
ZMap не использует поддержку модуля Redis по умолчанию. При запуске ZMap вы можете активировать модуль Redis, запустив CMake
-DWITH_REDIS=ON
JSON
Выходной модуль в формате JSON работает аналогично модулю CSV, за исключением того, что записывает выходные данные в формате JSON в файл. Файл в формате JSON можно легко импортировать в другие программы , которые могут читать JSON .
ZMap не использует поддержку модуля JSON по умолчанию. При запуске ZMap вы можете активировать модуль JSON, запустив CMake
-DWITH_JSON=ON
.
Черный список и белый список
ZMap поддерживает сетевые префиксы Blacklisting и Whitelisting. Если ZMap не снабжен черным или белым списком параметров, он будет сканировать все адреса IPv4 (в том числе локальные, зарезервированные и групповые адреса). Если указан черный список файлов, сетевые префиксы в черном списке не будут проверяться; если указан белый список файлов, только сетевые префиксы, которые состоят в нем, будут сканироваться.
Файлы белого и черного списков могут быть использованы в согласовании; черный список имеет приоритет над белым списком (например, если у вас есть белый список 10.0.0.0/8 и черный 10.1.0.0/16, последний сканироваться не будет).
Файлы в белом и черном списках могут быть указаны в командной строке следующим образом:
-b, —blacklist-file=path – файл подсетей черного списка в CIDR нотации, например 192.168.0.0/16.
w, —whitelist-file=path – файл подсетей для ограничения сканирования в CIDR нотации, например, 192.168.0.0/16.
Чёрный список файлов должен быть отформатирован с одним сетевым префиксом в CIDR нотации в каждой строке. Комментарии разрешены с помощью символа #. Например:
# From IANA IPv4 Special-Purpose Address Registry # http://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml # Updated 2013-05-22 0.0.0.0/8 # RFC1122: "This host on this network" 10.0.0.0/8 # RFC1918: Private-Use 100.64.0.0/10 # RFC6598: Shared Address Space 127.0.0.0/8 # RFC1122: Loopback 169.254.0.0/16 # RFC3927: Link Local 172.16.0.0/12 # RFC1918: Private-Use 192.0.0.0/24 # RFC6890: IETF Protocol Assignments 192.0.2.0/24 # RFC5737: Documentation (TEST-NET-1) 192.88.99.0/24 # RFC3068: 6to4 Relay Anycast 192.168.0.0/16 # RFC1918: Private-Use 192.18.0.0/15 # RFC2544: Benchmarking 198.51.100.0/24 # RFC5737: Documentation (TEST-NET-2) 203.0.113.0/24 # RFC5737: Documentation (TEST-NET-3) 240.0.0.0/4 # RFC1112: Reserved 255.255.255.255/32 # RFC0919: Limited Broadcast # From IANA Multicast Address Space Registry # http://www.iana.org/assignments/multicast-addresses/multicast-addresses.xhtml # Updated 2013-06-25 224.0.0.0/4 # RFC5771: Multicast/Reserved
Если вы хотите сканировать только случайную часть интернета, примените выбор, вместо того, чтобы использовать белый список и черный список.
Конфигурация ZMap по умолчанию использует файл черного списка
/etc/zmap/blacklist.conf
, который содержит локальные адреса и IP диапазон. Конфигурация по умолчанию может быть изменена путем редактирования/etc/zmap/zmap.conf
.
Ограничение и выбор скорости
По умолчанию ZMap будет сканировать с максимально возможной скоростью, которую обеспечивает сетевой адаптер. На аппаратном обеспечении, это, как правило, около 95-98% от теоретической скорости Ethernet. ZMap не будет автоматически корректировать скорость отправки, установленную вышестоящим провайдером. Вам, возможно, придется выполнить ручные настройки, чтобы уменьшить скорость пакетной передачи.
-r, —rate=pps – установить максимальную скорость отправки пакетов / сек.
-B, —bandwidth=bps – настроить скорость в битах / сек (поддерживает суффиксы G, M и K). Чтобы отменить, используйте флаг --rate
.
ZMap также может сделать случайный выбор из адресного пространства IPv4, указав максимальное количество значений целевых показателей и / или максимальное значение среды выполнения. Поскольку хосты сканируются в случайном порядке, ограничение сканирования до определенного количества хостов будет выполнено через случайный выбор хостов. Параметры командной строки:
-n, —max-targets=n – количество целей для исследования;
-N, —max-results=n – количество результатов (выход после получения многих положительных результатов);
-t, —max-runtime=s – время для отправки пакетов (в секундах);
-s, —seed=n – используется для перестановки адресов. Укажите, чтобы сканировать адреса в том же порядке для различных серий ZMap.
Например, если вы хотите сканировать миллион хостов в Интернете, вы можете ограничить число сканируемых хостов:
zmap -p 443 -s 3 -n 1000000 -o results
Чтобы определить, какой один миллион хостов будет отсканирован, можно запустить режим dry-run сканирования, который будет распечатывать отправленные пакеты вместо выполнения фактического сканирования.
zmap -p 443 -s 3 -n 1000000 --dryrun | grep daddr | awk -F'daddr: ' '{print $2}' | sed 's/ |.*//;'
Отправка нескольких пакетов
ZMap поддерживает отправку нескольких зондов для каждого хоста. Увеличение времени сканирования (~ 100% за каждый дополнительный зонд) значительно перевешивает увеличение хостов (~ 1% за каждый дополнительный зонд).
-P, —probes=n – количество уникальных зондов для отправки к каждому IP (по умолчанию = 1).
Перейти к содержанию полного руководства пользователя ZMap на русском языке.
Перевод: Виктория Верстлер