Разведка сетевых ресурсов компании главным образом заключается в брутфорсе поддоменов с последующим ресолвом найденных сетевых блоков. Далее могут быть найдены новые домены 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. Поэтому было решено написать собственный инструмент, более того что реализуется это не так уж и сложно.
Инструмент был написан достаточно давно, так что использован python2.
Данный пакет содержит два инструмента:
geoip — выполнение различных запросов ip → geo, city → ip, country → ip, lat:long → ip и т.п.;
rwhois — выполнение различных запросов к whois базе (об этом во второй части статьи).
Итак, сперва нужно скачать geoip-базу:
К сожалению, начиная с 2020 года, база geoip больше не обновляется для публичного использования. Так что пришлось захардкодить ссылку на последний публичный снапшот.
Инструмент geoip имеет удобный синтаксис, который позволяет выполнять гибкие запросы к базе. Все запросы указываются через ключи, а то, что требуется вывести, в аргументах. Мы так же можем использовать подстановку с помощью символа «%» (SQL-синтаксис).
Например, для поиска информации по городу и диапазону IP-адресов, с выводом результата о блоках адресов, странах и городах:
Инструмент geoip имеет встроенную визуализацию, например, можно посмотреть расположение сетей какой-либо страны на карте:
Для поиска сетей мы так же можем указать произвольный регион (регионы) в виде круга или квадрата с указанием радиуса в км. Например:
При работе с инструментом мы так же можем использовать пайпы для взаимодействия со сторонними утилитами.
Посмотрим geoip-информацию о результатах выборки из shodan:
Ниже еще несколько примеров, не связанных напрямую с разведкой.
Распарсив логи apache, посмотрим, какие страны посещали сайт:
Или из каких городов был ресолв собственной dns-зоны:
Вернемся к разведке. Сканирование целого города – найдем все незащищенные mongo сервера в некотором городе:
Или даже сканирование целой страны – найдем незащищенные memcached сервера в некоторой стране:
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.
Аналогично, сперва нужно обновить базы:
Обновление информации по всем 5 континентам может занять длительное время. После можем посмотреть сколько IP-адресов в наших базах:
Можно так же обновить информацию только по указанному континенту:
Попробуем найти что-нибудь. Найдем IP-адреса по имени сети:
Так же не забываем искать по полю «descr»:
Или посмотрим, какие имена сетей есть в отдельно взятой стране:
Мы можем искать и по CIDR-диапазону:
geo2ip + reverse whois
Наконец мы можем использовать geoip и rwhois вместе через пайп.
Попробуем найти все сети в некотором географическом регионе, где имена сетей содержат «telecom»:
И последний пример — показать на карте, где находятся сети с определенным именем:
Заключение
Мы использовали ещё два инструмента, которые можно добавить к RECON арсеналу. Эти инструменты так же могут быть полезны и в других областях, не связанных с разведкой - для анализа и визуализации логов, дампов трафика и т. д.
pip2 install georipe
Автор: Специалист Уральского центра систем безопасности