Инструкция по работе с IVRE в Kali Linux: Массовый сбор подробных сведений о хостах в больших сетях

Новые программы для сканирования сетей

Все мы знаем про программу nmap. Что можно сказать про неё? Программа прекрасно подходит для сбора информации об одном хосте или о небольшой подсети. Если мы говорим о больших сетях, то скорость nmap довольно низкая, да и обрабатывать полученные данные неудобно.

За последнее время появилось много интересных программ для сканирования сетей с разными интересными функциями. Например, Masscan позволяет проводить сканирования с потрясающей скоростью. Если установить соответствующий драйвер и если ваше Интернет-соединение позволит, то огромные сети можно сканировать за считанные минуты! При написании кода автор, в первую очередь, исходил из скорости генерирования пакетов для отправки. Кроме этого, Masscan обладает другой отличной новацией. Как работают популярные сканеры, если им указать диапазон адресов? Они будут сканировать последовательно IP за IP. В в это время какие-то сети испытывают значительную нагрузку, а другие сети просто «ждут», пока до них дойдёт очередь. Masscan перемешивает все IP из переданного ему диапазона и в случайном порядке сканирует их — в результате нагрузка на сети балансируется. Masscan имеет невероятно простой, но при этом отлично работающий механизм организации распределённого сканирования. Про Masscan, на самом деле, ещё много можно рассказывать, но данный раздел о IVRE, к Masscan мы вернёмся в следующий раз.

Программа flashlight является интеллектуальной оболочкой для nmap, она может ускорять процесс сканирования (за счёт одновременного запуска многих экземпляров nmap), она в достаточно удобном виде сохраняет полученные результаты, умеет массово собирать скриншоты (кстати, если вас интересуют именно скриншоты, то рекомендую статью «Инструкция по применению flashlight в BlackArch: массовый сбор скриншотов веб-сайтов и веб-приложений»). Вообще, программа flashlight поддерживает 3 типа сканирования, сбор скриншотов — это только один из них, поэтому рекомендую поближе познакомиться со справкой по программе.

В этом ряду новых программ особо хочется отметить IVRE. У программы хороший обработчик собранных данных, есть даже графический интерфейс (веб-интерфейс). Программа также имеет пассивный режим (использует на выбор p0f или Bro). Но я хочу поговорить о другой её возможности — активном сканировании. Она собирает крайне подробную информацию о всех хостах. Конечно, это сказывается на скорости исследования сети. Чтобы немного нивелировать это негативное обстоятельство, программа прекрасно поддерживает многопоточность, а также поддерживает распределённое сканирование. Как я уже сказал, с собранными данными легко работать: легко ими манипулировать, представлены они наглядно.

В этом разделе я расскажу о том, как собрать подробные сведения о сетях с помощью IVRE. Чтобы познакомиться с другими её возможностями, обратитесь к документации.

Как установить IVRE в Linux

Начнём с установки. При активном сканировании, зависимостью программы является nmap, т.е. у вас уже должна быть установлена эта программа. IVRE уже давно есть в BlackArch, а в Kali Linux её нужно устанавливать. Для этого последовательно выполните команды:

sudo apt-get install python-pip python-dev mongodb tesseract-ocr geoip-bin geoip-database geoip-database-extra python-pymongo python-crypto apache2 dokuwiki python-pil
sudo pip install ivre

Для хранения данных IVRE использует MongoDB. Запуск службы БД делается так:

sudo service mongodb start

Поскольку в Kali Linux по умолчанию многие службы убраны из автозагрузки, то, если вы собираетесь работать с IVRE, запускать службу БД нужно каждый раз после старта компьютера.

Инициализация БД IVRE:

sudo ivre scancli --init
sudo ivre ipinfo --init
sudo ivre ipdata --init
sudo ivre runscansagentdb --init

(у нас каждый раз будут спрашивать, хотим ли мы продолжить, ведь в этом случае будут потеряны все предыдущие результаты. Поскольку результатов у нас ещё нет, то смело везде вводит y)

Загрузка и импорт геолокационных данных об IP. Это может занять некоторое время — наберитесь терпения, пока программа импортирует в свою базу данных геолокационную информацию:

sudo ivre ipdata --download
sudo ivre ipdata --import-all --dont-feed-ipdata-cols

Следующие команды требуются для включения в IVRE функции захвата скриншотов.

Нам нужен PhantomJS:

sudo apt-get install gsfonts-x11 fonts-arphic-uming
cd /tmp/ && wget https://bitbucket.org`curl -s https://bitbucket.org/ariya/phantomjs/downloads | grep -E -o '/ariya/phantomjs/downloads/phantomjs-[0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2}-linux-x86_64.tar.bz2' | head -n 1` && tar xjf phantomjs-* && sudo mv `ls | grep 'phantomjs-' | head -n 1`/bin/phantomjs /usr/bin/ && cd `ls | grep 'phantomjs-' | head -n 1` && sudo mkdir /usr/share/phantomjs && sudo mv examples/ /usr/share/phantomjs && cd
sudo ln -s /usr/bin/phantomjs /usr/local/bin/phantomjs
sudo ln -s /usr/bin/phantomjs /usr/local/share/phantomjs

В версии для Docker есть два дополнительных файла — именно они и отвечают за захват скриншотов. Это файл http-screenshot.nse и screenshot.js. Файл http-screenshot.nse является скриптом nmap, он сверяет открытые порты, и если среди открытых имеются 80 или 443, то передаёт IP хоста файлу screenshot.js А screenshot.js непосредственно задействует PhantomJS для снятия скриншота. При обычной установке они отсутствуют, поэтому мы докачаем их:

sudo wget https://raw.githubusercontent.com/cea-sec/ivre/e2a23c8ca8d24112cfc78eb6d7e62e91c77f5034/docker/client/screenshot.js -O /usr/local/bin/screenshot.js
sudo wget https://raw.githubusercontent.com/cea-sec/ivre/c3b0c61eb3af5fd919c6e3f99cd2713c6cd5eb08/docker/client/http-screenshot.nse -O /usr/share/nmap/scripts/http-screenshot.nse
sudo chmod +x /usr/local/bin/screenshot.js
sudo nmap --script-update

В принципе, уже сейчас IVRE готова к работе. Но если вам нужен графический интерфейс, то продолжайте (чтобы проделать следующие команды, нужно быть суперпользователем):

su -
cd /var/www/html
rm index.html
ln -s /usr/local/share/ivre/web/static/* .
cd /usr/lib/cgi-bin
ln -s /usr/local/share/ivre/web/cgi-bin/* .
cd /var/lib/dokuwiki/data/pages
ln -s /usr/local/share/ivre/dokuwiki/doc
cd /var/lib/dokuwiki/data/media
ln -s /usr/local/share/ivre/dokuwiki/media/logo.png
ln -s /usr/local/share/ivre/dokuwiki/media/doc
cd /usr/share/dokuwiki
patch -p0 < /usr/local/share/ivre/dokuwiki/backlinks.patch
cd /etc/apache2/mods-enabled
for m in cgi rewrite ; do [ -L $m.load ] || ln -s ../mods-available/$m.load ; done
cd /usr/local/share/ivre/web/cgi-bin
sed -i 's/^\(\s*\)#Rewrite/\1Rewrite/' /etc/dokuwiki/apache.conf
service apache2 start
a2enmod cgi
service apache2 reload
CTRL+D

Графический веб-интерфейс теперь доступен по адресу: http://localhost/

После каждой перезагрузки, перед началом работы с IVRE, не забывайте запустить необходимые службы базы данных и веб-сервера:

sudo service mongodb start
sudo service apache2 start

Активное сканирование с помощью IVRE

Можно просканировать диапазоны какой-либо сети (в том числе локальной). Если вас интересует информация по географическим объектам или по Интернет-провайдерам, то обратитесь к статье «Как узнать все IP провайдера, города, региона (области, республики) или страны».

По инструкции из той статьи я хочу получить все IP, допустим, своего родного города Муром (Илья Муромец и всё такое). Я скачиваю базу данных:

wget `curl -s https://db-ip.com/db/download/city | grep -E -o 'http://download.db-ip.com/free/dbip-city-20[0-9]{2}-[0-9]{2}.csv.gz'`&& gunzip dbip-city-*.csv.gz && mv dbip-city-* dbip-city-csv

А теперь просто составляю список IP моего города (поиск осуществляется по слову Murom):

CITY=Murom;cat dbip-city-csv | grep -E -i "$CITY" | sed 's/","/-/' | cut -d ',' -f 1 | sed 's/"//' | sed 's/"//' > IP_City_$CITY.txt

Из получившегося списка удалите IPv6 адреса.

Особенностью IVRE является то, что она собирает реально всю возможную информацию о хостах. Это делается с помощью использования большого количества скриптов nmap. Обратной стороной этого является крайне медленное сканирование и высокая требовательность к ресурсам.

Если при работе с Masscan большинство из нас упрутся в потолок нашего Интернет-подключения, то IVRE требовательна к оперативной памяти и к ресурсам процессора. Например, если я выделяю виртуальному компьютеру 2 гигабайта оперативной памяти и 2 ядра процессора, то я могу запустить IVRE с 30 одновременных потоков сканирования. Если я повышаю до 4 гигабайт и 4 ядер, я запускаю с 60 потоками. Чтобы определиться с точными цифрами для вашего железа, поэкспериментируйте сами.

Поскольку количество потоков невелико, то, возможно, придётся разрывать сканирование, распределяя его на несколько дней. Кроме этого, ожидание результатов слишком уж затянется. Чтобы без проблем можно было прерывать сканирования, чтобы начинать с точки остановки и чтобы первые результаты сразу стали поступать в базу данных, я придумал следующий алгоритм. Вполне возможно, что можно организовать работу изящнее, но мой метод является законченным готовым решением.

Следующей командой я преобразую мои диапазоны: они будут разбиты на отдельные IP адреса и все они будут записаны построчно в файл ready.hosts.

masscan -sL -iL IP_City_Murom.txt > ready.hosts

Программе IVRE можно «скармливать» любое количество IP адресов. Здесь нужно помнить следующее: некоторые адреса обрабатываются быстро, а некоторые долго. При этом переход к следующему диапазону происходит только тогда, когда закончиться работа с последним адресом. Т.е. десять запусков по 30 адресов будут обрабатываться дольше, чем один запуск с указанием 300 адресов. Но если мы передадим слишком большой диапазон, то нам придётся долго ждать первых результатов и последующие результаты будут приходить с большими интервалами времени. Я для себя выбрал «скармливать» программе по 300-1000 адресов, вы можете указать другое количество — зависит от того, важно ли для вас быстрая доступность полученных данных.

Чтобы создать файл с 1000 IP адресами я использую команду:

cat ready.hosts | head -n 1000 > temp.hosts

Далее запускаю IVRE:

ivre runscans --output=XMLFork --file temp.hosts --processes 60

Здесь:

  • --file temp.hosts — файл с IP адресами для сканирования
  • --processes 60 — это количество одновременных процессов сканирования (не устанавливайте слишком много, иначе компьютер зависнит из-за нехватки ресурсов)
  • --output=XMLFork — метод вывода результатов сканирования

Когда сканирования адресов завершено, то я импортирую результаты сканирования командой:

ivre nmap2db -c MuromTown -s HackWare -r scans/FILE-temp.hosts/up

Здесь:

  • -c MuromTown — название проекта, можете выбрать любое
  • -s HackWare — источник сканирования, можете выбрать любое название
  • -r scans/FILE-temp.hosts/up — означает импортировать результаты сканирования из каталога scans/FILE-temp.hosts/up (у вас название будет такое же, если вы следуете моему алгоритму)

Теперь нам нужно убрать из файла с IP для сканирования те адреса, по которым программа уже отработала, это делается следующей командой:

cp ready.hosts /tmp/ready.hosts; cat /tmp/ready.hosts | sed '1,1000d' > ready.hosts

Во время сканирования, результаты хранятся в обычных файлах. Мы уже импортировали эти результаты в базу данных и, в принципе, эти файлы можно удалить. Чтобы каталог с файлами не распухал, я его удаляю (это не обязательно):

rm -rf scans/FILE-temp.hosts

Собираем все команды в один файл mass_scan.sh:

#!/bin/bash

if [ `cat ready.hosts | wc -l` -eq 0  ]
then
    echo 'IP закончились.'
    exit
fi         

echo 'Продолжаем...'
cat ready.hosts | head -n 1000 > temp.hosts
sudo ivre runscans --output=XMLFork --file temp.hosts --processes 60
sudo ivre nmap2db -c MuromTown -s HackWare -r scans/FILE-temp.hosts/up
cp ready.hosts /tmp/ready.hosts; cat /tmp/ready.hosts | sed '1,1000d' > ready.hosts
rm -rf scans/FILE-temp.hosts
sudo bash mass_scan.sh

Последней строкой скрипт перезапускает сам себя в бесконечном цикле. А в самое начало мы добавили проверку, не исчерпали ли мы пул IP.

Запускать так:

sudo bash mass_scan.sh

Следить за пребывающими результатами можно в веб-интерфейсе: http://localhost/

Чтобы проверить, сколько адресов для сканирования ещё осталось:

cat ready.hosts | wc -l

Работа с результатами сканирования IVRE

Доступно огромное количество фильтров, которые можно использовать как в веб-интерфейсе, так и в командной строке. Самые популярные фильтры можно применить прямо из верхнего меню веб-интерфейса. Чтобы извлечь максимум из анализа данных, рекомендуется ознакомиться с фильтрами на странице IVRE в Энциклопедии инструментов Kali Linux.

Фильтры позволяют одной командой найти все службы, доступ к которым возможен без пароля, все веб-камеры или специфичные устройства, можно искать по банерам, по географическому расположению, по открытым портам и запущенным службам, операционным системам или по любым сочетаниям фильтров.

Чем больше у вас выборка, тем больше интересного вы найдёте. Вот так выглядит веб-интерфейс с результатами сканирования для моего городка:

02

В моих результатах присутствует FTP сервер, который позволяет анонимный вход:

03

Есть расшаренные файлы:

04

Несколько веб-камер:

05

Множество скриншотов:

06

Network File System (NFS):

12

OWA:

13

Разнообразные страницы с "Apache2 Ubuntu Default Page", "It works!", "Index of /" и т. п.:

07

09

08

10

11

являются прекрасными целями для программ вроде BruteX, поскольку на радостях, что у них наконец заработало, админ забыл про свой сервер, или побоялся что-то там трогать (дальше настраивать), чтобы не сломать. Поэтому есть шанс подобрать пароль к какой-нибудь службе (SSH, FTP, MySQL).

Искать их можно по-разному, как по скриншотам, так и по фильтрам. Все веб-сервера разные и плюс к этому находятся в разной степени незавершённости настройки, поэтому какой-то универсальный фильтр мне подобрать не удалось. Неплохо работают следующие (применять по-одному):

  • script:http-title:/works
  • script:http-comments-displayer:/works
  • httptitle:/Index
  • script:http-title:/doesn
  • script:http-title:/default
  • script:http-title:/Apache
  • script:http-comments-displayer:/CentOS
  • httptitle:/GlassFish
  • httptitle:/Gateway
  • httptitle:/Found
  • httptitle:/Nginx
  • httptitle:/IIS7
  • httptitle:/nginx
  • httptitle:/Server
  • httptitle:/SyncThru
  • httptitle:/Service
  • httptitle:/Internal
  • httptitle:/Macroscop

Для поиска популярного роутера MicroTik:

  • httptitle:/RouterOS          

Заключение

Это далеко не вся функциональность IVRE. Мы познакомились только с азами её использования. Ключевыми особенностями IVRE является крайне подробный сбор информации и удобство поиска по полученным данным.

Мы совершенно не коснулись некоторых возможностей IVRE, к ним относятся, например, пассивное сканирование с помощью p0f и такого мощного инструмента как Bro, распределённое сканирование, а также работа с данными из командной строки.

Рекомендуемые статьи:

4 комментария to Инструкция по работе с IVRE в Kali Linux: Массовый сбор подробных сведений о хостах в больших сетях

  1. Имя:

    Получение IP с https://db-ip.com не интересно, этот второисточник никакого интереса не представляет, потому что доступны первоисточники. Лучше напишите как получить IP c

    ftp://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest
    ftp://ftp.ripe.net/ripe/stats/delegated-ripencc-latest
    ftp://ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-latest
    ftp://ftp.apnic.net/pub/stats/apnic/delegated-apnic-latest
    ftp://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-latest

    и http://ipgeobase.ru/cgi-bin/Archive.cgi

    • Alexey Alexey:

      Я ничего не имею против альтернатив – чем больше, тем лучше. Но, например, данные IpGeoBase я распарсю – не проблема. Но ведь там мало стран, а европейские страны «с точностью до страны». Да и IPv6 полностью отсутствуют. Ну это как «глобус владимирской области». Сделать можно - но зачем? Все же с него смеятся будут.

      Если бы с первоисточниками было просто работать, не думаю, что db-ip.com и другие продавали бы базы данных, а также API для доступа к этим базам данных. Думаю, они имеют своё «ноу-хау» (программы, алгоритмы) и соответствующие вычислительные мощности. Просить в комментариях «напиши-ка мне закрытый алгоритм ранжирования Яндекса» это, как минимум, оригинально. smiley

  2. Имя:

    Ну и черт с вами! Я сам сделал что мне нужно:

    curl ftp://ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-latest ftp://ftp.apnic.net/pub/stats/apnic/delegated-apnic-latest ftp://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest ftp://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-latest ftp://ftp.ripe.net/ripe/stats/delegated-ripencc-latest | grep ISO 3166-1 alpha-2 | grep ipv4 | awk -F\| '{ printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > CIDR.txt

    где ISO 3166-1 alpha-2 — двухбуквенный код страны.

    • Alexey Alexey:

      Здорово. И, главное, не пожадничали – спасибо, что поделились здесь методом.

      Правильно ли я понимаю суть этих баз, что они сопоставляют IP с ASN и странами? Т.е. данных о городах (населённых пунктах) там нет? Т.е. без «вторичных» баз всё равно не обойтись. 

Добавить комментарий

Ваш e-mail не будет опубликован.