这个仓库 WatchAD2.0
是 360 信息安全中心开发的一款针对域安全的日志分析与监控系统,以下是对该仓库的详细介绍:
1. 产品简述
WatchAD2.0 可以收集所有域控上的事件日志、网络流量,通过特征匹配、协议分析、历史行为、敏感操作和蜜罐账户等方式来检测各种已知与未知威胁,功能覆盖了大部分目前的常见内网域渗透手法。相较于 WatchAD1.0,有以下提升: - 更丰富的检测能力:新增了账户可疑活动监测场景,加强了权限提升、权限维持等场景检测能力,涵盖包括异常账户/活动、Zerologon 提权、SPN 劫持、影子票证等更多检测面。 - 基于 Golang 重构分析引擎:将开发语言从 Python 重构为 Golang,利用其更高效的并发能力,提高对海量日志及流量等数据处理效率,确保告警检出及时有效。 - 整合简化架构:Web 平台和检测引擎整合,简化部署过程,用户只依赖消息队列和存储组件即可完成部署。在提高系统的性能和稳定性的同时,也使得系统更加高效和易用,为用户提供更好的体验。
2. 总体架构
WatchAD2.0 分为四部分,分别是日志收集 Agent、规则检测及日志分析引擎、缓存数据库、Web 控制端。不过流量检测链路暂不开源,可通过抓取域控流量,上传至 360 宙合 SaaS PCAP 分析平台进行威胁检测:https://zhouhe.360.cn/。
3. 目前支持的具体检测功能
- 异常活动检测:证书服务活动、创建机器账户事件活动、创建类似 DC 的用户账户、重置用户账户密码活动、TGT 票据相关活动。
- 凭证盗取:AS - REP 异常的流量请求、Kerberoasting 攻击行为、本地 Dump Ntds 文件利用。
- 横向移动:目录服务复制、异常的显示凭据登录行为、远程命令执行。
- 权限提升:ACL 异常修改行为、滥用证书服务权限提升、烂土豆提权、MS17 - 010、新增 GPO 监控、NTLM 中继检测、基于资源的约束委派、SPN 劫持、攻击打印服务、ZeroLogon 提权攻击。
- 权限维持:DCShadow 权限维持、DSRM 密码重置、GPO 权限委派、SamAccountName 欺骗攻击、影子票证、Sid History 权限维持、万能密钥、可用于持久化的异常权限。
- 防御绕过:系统日志清空、关闭系统日志服务。
- 自定义检测规则:在
{project_home}/detect_plugins/event_log/
目录下可以修改或添加规则,需重新编译以使其生效。
4. 代码结构
仓库的代码结构如下:
.gitignore
Dockerfile
LICENSE
README.md
README_EN.md
docker-compose.yml
entrypoint.sh
go.mod
go.sum
main.go
learn/
learn.go
logon.go
cmd/
init.go
root.go
run.go
source.go
web.go
detect_plugins/
event_log/
module/
plugin.go
plugin_alarm.go
gpo_audit_config/
registry.json
cache/
cache.go
system_process_create_cache.go
system_success_logon_cache.go
images/
Architecture.png
Architecture_en.png
AuditPolicy.png
...
iatp/
...
decoder/
...
iatp_wbm/
...
common/
...
schedule/
...
setting/
...
thirdparty/
...
tools/
...
5. 编译、部署与运行指南
服务端部署操作
- Docker 部署(推荐):WatchAD2.0 依赖的组件有 kafka、zookpeer,go1.17.1,可使用 docker 一键部署。操作步骤包括在项目根目录下新建
.env
文件,修改 kafka 地址、域控连接信息,然后执行docker-compose build
和docker-compose up -d
命令启动相关依赖组件、检测引擎及 WEB 服务。访问服务器 80 端口进入 web 后台,输入 WEBUSER 对应的域用户账号密码即可登录成功。 - 手工部署:需提前准备 Kafka 集群和 MongoDB 集群,然后依次进行编译 go 程序、初始化数据库信息、配置认证域 LDAP、初始化数据表索引、初始化 kafka 消费者配置、Web 管理端配置、启动主检测引擎和启动 Web 控制端等操作,最后访问服务器 80 端口进入 web 后台登录。
告警外发
可在管理后台 - 系统设置 - 数据源输出配置中,按照特定格式配置告警外发(当前仅支持 kafka)。
6. 部分核心代码功能
- 资产信息查询:在
iatp_wbm
目录下,通过repositories
、services
和controllers
相关代码实现了根据用户名查询资产信息的功能。 - 缓存管理:
cache
目录下的代码实现了缓存事件的管理,包括事件的写入和读取,以及特定类型事件(如系统成功登录事件)的缓存处理。 - 检测规则实现:
detect_plugins
目录下包含了各种检测规则的实现,如账户更改检查、防御绕过检测、权限提升检测等。