基于 ARL 的互联网资产自动化收集二开版本(挑来挑去,还是灯塔好用些)
这套平台利用成熟的平台ARL作为基础:支持批量导出、钉钉机器人通知、钉钉知识库结构化写入、计划任务聚合通知与对比统计、前后端稳定性修复,基础设施的升级维护。
站在外部的角度,如果不知道自己拥有什么,就无法保护什么
帮助团队收集暴露的资产,一是让团队有哪些资产暴露在互联网上,避免因不小心的配置错误或者其它原因造成暴露在互联网上的遗留、边缘资产问题,二是尽可能避免项目代码不小心被推送到github上,出现泄漏问题。利用主流三方API做网络空间搜索引擎和传统的域名爆破、前端暴露的url拼接、端口扫描、host碰撞等方法进行资产信息的收集,自动化定时执行推送到知识库、群机器人。
ARL-Source-Install 用于互联网资产自动化收集与持续监控,支持:
- 资产扫描(域名/IP/站点/端口/URL/漏洞等)
- 计划任务(周期执行、聚合通知)
- GitHub 监控(关键词泄露监控)
- 批量导出(任务多选合并导出)
- 钉钉通知(群机器人)
- 钉钉知识库报告(WORKBOOK 工作表)
- 指纹管理+Nuclei 联动扫描(新增 500+指纹联动 Nuclei 针对性 poc 扫描)
该仓库默认采用 Docker 方式部署。
- 功能:任务多选后一次性导出
xlsx - 特性:与单任务导出结构保持一致,支持合并与去重
- 输出工作表:
站点、IP、系统服务、域名、资产统计
- 保留原群机器人通知能力(Webhook)
- 新增钉钉开放平台知识库写入(WORKBOOK)
- 支持按任务类型开关:普通任务 / 计划任务 / GitHub 监控
- GitHub 监控机器人消息已优化为摘要,并可附知识库报告链接
- 通知聚合后发送,避免多目标触发重复刷屏
- 支持知识库报告链接回传
- 增加与上次执行结果的对比统计
- 批量停止计划任务改为幂等处理(已停止项跳过,不阻断整体)
- 钉钉工作表写入增强(字符串规范化、失败诊断信息)
- 列表缓存一致性优化(新增/删除后延迟显示问题已修复)
- 监控任务重建域名数据时保留真实来源(如
fofa、hunter_qax、quake_360、virustotal)
- 仅
arl_nginx对外暴露端口 web/worker/scheduler/mongodb/redis/rabbitmq走容器内通信
当前核心基础设施镜像如下(已纳入二开维护范围):
redis:7-alpinerabbitmq:3.13-management-alpinemongo:7.0rockylinux:8(arl:local基础镜像)nginx:1.24-alpine
版本清单:
| 组件 | 当前版本 | 说明 |
|---|---|---|
| 基础系统镜像 | rockylinux:8 |
ARL 主应用镜像基座(ARL/docker/Dockerfile) |
| MongoDB | mongo:7.0 |
资产数据存储 |
| RabbitMQ | rabbitmq:3.13-management-alpine |
Celery 消息队列 |
| Redis | redis:7-alpine |
业务缓存与性能优化 |
| nginx | nginx:1.24-alpine |
basic 和服务暴露 |
集成钉钉开发者平台 api,方便调试
新增指纹 558 条,通过指纹调用 nuclei,而非无脑批量扫描,提高扫描效率,降低攻击行为
- 恢复「任务管理 -> 添加任务」中的
nuclei扫描选项 - nuclei 扫描支持读取站点指纹,并按指纹映射到 tags 后分批扫描
- 可配置兜底策略:指纹未命中时使用默认 tags 或自动扫描(
-as) - 模板目录默认指向项目内
tools/nuclei-templates,避免运行时自动拉取远程模板库
- Docker 部署启动时会检查
/code/tools/finger.json - 文件存在时自动执行导入脚本,写入
fingerprint集合并刷新缓存 - 导入逻辑为可重复执行,适合镜像重建和容器重启场景
- 新增截图内部回传链路:worker 截图成功后可主动上传到 web 内部接口
- 解决 K8s 场景下
web/worker本地目录不共享导致的截图全部失败问题 - 安全控制包含:复用系统
Token鉴权、task_id格式校验、文件名白名单、文件大小限制、图片魔数校验 - 默认开启且可自动降级,不影响非 K8s 或共享目录部署场景
- 优化
ARL/app/dicts/webapp.json:补充现代组件指纹(如 MinIO、Nacos、Harbor、Portainer、Argo CD、RabbitMQ Management、Nexus 等) - 收紧部分弱特征规则(如
jquery、vue、WebLogic、KindEditor)以降低误报 - 优化
ARL/app/dicts/wih_rules.yml:新增多类高价值敏感信息规则(OpenAI/Anthropic/SendGrid/Stripe/数据库连接串等) - 增加 WIH 排除规则(示例值、占位符、Swagger/OpenAPI 示例 token)减少噪声
- 修正
ARL/app/dicts/cdn_info.json冲突与覆盖项(如dwion.com归属、dnsv1.com覆盖)
Browser
-> arl_nginx (80, Basic Auth)
-> arl_web (Flask + Gunicorn)
-> MongoDB / Redis / RabbitMQ
-> arl_worker (Celery)
-> arl_scheduler (周期调度)容器编排文件:ARL/docker/docker-compose.yml
默认服务名:
arl_nginxarl_webarl_workerarl_schedulerarl_mongodbarl_redisarl_rabbitmq
- Docker
- Docker Compose
- 可用内存建议 >= 2GB
- 可用磁盘建议 >= 8GB
钉钉自动化推送
通过钉钉开发者平台,需要提前获取以下信息,以配置钉钉自动化推送(因为我只用得到钉钉,所以用飞书的各位大佬可以自行完善)
参考:
https://open.dingtalk.com/document/development/get-knowledge-base-list
新建应用
应用凭证后面会用到
在应用中创建机器人
至少需要以下权限以保证资产收集的报告可以正常写入
操作者的unionId 自行在钉钉开发者平台上去调试获取
也可以在系统跑起来后配置调试
知识库空间 id 需要创建后获取,也是在钉钉开发者平台
获取并调试好权限后配置到这里,重启应用~
自行补充网络空间搜索引擎 APIkey,并开启
github 监控
配置域名服务器地址
机器人配置
钉钉群-机器人-添加机器人(需要在钉钉开发者平台发布的应用才又机器人)
添加后记得完善 access-token
在项目根目录执行:
chmod +x build.sh start.sh scripts/quick-build.sh
./build.sh
./start.shstart.sh 会自动检查并创建 arl_db volume(不存在时)。
- 访问地址:
http://<服务器IP> - Basic Auth:
- 用户名:
admin - 密码:
admin123456
- 用户名:
- ARL 应用默认账号:
- 用户名:
admin - 密码:
arlpass
- 用户名:
git pull
./scripts/quick-build.sh quick./scripts/quick-build.sh # 默认 quick
./scripts/quick-build.sh full # 完整构建
./scripts/quick-build.sh clean # 清缓存重建
./scripts/quick-build.sh frontend # 仅更新前端静态资源cd ARL/docker
docker compose logs -f web
docker compose logs -f worker
docker compose logs -f scheduler主配置文件:ARL/docker/config-docker.yaml
可参考模板:ARL/app/config.yaml.example
REDIS:
ENABLE: true
HOST: "redis"
PORT: 6379
DB: 0
PASSWORD: ""
CACHE_EXPIRE: 1800DINGDING:
ACCESS_TOKEN: ""
SECRET: ""说明:
- 仅 Access Token 也可工作(不加签机器人、适配钉钉应用不加签格式)
- 若机器人开启签名校验,需同时配置
SECRET
DINGTALK_API:
ENABLE: false
BASE_URL: "https://api.dingtalk.com"
CORP_ID: ""
APP_KEY: ""
APP_SECRET: ""
OPERATOR_ID: ""
WORKSPACE_ID: ""
PARENT_NODE_ID: ""
CREATE_NODE_PATH: "/v1.0/doc/workspaces/{workspace_id}/docs"
KB_TIMEOUT: 20
TITLE_PREFIX: "互联网资产自动化收集"
DRY_RUN: false
REPORT_BASE_URL: ""当 ENABLE=true 时,以下字段必填:
CORP_IDAPP_KEYAPP_SECRETOPERATOR_IDWORKSPACE_IDPARENT_NODE_ID
config.py 已支持钉钉配置通过环境变量覆盖,在k8s环境中用 Secret 注入敏感项,例如:
ARL_DINGTALK_APP_KEYARL_DINGTALK_APP_SECRETARL_DINGTALK_WORKSPACE_IDARL_DINGTALK_PARENT_NODE_ID
修复了三方api不调用问题
在集群环境中建议显式配置公网 DNS 解析器,避免优先使用内网 DNS 导致资产混入:
ARL:
DNS_RESOLVERS:
- 223.5.5.5
- 119.29.29.29
- 114.114.114.114
- 8.8.8.8说明:
- 为空时使用系统默认 DNS
- 配置后由
web/worker/scheduler进程统一生效 - 建议配合
BLACK_IPS对私网网段做过滤
- 任务结束后按开关触发
- 推送摘要 Markdown
- 计划任务支持聚合后推送
- GitHub 监控支持附加知识库报告链接
- 创建 WORKBOOK 文档
- 写入执行概览和资产明细工作表
- 常见工作表:
执行概览、域名、IP、系统服务、站点、资产统计 - 计划任务报告可包含与上次执行的对比统计
后端提供钉钉 API 调试接口:
ARL/app/routes/dingtalk_api.py/api/dingtalk_api/config//api/dingtalk_api/test//api/dingtalk_api/workspaces//api/dingtalk_api/nodes//api/dingtalk_api/create_workbook//api/dingtalk_api/sheets//api/dingtalk_api/write_markdown/
- 任务批量导出:
任务管理 -> 批量导出 -> 表格批量导出 - 添加任务:支持钉钉通知开关
- 添加计划任务:支持钉钉通知/知识库推送相关开关
- GitHub 监控:支持钉钉通知与知识库推送开关
- 钉钉 API 配置:提供运行时配置与联调能力
排查:
DINGTALK_API.ENABLE是否为true- 必填字段是否完整
OPERATOR_ID是否有目标知识库权限
当前版本已做字符串规范化。若仍出现,优先检查:
- 是否部署了最新镜像
- 是否有自定义改动绕过了写入规范化流程
当前版本为幂等逻辑:已停止任务会跳过,不应影响其他任务停止。
cd ARL/docker
docker compose logs --since 30m scheduler | grep -E "kb push|notify|task schedule"
docker compose logs --since 30m worker | grep -E "dingtalk|write workbook|sheet_write_result"说明:部分系统没有 rg,请用 grep。
ARL-Source-Install/
├── ARL/
│ ├── app/
│ │ ├── routes/ # API 路由
│ │ ├── services/ # 业务服务
│ │ ├── helpers/ # 通知、调度辅助
│ │ ├── tasks/ # 异步任务(含 github 监控)
│ │ ├── utils/ # 通用工具(含钉钉 OpenAPI)
│ │ └── config.py
│ └── docker/
│ ├── docker-compose.yml
│ ├── config-docker.yaml
│ ├── Dockerfile
│ ├── frontend/ # 已编译前端
│ └── nginx-reverse-proxy/
├── ARL-NPoC/
├── docs/
│ ├── 开发规范.md
│ └── 钉钉推送功能开发与修改日志.md
├── scripts/
│ └── quick-build.sh
├── build.sh
├── start.sh
└── README.md欢迎关注公众号,不定期更新~





















