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

В специализированном дистрибутиве Kali Linux средства сбора информации представлены в разделе Information Gathering, но целью данной статьи является освещение некоторых, интересных с точки зрения автора средств, связанных со сбором информации из открытых источников и не входящих по умолчанию в Kali Linux 2.0.

В данной статье рассматриваются:

  1. SpiderFoot – браузерная утилита автоматизации сбора данных;
  2. Intrigue-core – фреймворк для сбора данных, имеющий свой API;
  3. Geotweet – средство поиска меток геолокации аккаунтов twitter (и не только).

1. Обзор инструмента комплексного сбора данных SpiderFoot.

SpiderFoot – утилита, предназначенная для автоматизации сбора разведывательной информации о цели (представленной IP-адресом, или доменным именем). В отличие от своего аналога Maltego, интерфейс SpiderFoot доступен в браузере.

Установка:

Сначала устанавливаем зависимости:

pip install lxml netaddr M2Crypto cherrypy mako

Скачиваем архив с официального сайта, разархивируем и запускаем:

./sf.py

Интерфейс доступен по адресу http://127.0.0.1:5001

Описание режимов работы:

SpiderFood имеет 3 варианта запуска сканирования цели:

1. По заданному кейсу (3 подвида):

  • «All» – включаются все имеющиеся модули, соответственно, с получением всей информации о цели.
  • «Footprint» – режим сбора информации, основанный на предоставляемой интернетом информации о цели.
  • «Investigate» – режим сбора информации о подозрительных вредоносных IP (например, полученных из логов).

2. По необходимым получаемым данным (например, по «Account on External Site» и/или «Hosting Provider» и т.д.).

3. По модулям («SHODAN», «Spider» и т.д.).

Пример сканирования:

Режим: By Use Case, Footprint
Название: «Footprint — pentestit.ru»
Цель: pentestit.ru

Через некоторое время (как позволит мощность машины и скорость соединения, но мне пришлось прервать процесс спустя 6 часов) сканирование завершится (его также можно прервать вручную):

spiderfood-1

Как в процессе сканирования, так и после его завершения доступны его результаты. На рисунке на вкладке «Status» – сводная диаграмма из найденных сущностей:

spiderfood-2

Перейдя на вкладку «Browse», можно подробнее ознакомиться с найденными сущностями, такими как аккаунты на сторонних сайтах, IP-адресах, email-адресах и другими:

spiderfood-3

При клике по выбранной категории сущностей, например, Email Address, отображаются найденные сущности, которые можно отфильтровать для вывода только уникальных значений (кнопка Unique Data View):

spiderfood-4

Пример найденных публичных репозиториев:

spiderfood-5

Пример найденного связанного контента с сайта pastebin.com:

spiderfood-6

Найденные ссылки на связанные страницы социальных сетей:

spiderfood-7

URL адреса, имеющие поля для ввода пароля:

spiderfood-8

Разумеется, это не полный список того, что можно найти с помощью данного средства.

Перейдя по вкладке «Graph», можно настроить отображение графа с визуальным представлением результатов сканирования (в данном случае был выбран форсированный режим упорядочивания – кнопка «F»), также доступно сохранение результатов в файл:

spiderfood-9

Как можно заметить, данная утилита имеет неплохие возможности как в задачах автоматизированного сбора информации о цели, так и визуального представления полученной информации, благодаря удобному интерфейсу. Также, возможен запуск приложения на выделенном сервере, что заметно улучшит скорость работы в случаях сканирования многих целей.

2. Обзор инструмента комплексного сбора данных Intrigue-core.

Intrigue-core является API фреймворка для проведения комплексного сбора информации о цели. Наличие подмодулей сканирования таких как nmap и masscan позволяют ему охватывать сразу два этапа тестирования на проникновение – Reconnaissance и Scanning.

Установка:

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

Приведу ниже последовательность команд (все действия поводились на Kali Linux 2.0), которые привели к успешному запуску приложения.

Необходимо внести поправки в файл конфигурации Redis-сервера (закомментировать строку «port 0»):

gedit /etc/redis/redis.conf

Запустить сервис:

service redis-server start

Теперь, после перезагрузки команда

netstat –lntp

отобразит работающий Redis-сервер по адресу 127.0.0.1:6379.

Далее обновляемся и ставим необходимые модули (некоторые могут быть уже установлены):

apt-get -y update && apt-get -y upgrade
apt-get install git-core
apt-get install libpq-dev postgresql postgresql-server-dev-9.4
apt-get install nmap zmap
apt-get install git gcc make libpcap-dev

Затем устанавливаем необходимый модуль сканера masscan:

cd /opt
git clone https://github.com/robertdavidgraham/masscan
cd masscan
make
make install

Завершающий этап:

gpg --keyserver hkp://keys.gnupg.net --recv-keys
409B6B1796C275462A1703113804BB82D39DC0E3
curl -sSL https://get.rvm.io | bash -s stable
source /etc/profile.d/rvm.sh
rvm install ruby-2.2.0
rvm use 2.2.0@core --create
git clone https://github.com/intrigueio/intrigue-core.git core
cd intrigue-core
bundle install
bundle exec rake migrate

Для запуска достаточно набрать foreman start из директории приложения, однако, если ничего не запустится (вероятность велика), то необходимо поправить файл (который в логах консоли с ошибкой Syntax Error):

gedit /var/lib/gems/2.1.0/bundler/gems/censys-83dab46e0534/lib/censys.rb

На строке 58 привести код к виду:

payload = {
    "query" => :keyword
}

При повторном запуске ошибки синтаксиса уже не будет, но появится сообщение «database locked». Для исправления ситуации необходимо перезагрузить систему и при помощи sqlitebrowser открыть базу данных: /opt/intrigue-core/db/intrigue.db, и закрыть.
После этих манипуляций приложение запускается корректно и web-интерфейс доступен по адресу 127.0.0.1:7777:

intrigue-core-1

Также с приложением можно работать посредством командной строки (запуском core-cli.rb с параметрами), но в данной статье рассматривается только работа через браузер.

Описание:

Task – здесь можно выбрать тип задачи (45 наименований), также здесь отображаются текущие и уже выполненные задания.
Scan – запуск одного из двух видов сканирования: «обнаружение» или «поиска субдоменов».
Entities – все найденные сущности.
Admin – настройки программы (API-ключи для сервисов), в самом низу настроек полезная кнопка для очистки сущностей (http://127.0.0.1:7777/v1/admin/clear).

Ниже представлен список имеющихся задач (Task) с кратким описанием:

1. Check Project Honeypot – проверка сайта на информацию project honeypot.
2. Convert Entity – конвертирование сущности в другой тип.
3. DNS Cache Snoop – запрос DNS сервера на список доменов и проверка, если последний визит этого домена в их кэше.
4. DNS Forward Lookup – просмотр IP данного хоста, захват всех типов записей.
5. DNS MX Lookup – поиск записей MX данной DNS записи.
6. DNS Reverse Lookup – ищет имя данного IP адреса.
7. DNS SPF Recursive Lookup – рекурсивный поиск DNS SPF.
8. DNS Service Record Bruteforce – простой брутфорс службы записи DNS.
9. DNS Subdomain Bruteforce – DNS брутфорс субдоменов.
10. DNS TLD Bruteforce – брутфорс домена верхнего уровня DNS.
11. DNS TXT Lookup – поиск DNS TXT.
12. DNS Zone Transfer – передача зоны DNS.
13. Email Bounceback – эта задача проверяет домен на возвращаемые письма через gmail.
14. Email Harvester – эта задача «выскабливает» email адреса из результатов поискового движка.
15. Email Validate – эта задача проверяет валидность email через email-validator.net API.
16. Email Validate via MailboxLayer – эта задача проверяет валидность email через MailboxLayer API.
17. Example – пример, возвращает случайные данные.
18. Fuzz a NetSvc with random data – эта задача подключается к службе и отправляет множество случайных данных.
19. Geolocate Host – выполняет геолокацию, основанную на IP адресе.
20. Masscan Scan – эта задача запускает сканирование masscan в отношении целевого хоста или домена.
21. Nmap Scan – эта задача запускает nmap сканирование на целевой хост или домен.
22. Phone Number Carrier Lookup – эта задача использует CarrierLookup API для определения поставляемого номера телефона.
23. Search Bing – эта задача использует Bing API и ищет связанный контент, отображаются обнаруженные домены.
24. Search Censys.io – искать при помощи Censys search engine.
25. Search EDGAR – искать при помощи EDGAR corporation search.
26. Search Google – эта задача использует Google API и находит связанный контент, отображаются обнаруженные домены.
27. Search Pipl – использование Pipl API для поиска по сущностям.
28. Search Shodan – использует SHODAN API для поиска информации.
29. URI Check Safebrowsing API – проверяет URI в Google Safebrowsing (StopBadware) API.
30. URI Check Security Headers – эта задача проверяет типичные заголовки безопасности HTTP на веб приложении.
31. URI Exploitable Scanner – эта задача сканирует целевой URL на предмет наличия выполняемых скриптов, которые обрабатывают какие-либо запросы.
32. URI Extract Metadata – эта задача загружает контент единичного URI и извлекает сущности из текста и метаданных.
33. URI Gather And Analyze Links – эта задача разбирает главную страницу и выполняет анализ на ссылки.
34. URI Gather Headers – эта задача проверяет HTTP заголовки веб-приложения.
35. URI Gather Robots.txt – эта задача проверяет robots.txt и добавляет любые найденные URI.
36. URI Gather SSL Certificate – получение SSL сертификата от сервера приложений.
37. URI Gather Sitemap (sitemap.xml) – эта задача проверяет sitemap.xml и добавляет любые URI, которые находит.
38. URI Gather Technology – эта задача определяет платформу и технологию цели.
39. URI HTTP Auth Brute – эта задача брутфорсит аутентификацию, передаётся URI, требующее HTTP аутентификацию.
40. URI HTTP Screenshot – эта задача делает скриншот URI.
41. URI Spider – эта задача паутинит данный URI, отображая сущности из страницы текста, а также из разобранных файлов.
42. URI Youtube Metadata – эта задача загружает метаданные данного URI видео youtube.
43. Web Account Check – эта задача использует крупные веб-сайты, проверяя существующие аккаунты, обнаруженные аккаунты отображаются.
44. Whois – выполняет поиск whois по данной сущности.
45. Zmap Scan – эта задача запускает zmap сканирование на целевой хост или домен.

Приведу несколько необъёмных примеров, чтобы можно было понять принцип работы данного комплекса.

Пример 1, задача: URI Exploitable Scanner, цель: http://intrigue.io
Найденные сущности:

Uri: http://intrigue.io/c99.php
Uri: http://intrigue.io/b37.php
Uri: http://intrigue.io/c37.php
Uri: http://intrigue.io/c66.php
Uri: http://intrigue.io/tool.asp
Uri: http://intrigue.io/0
Uri: http://intrigue.io/2015
Uri: http://intrigue.io/a
Uri: http://intrigue.io/about
Uri: http://intrigue.io/admin
Uri: http://intrigue.io/b
Uri: http://intrigue.io/bin
Uri: http://intrigue.io/black
Uri: http://intrigue.io/d
Uri: http://intrigue.io/dashboard
Uri: http://intrigue.io/do
Uri: http://intrigue.io/down
Uri: http://intrigue.io/download
Uri: http://intrigue.io/in
Uri: http://intrigue.io/login
Uri: http://intrigue.io/rdf
Uri: http://intrigue.io/robots.txt
Uri: http://intrigue.io/rss
Uri: http://intrigue.io/s
Uri: http://intrigue.io/si
Uri: http://intrigue.io/sign
Uri: http://intrigue.io/signup
Uri: http://intrigue.io/sitemap.xml
Uri: http://intrigue.io/t
Uri: http://intrigue.io/tool
Uri: http://intrigue.io/tools
Uri: http://intrigue.io/wp-admin

Пример 2, задача: URI Gather Technology, цель: http://www.intrigue.io
Найденные сущности:

SoftwarePackage: WordPress
SoftwarePackage: WordPress Plugin
SoftwarePackage: WordPress API

Цель: http://www.defcon.ru
Найденные сущности:

SoftwarePackage: WordPress
SoftwarePackage: WordPress Plugin
SoftwarePackage: WordPress API

Цель: http://www.nytimes.com
Найденные сущности:

SoftwarePackage: Optimizely
SoftwarePackage: Facebook Account

Пример 3, задача: URI Extract Metadata, цель: http://www.pentestit.ru
Найденные сущности:

HttpHeader: x-xss-protection
HttpHeader: x-content-type-options
HttpHeader: x-frame-options
HttpHeader: strict-transport-security
HttpHeader: set-cookie
HttpHeader: expires
HttpHeader: pragma
HttpHeader: cache-control
HttpHeader: x-powered-by
    Детали сущности x-powered-by (необходимо перейти по ссылке): PHP/5.6.19-1~dotdeb+7.1
HttpHeader: vary
HttpHeader: connection
HttpHeader: transfer-encoding
HttpHeader: content-type
HttpHeader: date
HttpHeader: server
Детали сущности server: nginx.

Пример 4, задача DNS MX Lookup, цель: DnsRecord: intrigue.io
Найденные сущности:

DnsRecord: aspmx.l.google.com
IpAddress: 74.125.195.27
DnsRecord: alt1.aspmx.l.google.com
IpAddress: 64.233.165.27
DnsRecord: alt2.aspmx.l.google.com
IpAddress: 74.125.130.27
DnsRecord: aspmx2.googlemail.com
DnsRecord: aspmx3.googlemail.com

Пример 5: задача: Whois, цель: DnsRecord: pentestit.ru
Найденные сущности:

DnsRecord: ns1.pentestit.ru
IpAddress: 188.40.122.74
DnsServer: 188.40.122.74
DnsRecord: ns2.pentestit.ru
IpAddress: 37.59.13.7
DnsServer: 37.59.13.7
Person: Private Person

Для наглядного примера ручного «углубления» переходим по ссылке на сущность IpAddress: 188.40.122.74. Для каждой найденной сущности доступен список задач (внизу страницы). Запустим последовательно задачи: Geolocate Host, Nmap Scan, DNS Reverse Lookup:

1. Geolocate Host (IpAddress: 188.40.122.74)
Результат:

country: Germany, longitude: 9.0, latitude: 51.0

2. Nmap Scan (IpAddress: 188.40.122.74)
Результат:

NetSvc: 188.40.122.74:53/tcp
NetSvc: 188.40.122.74:443/tcp
Uri: https://188.40.122.74:443
Uri: https://hn1.pentestit.ru:443

3. DNS Reverse Lookup (IpAddress: 188.40.122.74)
Результат:

name: hn1.pentestit.ru

Аналогично, переходим по ссылке на сущность DnsRecord: ns1.pentestit.ru и запускаем задачу DNS Forward Lookup (DnsRecord: ns1.pentestit.ru).
Результат:

name: 188.40.122.74,
parsed_record_type: A

Как видно из примеров, данное средство сбора информации о цели имеет необходимый функционал, который позволяет в полуавтоматическом режиме запускать необходимые задания с необходимым уровнем вложенности, т.е. выполнили Whois для целевого сервера, затем для каждого IP запускаем сканирование, для каждой DNS-записи узнаём IP-адрес, запускаем сканирование nmap и так далее.

Однако модуль Scan с двумя режимами работы позволяет полностью автоматизировать процесс сканирования – достаточно указать параметры, в т.ч. «Depth», которая отвечает именно за уровень «продвижения» вглубь результатов сканирования:

intrigue-core-2

В процессе работы, при запуске очередного задания может появляться ошибка database locked – для решения проблемы необходимо перейти на главную страницу, затем снова вернуться к списку заданий.

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

3. Обзор инструмента сбора данных геолокации Geotweet.

Geotweet является приложением для отслеживания записей в twitter, а также в instagram. Найденные координаты тут же можно отобразить на google-картах для составления схемы перемещений владельца аккаунта.

Установка:

git clone https://github.com/Pinperepette/Geotweet_GUI.git
cd Geotweet_GUI
sudo dpkg -i *.deb
sudo apt-get -f install
geotweet

Описание:

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

geotweet-1

Geotweet имеет 4 режима работы, запускаемые соответствующими кнопками: TLINE, ZONE, TAG, USER:

geotweet-2

Режим TIMELINE
1.    Указываем имя пользователя в поле для ввода.
2.    Указываем максимальное число получаемых записей (кружок справа служит для этой цели).
3.    Отмечаем Create Maps.
4.    Запускаем TLINE.

Режим TAG
1.    Указываем hashtag в поле для ввода.
2.    Указываем максимальное число получаемых записей.
3.    Запускаем TAG
В данном режиме карты недоступны.

Режим USER INFO
1.    Указываем имя пользователя в поле для ввода.
2.    Запускаем USER
В данном режиме карты недоступны.

Режим ZONE
1.    Указываем имя географической зоны в поле для ввода (RU, IT и др.).
2.    Указываем максимальное число получаемых записей Select number of tweets
3.    Отмечаем Create Maps.
4.    Запускаем ZONE

Примеры работы программы:

Вводим сокращение страны нашей страны – RU, запускаем ZONE, количество записей – по умолчанию:

geotweet-3

С первого раза программа вывела наших соседей. Попробуем изменить запрос на «Russia», смотрим результаты:

geotweet-4

Теперь попробуем изменить на более точные координаты: «Russia, Moscow», в результате отображаются пользователи, находящиеся в России:

geotweet-5

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

geotweet-6

Теперь мы можем посмотреть через TLINE динамику изменения координат и клиентов:

geotweet-7

А также посмотреть все точки на карте:

geotweet-8

Другой пример – у пользователя отключена геолокация на текущий момент:

geotweet-9

Но если посмотрим динамику, то увидим на фоне пустой геолокации пара записей с координатами:

geotweet-10

Вот те самые координаты, только на карте:

geotweet-11

Как можно заметить, данный инструмент позволяет быстро работать с определением местоположения сделанных записей в twitter.

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

Следует учесть, что данное приложение имеет аналогичные возможности и для instagram.

В заключении следует сказать, что направление программных средств автоматизации разведки, основанной на открытых данных,  постоянно развивается и появляются достаточно неплохие, заслуживающие внимание утилиты, которые могут дополнять имеющийся базовый пакет дистрибутива Kali Linux 2.0. и использоваться по своему назначению для ускорения выполнения задач.