WatchAD2.0-对域安全的日志分析与监控系统-开源项目


这个仓库 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 builddocker-compose up -d 命令启动相关依赖组件、检测引擎及 WEB 服务。访问服务器 80 端口进入 web 后台,输入 WEBUSER 对应的域用户账号密码即可登录成功。
  • 手工部署:需提前准备 Kafka 集群和 MongoDB 集群,然后依次进行编译 go 程序、初始化数据库信息、配置认证域 LDAP、初始化数据表索引、初始化 kafka 消费者配置、Web 管理端配置、启动主检测引擎和启动 Web 控制端等操作,最后访问服务器 80 端口进入 web 后台登录。

告警外发

可在管理后台 - 系统设置 - 数据源输出配置中,按照特定格式配置告警外发(当前仅支持 kafka)。

6. 部分核心代码功能

  • 资产信息查询:在 iatp_wbm 目录下,通过 repositoriesservicescontrollers 相关代码实现了根据用户名查询资产信息的功能。
  • 缓存管理cache 目录下的代码实现了缓存事件的管理,包括事件的写入和读取,以及特定类型事件(如系统成功登录事件)的缓存处理。
  • 检测规则实现detect_plugins 目录下包含了各种检测规则的实现,如账户更改检查、防御绕过检测、权限提升检测等。

github