Разведка сетевых ресурсов компании главным образом заключается в брутфорсе поддоменов с последующим ресолвом найденных сетевых блоков. Далее могут быть найдены новые домены 2 уровня и процедура повторяется снова. Это позволяет найти новые IP-адреса на каждой итерации.

Этот метод, пожалуй, самый эффективный. Однако встречались такие ситуации, когда целая подсеть /24 оставалась не найденной.

В наши дни появилось еще одно мощное средство — passive dns, которое позволяет сделать то же самое что и классический DNS-ресолв, но используя специальный API. Это может быть, к примеру, «virustotal» или «passive-total». Эти сервисы записывают DNS запросы и ответы, которые собираются с популярных DNS-серверов. Преимущество этого подхода в том, что нам не нужен брутфорс. Мы просто указываем IP-адрес и получаем все известные DNS записи. Или, наоборот, указывая DNS мы получаем все IP-адреса, которые ассоциированы с данным именем. У данного подхода есть неоспоримое преимущество — мы можем найти старые сервера сайтов, которые ресолвились раньше. Ведь в конце концов старые сайты наиболее вероятно будут содержать уязвимости.

Несмотря на описанные выше техники существует еще несколько чуть менее популярных, но всё же дающих результаты. В данной статье мы рассмотрим ещё две методики разведки — поиск IP-адресов по географическим данным (geo2ip) и нахождение IP-адресов по имени компании (reverse-whois).

Geo2ip

Что такое geoip, думаю, знают многие из нас. Он используется достаточно часто как разработчиками, так и администраторами. Однако geoip используется главным образом в направлении ip > geo. В нашем же случае это не так интересно. Забавно, но перед тем, как разработать собственное решение, не было найдено ни одной библиотеки, позволяющей делать запросы в обратном направлении geo > ip. Поэтому было решено написать собственный инструмент, более того что реализуется это не так уж и сложно.

Рисунок 1. Установка
Рисунок 1. Установка

Инструмент был написан достаточно давно, так что использован python2.

Данный пакет содержит два инструмента:

  1. geoip — выполнение различных запросов ip > geo, city > ip, country > ip, lat:long > ip и т.п.;

  2. rwhois — выполнение различных запросов к whois базе (об этом во второй части статьи).

Итак, сперва нужно скачать geoip-базу:

Рисунок 2. Обновление geoip-базы и просмотр количества сетевых блоков в ней
Рисунок 2. Обновление geoip-базы и просмотр количества сетевых блоков в ней

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

Инструмент geoip имеет удобный синтаксис, который позволяет выполнять гибкие запросы к базе. Все запросы указываются через ключи, а то, что требуется вывести, в аргументах. Мы так же можем использовать подстановку с помощью символа «%» (SQL-синтаксис).

Например, для поиска информации по городу и диапазону IP-адресов, с выводом результата о блоках адресов, странах и городах:

Рисунок 3. Поиск сетей по CIDR и городу
Рисунок 3. Поиск сетей по CIDR и городу

Инструмент geoip имеет встроенную визуализацию, например, можно посмотреть расположение сетей какой-либо страны на карте:

Рисунок 4. Получение всех сетей какой-либо страны
Рисунок 4. Получение всех сетей какой-либо страны
Рисунок 5. Просмотр расположения сетей на карте
Рисунок 5. Просмотр расположения сетей на карте

Для поиска сетей мы так же можем указать произвольный регион (регионы) в виде круга или квадрата с указанием радиуса в км. Например:

Рисунок 6. Поиск всех сетей по географическим координатам
Рисунок 6. Поиск всех сетей по географическим координатам
Рисунок 7. Визуализация с использованием Google Earth
Рисунок 7. Визуализация с использованием Google Earth

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

Посмотрим geoip-информацию о результатах выборки из shodan:

Рисунок 8. Использование geoip вместе с shodan
Рисунок 8. Использование geoip вместе с shodan

Ниже еще несколько примеров, не связанных напрямую с разведкой.

Распарсив логи apache, посмотрим, какие страны посещали сайт:

Рисунок 9. Анализ логов Apache с geoip
Рисунок 9. Анализ логов Apache с geoip

Или из каких городов был ресолв собственной dns-зоны:

Рисунок 10. Анализ bind-логов с помощью geoip
Рисунок 10. Анализ bind-логов с помощью geoip

Вернемся к разведке. Сканирование целого города – найдем все незащищенные mongo сервера в некотором городе:

Рисунок 11. Сканирование какого-либо города с помощью geoip
Рисунок 11. Сканирование какого-либо города с помощью geoip

Или даже сканирование целой страны – найдем незащищенные memcached сервера в некоторой стране:

Рисунок 12. Сканирование всей страны с помощью geoip
Рисунок 12. Сканирование всей страны с помощью geoip

Reverse whois

Whois это протокол прикладного уровня, работающий на 43/tcp порту. Его главная цель – получение информации о блоках IP-адресов. Эта информация запрашивается с серверов регистраторов. Всего существует 5 регистраторов, расположенных на 5 соответствующих континентах:

  • Европа (RIPE);

  • Азия и Океания (APNIC);

  • Африка (AFRINIC);

  • Северная Америка (ARIN);

  • Южная Америка (LACNIC).

Доступ к whois производится с помощью одноименного инструмента:

whois 8.8.8.8

Или вручную, через telnet:

telnet whois.ripe.net 43
1.2.3.4

Тут мы снова опираемся главным образом на IP-адреса. Однако все же мы можем искать информацию по некоторым полям:

whois -h whois.ripe.net -T person admin@somecompany.com

или

whois -h whois.ripe.net -- '-i mnt-by RIPE-NCC-MNT'

Например, для RIPE возможно искать по следующим полям:

  • as-set;

  • aut-num;

  • domain;

  • inetnum;

  • organisation;

  • person;

  • role;

  • route.

К сожалению, мы не можем искать по самым интересным полям - «netname» и «descr», которые содержат название сети. Так же при таком поиске требуется полное совпадение. Иными словами, мы не можем искать с подстановкой «-T person *@somecompany.com».

Существует несколько web-сервисов, предоставляющих более гибкий поиск, например https://apps.db.ripe.net/db-web-ui/#/fulltextsearch. Это позволяет использовать полнотекстовый поиск к RIPE базе.

Ещё существуют ежедневные дампы whois-баз всех регистраторов:

RIPE: ftp://ftp.ripe.net/ripe/dbase/ripe.db.gz
APNIC: https://ftp.apnic.net/apnic/whois/apnic.db.inetnum.gz
AFRINIC: https://ftp.afrinic.net/dbase/afrinic.db.gz
LACNIC: https://ftp.lacnic.net/lacnic/dbase/lacnic.db.gz
ARIN: https://ftp.arin.net/pub/rr/arin.db.gz

Это текстовые файлы, а значит мы можем применить к ним всю мощь grep:

grep netname: *company* ripe.db

Однако размер базы ripe.db (Европа) более чем 5 GB. Это делает поиск по этому файлу не таким быстрым как хотелось бы. Более того, если я хочу найти все имена сетей по CIDR (например, 77.77.0.0/16), то grep тут уже не поможет.

И тут в игру вступает второй инструмент – rwhois, который работает с данными файлами и имеет идентичный синтаксис как у geoip.

Аналогично, сперва нужно обновить базы:

Рисунок 13. Обновление whois-баз
Рисунок 13. Обновление whois-баз

Обновление информации по всем 5 континентам может занять длительное время. После можем посмотреть сколько IP-адресов в наших базах:

Рисунок 14. Количество IP-адресов по базам регистраторов
Рисунок 14. Количество IP-адресов по базам регистраторов

Можно так же обновить информацию только по указанному континенту:

Рисунок 15. Обновление whois-базы только для Европы
Рисунок 15. Обновление whois-базы только для Европы

Попробуем найти что-нибудь. Найдем IP-адреса по имени сети:

Рисунок 16. Поиск блоков IP-адресов по имени сети
Рисунок 16. Поиск блоков IP-адресов по имени сети

Так же не забываем искать по полю «descr»:

Рисунок 17. Поиск IP-адресов по полю описания сети и одновременно по стране
Рисунок 17. Поиск IP-адресов по полю описания сети и одновременно по стране

Или посмотрим, какие имена сетей есть в отдельно взятой стране:

Рисунок 18. Сети в отдельно взятой стране
Рисунок 18. Сети в отдельно взятой стране

Мы можем искать и по CIDR-диапазону:

Рисунок 19. Поиск сетей по CIDR
Рисунок 19. Поиск сетей по CIDR

geo2ip + reverse whois

Наконец мы можем использовать geoip и rwhois вместе через пайп.

Попробуем найти все сети в некотором географическом регионе, где имена сетей содержат «telecom»:

Рисунок 20. Поиск telecom-сетей в некотором географическом сегменте
Рисунок 20. Поиск telecom-сетей в некотором географическом сегменте

И последний пример — показать на карте, где находятся сети с определенным именем:

Рисунок 21. Поиск сетей на карте по имени
Рисунок 21. Поиск сетей на карте по имени
Рисунок 22. Просмотр сетей, найденных по имени на карте
Рисунок 22. Просмотр сетей, найденных по имени на карте

Заключение

Мы использовали ещё два инструмента, которые можно добавить к RECON арсеналу. Эти инструменты так же могут быть полезны и в других областях, не связанных с разведкой - для анализа и визуализации логов, дампов трафика и т. д.

pip2 install georipe

Автор: Специалист Уральского центра систем безопасности