taibeihacker
Moderator
一、前言介绍
WatchAD收集所有域控上的事件日誌和kerberos流量,通過特徵匹配、Kerberos協議分析、歷史行為、敏感操作和蜜罐賬戶等方式來檢測各種已知與未知威脅,功能覆蓋了大部分目前的常見內網域滲透手法。該項目在360內部上線運行半年有餘,發現多起威脅活動,取得了較好的效果。現決定開源系統中基於事件日誌的檢測部分。目前支持的具體檢測功能如下:
信息探測:使用SAMR查詢敏感用戶組、使用SAMR查詢敏感用戶、蜜罐賬戶的活動、PsLoggedOn信息收集
憑證盜取:Kerberoasting (流量)、AS-REP Roasting、遠程Dump域控密碼
橫向移動:賬戶爆破、顯式憑據遠程登錄、目標域控的遠程代碼執行、未知文件共享名、Kerberos票據加密方式降級(流量)、異常的Kerberos票據請求(流量)
權限提升:ACL修改、MS17-010攻擊檢測、新增組策略監控、NTLM 中繼檢測、基於資源的約束委派權限授予檢測、攻擊打印機服務SpoolSample、未知權限提升、MS14-068攻擊檢測(流量)、Kerberos約束委派濫用(流量)
權限維持:AdminSDHolder對象修改、DCShadow攻擊檢測、DSRM密碼重置、組策略委派權限授予檢測、Kerberos約束委派權限授予檢測、敏感用戶組修改、域控新增系統服務、域控新增計劃任務、SIDHistory屬性修改、萬能鑰匙-主動檢測、萬能鑰匙-被動檢測(流量)、黃金票據(流量)
防禦繞過:事件日誌清空、事件日誌服務被關閉
項目架構簡圖:

二、部署服务器端watachAD
本次在測試環境中部署,準備了一台centos7 部署服務器端watchAD,另一台centos7部署前端watchAD-web。1.更新centos7系統(前提已添加yum源,國內建議用阿里雲源)
[root@guest yum.repos.d]# yum -y update

2.安裝net-tools網絡工具
[root@guest yum.repos.d]# yum install net-tools

3.安裝git命令工具
[root@guest opt]# yum install git -y

4.從github下載watachAD服務器端源碼
[root@guest opt]# git clone https://github.com/0Kee-Team/WatchAD.git

5.進入WatchAD目錄
[root@guest opt]# cd WatchAD/
6.由於該項目需要python3環境運行,需要安裝python3以及pip3
[root@guest WatchAD]# yum install -y python36 #安裝python3.6


[root@guest WatchAD]# yum install -y python36-setuptools #安裝python tools插件

[root@guest WatchAD]# yum install -y python36-pip #安裝pip3

8.安裝項目所需要的python包
[root@guest WatchAD]# pip3 install -r requirements.txt

[root@guest WatchAD]# yum -y install docker #使用yum安裝dokcer

systemctl start docker.service #啟動dokcer
systemctl enable docker.service #設置為開機自啟動

10.安裝docker-compose
[root@guest WatchAD]# curl -L 'https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)' -o /usr/local/bin/docker-compose # 下載docker-compose
[root@guest WatchAD]#chmod +x /usr/local/bin/docker-compose # 添加可執行權限
[root@guest WatchAD]#docker-compose --versio # 查看docker-compose版本

11.本地單機一建安全watchAD測試環境
WatchAD需要的數據存儲依賴較多,這裡推薦使用項目中已經配置好的Docker一鍵啟動腳本.(測試環境可以使用dokcer一建安裝,正式環境需要每台服務單獨安裝)
[root@guest WatchAD]#docker-compose up
#將在本地啟動rabbitmq、logstash、elasticsearch、redis、mongo服務,測試環境最好修改下dokcer-comse的docker-compose.yaml配置文件中所涉及到默認的用戶名和密碼
#生產環境部署:WatchAD依賴了rabbitmq、logstash、elasticsearch、redis和mongo,如果你想使用現有的存儲服務和MQ等,請直接修改{project_home}/settings/database_config.py 配置信息,數據管道Logstash的配置可參考{project_home}/settings/logstash/logstash.conf ,實際的配置需要根據你的架構環境更改。

注意:
1.執行以上操作時,需要先打開一命令窗口,運行docker-compose up,把基礎數據庫環境運行起來,好觀察輸入日誌。如果後期服務穩定了,可以執行docker-compose up -d後台運行。
2.使用docker啟動的環境只能用於臨時測試,單機可能無法承擔較大的數據量。如果需要線上部署,請修改配置{project_home}/settings/database_config.py將各個服務地址替換為你的實際內網服務地址。
三、部署客服端watchAD agnet
1.客服端開啟策略審核(域控制器上配置)我們的分析基礎是所有域控的所有事件日誌,所以首先需要打開域控上的安全審核選項,讓域控記錄所有類型的事件日誌。這里以windows server 2008為例,在本地安全策略-安全設置-本地策略-審核策略,打開所有審核選項:

2.安裝agnet winlogbeat
首先,打開我們提供的配置文件{project_home}/settings/winlogbeat/winlogbeat.yml,修改output.logstash的hosts字段值為你所安裝的LogstashIP和端口(默認5044)
[root@guest winlogbeat]# vi /opt/WatchAD/settings/winlogbeat/winlogbeat.yml #修改hosts字段中的ip地址
winlogbeat.event_logs:
- name: Security
ignore_older: 1h
output.logstash:
hosts: ['本地IP地址:5044']

3.安裝和配置winlogbeat(在域控主機上安裝)
前往下載對應版本的winlogbeat,建議版本為6.2,其它版本的字段可能有變動,存在不兼容的可能性。 WatchAD要求下載6.2版本,其下載地址為:https://artifacts.elastic.co/downloads/beats/winlogbeat/winlogbeat-6.2.0-windows-x86_64.zip,
解壓之後,使用剛才修改的配置文件winlogbeat.yml替換掉原本默認的配置文件winlogbeat.yml.

接下來按照官網的教程正常安裝即可(https://www.elastic.co/guide/en/beats/winlogbeat/current/winlogbeat-installation.html)。
(1).把下載的winlogbeat 6.2壓縮包,解壓到中C:\Program Files
(2).將winlogbeat-version目錄重命名為Winlogbeat
(3).打開安裝目錄下Winlogbeat目錄下的winlogbeat.yml文件,把內容都刪除了,然後復制測試服務器上項目watchAD下winlogbat.yml文件覆蓋該文件目錄下。

(4).以管理員身份打開PowerShell提示符(右鍵單擊PowerShell圖標,然後選擇“以管理員身份運行”)

(5).在PowerShell提示符下,運行以下命令以安裝服務
PS C:\Users\Administrator cd 'C:\Program Files\Winlogbeat'
PS C:\Program Files\Winlogbeat .\install-service-winlogbeat.ps1


(6).如果在系統上禁用了腳本執行,則需要為當前會話設置執行策略以允許腳本運行。例如:
set-executionpolicy remotesigned

注意:事件日誌並不會在各個域控之間同步,所以我們必須收集所有域控的所有事件日誌,否則會產生誤報和漏報。
四、初始化watchAD引擎
1.wachchAD的幫助命令:Usage: WatchAD.py options [settings]
Options:
-h, --help 顯示幫助信息
--install 執行WatchAD初始化安裝,在次之前請確保已完整環境安裝和配置。
-d DOMAIN, --domain=DOMAIN
A FQDN domain name of detection.AD服務器的域名
-s SERVER, --ldap-server=SERVER
Server address for LDAP search. e.g: dc01.corp.com,服務器地址,如果域名解析了,可以域名,其實就是AD的全稱主機名
-u USERNAME, --domain-user=USERNAME
Username for LDAP search. e.g: CORP\peter,連接AD的賬戶,格式:域名\\賬戶或者域名\賬號
-p PASSWORD, --domain-passwd=PASSWORD
Password for LDAP search.管理員密碼
--check 檢查各個數據庫連接狀態、消息隊列狀態
--start 啟動檢測引擎
--restart 重啟檢測引擎
--stop 停止引擎(刪除現有消息隊列,防止數據量過大造成積壓)
--status 查看當前引擎狀態

python3 WatchAD.py --install -d bks.com -s dc.bks.com -u bks\administrator -p *********

正常初始化安裝成功WatchAD,需要滿足以下要求:
(1).所有存儲相關的依賴都正確安裝和配置
(2).能夠訪問安裝時指定的LDAP Server
(3).supervisor正確安裝可使用
(4).正確安裝python3.6,且存在/usr/bin/python3 軟連接
3.啟動watchAD
python3 WatchAD.py --start
完成之後,會使用supervisor對python進程進行託管,WatchAD的命令行只是對supervisor的命令進行了一個簡單封裝,引擎的啟動關閉本質上是supervisor任務的啟動關閉。

五、部署Web监控端服务WatchAD-web
1.下載WatchAD-Web源碼[root@guest opt]# git clone https://github.com/0Kee-Team/WatchAD-Web.git

2.修改配置
修改連接數據庫的配置:修改WatchAD-web/Server/config/database_config.py文件中的數據庫配置與WatchAD一致;

修改前端頁面配置:把WatchAD-Web/frontend/.env.production`和`WatchAD-Web/frontend/.env.development此文件中的127.0.0.1改為WatchAD-Web所在服務器的IP。我的WatchAD和WatchAD-Web搭建在一個服務器了,所以IP一樣。

3.進行編譯
進到下載WatchAD-Web目錄,執行:docker-compose build,如果上一步的配置有修改或者代碼有變動,需要重新執行此命令,下一步的docker-compose up才會對其修改生效

4.進行安裝
執行命令:
docker-compose up -d

啟動後,就可以訪問WatchAD-Web前端頁面了,地址:http://服務器ip/activity_timeline.html
六、自定义修改
1.项目结构说明WatchAD 根目錄├─libs 引用的部分外部庫
├─models 封裝的數據對象
├─modules 主模塊目錄
│ ├─alert 告警處理的相關代碼
│ ├─detect 威脅檢測代碼
│ │ ├─event_log 基於事件日誌的檢測代碼
│ │ │ ├─ . 分類的檢測代碼
│ │ │ └─record 用於記錄域內實體的各種活動,不告警
│ │ └─traffic_kerberos 基於kerberos流量的檢測代碼(本次不開源,移除)
│ └─record_handle 分析時用到的其它信息操作文件
├─scripts 安裝、定時任務等用到的腳本
├─settings 各種配置文件,獲取配置信息的操作文件
├─tools 工