使用者在加入網域的電腦登入失敗,我們可以在本機的事件檢視器調閱相關的稽核紀錄。若想要知道網域的電腦是否有登入異常的情況,例如有人嘗試在破解密碼,我們總不可能登入每台電腦的事件檢視器進行查看吧。
此時就要透過 AD 設定 GPO 針對登入失敗進行稽核
電腦設定 > 原則 > Windows 設定 > 安全性設定 > 本機原則 > 稽核原則
電腦設定 > 原則 > Windows 設定 > 安全性設定 > 進階稽核原則設定 > 登入 / 登出
先在測試的電腦手動更新 GPO 原則
gpupdate /force
接下來使用錯誤的密碼登入電腦,就可以在 AD 的事件檢視器調閱相關的稽核紀錄。
我們很難直接從事件檢視器進行統計分析,搭配如何使用 Grafana Loki 分析 Windows 登入日誌。
主要的 LogQL 語法如下
{computer=~"$computer", channel="Security", source="Microsoft-Windows-Security-Auditing", eventID="4771"}
|~ "(?i)$search"
| regexp `\\r\\n\\t帳戶名稱:\\t\\t(?P<UserName>[a-zA-Z0-9_$-]+)`
| regexp `\\r\\n\\t用戶端位址:\\t\\t::ffff:(?P<IpAddress>\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})`
| IpAddress !=""
| regexp `\\r\\n\\t錯誤碼:\\t\\t(?P<Status>\w+)`
| label_format Status=`{{.Status | trim | replace "0x18" "提供錯誤的密碼" | replace "0x25" "時鐘誤差太大"}}`
| regexp `\\r\\n\\t預先驗證類型:\\t(?P<PreAuthType>\w+)`
| label_format PreAuthType=`{{.PreAuthType | trim | replace "2" "標準密碼驗證"}}`
將事件數據透過 Grafana 圖形化的方式呈現,很容易就可以分析出異常。
監控一定要做告警,事發當下趕緊處理。
若想針對大量登入失敗進行警報,可以參考如何使用 Grafana Loki 警報規則並透過 Alertmanager 發送警告。
建立一個登入失敗的警報規則來測試
sudo vi /tmp/loki/rules/fake/windows-login-alert.yml
groups:
- name: windows-login-failed-alert
rules:
- alert: windows-login-failed
expr: |
count_over_time({computer=~"(your_AD1|your_AD2)", channel="Security", source="Microsoft-Windows-Security-Auditing", eventID="4771"}
| regexp `\\r\\n\\t用戶端位址:\\t\\t::ffff:(?P<IpAddress>\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})`
| regexp `\\r\\n\\t帳戶名稱:\\t\\t(?P<UserName>[a-zA-Z0-9_$-]+)` [1m]) > 3
for: 0m
labels:
severity: critical
annotations:
summary: "主機名稱: {{ $labels.computer }}\n警示訊息: Too many login failed.\n用戶端位址: {{ $labels.IpAddress }}\n帳戶名稱: {{ $labels.UserName }}\n"
檢視 LINE 聊天群組,Alermanager 有成功發送告警無誤。
產出的報告畫面如下
今天的分享就到這邊,謝謝大家。
參考文件