Amass子域名枚举实战:主动与被动策略深度解析

发布时间:2026/7/30 12:07:32
Amass子域名枚举实战:主动与被动策略深度解析 1. 项目概述为什么子域名枚举是攻防的“前哨战”在渗透测试、红队评估或者日常的资产梳理工作中我们常常会遇到一个核心问题目标究竟有多大这个“大”往往不是指一个孤零零的主域名而是指其背后隐藏的、可能被忽视的整个数字资产面。子域名就是这个资产面的关键组成部分。一个主域名下可能部署着面向用户的官网、内部员工使用的OA系统、开发测试环境、API接口服务甚至是配置不当的管理后台。找到这些子域名就如同拿到了一张目标网络的地图是后续所有信息收集、漏洞探测和风险评估的起点。Amass作为目前信息收集领域公认的“瑞士军刀”其子域名枚举能力尤为突出。它之所以备受推崇并非仅仅因为它能“找到很多域名”而是因为它提供了一套完整且高度可配置的枚举策略体系。简单来说Amass将子域名发现分为了两大流派主动枚举和被动收集。新手往往一上来就运行最暴力的命令结果要么被防火墙封禁IP要么收获寥寥。而老手则会根据目标特点、自身权限和测试阶段像调兵遣将一样灵活搭配这两种策略。这篇文章我将结合自己多年在实战中的经验深入拆解Amass的主动与被动枚举策略。我不会只告诉你命令怎么写而是会重点分析在什么场景下该用什么策略为什么这么选以及如何组合使用才能达到效率与隐蔽性的最佳平衡。无论你是刚入门的安全爱好者还是希望优化自己工作流的从业者理解这些策略背后的逻辑远比记住几个命令参数重要得多。2. 核心策略解析主动枚举与被动收集的本质区别在深入Amass的具体参数之前我们必须先从根本上理解这两种策略的运作机制和底层逻辑。它们的区别决定了你的行为是“敲门”还是“倾听”是“主动出击”还是“情报分析”。2.1 被动收集扮演一个“安静的观察者”被动收集顾名思义你本身并不与目标域名或其DNS服务器发生直接交互。你的角色更像一个情报分析师从各种公开或半公开的数据源中搜集历史上或近期他人查询过的、与目标相关的子域名记录。核心原理Amass会向数十个甚至上百个在线数据源发起查询这些数据源包括证书透明度日志如 crt.sh。这是被动收集的“王牌数据源”。根据规定全球主流CA在签发SSL/TLS证书时都必须将证书信息包含域名公开到CT日志中。通过查询这些日志我们可以发现目标组织为哪些子域名申请过证书其中常包含测试环境、内部系统等不易通过常规扫描发现的资产。搜索引擎如 Google、Bing通过API或爬取。利用搜索引擎的site:语法可以发现被收录的子域名页面。威胁情报平台如 AlienVault OTX, RiskIQ, ThreatCrowd。这些平台聚合了全球的恶意软件分析、扫描数据其中包含大量的域名解析记录。DNS数据集如 SecurityTrails, Censys, Shodan。它们通过长期、大规模的网络空间测绘积累了海量的DNS历史记录和关联数据。其他来源如DNS聚合器、子域名爆破的历史结果共享站点等。优点极高的隐蔽性由于不直接查询目标DNS你的行为几乎不会被目标的安全设备如IDS/IPS、防火墙察觉。这对于红队行动或需要高度隐蔽的测试至关重要。发现历史与关联资产能发现已下线但曾存在过的子域名、关联的不同顶级域名通过同一组织注册的证书或IP反查有助于绘制更完整的资产图谱。绕过DNS防护即使目标使用了私有DNS服务器或严格的DNS查询策略只要其子域名曾在公网上“亮过相”比如申请过证书就可能被被动源捕获。缺点与局限数据非实时且可能不全你获取的是数据源“看到过”的记录可能遗漏那些从未对外公开、或刚创建不久的子域名。依赖第三方数据源数据源的可用性、速率限制和查询精度会影响结果。部分优质数据源需要API密钥。存在“噪音”可能会收集到大量无关的域名例如CDN的泛域名、被其他项目误关联的域名等需要后期仔细过滤。实操心得被动收集应该是你每次信息收集的“第一步”。它风险极低能快速建立一个初步的资产列表并为后续的主动枚举提供“种子”目标。我习惯将这一步称为“绘制草图”。2.2 主动枚举扮演一个“积极的侦察兵”主动枚举意味着你的工具会直接与目标的DNS基础设施进行通信通过一系列技术手段来“询问”是否存在特定的子域名。核心原理Amass的主动枚举主要基于“字典爆破”和“递归枚举”。字典爆破使用一个包含大量常见子域名前缀如www,mail,dev,test,api,admin的字典逐个拼接目标主域名然后向公共DNS服务器如8.8.8.8或目标权威DNS服务器发起A记录或CNAME记录查询。如果收到有效的DNS响应非NXDOMAIN则认为该子域名存在。递归枚举/爬取在发现一个有效的子域名如dev.example.com后Amass可以将其作为新的“根”继续尝试在其基础上爆破如api.dev.example.com从而发现更深层级的子域名。AXFR区域传输这是一种经典的DNS配置错误。如果目标DNS服务器允许匿名用户进行区域传输AXFR请求那么可以直接获取到该域名下的所有DNS记录。虽然现在较少见但Amass仍会尝试。反向DNS查找对于发现的IP地址进行PTR记录查询可能发现其他绑定在该IP上的域名。优点实时性强结果准确直接查询DNS获得的是当前最新的解析状态。可以发现“隐藏”资产能发现那些从未在公开数据源中暴露过的、内部使用的或新上线的子域名。可控性强你可以自定义字典的大小、爆破的速率、递归的深度从而控制枚举的强度和范围。缺点与风险暴露风险高大量的DNS查询流量会清晰地记录在目标的DNS服务器日志中极易触发安全告警。你的源IP地址也会暴露。可能触发速率限制或被封禁目标DNS服务器或上游ISP可能对高频查询进行限速或直接屏蔽IP。依赖字典质量爆破的效果很大程度上取决于你使用的子域名字典是否全面、是否贴合目标行业特性。实操心得主动枚举是“精雕细琢”的阶段。永远不要在未授权测试中对目标进行高强度主动爆破。即使是在授权范围内也应采用“慢速扫描”、“分时段扫描”等策略并优先使用从被动收集中获得的“高价值种子词”来生成针对性字典而非盲目使用巨型通用字典。2.3 策略对比与选择矩阵为了更直观地理解我们可以用下表来对比两种策略特性维度被动收集主动枚举交互对象第三方数据源CT日志、搜索引擎等目标DNS服务器/公共DNS隐蔽性极高目标无感知低流量会被记录数据实时性滞后历史数据实时当前状态发现能力公开/历史暴露的资产当前在线资产包括未公开的主要技术数据聚合、关联分析DNS字典爆破、递归枚举、AXFR尝试速度快受限于API速率可快可慢取决于字典和线程风险极低高可能触发告警或IP封禁核心依赖数据源的覆盖面和API子域名字典的质量和爆破策略如何选择答案是组合使用分阶段进行。第一阶段侦察初期纯被动收集。快速、隐蔽地获取目标初步画像。命令示例amass enum -passive -d example.com -o passive_results.txt。第二阶段深度侦察被动为主轻度主动为辅。基于被动结果筛选出可能的业务关键词如shop,api,mobile生成一个精简的、有针对性的字典进行低速率的主动爆破。命令示例amass enum -active -brute -w custom_small_wordlist.txt -d example.com -max-dns-queries 10 -o active_light.txt。第三阶段授权测试/全面梳理主动深度枚举。在明确授权和范围的前提下使用大型字典、高线程进行深度爆破和递归枚举力求全覆盖。命令示例amass enum -active -brute -w large_wordlist.txt -d example.com -rf resolvers.txt -dir ./amass_db。3. Amass 实战配置与高级技巧理解了策略我们来看看如何用Amass将其落地。Amass的强大之处在于其丰富的配置选项允许你精细控制枚举行为。3.1 基础命令与核心参数解析一个最基础的被动收集命令如下amass enum -passive -d example.com -o amass_passive.txtenum子域名枚举子命令。-passive关键标志指示仅使用被动数据源。-d指定目标域名。-o将结果输出到文本文件。一个典型的主动爆破命令如下amass enum -active -brute -w subdomains_top1m.txt -d example.com -rf resolvers.txt -max-dns-queries 50 -o amass_active.txt-active启用主动枚举模块。-brute启用字典爆破模式。-w指定用于爆破的字典文件路径。字典质量至关重要。-rf指定一个自定义的DNS解析器列表文件。这是提升主动枚举成功率的关键技巧。使用公共DNS如8.8.8.8, 1.1.1.1可能被限速而使用从网上搜集的或自建的高质量解析器列表可以分散查询压力提高速度。Amass内置了一个列表但自己维护一个更新的是最佳实践。-max-dns-queries限制每秒向每个解析器发送的DNS查询数。这是控制扫描速度、降低被发现风险的核心参数。在授权测试中可以适当调高如100在需要隐蔽时应调低如5-10。-dir指定一个目录用于存储Amass的运行时数据库和配置文件。这对于长期监控、增量扫描非常有用。3.2 字典的选用与自定义策略“工欲善其事必先利其器”对于主动爆破字典就是你的“器”。通用大字典如subdomains-top1million-5000.txt覆盖面广但噪音也大效率低。我推荐分层使用字典通用高频字典包含www, mail, ftp, admin, test, dev, staging, api等最常见前缀约几千条。用于第一轮快速扫描。行业特定字典根据目标行业定制。例如针对云服务商可以加入aws, s3, storage, blob等针对教育机构加入campus, elearning, library等。目标生成字典这是最高效的方法。从被动收集的结果中提取子域名的“单词”模式。例如发现mail.example.com,webmail.example.com可以生成mail, webmail作为新词发现dev-app1.example.com可以生成dev-app1, app1等。可以使用工具如altdns来基于已有列表生成排列组合。你可以使用-w参数多次指定多个字典Amass会自动合并去重。amass enum -active -brute -w common_small.txt -w industry_specific.txt -w generated.txt -d example.com3.3 递归枚举与深度控制递归枚举能挖掘出深层子域名但也会指数级增加查询量。Amass通过-max-depth参数控制递归深度。-max-depth 1仅对根域名example.com进行爆破。-max-depth 2对根域名爆破并对发现的一级子域名如api.example.com也进行爆破尝试xxx.api.example.com。-max-depth 3继续向下递归。注意事项深度每增加1潜在的查询量会剧增。在非授权或需要隐蔽的场景下切勿使用大于2的深度。即使在授权测试中也要评估时间成本和目标规模。3.4 使用配置文件进行持久化与监控对于需要长期关注的目标使用命令行参数会非常繁琐。Amass支持配置文件config.ini和数据库模式。首先初始化一个工作目录和配置amass db -dir ./workspace -init这会在./workspace下创建数据库和配置文件模板。然后编辑./workspace/config.ini你可以在这里预设数据源的API密钥、默认的解析器列表、速率限制等。更强大的是你可以配置“定时任务”。例如创建一个持续监控任务每天执行一次被动收集每周执行一次轻度主动扫描# 添加一个监控任务 amass track -dir ./workspace -d example.com -last 7d # 定期执行枚举可以放入crontab amass enum -dir ./workspace -d example.com -passive -config ./workspace/config.ini -o daily_update.txt这种方式Amass会利用数据库追踪已发现的子域名和IP地址并在后续扫描中识别出新出现的资产非常适合资产监控和变化感知。4. 实战场景与策略组合案例理论结合实践下面通过几个典型场景展示如何灵活运用策略组合。4.1 场景一外部未授权安全评估黑盒目标尽可能全面地发现目标互联网资产同时保持高度隐蔽。策略全面被动收集使用所有可用的被动数据源确保在config.ini中配置好API密钥以提升限额。amass enum -passive -d target-company.com -o phase1_passive.txt数据关联与拓展对发现的IP进行whois查询和ASN归属分析寻找同一组织名下的其他IP段和域名。使用Amass的-ip和-asn选项这也属于被动情报范畴。# 假设发现IP 1.2.3.4 amass intel -asn -addr 1.2.3.4 # 根据发现的AS号查找该AS下的所有域名 amass intel -org Some Cloud Provider # 或用-asn指定AS号针对性轻度主动分析phase1_passive.txt提取出业务相关的子域名前缀生成一个不超过500条的小字典。在非业务高峰时段例如凌晨使用极低的查询速率进行爆破。amass enum -active -brute -w targeted_500.txt -d target-company.com -max-dns-queries 2 -o phase2_light_active.txt结果汇总与去重合并所有结果并使用httpx、nuclei等工具对存活的子域名进行后续的HTTP服务探测和漏洞扫描。4.2 场景二内部授权渗透测试白盒/灰盒目标在授权范围内进行无遗漏的深度资产发现。策略快速被动建立基线同场景一第一步快速获取已知资产列表。高强度主动枚举使用大型字典合并2-3个高质量的通用大字典。使用优质解析器列表准备一个包含上百个可靠公共DNS的resolvers.txt文件。提高并发控制总时间适当提高-max-dns-queries如50-100并利用-timeout参数控制总扫描时间。amass enum -active -brute -w big_list1.txt -w big_list2.txt -d internal-target.com -rf resolvers.txt -max-dns-queries 80 -timeout 120 -o deep_scan.txt递归枚举挖掘深度针对发现的重要一级子域名如dev.internal-target.com进行深度为2的递归枚举。amass enum -active -brute -w big_list1.txt -d dev.internal-target.com -max-depth 2 -rf resolvers.txt -o deep_dev_scan.txt尝试AXFR和DNS缓存投毒等高级技巧虽然成功率低但在授权测试中值得一试。Amass内置了AXFR尝试。4.3 场景三企业自身资产梳理与持续监控目标建立企业自身的动态资产清单及时发现影子资产或违规暴露。策略初始化全面扫描在内部网络或拥有完全授权的情况下执行一次类似场景二的深度扫描建立初始资产数据库。amass db -dir ./company_assets -init amass enum -dir ./company_assets -active -brute -d your-company.com -config ./company_assets/config.ini配置自动化监控利用Amass的数据库模式和定时任务。在config.ini中设置好所有被动数据源的API。使用amass track命令添加需要监控的根域名。编写一个Shell脚本或使用Crontab定期运行# 每日被动监控 amass enum -dir ./company_assets -passive -d your-company.com -o daily_diff.txt # 每周轻度主动核查 amass enum -dir ./company_assets -active -brute -w small_check_list.txt -d your-company.com -max-dns-queries 5集成与告警将Amass的输出如daily_diff.txt中的新发现资产接入企业的SIEM或工单系统自动生成资产入库工单或安全告警。5. 常见问题、排错与性能优化在实际使用中你肯定会遇到各种问题。下面是一些典型问题及解决方案。5.1 被动收集结果太少问题运行被动枚举后只得到寥寥几个结果。排查与解决检查API密钥许多优质被动源如SecurityTrails, Censys需要API密钥才能获得完整或高额度的查询权限。确保在config.ini文件中正确配置了它们。运行amass enum -list可以查看当前配置的数据源及其状态。网络连通性确保你的网络可以正常访问这些数据源的API有些可能需要特定的网络环境。可以尝试curl一下数据源的API端点。目标特性有些目标特别是初创公司或内部系统极少的组织本身在互联网上的暴露面就很小被动收集结果自然不多。这是正常现象。5.2 主动枚举速度慢或被封IP问题主动爆破时速度极慢或者运行一段时间后不再有结果返回IP可能被目标或公共DNS限速/封禁。排查与解决优化解析器列表不要依赖单一或少数几个公共DNS。维护一个庞大的、经常更新的resolvers.txt文件是关键。可以从公开项目获取也可以使用dnsvalidator等工具对解析器进行验证和筛选保留响应快、稳定的。调整速率限制务必使用-max-dns-queries参数。从一个较低的值开始如10观察网络状况和目标响应。在授权测试中可逐步增加。使用-noalts参数Amass默认会尝试查找“置换域名”如将-换成.这会增加大量查询。如果速度是首要考量可以关闭此功能。分布式扫描对于超大型目标可以考虑在多台VPS上使用不同的解析器列表和字典分段同时扫描最后合并结果。5.3 结果中存在大量无效或“垃圾”域名问题结果文件中包含大量泛解析记录如*.cdn-provider.com、不存在的域名NXDOMAIN误报或无关域名。排查与解决启用智能过滤Amass的-filter参数可以基于正则表达式过滤子域名。例如过滤掉包含aws,azure,cloudfront等常见CDN泛解析模式的域名。后期处理Amass的结果通常需要二次处理。一个标准的流水线是# 1. 使用httpx进行HTTP/S存活探测过滤出真正有服务的 cat amass_results.txt | httpx -silent -o alive_subdomains.txt # 2. 使用dnsx或单独脚本对原始结果进行A记录验证剔除无法解析的 cat amass_results.txt | dnsx -silent -a -resp-only -o valid_dns.txt # 3. 人工审查剔除明显无关的误报优化字典清理你的爆破字典移除那些明显无效或低概率的前缀。5.4 Amass进程占用内存过高或崩溃问题在深度递归或使用极大字典时Amass可能消耗大量内存。排查与解决控制枚举深度和字典大小对于大型目标避免一次性使用-max-depth 3和百万级字典。应分阶段、分目标进行。使用数据库模式-dir参数指定数据库目录Amass会将中间状态和结果存入数据库比纯内存操作更稳定也支持中断后继续。升级硬件在虚拟机或服务器上运行分配足够的内存建议至少2-4GB。掌握Amass子域名枚举的精髓不在于记住所有命令参数而在于深刻理解“主动”与“被动”这两种侦察哲学并能根据战场测试场景形势灵活切换和组合你的战术。从隐蔽的被动情报搜集开始逐步过渡到精准的主动探测始终对扫描行为带来的“噪音”保持警惕这才是专业的信息收集之道。工具是固定的但策略是活的这份对策略的思考和实践才是区分普通使用者和资深从业者的关键。