Футпринтинг – в поисках ваших целей...

Футпринтинг – в поисках ваших целей...

Нас попросили написать статью для журнала PenTest, и мы решили создать вводную статью о футпринтинге.

  Автор: willem

Нас попросили написать статью для журнала PenTest, и мы решили создать вводную статью о футпринтинге1. Здесь мы повторно опубликовали эту статью для интересующихся данным вопросом.

Сетевой футпринтинг является, возможно, первым активным шагом на этапе разведки безопасности внешней сети. Этот этап часто высоко автоматизирован и не требует большого взаимодействия с пользователем, поскольку техника кажется на первый взгляд легко применимой в общем виде к широкому кругу целей. Для меня, аналитика информационной безопасности, футпринтинг является одной из наиболее приятных частей моей работы, поскольку в ходе него я пытаюсь превзойти автоматику; вся суть заключается в поиске одной цели, о которой все забыли или даже не знали о ее существовании, о том старом веб-сервере IIS 5, который уже не используется, но все еще работает.

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

Подход

Для большинства вещей в жизни можно найти правильный подход, который требует меньше времени и приносит лучшие результаты. Следуя определенной методологии, вы сделаете свой футпринтинг более воспроизводимым, а значит и более надежным. Базовая методология футпринтинга включает разведку общих данных о цели, получение DNS-информации, использование различных информационных сервисов (например, whois, Robtex, routes), получение регистрационной информации сетевых адресов и активные шаги вроде составления списка хостов посредством SSL.

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

Узнайте вашу цель

Первое, что нужно сделать – ознакомиться с целевой организацией. Нужно выяснить, что она делает, для кого, чьими услугами пользуется, откуда она осуществляет деятельность (как в Интернет, так и в реальном мире), в какую общественную и благотворительную работу вовлечена. Это даст вам догадку относительно того, с каким типом сети/инфраструктуры вам предстоит столкнуться. Чтение публичных сообщений, финансовых отчетов и любых других документов, опубликованных организацией, тоже может дать интересные результаты. Любая организация, которая должна публиковать регулярные отчеты (например, компания, зарегистрированная на бирже), предоставляет кладезь информации для понимания ключевых подразделений, корпоративной иерархии и сфер своей деятельности. Все это пригождается при выборе целей.

Разгребание мусора (dumpster diving), если вы готовы на такое и имеете физический доступ к цели, означает просеивание мусора в поисках полезной информации, однако в настоящее время гораздо больше можно получить из социальных медиа. Сайты вроде LinkedIn, Facebook и Twitter могут дать вам списки сотрудников и проектов, в которые вовлечена организация, и даже, быть может, информацию об используемых продуктах сторонних фирм и поставщиках.

Следует следить и за данными о прежних нарушениях безопасности или потерях удостоверяющей информации (credentials). Для хакеров обычным делом стало отправлять информацию о нарушениях безопасности на сайты вроде pastebin.com. Чаще всего это удостоверяющая информация в форме корпоративных писем или повторно использованные пароли из базы данных, скачанной со взломанного сайта. Кроме того, разработчики используют сайты вроде Pastebin, чтобы делиться кодом, идеями и патчами и, если вам повезет, вы найдете маленький но полезный фрагмент кода, валяющийся на Pastebin.

DNS

"Domain Name System (DNS) — это иерархическая распределенная система имен для компьютеров, сервисов и прочих ресурсов, подключенных к Интернет или частной сети" — WikiPedia

Коротко говоря, DNS используется для преобразования компьютерных имен в соответствующие числовые адреса.

Начните с поиска и составления списка всех доменов, владельцем которых является ваша цель. Здесь и пригодится информация, собранная на начальном этапе разведки, поскольку сайты цели вероятно указывают на внешние, представляющие интерес домены. Эта же информация позволяет строить догадки об используемых доменных именах. Имея на руках список обнаруженных доменов, переходите к процедуре TLD-расширения (Top level domain или домены верхнего уровня). TLD – домены наиболее высокого уровня в DNS; .com, .net, .za, .mobi – все это примеры TLD (Mozilla Organization поддерживает список TLD по адресу https://wiki.mozilla.org/TLD_List).

На следующем этапе мы берем обнаруженный домен и проверяем, существуют ли другие домены с тем же именем, но с отличным TLD. Например, если у цели есть домен victim.com, проверьте, существуют ли домены victim.net, victim.info, victim.org и т. д., а если они существуют, проверьте их принадлежность к целевой организации. Для установления факта существования домена, нужно исследовать DNS-запись SOA (start of authority) данного домена. Использование команд вроде nslookup под Microsoft Windows или dig/host под большинством систем семейства *nix позволяют получить записи SOA.

В случае dig, команда выглядит так: "dig zonetransfer.me soa".

Рисунок 1: использование команды dig с целью получения записи SOA для домена

Если путем проверки записи SOA существование домена подтвердилось, следующим шагом нужно выяснить, кому этот домен принадлежит. Здесь слово предоставляется сервису whois. 'Whois' – это просто реестр, содержащий информацию о владельце домена. Отметим, что он не является абсолютно надежным и безусловно не является согласованным. Следующий, очень простой запрос "whois zonetransfer.me" даст нам информацию о владельце домена "zonetransfer.me".

Рисунок 2: использование whois для получения информации о владельце домена

После нахождения доменных имен, их прогона через процедуру TLD-расширения и проверки whois информации пришло время найти хосты. Сначала нам нужно получить NS-записи (Name Server или сервер имен) домена. Команда "dig zonetransfer.me ns" возвращает список всех серверов имен, отвечающих за этот домен. Во многих случаях серверы имен не являются частью сети цели, но они найдут применение на следующем шаге.

DNS дает много интересной информации, но стандартные методы извлечения информации с чужих серверов по существу основаны на принципе грубой силы (полного перебора). Тем не менее, с DNS возможен трюк, называемый "zone transfer" (это тип транзакции), в ходе которого может быть получена вся DNS-информация о зоне, если сервер это позволяет. Когда "zone transfer" включен, он крайне полезен, поскольку избавляет от нужды гадать или осуществлять перебор; к сожалению, он обычно отключен. Однако, учитывая полезность zone transfer, всегда имеет смысл протестировать возможность его выполнения. Выполнять zone transfer следует для всех серверов имен, указанных в NS-записях домена, поскольку, хотя данные, содержащиеся в каждом из серверов, должны быть одинаковы, настройки безопасности могут различаться. С помощью dig попытаться осуществить zone transfer можно командой следующего вида: "dig axfr @ns12.zoneedit.com zonetransfer.me".

Рисунок 3: осуществление zone transfer с помощью dig

Как уже упоминалось, возможность выполнения zone transfer является скорее исключением. Когда нам не удается загрузить файл зоны, может сработать еще пара трюков. Один состоит в переборе или догадке относительно имен хостов: с помощью длинного списка распространенных имен можно протестировать наличие имен вроде "fw.victim.com", "intranet.victim.com", "mail.victim.com" и т. д. Имена могут быть распространенными именами хостов, генерированными из чисел или по некоторому алгоритму, либо из набора связанных между собой имен вроде символов из книжной серии. При выполнении перебора DNS убедитесь, что вы проверили следующие записи: CNAME, A и AAAA. Это легко сделать с помощью утилиты вроде dig. "dig www.google.com a" возвращает DNS-конфигурацию для www.google.com. Отметим, что имя хоста www.google.com на самом деле имеет несколько DNS-записей: одну типа CNAME и несколько типа A. При взгляде на список IP-адресов очевидно, что имя соответствует нескольким хостам (точнее двум, как показано на рисунке ниже).

Рисунок 4: получение DNS-записи для хоста с помощью dig

Кажется, что эти действия выполняются легко и быстро (так оно и есть), но если нам нужно перебрать или угадать много имен хостов, это может занять слишком большое время. Конечно, довольно просто загнать эти команды в скрипт для автоматизации процесса, однако существуют готовые инструменты, предназначенные для этих целей. Один из наиболее популярных, Fierce, это скрипт на Перл, написанный Rsnake (http://ha.ckers.org/fierce/), который легок в использовании и обладает множеством полезных функций. Кроме того, существуют утилиты вроде Paterva's Maltego и SensePost's Yeti (написана мной), которые предоставляют графические инструменты для данной цели.

Если нам посчастливилось иметь список IP-адресов или блоков адресов цели, второй DNS-трюк заключается в преобразовании этих адресов в имена хостов путем обратных DNS запросов, получающих содержимое PTR-записей. Этот трюк полезен, поскольку в IPv4 обратные записи легко перебирать. Имейте в виду, что DNS не требует наличие PTR (обратных) записей или того, чтобы такие записи соответствовали содержимому записей прямых зон.

Еще раз используем dig для проверки "dig 104.66.194.173.in-addr.arpa ptr". Хотя это тоже просто автоматизировать, упомянутые выше инструменты также поддерживают PTR записи.

Поисковые системы

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

Кроме обычного поиска цели, как вы делали это на начальном этапе, можно использовать данные, полученные в ходе работы с DNS, чтобы попытаться получить дальнейшую информацию через поисковые системы. Bing от Microsoft предоставляет нам два действительно полезных поисковых оператора: "ip:" и "site:". При использовании оператора "ip:" Bing вернет список проиндексированных им имен хостов, которые разрешаются в указанный ip адрес. При использовании оператора "site:" и указании доменного имени, Bing вернет список имен хостов, которые были проиндексированы системой и принадлежат к данному домену. Это быстро и просто. Bing также предоставляет вам очень простой и свободный API, который можно использовать для автоматизации поисков.

Отображение адресов

Вся эта суета вокруг DNS важна, но лишь в той степени, в какой она приведет нас к адресам. На следующем шаге нужно выяснить, в каких областях пространства IP-адресов существует цель. К счастью, есть полезные инструменты и ресурсы, помогающие обнаружить эти области путем автоматизации сочетания техник вроде запросов whois, traceroute и калькуляторов блоков адресов. В предыдущем разделе утилита whois была использована для получения информации о владельце домена. Ее же можно использовать для получения информации о том, кому назначен определенный IP-адрес. Возьмем для примера www.facebook.com. Это доменное имя разрешается в несколько IP-адресов, один из которых 69.63.190.10. Команда "whois 69.63.190.10" производит следующий вывод.

Рисунок 5: получение блока адресов и владельца с помощью whois

Из вывода whois мы получили действительно полезную информацию: диапазон адресов 69.63.176.0-69.63.190.255 и его владельца, а именно Facebook, Inc. В данном случае нам повезло и блок зарегистрирован на facebook, но часто вы получите лишь поставщика сетевых сервисов, которому выделен соответствующий блок адресов. Тогда вам придется опрашивать поставщика сервисов, чтобы получить больше информации о конкретном блоке. Интернет-ресурсы здесь также могут оказаться полезными. Например, ARIN (American Registry for Internet Numbers) или любой из прочих региональных реестров (RIPE, AfriNIC, APNIC и LACNIC) предоставляет интерфейс обратного поиска whois, где можно искать имена организаций и прочие вещи, используя даже поиск по маске. Возвращаясь к Facebook, мы пробуем найти информацию по запросу "facebook" через интерфейс обратного поиска whois и получаем список пяти дополнительных диапазонов сетевых адресов.

Рисунок 6: результаты поиска для обратного whois-запроса на сайте ARIN

SSL-сертификаты

Наконец, рассмотрим SSL. SSL, возможно, в большей степени ассоциируется с "защитой" от мерзких прослушиваний и атак типа человек-посередине, но он также полезен для футпринтинга. Каким образом? На самом деле все просто: при вынесении решения о валидности SSL-сертификата браузеры делают проверки безопасности, в том числе, совпадает ли значение поля Common Name сертификата с DNS-именем запрошенного хоста. Как это поможет? Пусть на одном из этапов футпринтинга мы получили список IP-адресов, следующим шагом будет выполнение обратных DNS-запросов для всех этих адресов. Однако, если не существует соответствующих обратных записей и у Bing не нашлось записи об IP-адресе, требуется применить немного смекалки. Если на данном адресе запущен HTTPS-сайт, можно перейти в браузере по этому IP-адресу и, получив ошибку о некорректном сертификате, узнать "настоящее" имя хоста.

Рисунок 7: Firefox сообщает значение поля common name, содержащегося в SSL-сертификате хоста

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

Заключение

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

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


1 (прим. пер.) Футпринтинг (Footprinting) - процесс получения футпринта: карты компьютерной сети, содержащей список хостов, их доменные имена, адреса, открытые порты, используемые ОС и т. п.  

Ваша приватность умирает красиво, но мы можем спасти её.

Присоединяйтесь к нам!