Когда мне ставят задачу на внешний пентест, первое, что я делаю - закрываю Burp Suite. Серьёзно. Следующие два-три дня я не отправлю ни одного пакета на цель. Вместо этого строю карту: домены, поддомены, IP-блоки, сертификаты, email-адреса, имена сотрудников, технологический стек, забытые dev-серверы, публичные репозитории. Всё это - разведка по открытым источникам, она же OSINT.
По моему опыту, фаза разведки съедает 30–40% времени проекта, но определяет 70–80% его результата. Пентестер, который потратил на recon полчаса и сразу полез сканировать, найдёт типовые дыры из OWASP Top 10. Пентестер, который две недели копал данные, найдёт забытый Jenkins на поддомене
ci-old.target.com с дефолтными кредами - и получит RCE без единого эксплойта.Здесь я покажу рабочий процесс пассивной разведки цели: какие инструменты для пентеста использую, в каком порядке, почему именно так, и как выход одного инструмента определяет выбор следующего. Не список утилит с описанием ключей - а реальный pipeline сбора информации о цели, который я запускаю на каждом проекте.
Разведка через призму MITRE ATT&CK: зачем пентестеру фреймворк
Прежде чем открывать терминал, стоит разобраться, что именно мы делаем в терминах adversary emulation. Каждое действие на фазе recon маппится на конкретные техники MITRE ATT&CK из тактики Reconnaissance. Это не академическое упражнение - маппинг помогает структурировать работу и ничего не забыть.Мой типичный recon-процесс в разрезе ATT&CK:
| Что делаю | Техника ATT&CK | ID |
|---|---|---|
| Ищу домены, поддомены, IP-блоки в Shodan/Censys | Search Open Technical Databases | T1596 |
| Смотрю профили сотрудников в LinkedIn, GitHub | Search Open Websites/Domains | T1593 |
| Собираю email-адреса через theHarvester | Gather Victim Identity Information | T1589 |
| Определяю ASN, BGP, сетевые блоки | Gather Victim Network Information | T1590 |
| Анализирую вакансии для определения стека | Gather Victim Org Information | T1591 |
| Фингерпринчу веб-серверы, CMS, фреймворки | Gather Victim Host Information | T1592 |
| Сканирую порты через nmap (активная фаза) | Active Scanning | T1595 |
Обратите внимание: T1595 (Active Scanning, Reconnaissance) - это уже граница между пассивным и активным recon. Всё, что выше - не генерирует трафика к цели. Nmap и подобные инструменты оставляют следы в логах IDS/IPS. При внешнем сканировании портов это T1595.001 (Scanning IP Blocks) или T1595.002 (Vulnerability Scanning) из тактики Reconnaissance. Техника T1046 (Network Service Discovery) относится к тактике Discovery и описывает обнаружение сервисов после получения доступа к среде. Ключевое различие между T1595 и T1046 - тактика и фаза атаки (Reconnaissance vs Discovery), а не только физическое расположение атакующего. В рамках согласованного пентеста это допустимо, но порядок имеет значение: сначала пассивный сбор информации о цели, потом активное сканирование по уже сформированному списку IP и портов.
Пассивная разведка инфраструктуры: фундамент без единого пакета
Пассивная разведка цели - основной рабочий инструмент на первые дни проекта. Никакого трафика к целевой инфраструктуре. Все данные берутся из третьих источников: поисковые движки по устройствам, DNS-агрегаторы,
Ссылка скрыта от гостей
, кэши поисковых систем.WHOIS, DNS и Certificate Transparency - три кита начального recon
Каждый проект я начинаю одинаково. Получил имя компании и основной домен - запускаю три параллельных процесса.Шаг 1: WHOIS и обратный WHOIS. Классический WHOIS даёт registrant, NS-серверы и даты. Но настоящая ценность - обратный WHOIS: поиск всех доменов, зарегистрированных на ту же организацию или email. SecurityTrails API позволяет сделать это одним HTTP-запросом:
Bash:
# Прямой WHOIS
whois target.com
# Связанные домены по инфраструктуре (общие NS, MX, IP) через SecurityTrails API
curl "https://api.securitytrails.com/v1/domain/target.com/associated" \
-H "APIKEY: YOUR_KEY"
# Обратный WHOIS по email/организации - через POST /v1/domains/list
curl -X POST "https://api.securitytrails.com/v1/domains/list" \
-H "APIKEY: YOUR_KEY" -H "Content-Type: application/json" \
-d '{"filter":{"whois_email":"admin@target.com"}}'
/v1/domains/list с POST-запросом. Однажды через обратный WHOIS я раскопал домен targetname-dev.io, зарегистрированный на тот же email - на нём крутился staging-сервер без аутентификации. Просто подарок.Шаг 2: DNS-разведка. Перечисление DNS-записей целевого домена и всех найденных связанных доменов:
Bash:
# A, AAAA, MX, NS, TXT, SOA записи (ANY-запросы deprecated по RFC 8482,
# большинство DNS-серверов возвращают минимальный ответ - запрашиваем по отдельности)
for type in A AAAA MX NS TXT SOA; do dig target.com "$type" +noall +answer; done
# MX - покажет почтовый сервис (Google Workspace, Exchange Online, свой сервер)
dig target.com MX +short
# TXT - часто содержит SPF, DKIM, верификационные токены сервисов
dig target.com TXT +short
# Попытка зонального трансфера (работает редко, но если работает - джекпот)
dig axfr target.com @ns1.target.com
Шаг 3: Certificate Transparency. Логи CT - публичные базы всех выпущенных SSL-сертификатов. Через них находятся поддомены, которые не видны ни в DNS-брутфорсе, ни в поисковиках:
Bash:
# Через crt.sh (бесплатный CT-агрегатор)
curl -s "https://crt.sh/?q=%.target.com&output=json" | \
jq -r '.[].name_value' | sort -u
jira.internal.target.com, vpn-test.target.com, api-staging.target.com. Даже если эти поддомены не резолвятся публично прямо сейчас, они указывают на структуру инфраструктуры и именование. А именование - это паттерн, по которому можно угадывать другие хосты.Shodan vs Censys: когда и что использовать для пентеста
Оба инструмента - поисковики по устройствам и сервисам в интернете, но работают по-разному, и это определяет, когда какой запускать.Shodan индексирует баннеры сервисов: HTTP-заголовки, SSH-версии, баннеры FTP, SNMP community strings. Его сила - поиск по конкретным технологиям и ошибкам конфигурации.
Bash:
# Все хосты организации по ASN
shodan search "asn:AS12345"
# Все хосты с SSL-сертификатом целевого домена
shodan search "ssl.cert.subject.cn:target.com"
# Устройства с конкретным продуктом (например, забытый Jenkins)
shodan search "http.title:\"Dashboard [Jenkins]\" org:\"Target LLC\""
# Хосты с дефолтными страницами Apache/Nginx
shodan search "http.title:\"Apache2 Ubuntu Default Page\" org:\"Target LLC\""
Bash:
# Поиск по имени организации в сертификатах
censys search "services.tls.certificates.leaf.subject.organization:Target"
# Все хосты, обслуживающие сертификат с определённым CN
censys search "services.tls.certificates.leaf.subject.common_name:*.target.com"
Одна из самых частых находок: через Shodan обнаруживается IP с открытым портом 8443, на котором висит админка, а через Censys видно, что на этом же IP полгода назад был сертификат для
admin.target.com - поддомен, который уже не резолвится, но сервис всё ещё работает. Призрак, который никто не отключил.Сбор информации о людях: от email-адресов до графа социальных связей
Инфраструктура - половина картины. Вторая половина - люди. Email-адреса сотрудников нужны для моделирования фишинговых атак, имена - для подбора логинов, должности - чтобы понять, кто имеет привилегированный доступ.theHarvester: быстрый сбор email и поддоменов
theHarvester входит в Kali Linux и агрегирует данные из поисковых систем, PGP-серверов и API различных сервисов. Запускаю его одним из первых:
Bash:
# Сбор email, поддоменов, IP из множества источников
theHarvester -d target.com -b all -l 500
# Конкретные источники, которые дают лучшие результаты по email
theHarvester -d target.com -b linkedin,google,bing,crtsh -l 300
LinkedIn как источник OSINT для разведки персонала
LinkedIn - критически важный источник для Gather Victim Identity Information (T1589, Reconnaissance) и Gather Victim Org Information (T1591, Reconnaissance). Не для «взлома», а для понимания:- Кто работает в ИТ и ИБ - имена, должности, стаж. Сисадмин, работающий три месяца - совсем не то же самое, что сисадмин с десятилетним стажем на этом месте. У первого в инфраструктуре наверняка валяются чужие скелеты.
- Технологический стек - в профилях и вакансиях фигурируют конкретные технологии: «Опыт с Kubernetes, AWS EKS, Terraform» - значит, инфраструктура в AWS, оркестрация через K8s. Вакансия сама по себе - разведданные.
- Бывшие сотрудники - люди, которые ушли из компании, но их учётки могли не отключить. Или они рассказывают о внутренней инфраструктуре в публичных постах (и такое бывает чаще, чем хотелось бы).
Построение графа связей в Maltego: от домена к точке входа
Все перечисленные выше инструменты дают разрозненные данные: списки IP-адресов, поддоменов, email-ов, имён. Maltego превращает этот хаос в граф связей - визуальную карту, на которой видны отношения между сущностями.Практический workflow построения графа
Мой типичный процесс работы с Maltego на пентесте:Фаза 1: Seed-сущности. Создаю новый граф, добавляю начальные сущности:
- Domain:
target.com - Company:
Target LLC - Email (если уже известен):
admin@target.com
Domain → DNS Name (All)- получаю все DNS-записиDomain → To Domains (WHOIS)- связанные домены через WHOISDNS Name → To IP Address- резолвинг всех найденных поддоменовIP Address → To Netblock- определение сетевых блоков (ASN)Domain → To Email Addresses- сбор email с публичных источниковEmail → To Person- связь email с конкретными людьмиPerson → To Social Media Profiles- нахождение профилей этих людей
- Кластер IP-адресов у одного провайдера - вероятно, основная инфраструктура
- Отдельные IP у другого провайдера - возможно, legacy-системы или проект отдельной команды
- Email, связанный с несколькими доменами - ключевой технический сотрудник
- Поддомен, указывающий на IP в совершенно другом ASN - может быть SaaS-сервис или забытый сервер у предыдущего хостера
Пример: как граф выявил забытый сервер
На одном проекте граф в Maltego показал, что поддоменlegacy-api.target.com резолвится на IP-адрес, не принадлежащий основному ASN компании. Трансформ по этому IP обнаружил, что на нём же висит ещё один домен - test-target.example-hosting.com. Сервер оказался на дешёвом VPS-хостинге, без обновлений уже два года. Через Shodan на нём нашлись открытые порты 22 (SSH с устаревшим OpenSSH) и 3306 (MySQL, доступный извне). Классика: основной периметр - как форт, а про dev-сервер тупо забыли.Автоматизация OSINT: Recon-ng, SpiderFoot и amass
Когда целей много или scope обширный (несколько доменов, десятки ASN), руками не масштабируешься. Здесь вступают инструменты автоматизации.amass: король перечисления поддоменов
OWASP Amass - самый зубастый инструмент для обнаружения attack surface. Комбинирует пассивные и активные техники:
Bash:
# Пассивный режим - без трафика к цели
amass enum -passive -d target.com -o amass_passive.txt
# С использованием API-ключей для расширенного сбора
amass enum -passive -d target.com -config amass_config.ini
# Активный режим (с DNS-резолвингом и брутфорсом)
amass enum -active -d target.com -brute -w /usr/share/wordlists/dns.txt -o amass_active.txt
# Визуализация в виде графа (Amass v3.x; в v4+ подкоманда viz удалена)
amass viz -d3 -d target.com
amass_config.ini (в Amass v3.x; в v4+ используется формат YAML) - место, куда вписываются API-ключи от Shodan, Censys, SecurityTrails, VirusTotal, PassiveTotal и десятков других сервисов. С полным набором ключей amass находит в 3–5 раз больше поддоменов, чем без них. Разница колоссальная - без ключей он, считай, работает вполсилы.Примечание: приведённые примеры используют синтаксис Amass v3.x. В OWASP Amass v4+ архитектура переработана: конфигурация через YAML, изменена структура подкоманд и флагов. Проверяйте актуальный синтаксис в документации.
Recon-ng: фреймворк для структурированного recon
Recon-ng работает по модели Metasploit: модули, workspace-ы, база данных результатов. Его главное преимущество - все данные сохраняются в единую БД, которую можно запрашивать и экспортировать.
Bash:
recon-ng
# Создаём workspace для проекта
workspaces create target_pentest
# Загружаем нужные модули
marketplace install recon/domains-hosts/certificate_transparency
marketplace install recon/hosts-hosts/resolve
marketplace install recon/domains-contacts/whois_pocs
# Добавляем начальный домен
db insert domains target.com
# Запускаем модуль CT для поиска поддоменов
modules load recon/domains-hosts/certificate_transparency
run
# Затем резолвим найденные хосты
modules load recon/hosts-hosts/resolve
run
# Экспорт результатов
modules load reporting/html
options set FILENAME /tmp/target_recon.html
run
SpiderFoot: автоматизация для ленивых (и умных)
SpiderFoot автоматизирует более 200 типов запросов из одного интерфейса. Запускается одной командой и методично обходит все доступные источники:
Bash:
# Запуск веб-интерфейса
spiderfoot -l 127.0.0.1:5001
# Или CLI-режим для конкретного домена
spiderfoot -s target.com -t DOMAIN_NAME -m sfp_dnsresolve,sfp_shodan,sfp_crt
Pipeline разведки: как связать инструменты между собой
Вот где начинается настоящая OSINT автоматизация. Каждый инструмент производит выход, который становится входом следующего. На реальном проекте мой pipeline выглядит так:Этап 1: amass (пассивный) производит список поддоменов → сохраняю в
subdomains.txtЭтап 2: Резолвинг всех поддоменов в IP-адреса:
Bash:
# Вариант 1: быстрый массовый резолвинг через puredns
puredns resolve subdomains.txt -r resolvers.txt -w resolved.txt
# Вариант 2: через dig с параллелизацией и фильтрацией CNAME
# ВАЖНО: убедитесь, что subdomains.txt содержит только валидные доменные имена
# (без спецсимволов), иначе возможна command injection через sh -c
cat subdomains.txt | xargs -P 50 -I{} sh -c '
ip=$(dig +short "{}" A | grep "^[0-9]" | head -1)
[ -n "$ip" ] && echo "{},${ip}"
' > resolved.csv
Bash:
cat resolved.csv | cut -d',' -f2 | sort -u | while read ip; do
shodan host "$ip" 2>/dev/null
done > shodan_results.txt
Bash:
theHarvester -d target.com -b all -l 500 -f harvester_output
Этап 6: Результаты фильтрую по приоритету:
- Критический: открытые панели управления (Jenkins, Kibana, phpMyAdmin), устаревшее ПО
- Высокий: email-адреса ИТ-персонала, поддомены с dev/staging/test в имени
- Средний: все остальные поддомены, IP-блоки, технологический стек
От разведки к атаке: как результаты footprinting определяют вектор
Разведка ради разведки бессмысленна. Каждый найденный артефакт должен превращаться в конкретное действие:| Находка при footprinting | Следующий шаг | Потенциальный результат |
|---|---|---|
Поддомен staging.target.com с Apache 2.4.29 | Проверка CVE для этой версии, активное сканирование портов (T1595) | Эксплуатация известной уязвимости |
Email формата i.ivanov@target.com + 15 имён из LinkedIn | Генерация полного списка email, проверка через HIBP | Credential stuffing, фишинг |
| Jenkins на порту 8080 без аутентификации (Shodan) | Проверка доступа к Script Console | RCE через Groovy-скрипт |
TXT-запись с _amazonses.target.com | Поиск S3-бакетов по паттерну target-* | Доступ к данным в криво настроенном S3 |
Сертификат для vpn.target.com в CT-логах | Определение VPN-решения, поиск дефолтных учёток | Доступ к внутренней сети |
GitHub-репозиторий сотрудника с упоминанием target | Поиск захардкоженных секретов через git log | API-ключи, токены, пароли |
Без фазы разведки я бы сканировал основной домен и упёрся в закрытый WAF. С полной картой attack surface - нашёл забытый staging без WAF, Jenkins без аутентификации и S3-бакет с бэкапами базы данных. Почувствуйте разницу.
Юридические границы пассивного recon
Пассивная разведка по открытым источникам - это работа с публичными данными. Вы не отправляете пакеты на целевую инфраструктуру, не брутфорсите, не эксплуатируете. Но границы важно понимать чётко:Допустимо в рамках пентеста (и без договора): запросы к Shodan, Censys, crt.sh, WHOIS-сервисам, поисковым системам. Вы работаете с данными третьих сторон, а не с инфраструктурой цели.
Требует договора: активное сканирование портов (nmap), DNS-брутфорс поддоменов, любое взаимодействие с сервисами цели. Это уже Active Scanning (T1595, Reconnaissance) и Network Service Discovery (T1046, Discovery).
Запрещено всегда: использование найденных паролей из утечек для входа, фишинг сотрудников без согласования, доступ к закрытым системам. Нашли пароль в утечке - фиксируете в отчёте, но не используете. Тут без вариантов.
Чеклист: recon-процесс за один рабочий день
Для тех, кто хочет внедрить системный подход к разведке - пошаговый чеклист, который укладывается в один рабочий день:Утро (2 часа) - пассивный сбор:
- WHOIS + обратный WHOIS через SecurityTrails
- DNS-перечисление (dig, все типы записей)
- Certificate Transparency через crt.sh
- amass в пассивном режиме
- theHarvester для email-адресов
- Shodan/Censys по найденным IP и организации
- Анализ LinkedIn: ключевые сотрудники, стек
- Google Dorks:
site:target.com ext:sql | ext:env | ext:log - Проверка GitHub/GitLab по имени организации и сотрудников
- Импорт всего в Maltego, построение графа
- Анализ графа связей: изолированные кластеры, аномалии
- Составление списка целей для активной фазы с приоритетами
- Формирование карты attack surface для отчёта
Инструменты второго эшелона: что дополняет основной арсенал
Помимо «большой пятёрки» (amass, theHarvester, Shodan, Maltego, Recon-ng) есть инструменты, закрывающие специфические ниши:- FOCA - вытягивает метаданные из документов (PDF, DOCX, XLSX), найденных на сайте цели. Метаданные содержат имена авторов, пути к файлам на внутренних серверах, версии ПО. Люди не задумываются, сколько информации валяется в свойствах документа.
- BGPView - отслеживание BGP-маршрутов и IP-блоков. Когда нужно определить все сетевые блоки организации, BGPView показывает ASN и анонсируемые префиксы.
- Have I Been Pwned - проверка корпоративного домена на присутствие в утечках. Если сотни email из
target.comскомпрометированы - credential stuffing практически гарантирован. - BuiltWith - определение технологического стека веб-приложения: CMS, аналитика, CDN, платёжные системы. Знание стека сужает область поиска уязвимостей.
- Mitaka - браузерное расширение для быстрых OSINT-запросов: выделил IP или домен, получил ссылки на Shodan, Censys, VirusTotal, AbuseIPDB одним кликом. Мелочь, а экономит кучу времени.
- truffleHog / gitleaks - поиск захардкоженных секретов (API-ключей, токенов, паролей) в публичных Git-репозиториях. В таблице выше упоминается анализ GitHub-репозиториев сотрудников - эти инструменты автоматизируют процесс.
- cloud_enum / S3Scanner - перечисление публичных облачных ресурсов (S3-бакеты, Azure Blob Storage, GCP-бакеты) по паттернам имени организации. Облачная разведка - отдельное большое направление, выходящее за рамки этой статьи.
Разведка - это не этап, это образ мышления
OSINT пентест - не «шаг 1 перед сканированием». Это непрерывный процесс, который идёт параллельно со всеми остальными фазами. Нашли новый поддомен во время эксплуатации? Возвращайтесь в recon: проверьте его через Shodan, посмотрите сертификаты, добавьте в граф Maltego.Разница между пентестером, который потратил на разведку 30 минут, и тем, кто работал два дня - это разница между отчётом «мы проверили периметр, всё хорошо» и отчётом «мы нашли забытый сервер двухлетней давности с доступом к продакшен-базе».
Попробуйте прогнать pipeline из этой статьи на своём проекте. Начните с amass + crt.sh + Shodan - для начала хватит за глаза. Если после первого прохода не нашли ничего интересного - значит, scope слишком узкий. Расширяйте через обратный WHOIS и CT-логи. Удачной охоты.
Последнее редактирование: