amass容器安全:Docker和K8s资产发现
引言:容器环境下的资产发现挑战
在云原生时代,Docker和Kubernetes(K8s)已成为部署微服务的主流平台。然而,容器集群的动态性和复杂性使得传统资产发现工具难以全面识别攻击面。OWASP Amass作为一款专注于攻击面映射和资产发现的工具,能够通过被动和主动侦察技术,帮助安全团队在容器环境中发现隐藏的域名、子域名及关联IP资产。本文将详细介绍如何通过Docker部署Amass,并针对K8s集群构建资产发现流程,解决容器环境下的"盲点"问题。
Docker环境部署与基础使用
Docker镜像快速启动
Amass官方提供预构建Docker镜像,可直接通过以下命令启动:
# 拉取镜像
docker pull caffix/amass
# 基本被动枚举示例
docker run -v $(pwd)/amass_output:/.config/amass/ \
caffix/amass enum -passive -d example.com -o results.txt
参数说明:
-v $(pwd)/amass_output:/.config/amass/:挂载本地目录以持久化数据库和输出文件-passive:被动模式(无主动DNS查询,适合初步侦察)-d example.com:目标域名-o results.txt:输出结果到文件
自定义配置文件挂载
通过挂载配置文件实现高级扫描策略(如指定DNS解析器、数据源和爆破字典):
docker run -v $(pwd)/config:/amass/config \
-v $(pwd)/wordlists:/amass/wordlists \
caffix/amass enum -config /amass/config/config.yaml \
-d example.com -brute -w /amass/wordlists/subdomains-top1mil.txt
目录结构示例:
./config/
├── config.yaml # 主配置文件
└── datasources.yaml # 数据源API密钥配置
./wordlists/
└── subdomains-top1mil.txt # 自定义爆破字典
K8s环境下的资产发现策略
网络范围定义与扫描规划
K8s集群通常包含多个网络平面,需在Amass配置中明确定义扫描范围:
# config.yaml 示例
scope:
cidrs:
- 10.96.0.0/12 # K8s Service CIDR
- 192.168.1.0/24 # 节点子网
asns:
- 14618 # 云服务商ASN(如AWS)
ports:
- 443 # HTTPS(证书侦察)
- 8443 # K8s API Server
扫描流程图:
针对K8s的高级枚举技术
1. 基于证书透明度的Ingress域名发现
K8s Ingress资源通常关联外部域名,可通过证书日志快速识别:
docker run -v $(pwd)/amass_output:/root/.amass \
caffix/amass enum -active -d example.com \
-p 443 --cert -o ingress_domains.txt
关键参数:
-active:启用主动模式(包括证书拉取)--cert:强制检查TLS证书中的域名-p 443:扫描HTTPS端口以获取证书
2. 结合K8s API的资产关联
通过K8s API获取Service和Ingress信息,提取目标域名后导入Amass:
# 获取Ingress域名并导出为文件
kubectl get ingress --all-namespaces -o jsonpath='{.items[*].spec.rules[*].host}' | tr ' ' '\n' > k8s_ingresses.txt
# 使用Amass批量枚举
docker run -v $(pwd):/data caffix/amass enum -df /data/k8s_ingresses.txt -ip -dir /data/amass_db
结果分析与可视化
Amass支持将结果导出为多种格式,结合K8s资源标签进行关联分析:
# 导出CSV格式用于表格分析
docker run -v $(pwd)/amass_output:/root/.amass \
caffix/amass db -dir /root/.amass -show -csv -d example.com > assets.csv
资产关系表:
| 域名 | 解析IP | 关联K8s资源 | 风险等级 |
|---|---|---|---|
| api.example.com | 192.168.1.10 | Ingress/api-gateway | 高 |
| monitoring.example.com | 192.168.1.15 | Service/prometheus | 中 |
| test-service.example.com | 10.96.0.100 | Service/test-app | 低 |
网络拓扑图:
容器化部署最佳实践
多阶段扫描工作流
结合Docker Compose实现"数据收集-分析-报告"自动化:
# docker-compose.yml
version: '3'
services:
amass:
image: caffix/amass
volumes:
- ./config:/config
- ./output:/root/.amass
command: enum -config /config/config.yaml -d example.com -o /output/results.txt
analyzer:
image: python:3.9
volumes:
- ./output:/data
command: python /data/analyze.py --input /data/results.txt --k8s-namespace default
资源限制与性能优化
在K8s环境中部署Amass时,需合理配置资源以避免影响集群稳定性:
# k8s-amass-deployment.yaml 片段
resources:
requests:
cpu: 500m
memory: 1Gi
limits:
cpu: 1000m
memory: 2Gi
env:
- name: AMASS_CONFIG
value: "/config/config.yaml"
volumeMounts:
- name: config-volume
mountPath: /config
- name: wordlist-volume
mountPath: /wordlists
常见问题与解决方案
证书扫描无结果
问题:K8s集群内部证书未提交到公共CT日志
解决:结合内部CA证书扫描:
# 挂载集群CA证书并扫描
docker run -v /etc/kubernetes/pki:/k8s-pki \
caffix/amass enum -active -d example.com \
--ca-cert /k8s-pki/ca.crt -p 6443
扫描性能瓶颈
优化策略:
- 增加DNS解析器并发:
-dns-qps 300 - 启用数据库缓存:
-db /data/amass.db - 分阶段扫描:先被动后主动
总结与未来展望
Amass通过灵活的配置和强大的枚举能力,为容器环境下的资产发现提供了有效解决方案。结合Docker的便捷部署和K8s的网络特性,安全团队可构建自动化的攻击面监控流程。未来随着云原生安全的深入,Amass可能会进一步整合K8s API直接获取集群信息,实现更精准的资产映射。
下期预告:使用Amass结合Prometheus构建容器资产监控 dashboard,实时追踪攻击面变化。
操作建议:
- 收藏本文档以备后续部署参考
- 关注项目更新:
git clone https://gitcode.com/GitHub_Trending/am/amass - 尝试文中示例命令,验证您环境中的资产发现效果
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



