recon-a-domain-passively

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Recon a domain passively

被动侦察一个域

Turn one domain into a defensible map of an organization's internet-facing estate plus the owner behind it. The techniques live in other skills; what this workflow contributes is the order, the inventory, and the stopping rule. Two failure modes to avoid from the start: enumerating for hours and producing 400 hostnames with no attribution, dates or priority, which is not a map; and drifting active without noticing, because one probe "just to check if it's up" ends the passive claim. Decide the passive boundary before step 2, not during it.
将一个域转化为一张有证据支撑的地图,呈现组织的互联网暴露资产及其背后的所有者。相关技术存在于其他 skill 中;本工作流的贡献在于执行顺序、资产清单和停止规则。从一开始就要避免两种失败模式:枚举数小时后只产出 400 个主机名,却没有归属、日期或优先级,这不是一张地图;而是在未察觉的情况下逐渐转向主动探测,因为一次“只是确认它是否在线”的探测就会终结本次任务的被动声明。必须在步骤 2 之前而非执行到该步骤时才决定被动边界。

Ordering logic

执行顺序逻辑

Each stage feeds the next, and the sequence is cheapest-and-quietest first:
OrderStageWhy here
1Registration and DNSDefines the perimeter. Without the apex set and the registrant you do not know what is in scope
2Name expansionArchival sources only. Costs nothing, touches nothing, produces the candidate list everything else consumes
3Resolution and inventoryConverts names to addresses, which is what infrastructure lookups take as input
4Infrastructure and servicesNeeds stage 3's addresses. Third-party scan data only
5Content, history, code, tech stackNeeds hostnames and org names from earlier stages as search terms, and reuses artifacts already collected
6Owner attributionThe registrant, tenant and organization names surfaced above are the input
Run stages 1–5 as a loop, not a line. Every stage produces new selectors that belong back at stage 1 or 2. Stop looping when the stopping rule in step 7 is met.
每个阶段都会为下一阶段提供输入,顺序优先选择成本最低且最安静的方式:
顺序阶段原因
1注册与 DNS定义边界。没有 apex 域集合和注册人,就不知道哪些内容在范围内
2名称扩展仅使用归档来源。零成本、不接触目标,并生成后续所有步骤都会使用的候选列表
3解析与盘点将名称转换为地址,基础设施查询以此为输入
4基础设施与服务需要步骤 3 的地址。仅使用第三方扫描数据
5内容、历史记录、代码、技术栈需要先前阶段获得的主机名和组织名称作为搜索词,并复用已收集的工件
6所有者归属上述阶段发现的注册人、tenant 和组织名称就是输入
将步骤 1–5 作为循环执行,而不是直线推进。每个阶段都会产生新的 selector,应返回步骤 1 或 2。满足步骤 7 的停止规则时停止循环。

Step 1 — Authorized scope

步骤 1——授权范围

State in writing: the subject (which domains and netblocks, and which adjacent ones are explicitly excluded), the objective, the jurisdictions involved, and the passive boundary — specifically whether DNS resolution, wordlist brute-forcing and any HTTP contact with the target are permitted. Read ../../ETHICS.md. If being noticed matters, set up attribution hygiene with
investigate-without-getting-made
before querying anything.
Done when subject, objective, out-of-bounds list, jurisdiction and passive boundary are written down, and you know which of the three grey activities you may perform.
书面记录:调查对象(哪些域和网段在范围内,哪些相邻域被明确排除)、目标、涉及的司法管辖区,以及被动边界——具体说明是否允许 DNS 解析、字典暴力枚举,以及与目标进行任何 HTTP 接触。阅读 ../../ETHICS.md。如果需要避免被察觉,在查询任何内容之前,先使用
investigate-without-getting-made
建立 attribution hygiene。
**完成标准:**已书面记录调查对象、目标、范围外清单、司法管辖区和被动边界,并且知道三项灰区活动中哪些可以执行。

Step 2 — Registration and DNS baseline

步骤 2——注册与 DNS 基线

Run
who-owns-this-domain
on every in-scope apex. You want registrar, dates and status, nameservers, the full record set, and the mail and SaaS fingerprints TXT, MX, DKIM and CAA give up. Where registration is redacted, pull historical WHOIS in the same pass.
Done when every apex has a registration record with a retrieval timestamp, a complete record set, and a list of named third-party vendors extracted from its DNS.
对范围内每个 apex 域运行
who-owns-this-domain
。你需要获取 registrar、日期和状态、nameservers、完整记录集,以及邮件和 SaaS 指纹——TXT、MX、DKIM 和 CAA 都会暴露相关信息。注册信息被遮盖时,在同一次执行中提取历史 WHOIS。
**完成标准:**每个 apex 域都有一条带检索时间戳的注册记录、一套完整记录,以及从其 DNS 中提取的具名第三方供应商列表。

Step 3 — Expand the name space

步骤 3——扩展名称空间

Run
find-hidden-subdomains
. Certificate Transparency and passive DNS first, because they are free, historical and invisible. Feed it the organization names from step 2 as well as the domains — a certificate-subject search finds sibling and acquired domains nobody put in the brief.
Done when you have a deduplicated candidate hostname list with the source and first-seen date recorded per name, and any newly discovered apex domains have been pushed back through step 2.
运行
find-hidden-subdomains
。优先使用 Certificate Transparency 和 passive DNS,因为它们免费、具备历史信息且不会留下痕迹。向其输入步骤 2 得到的组织名称以及域——按 certificate subject 搜索可发现任务简报中未提及的兄弟域和已收购域。
**完成标准:**已获得去重的候选主机名列表,记录每个名称的来源和首次发现日期,并将新发现的 apex 域重新送回步骤 2。

Step 4 — Resolve and start the inventory

步骤 4——解析并开始盘点

Classify each candidate: resolves to an address, resolves to a third-party CNAME, or does not resolve. Build the inventory now rather than at the end — retrofitting provenance onto a list you already collected is how findings lose their timestamps. The schema and per-row fields are in reference/asset-inventory.md.
Done when every candidate is in one of the three buckets with a resolution timestamp, every resolving host has an IP and an ASN, and every third-party CNAME is attributed to a named vendor.
将每个候选项归入以下类别之一:解析出地址、解析到第三方 CNAME,或无法解析。现在就构建清单,而不是等到最后——事后给已收集的列表补录 provenance,正是发现丢失时间戳的原因。schema 和逐行字段见 reference/asset-inventory.md。
**完成标准:**每个候选项都已归入三个类别之一并带有解析时间戳,每个可解析主机都有 IP 和 ASN,每个第三方 CNAME 均归属到具名供应商。

Step 5 — Infrastructure and services

步骤 5——基础设施与服务

Run
find-exposed-servers
over the addresses and netblocks from step 4. Query scan platforms only — no port scanning, no service probing. Use the certificate and favicon pivots to catch hosts that share the target's infrastructure without sharing its DNS, and note anything that looks unintentionally exposed.
Done when each in-scope IP has its observed ports and services with scan dates, each netblock has an owner from its RIR record, and any infrastructure found only through cert or favicon pivots has been added to the inventory and attribution-graded.
针对步骤 4 的地址和网段运行
find-exposed-servers
。只查询扫描平台——不进行端口扫描,也不探测服务。利用 certificate 和 favicon pivot,发现共享目标基础设施但不共享其 DNS 的主机,并记录任何看似意外暴露的内容。
**完成标准:**每个范围内的 IP 都有观察到的端口和服务以及扫描日期,每个网段都有来自 RIR record 的所有者,任何仅通过 certificate 或 favicon pivot 找到的基础设施都已加入清单并完成归因分级。

Step 6 — Content, history, code and tech stack

步骤 6——内容、历史记录、代码与技术栈

Three sources, in this order:
  • read-deleted-pages
    for the estate as it used to be: retired hostnames, old staff pages, exposed paths, pre-CDN infrastructure references.
  • google-like-a-spy
    for what is indexed now on the hosts you found — documents, directory listings, configs, forgotten portals.
  • secrets-in-git-history
    for the org names, GitHub organization slugs, cloud tenant labels and project IDs surfaced in steps 2 to 5.
If imagery matters — a logo reused across a network of sites, a stock photo posing as an office — run
find-the-original-image
. Shared images tie sites together when DNS and registration do not.
Then assemble the tech stack from what you now hold: headers and cookies in archived copies and scan records, certificate issuers, CNAME targets, JavaScript and asset paths, CSP directives, favicon hashes, and the SaaS fingerprints from step 2. Where you need a live page, read a third-party scan of it instead of fetching it.
Done when archived and indexed content is reviewed for the top-priority hostnames, code exposure is documented or ruled out, new hostnames have gone back through step 4, and the stack is documented per host with the artifact each conclusion rests on and versions marked claimed rather than verified.
按以下顺序使用三个来源:
  • read-deleted-pages
    :了解资产过去的状态——已下线的主机名、旧员工页面、暴露路径,以及引入 CDN 之前的基础设施引用。
  • google-like-a-spy
    :查看当前在已发现主机上被索引的内容——文档、目录列表、配置文件和被遗忘的门户。
  • secrets-in-git-history
    :使用步骤 2 至 5 出现的组织名称、GitHub organization slug、云 tenant label 和 project ID。
如果图像线索很重要——例如某个 logo 在一组网站中被重复使用,或一张图库照片被冒充为办公室照片——运行
find-the-original-image
。当 DNS 和注册信息无法建立联系时,共享图像可以关联这些网站。
然后基于目前掌握的信息整理技术栈:归档副本和扫描记录中的 headers 与 cookies、certificate issuer、CNAME target、JavaScript 和 asset path、CSP directive、favicon hash,以及步骤 2 中的 SaaS 指纹。需要实时页面时,读取第三方扫描结果,而不是亲自抓取。
**完成标准:**已审查优先级最高主机的归档内容和索引内容,代码暴露情况已被记录或排除,新主机名已重新经过步骤 4,并且每个主机的技术栈都有结论所依据的工件;对于版本,仅标记为 claimed,而不是 verified。

Step 7 — Decide whether the map is done

步骤 7——判断地图是否完成

Completeness is a judgement, so make it against criteria:
  • Two consecutive new sources produced no new assets. Saturation, not exhaustion, is the signal.
  • Every discovered name is resolved or classified, and every resolving host has an owner and an attribution grade.
  • Naming conventions have no unexplained gaps: if
    web01
    and
    web03
    are in the inventory, you have accounted for
    web02
    .
  • Every named vendor and tenant from step 2 has yielded assets or been ruled out.
  • The objective from step 1 can be answered from the inventory.
A failing criterion tells you exactly which stage to re-enter.
Done when all five pass, or the remaining gaps are written up as stated limitations rather than left implicit.
完整性是一种判断,因此应依据以下标准评估:
  • 连续两个新来源都没有产生新资产。饱和,而非穷尽,才是信号。
  • 每个已发现的名称都已解析或分类,每个可解析主机都有所有者和归因等级。
  • 命名规范中不存在无法解释的缺口:如果清单中有
    web01
    和
    web03
    ,就应说明
    web02
    的情况。
  • 步骤 2 中每个具名 vendor 和 tenant 要么产出了资产,要么已被排除。
  • 步骤 1 中设定的目标可以通过清单回答。
未通过的标准会准确告诉你应重新进入哪个阶段。
**完成标准:**五项标准全部通过,或者将剩余缺口明确写为已知限制,而不是将其隐去。

Step 8 — Hand off the owner

步骤 8——移交所有者分析

If the registrant, certificate subject, RIR reassignment or tenant label resolves to a legal entity rather than an individual, the domain work is finished and a corporate investigation starts: hand the entity name and jurisdiction to
x-ray-a-company
, take registry and beneficial-ownership questions to
who-really-owns-it
, and send recovered emails to
what-an-email-reveals
. Do not attempt corporate structure from DNS artifacts — DNS shows operators, not shareholders.
Done when every owner-side selector is routed to the right skill or recorded as a dead end with the reason.
如果注册人、certificate subject、RIR reassignment 或 tenant label 指向法律实体而非个人,域工作即告完成,企业调查随之开始:将实体名称和司法管辖区交给
x-ray-a-company
,将公司注册信息和受益所有权问题交给
who-really-owns-it
,并将恢复出的邮箱交给
what-an-email-reveals
。不要尝试仅根据 DNS 工件推断公司结构——DNS 展示的是运营方,而不是股东。
**完成标准:**每个所有者侧 selector 都已转交给正确的 skill,或已记录为死路并注明原因。

Step 9 — Report

步骤 9——报告

Run
write-the-intel-brief
. Lead with the asset inventory, then the attribution chain, then anything that appears unintentionally exposed, then the limitations from step 7. Done when every claim traces to an inventory row with a source and timestamp, and every finding carries a confidence grade.
运行
write-the-intel-brief
。先展示资产清单,然后是归属链,再展示任何看似意外暴露的内容,最后说明步骤 7 中的限制。**完成标准:**每项主张都能追溯到带有来源和时间戳的清单行,并且每项发现都有置信等级。

Where this goes wrong

容易出错的地方

  • Scope creep through pivots. Enumeration produces sibling domains endlessly and each looks like the next target. If it is not in the step 1 subject list it is a finding to report, not a workstream to start.
  • Silent drift into active. Resolution, brute-forcing and HTTP probing sit on a spectrum, and tools blur it — passive collectors have active modes one flag away, and one careless flag ends the passive claim for the engagement.
  • Inventory without attribution. Shared hosting, CDN addresses and bundled certs attach assets to your target that are not the target's, and an ungraded inventory row is a liability. Relatedly, a vulnerable SaaS tenant the target merely uses is a supply-chain finding and must be phrased as one.
  • Stale data presented as current. Archives, CT and scan records are all historical, and undated findings are not findings.
  • Stopping at the first quiet moment. No new results usually means one source saturated, not the estate mapped — which is what step 7 catches.
  • Over-collection. Staff names from archived pages and SNMP contacts are personal data. Collect what the objective needs, nothing more.
  • **通过 pivot 造成范围蔓延。**枚举会不断产出兄弟域,每个看起来都像下一个目标。如果某个域不在步骤 1 的调查对象清单中,它应当作为发现进行报告,而不是开启一条新的工作流。
  • **在未察觉的情况下转向主动探测。**解析、暴力枚举和 HTTP 探测处于同一连续谱上,而工具往往会模糊界线——被动收集器往往距离主动模式只差一个 flag,一个不谨慎的 flag 就会终结整个委托的被动声明。
  • **有清单但无归属。**共享托管、CDN 地址和捆绑证书会把并非目标所有的资产附加到目标上,而未分级的清单项会成为责任风险。同样,目标仅仅使用的、存在漏洞的 SaaS tenant 属于 supply-chain finding,必须按此类发现表述。
  • **把陈旧数据当作当前状态呈现。**归档记录、CT 和扫描记录都属于历史数据,没有日期的发现不能算作有效发现。
  • **在第一次安静时立即停止。**没有新结果通常只表示一个来源已经饱和,而不是资产组合已经被完整映射——步骤 7 会捕获这一问题。
  • **过度收集。**归档页面中的员工姓名和 SNMP contact 属于个人数据。只收集目标所需的内容,不多收集任何信息。

Confidence grading

置信度分级

Grade the inventory and the attribution separately. A host can be a confirmed live service and an unconfirmed asset of your target at once, and conflating the two is the most common reporting error in domain recon.
  • Confirmed asset — under a domain whose registration you verified, or on a netblock reassigned to the target by name, or serving a certificate the target demonstrably controls, and corroborated by a second independent source.
  • Probable asset — one strong infrastructure fingerprint (shared DKIM key, same mail tenant label, same provider-assigned nameserver pair, distinctive favicon or body string) with nothing contradicting it.
  • Unconfirmed — shared-hosting or CDN addresses, bundled-certificate names,
    org:
    -only attribution, or an aggregator result whose underlying record you have not seen.
Per-technique criteria in the technique skills override these where more specific.
分别对资产清单和归属进行分级。一个主机可以同时是已确认的在线服务和未确认的目标资产,而混淆二者是域侦察中最常见的报告错误。
  • 已确认资产(Confirmed asset)——位于注册信息已验证的域之下,或位于通过名称重新分配给目标的网段上,或提供目标明确控制的 certificate,并且得到第二个独立来源的佐证。
  • 可能资产(Probable asset)——具有一个强基础设施指纹(共享 DKIM key、相同邮件 tenant label、相同的提供商指定 nameserver pair、独特的 favicon 或 body string),且没有相反证据。
  • 未确认(Unconfirmed)——共享托管或 CDN 地址、捆绑证书名称、仅基于
    org:
    的归属,或尚未查看底层记录的聚合器结果。
如果各技术 skill 中的具体标准更加详细,则以这些标准为准。

Worked example

实例

Engagement: a client is acquiring
meridian-freight.test
and wants its internet-facing estate before signing. Scope: the apex plus any domain the registrant demonstrably controls. Boundary: resolution allowed, no brute-forcing, no HTTP contact.
Step 2: five-year-old registration, registrant redacted but country
NL
, a Microsoft 365 tenant, and TXT tokens for a support desk, an identity provider and a GitHub organization. That GitHub org name is the highest-value item in the entire record set and it cost one lookup.
Step 3 returns 74 candidates, and a certificate-subject search surfaces
meridian-logistics-group.test
, which is not in the brief. Back through step 2: same M365 tenant label in its MX, so same operator. Included, client notified.
Step 4: 31 resolve, nine of those to third-party CNAMEs — relationships, not assets.
uat-portal
sits in a small Dutch hosting netblock distinct from everything else, which makes it the lead of the engagement.
Step 5: that UAT host had 443 and 3306 observed open five weeks earlier. Also eleven hosts sharing a favicon hash, which looked like a hidden estate until the hash turned out to belong to a stock CMS theme — the dead end, and exactly the kind that inflates a report if you skip the check.
Step 6: a public repo in the GitHub org holds a CI config naming two internal hostnames absent from DNS. They do not resolve; they still matter, because the acquirer inherits those systems.
Step 7: third consecutive source adds nothing,
web02
accounted for, every vendor chased. Complete, with one stated gap — the apex wildcard cert means subdomains issued after it are invisible to CT. Step 8: Dutch registrant country plus the sibling domain plus the group name in the cert subject point at a holding structure, so it goes to
x-ray-a-company
.
委托内容:客户正在收购
meridian-freight.test
,希望在签署交易前了解其互联网暴露资产。范围:apex 域,以及注册人明确控制的任何域。边界:允许解析,不允许暴力枚举,不允许 HTTP 接触。
步骤 2:注册信息已有五年,注册人被遮盖,但国家为
NL
,存在一个 Microsoft 365 tenant,以及用于支持台、身份提供商和 GitHub organization 的 TXT token。这个 GitHub org 名称是整份记录中价值最高的项目,而且只查询一次便已获得。
步骤 3 返回 74 个候选项,certificate subject 搜索发现
meridian-logistics-group.test
,它并不在任务简报中。返回步骤 2:它的 MX 中具有相同的 M365 tenant label,因此属于同一运营方。将其纳入范围,并通知客户。
步骤 4:31 个名称可以解析,其中 9 个指向第三方 CNAME——这些属于关系,而不是资产。
uat-portal
位于一个与其他所有资产均不相同的小型荷兰托管网段中,因此成为本次委托的重点。
步骤 5:五周前的扫描记录显示,该 UAT 主机的 443 和 3306 端口处于开放状态。另有 11 个主机共享同一个 favicon hash,看起来像是隐藏资产组合,直到确认该 hash 属于一个通用 CMS theme——这是一条死路,也正是跳过检查便会在报告中造成膨胀的那类结果。
步骤 6:GitHub org 中的一个公共仓库包含 CI config,其中列出了两个未出现在 DNS 中的内部主机名。它们无法解析,但仍然重要,因为收购方会继承这些系统。
步骤 7:连续第三个来源没有增加任何内容,
web02
已得到说明,每个 vendor 都已追查。任务完成,但需说明一个缺口——apex 域的 wildcard certificate 意味着其后签发的子域名对 CT 不可见。步骤 8:荷兰注册人所在国家、兄弟域以及 certificate subject 中的集团名称共同指向一种控股结构,因此将其交给
x-ray-a-company
。

Pivots out

延伸 pivot

SelectorGoes to
Legal entity, group name, jurisdiction
x-ray-a-company
,
who-really-owns-it
Emails and phone numbers
what-an-email-reveals
,
whose-number-is-this
Named employees from archives or metadata
find-anyone
Developer handles from repositories
hunt-a-handle
Documents pulled from the estate
secrets-in-file-metadata
Breach exposure for the domain's mailboxes
what-leaked-about-you
The whole asset and entity set, for structure
graph-the-network
Selector转入
法律实体、集团名称、司法管辖区
x-ray-a-company
、
who-really-owns-it
邮箱和电话号码
what-an-email-reveals
、
whose-number-is-this
来自归档或 metadata 的具名员工
find-anyone
来自 repository 的开发者 handle
hunt-a-handle
从资产组合中提取的文档
secrets-in-file-metadata
域邮箱的 breach 暴露情况
what-leaked-about-you
完整的资产与实体集合,用于结构分析
graph-the-network

Legal and ToS notes

法律与 ToS 注意事项

Passive collection from third-party datasets is lawful research in most jurisdictions; the boundary is traffic to the target and access to non-public systems. Registrant data recovered from historical WHOIS is personal data under GDPR even though it was once public, so you need a lawful basis and must minimize. Scan-platform and archive terms restrict bulk redistribution — cite findings, do not republish datasets. A discovered exposure authorizes a report to the operator or the relevant CERT and nothing else. And in due diligence, confirm you hold the client's written authority for the scope you are running: "our client is buying them" is not authorization from the target.
在大多数司法管辖区,从第三方数据集进行被动收集属于合法研究;边界在于是否向目标发送流量以及是否访问非公开系统。即使历史 WHOIS 曾公开,从中恢复的注册人数据在 GDPR 下仍属于个人数据,因此需要具备合法依据并最小化处理。扫描平台和归档服务的条款限制批量再分发——应注明发现的出处,不要重新发布数据集。发现暴露问题只授权向运营方或相关 CERT 报告,除此之外不得采取其他行动。在尽职调查中,确认你持有客户针对当前范围的书面授权:“我们的客户正在收购他们”并不构成目标方的授权。