Windows 安全性稽核原則與事件記錄調查實務 ── 成為看得懂 4625 的資訊系統人員

· · Windows, 資安, 事件記錄, 稽核原則, 日誌設計, PowerShell, 資訊系統

「從昨晚開始,某個帳戶就一直反覆遭到鎖定,請幫忙查一下原因」「想確認是否有人嘗試用離職員工的帳戶登入」「這台伺服器,能不能知道什麼時候、誰執行了什麼?」── 這些都是中小企業的資訊系統負責人,或是把系統交付給客戶的開發者,某天突然會收到的委託。而這時能夠依靠的,就是 Windows 的 Security 事件記錄檔。

然而實際打開事件檢視器,等在那裡的是兩種現實其中之一:想看的事件根本沒有被記錄(稽核原則沒有啟用),或是被大量事件淹沒而讀不下去(充滿雜訊、記錄檔肥大化)。安全性稽核是一種「啟用了就會記錄」的機制,但如果不事先設計好要記錄什麼、記錄到什麼程度,真正需要的時候就派不上用場。

本文將依據 2026 年 8 月當下的第一手資料,彙整稽核原則的機制(基本與詳細兩個系統)、中小規模環境中最低限度應啟用的子類別、4624/4625/4740/4688 等常見事件 ID 的判讀方式、Security 記錄檔的容量設計,以及使用 PowerShell 調查的方法。若說本站先前處理過的NTLM 稽核SMB 簽章BitLocker防火牆這幾篇文章談的是「築牢防禦」,那麼本文談的則是「事後能夠確認發生了什麼事」,是將這些文章串連起來的續篇。

1. 先講結論

  • 稽核原則有「基本」與「詳細(Advanced Audit Policy)」兩個系統,不可以混用。 Microsoft 明確指出,若兩者並用,稽核結果會變成無法預期的狀態。請統一採用詳細側(40 個以上的子類別)。1
  • 確認現況用 auditpol /get /category:*無論來源是 GPO 還是本機設定,都可以一覽目前實際生效的稽核設定。2
  • 不可以「全部啟用」。啟用會產生大量事件的子類別,會讓真正重要的事件被雜訊淹沒,也會影響效能。請以 Microsoft 的基準建議為出發點,只增加必要的項目。34
  • 登入成功是 4624,失敗是 4625。4624 要透過登入類型(2=互動式、3=網路、10=遠端桌面等)來判讀「這是什麼樣的登入」。5
  • 4625 可透過 Status/Sub Status 代碼得知失敗原因。常見的有:0xC0000064=不存在的使用者名稱、0xC000006A=密碼錯誤、0xC0000072=已停用的帳戶、0xC0000234=正處於鎖定中。6
  • 事件「會記錄在哪台機器上」是固定的。4624/4625 記錄在被存取的那一端,憑證驗證(4776)與 Kerberos 事前驗證失敗(4771)則記錄在網域控制站。查錯機器就會誤判成「沒有記錄」。678
  • Security 記錄檔有一半取決於容器的設計(最大容量與保留方式)。若保留模式為覆寫,舊事件就會依序被清除。用 Get-WinEvent -ListLog Security 確認最大容量與筆數,再根據所需的保留天數反推,擴大容量。910
  • 處理程序建立(4688)的命令列記錄非常強大,但代價是機密資訊會以明文寫入記錄檔的風險。啟用前請先檢查自家的指令碼。1112

2. 稽核原則的基礎 ── 不要混用「基本」與「詳細」

Windows 的稽核原則有兩個系統。1

  • 基本稽核原則:位於「本機原則 > 稽核原則」下的 9 個類別設定。是早於 Windows Vista 就存在的舊系統。
  • 詳細稽核原則(Advanced Audit Policy Configuration):位於「安全性設定 > 進階稽核原則設定」下 40 個以上的子類別設定。這是把基本原則中的 1 個類別拆解成多個子類別的結果,例如基本原則中的「稽核帳戶登入事件」這 1 項,對應到詳細側就有 4 個子類別。在基本原則那一側啟用 1 個類別,等同於把對應的所有子類別全部啟用,結果就是連不感興趣的事件也會被大量記錄下來。1

重點在於,這兩個系統並不相容。Microsoft 明確指出「不要同時使用基本與詳細兩者,否則稽核結果會變成無法預期的狀態」。透過群組原則套用詳細稽核原則時,該電腦既有的稽核設定會先被清除,再套用詳細側的設定,此後就只有詳細側能夠確實地控制。在使用詳細側的環境中,請啟用安全性選項「稽核:強制稽核原則子類別設定」,避免基本側的設定覆寫回來(獨立電腦預設即為啟用)。14

確認現況只需一道指令,在系統管理員的命令提示字元中執行即可。2

rem 以子類別為單位,列出目前實際生效的稽核設定
auditpol /get /category:*

rem 變更前的備份(CSV)與還原
auditpol /backup /file:C:\logs\auditpol-backup.csv
auditpol /restore /file:C:\logs\auditpol-backup.csv

auditpol 的輸出結果,無論來源是 GPO 還是本機設定,都是「實際上結果生效的原則」。當透過 GPO 配發的設定沒有反映出來時,也可以用它來比對確認。此外,稽核設定本身一旦被變更,就會記錄事件 4719,所以「不知不覺間稽核被停用了」這種情況事後也能追查。12

3. 最低限度應啟用的子類別判斷表

「先全部啟用再說」是一步壞棋,理由很明確。舉例來說,Microsoft 就警告過,若連特殊權限使用類的子類別都連成功一起稽核,事件量會變得極為龐大,不但難以找到其他項目,還會對效能造成影響。4 記錄檔的容器(第 5 章)是有限的,記錄的雜訊越多,真正需要的事件能保留的天數就會越少。所謂稽核設計,就是決定「不記錄什麼」。

Microsoft 已依工作站/伺服器分別公開基準建議與強化建議,可以作為出發點。3 在此基礎上,以中小規模環境「事件發生時最低限度想看到這些」的觀點所整理出的,就是下表。

子類別(類別) 主要事件 ID 可以了解什麼 中小規模環境的建議
登入(登入/登出) 4624 / 4625 登入成功・失敗、登入類型、來源 成功+失敗。Windows 10 1809 以後預設也會啟用成功・失敗3
特殊登入(同上) 4672 / 4964 具有系統管理員權限的登入發生 成功
帳戶鎖定(同上) 4625 對鎖定中帳戶的登入失敗 失敗(4625 為失敗事件,此子類別不存在成功事件)13
使用者帳戶管理(帳戶管理) 4720 / 4726 / 4738 / 4740 帳戶的建立・刪除・變更・鎖定 成功+失敗
安全性群組管理(同上) 4728 / 4732 / 4756(新增)、4729 / 4733 / 4757(移除) 對系統管理員群組等新增・移除成員(全域/本機/通用) 成功(此子類別不存在失敗事件)14
憑證驗證(帳戶登入) 4776 NTLM 驗證的成功與否。網域帳戶會記錄在網域控制站端7 成功+失敗
Kerberos 驗證服務(同上・僅限網域控制站) 4768 / 4771 TGT 核發與事前驗證失敗(密碼錯誤等)8 在網域控制站端成功+失敗
處理程序建立(詳細追蹤) 4688 是誰・從哪個父處理程序・啟動了什麼 成功。命令列記錄請先閱讀第 7 章的注意事項
其他物件存取事件(物件存取) 4698 排程工作的建立(攻擊持續化的常見手法)15 可考慮啟用成功
稽核原則變更(原則變更) 4719 稽核設定本身的變更 成功+失敗

反過來說,檔案系統或登錄的物件存取稽核、特殊權限使用、封包篩選類(如 5152 等),原則上不要輕易碰,這樣比較穩妥。這些項目只有在鎖定特定對象的 SACL 設定,或限定於問題排查期間時才真正有用,若常態全開就會把記錄檔的容量吃光。4

4. 常見事件 ID 的判讀方式

4.1. 4624 ── 登入成功要用登入類型來判讀

4624 是「帳戶已成功登入」,記錄在建立登入工作階段的那台機器(被存取的那一端)上。5 由於是大量記錄的事件,判讀時要先依登入類型分類。5

登入類型 名稱 實務上的意義
2 Interactive 在該 PC 主控台上的登入
3 Network 透過網路的存取(共用資料夾、管理工具等)。因為每台機器都會出現,所以數量最多
4 Batch 批次執行(排程工作等)
5 Service 服務啟動(服務控制管理員)
7 Unlock 解除螢幕鎖定
8 NetworkCleartext 密碼以明文方式傳遞給驗證套件的網路登入
9 NewCredentials 複製其他憑證(相當於 runas /netonly)
10 RemoteInteractive 遠端桌面
11 CachedInteractive 使用快取憑證登入(無法連線到網域控制站的狀態)

同時要看的欄位還有「新登入」的帳戶名稱、「網路資訊」的來源位址、「驗證套件」(NTLM 還是 Kerberos)、以及「提升的權杖」(是否為系統管理員權限工作階段)。若只想追蹤具有系統管理員權限的登入,也可以使用以相同登入 ID 記錄的 4672(特殊權限已指派)。5

4.2. 4625 ── 用 Status/Sub Status 代碼確定失敗原因

4625 是「帳戶登入失敗」,記錄在被嘗試登入的那台機器上。6 比起「失敗原因」欄位的文字說明,用 Status/Sub Status 的十六進位代碼來判讀更為確實。常見的代碼如下:6

  • 0xC0000064:不存在的使用者名稱。若短時間內連續出現,可能是帳戶列舉攻擊的徵兆
  • 0xC000006A:密碼錯誤。若針對特定帳戶連續出現,可能是密碼猜測攻擊的徵兆
  • 0xC000006D:使用者名稱或憑證資訊不正確
  • 0xC000006F:超出允許的時間範圍
  • 0xC0000070:來自未經允許的工作站
  • 0xC0000072:已被系統管理員停用的帳戶(對離職員工帳戶的嘗試會出現在這裡)
  • 0xC000015B:此機器不允許所要求的登入類型
  • 0xC0000193:已過期的帳戶
  • 0xC0000234:正處於鎖定中

「誰・從哪裡・為什麼失敗」,要靠目標帳戶+來源(工作站名稱/IP 位址)+這個代碼這三項組合來確定。第 6 章會提供一次擷取這三項資訊的 PowerShell 指令。

4.3. 4740 ── 鎖定的發生源看「呼叫端電腦名稱」

4740 是「使用者帳戶已被鎖定」(子類別為使用者帳戶管理)。這個事件的主角是「呼叫端電腦名稱(Caller Computer Name)」欄位,記錄的是引發鎖定的登入嘗試來自哪台電腦。16 標準做法是先在此鎖定發生源裝置,再檢查該裝置上殘留的舊憑證。原因幾乎都是某個東西在密碼變更後仍持續使用舊憑證(已儲存的憑證、一直維持中斷連線狀態的 RDP 工作階段、以舊密碼設定的服務或排程工作)。

有一點要注意。4625 記錄在接受登入嘗試的那一端電腦上。如果原因是發生源裝置對檔案伺服器等發出的網路登入,發生源裝置本身的 Security 記錄檔中不會留下 4625,證跡會留在存取目標伺服器的 4625,或若是網域帳戶,則留在網域控制站端的 4776(NTLM)/4771(Kerberos 事前驗證失敗)中。78 當「發生源裝置的記錄檔裡什麼都沒有」時,請去查看接受端。

4.4. 4720 系列 ── 帳戶的建立・變更・群組新增

帳戶管理類的事件編號是連號排列的。4720(建立使用者帳戶)17、4726(刪除)、4738(變更),以及群組成員的新增/移除。請注意,群組成員的變更會依群組種類而使用不同的事件 ID:本機群組是 4732/4733,全域群組是 4728/4729,通用群組是 4756/4757。14 Domain Admins 是全域群組,所以新增到該群組會記錄在 4728── 如果只把 4732 當成警示條件,就會漏掉最想看到的事件。日常情況下這只是服務台作業的記錄,但「標準使用者突然被加入系統管理員群組」「出現了沒有人知道的帳戶」這類事件,即使只發生一次也應立即列為調查對象。Microsoft 也把對特權群組的非預期成員新增,列為單次即應觸發警示的範例之一。3

4.5. 4688 ── 處理程序建立。命令列記錄是另一個開關

4688 是「已建立新的處理程序」,每次建立處理程序時,都會記錄建立者帳戶、新處理程序的執行檔路徑、父處理程序,以及權杖提升類型。11 這是一個能回答「這台伺服器上是誰執行了什麼」的、調查價值很高的事件。

不過,預設不會記錄命令列引數。必須另外啟用「在處理程序建立事件中包含命令列」這項群組原則(系統管理範本 > 系統 > 稽核處理程序建立),4688 的「處理程序命令列」欄位才會出現引數。1112 要追蹤像 powershell -EncodedCommand ... 這類可疑的啟動方式,這項設定事實上是必要的,但請先理解第 7 章所述的機密混入風險,再決定是否啟用。

4.6. 4698 ── 排程工作的建立

4698 是「已建立排程工作」,會記錄工作名稱以及工作定義的完整 XML(包含執行命令)。由於登錄排程工作是惡意程式在重新開機後仍能存活的常見手法,Microsoft 建議監控工作建立事件。15 即使是業務上大量使用排程工作的環境,「建立」這個動作本身並非日常會發生的事,所以雜訊相對較小。

另外還有一個值得記住的是 1102「稽核記錄檔已清除」。Security 記錄檔的清除操作一定會留下這個事件,所以在「記錄檔變成空的」時,可以藉此判斷是事故還是人為操作。18

5. 記錄檔容器的設計 ── 最大容量與保留

在增加稽核項目之前,先確認容器。Security 記錄檔有最大容量與保留模式,在覆寫模式(常見的預設組態)下,一旦達到最大容量,新事件就會覆寫掉最舊的事件。反過來,在保留模式(不覆寫)下,記錄檔一旦滿了,反而是新事件會被捨棄10 這兩種行為都可能造成「回過神來才發現記錄不見了」的情況,所以要先掌握現況。

# 確認 Security 記錄檔的容器:保留模式・最大容量・目前筆數
Get-WinEvent -ListLog Security |
    Select-Object LogName, LogMode, MaximumSizeInBytes, RecordCount

# 目前實際保留了幾天份(最舊事件的時間)
Get-WinEvent -LogName Security -Oldest -MaxEvents 1 |
    Select-Object TimeCreated

Get-WinEvent -ListLog 會一併回傳記錄檔的組態與筆數。9 「最舊事件的時間」與目前時間之差,就是實際的保留天數;若這不足以滿足自家的需求(事件調查時想回溯的天數),就要擴大最大容量。設定可以用 wevtutil sl Security /ms:<位元組數>,或透過群組原則配發。10

另外,安全性選項中還有一項「稽核:如果無法記錄安全性稽核,則立即關閉系統」(俗稱 CrashOnAuditFail)的設定。啟用後,一旦無法記錄稽核,系統就會以 STOP 錯誤 C0000244 停止運作。這是為了絕對不能遺漏稽核證跡的驗證需求而設的設定,預設為停用。Microsoft 本身也提醒,攻擊者可能刻意產生大量事件,將此轉化成迫使伺服器停止的 DoS 攻擊,一般中小規模環境不應輕易啟用。19

6. 調查的實務 ── 篩選、Get-WinEvent、匯出

6.1. 在事件檢視器中篩選

如果只是單次調查,事件檢視器就已足夠。開啟 Security 記錄檔,用「篩選目前記錄檔」指定事件 ID(例如 4625)與時間範圍。若是會反覆查看的條件,用「建立自訂檢視」儲存起來,下次只需點一下即可。若不只想依事件 ID 篩選,還想依特定帳戶等條件縮小範圍,可以在篩選對話方塊的 XML 分頁中直接編輯 XPath 查詢。

6.2. 使用 Get-WinEvent 擷取

當調查筆數較多、有多重條件、或需要定期執行時,就切換到 PowerShell 的 Get-WinEvent。重點是使用 -FilterHashtable,讓篩選在伺服器端就生效。9

# 取得最近 24 小時內的登入失敗(4625)
Get-WinEvent -FilterHashtable @{
    LogName   = 'Security'
    Id        = 4625
    StartTime = (Get-Date).AddDays(-1)
}

# 將「誰・從哪裡・為什麼」整理成表格
Get-WinEvent -FilterHashtable @{
    LogName   = 'Security'
    Id        = 4625
    StartTime = (Get-Date).AddDays(-1)
} | ForEach-Object {
    $x = [xml]$_.ToXml()
    $d = @{}
    $x.Event.EventData.Data | ForEach-Object { $d[$_.Name] = $_.'#text' }
    [pscustomobject]@{
        Time      = $_.TimeCreated
        Account   = "$($d.TargetDomainName)\$($d.TargetUserName)"
        LogonType = $d.LogonType
        Source    = "$($d.WorkstationName) $($d.IpAddress)"
        Status    = $d.Status
        SubStatus = $d.SubStatus
    }
} | Group-Object Account, Status, SubStatus, Source |
    Sort-Object Count -Descending |
    Format-Table Count, Name -AutoSize

只要備妥這一套「從事件的 XML 表現形式中取出 EventData」的模式,無論是 4624 還是 4688,都能用同樣的方式套用。關於 Get-WinEvent 的篩選設計(FilterHashtable 與 XPath 的區分使用、緩慢查詢的修正方式),在「使用 Get-WinEvent 有效率地調查事件記錄」中有詳細說明。

6.3. 使用 wevtutil 匯出

調查對象機器上的記錄檔,原則上要在因覆寫而消失之前,先匯出保全10

rem 將 Security 記錄檔整份保全為 evtx
wevtutil epl Security C:\logs\security-20260801.evtx

rem 只用 XPath 篩選出 4625 並匯出
wevtutil epl Security C:\logs\security-4625.evtx /q:"*[System[(EventID=4625)]]"

匯出的 .evtx 檔案,可以在另一台機器上用 Get-WinEvent -Path C:\logs\security-20260801.evtx 以相同方式進行分析。9 「先保全再分析」的習慣,和當機調查中「先確保傾印檔」的思路是一樣的(參見「Windows 應用的 crash dump 收集入門」)。

7. 陷阱 ── 現場容易踩到的 4 個地方

(1) 4688 的命令列上會夾帶機密資訊。 啟用命令列記錄後,所有處理程序的引數都會以明文寫入 Security 記錄檔。Microsoft 明確指出:「任何具有安全性事件讀取存取權限的使用者,都能讀取到所有處理程序的命令列引數。引數中可能包含密碼等機密資訊。」12 只要業務應用程式或指令碼裡有一個是以 myapp.exe /user:admin /password:P@ssw0rd 這種方式啟動的,那就等於把機密資訊公開給所有能看記錄檔的人。啟用前,務必先找出以引數傳遞機密資訊的地方並修正。記錄檔的保全與轉送目的地,也需要相同等級的保護措施。

(2) 不清楚記錄檔滿了會有什麼行為,就直接上線運行。 覆寫模式下,舊證跡會悄悄消失;不覆寫的設定下,新事件會被捨棄;啟用 CrashOnAuditFail 的話,則連系統本身都會停止(第 5 章)。1019 正確做法是掌握自己選的是哪一種行為,並準備好「消失之前先蒐集起來」的機制(定期匯出或記錄收集平台)。

(3) 網域控制站與終端裝置該看的記錄檔不一樣。 4624/4625 記錄在被存取的機器上。56 另一方面,網域帳戶的憑證驗證(NTLM 的 4776)記錄在對該憑證擁有權威的機器上,也就是說,網域帳戶會記錄在網域控制站端7;Kerberos 的事前驗證失敗(4771)則只會記錄在網域控制站上。8 「檔案伺服器上沒有 4625」並不等於「沒有發生攻擊」,唯有再比對網域控制站端的 4776/4771,才能拼出完整的全貌。至於哪種驗證通訊協定會如何運作,請參考「圖解NTLM與Kerberos」。

(4) 時間同步一有偏差就無法比對。 把多台機器的記錄檔並排,追查「這個 4740 發生前,是哪台裝置出現了 4625」這種作業,前提是各機器的時鐘要對得上。在網域環境中,Kerberos 本身就對時鐘偏差設有上限(預設 5 分鐘),一旦超過,驗證本身就會開始失敗。20 從調查的角度來看,別說 5 分鐘,就連數秒的偏差都可能讓人誤讀前後順序,所以請把確認 w32time 的同步狀態排在調查步驟的最前面。此外,事件的記錄時間是以 UTC 儲存,顯示時則依照檢視機器的時區,因此在讀取從海外據點或設定為 UTC 的伺服器取得的 evtx 檔案時,請不要忘記換算時區。

8. 總結

  • 稽核原則有「基本」與「詳細」兩個系統,混用會產生無法預期的結果。請統一採用詳細側,並先用 auditpol /get /category:* 確認現況後再進行設計。
  • 「全部啟用」會因雜訊與肥大化而扼殺調查工作。請以 Microsoft 的基準建議為出發點,從第 3 章以登入・帳戶管理・處理程序建立為主軸的判斷表開始著手。
  • 4624 看登入類型,4625 看 Status/Sub Status 代碼,4740 看呼叫端電腦名稱,4688 看父處理程序與命令列 ── 每個事件都有一個「就看這裡」的關鍵所在。
  • 記錄檔的容器(最大容量・保留模式)佔了稽核設計的一半。請確認實際保留的天數,依需求反推決定容量,並在消失之前完成匯出或彙整。
  • 4688 的命令列記錄,請先檢查機密混入的風險再啟用。各機器記錄位置的差異,以及時間同步,是比對調查的前提條件。
  • 調查工作先從事件檢視器的篩選功能開始,若要重複執行則改用 Get-WinEvent -FilterHashtable,保全則用 wevtutil epl。「先保全,再分析」的順序不要打亂。

相關文章

相關諮詢領域

合同會社小村軟體提供 Windows 環境稽核原則・日誌設計的諮詢,以事件記錄為基礎進行「何時・誰・做了什麼」的調查,以及業務應用程式在驗證・稽核相關所引發問題的原因分析。即使還停留在「被要求查看記錄檔,但不知道該從哪裡下手」的階段也沒關係。

參考連結

  1. Microsoft Learn, Advanced security auditing FAQ。關於基本稽核原則(本機原則下的 9 項設定)與詳細稽核原則的差異、基本原則中啟用 1 個類別等同於啟用對應的所有子類別、兩者不相容且併用會導致稽核結果無法預期因此不可混用、透過群組原則套用詳細側會清除既有稽核設定、應啟用「稽核:強制稽核原則子類別設定」、以及要將事件量降到最低就必須鎖定重要的資源・活動・使用者等內容。  2 3 4

  2. Microsoft Learn, auditpol。關於 auditpol 指令可以進行系統稽核原則的顯示(/get)・設定(/set)・備份為 CSV(/backup)・還原(/restore)・清除(/clear)等內容。  2

  3. Microsoft Learn, System Audit Policy recommendations。關於依工作站/伺服器分類的 Windows 預設值・基準建議・強化建議一覽表、這些建議終究只是出發點,各組織應依威脅與風險容忍度自行評估與測試、登入子類別在 Windows 10 1809 以後成功・失敗皆預設啟用、監控工作站與伺服器同樣重要、對特權群組的非預期成員新增等應單次即發出警示的事件範例,以及以基準比較偵測登入失敗急增的思路等內容。  2 3 4

  4. Microsoft Learn, Audit: Force audit policy subcategory settings (Windows Vista or later) to override audit policy category settings。關於可用 40 個以上的稽核子類別進行精細管理、將此設定維持啟用是最佳實務且用戶端・成員伺服器・網域控制站的有效預設值皆為啟用、以及像將特殊權限使用子類別全部啟用這類會產生大量事件的設定,會讓其他項目難以在安全性記錄檔中找到並可能對效能造成重大影響的警告等內容。  2 3 4

  5. Microsoft Learn, 4624(S): An account was successfully logged on。關於 4624 會在建立登入工作階段時記錄在被存取的那一端電腦上、登入類型一覽(2=Interactive、3=Network、4=Batch、5=Service、7=Unlock、8=NetworkCleartext、9=NewCredentials、10=RemoteInteractive、11=CachedInteractive)、提升的權杖(Elevated Token)旗標、驗證套件(NTLM/Kerberos/Negotiate)與 NTLM 的 Package Name(NTLM V1/V2/LM)、以及透過登入 ID 與 4672 等事件相互關聯等內容。  2 3 4 5

  6. Microsoft Learn, 4625(F): An account failed to log on。關於 4625 會記錄在進行登入嘗試的電腦上(若是使用者裝置上的嘗試則記錄在該裝置端)、子類別為帳戶鎖定與登入、Status/Sub Status 代碼的意義(0xC0000064=不正確的使用者名稱、0xC000006A=密碼錯誤、0xC000006D=使用者名稱或憑證資訊不正確、0xC000006F=超出允許時間範圍、0xC0000070=未經允許的工作站、0xC0000072=已停用的帳戶、0xC000015B=不允許的登入類型、0xC0000193=已過期的帳戶、0xC0000234=鎖定中),以及連續出現的 0xC0000064 可能是帳戶列舉攻擊徵兆等內容。  2 3 4 5

  7. Microsoft Learn, 4776(S, F): The computer attempted to validate the credentials for an account。關於 4776 會在每次進行 NTLM 驗證的憑證確認時記錄、只有對憑證擁有權威的電腦才會記錄,網域帳戶記錄在網域控制站,本機帳戶記錄在本機電腦,以及成功與失敗皆會記錄等內容。  2 3 4

  8. Microsoft Learn, 4771(F): Kerberos pre-authentication failed。關於 4771 會在 KDC 核發 Kerberos TGT 失敗(密碼錯誤・過期等)時記錄、以及此事件僅會在網域控制站上產生等內容。  2 3 4

  9. Microsoft Learn, Get-WinEvent (Microsoft.PowerShell.Diagnostics)。關於使用 -ListLog 取得記錄檔組態(LogMode・MaximumSizeInBytes・RecordCount)、使用 -FilterHashtable 以雜湊表指定 LogName・Id・StartTime 等進行高效篩選、使用 -Path 讀取已儲存的 .evtx 檔案、以及使用 -Oldest / -MaxEvents 依由舊到新的順序・指定筆數取得等內容。  2 3 4

  10. Microsoft Learn, wevtutil。關於透過 set-log(sl)設定最大容量(/ms)・保留模式(/rt)、保留模式為 true 時記錄檔滿了會保留既有事件並捨棄新事件,為 false 時新事件會覆寫最舊的事件、透過 export-log(epl)將事件記錄檔匯出至檔案並可用 /q 選項以 XPath 查詢篩選、以及透過 query-events(qe)執行查詢等內容。  2 3 4 5

  11. Microsoft Learn, 4688(S): A new process has been created。關於 4688 會在每次新處理程序啟動時記錄、內容包含建立者帳戶・新處理程序的執行檔路徑・建立來源(父)處理程序名稱・權杖提升類型、以及 Process Command Line 欄位預設為空白,必須啟用「在處理程序建立事件中包含命令列」群組原則才會被記錄等內容。  2 3

  12. Microsoft Learn, Command line process auditing。關於命令列記錄需要同時具備詳細稽核原則中的處理程序建立稽核,以及「在處理程序建立事件中包含命令列」(系統管理範本 > 系統 > 稽核處理程序建立,預設未設定)兩項設定、啟用後所有處理程序的命令列資訊都會以明文記錄在安全性事件記錄檔中,具有讀取存取權的所有使用者都能讀取可能包含密碼等機密資訊的引數的注意事項、以及詳細稽核原則若被基本設定覆寫會記錄事件 4719,可用「強制」設定防止等內容。  2 3 4

  13. Microsoft Learn, Audit Account Lockout。關於帳戶鎖定子類別會稽核對鎖定中帳戶的登入失敗、產生的事件為 4625(F)、此子類別不存在成功事件因此啟用成功稽核沒有意義、以及建議所有電腦類型都啟用失敗稽核等內容。 

  14. Microsoft Learn, Audit Security Group Management。關於此子類別會稽核安全性群組的建立・變更・刪除以及成員新增・移除、成員新增/移除的事件 ID 依群組種類區分為本機群組 4732/4733・全域群組 4728/4729・通用群組 4756/4757、存在 4728 等網域群組專用事件、以及此子類別不存在失敗事件因此建議所有電腦類型都啟用成功稽核等內容。  2

  15. Microsoft Learn, 4698(S): A scheduled task was created。關於 4698 會在每次建立排程工作時記錄、子類別為其他物件存取事件、會記錄工作名稱以及包含執行命令的工作定義完整 XML、以及惡意程式常以排程工作作為重新開機後的持續化手段,因此建議特別在重要機器上監控工作建立事件等內容。  2

  16. Microsoft Learn, 4740(S): A user account was locked out。關於 4740 會在每次使用者帳戶被鎖定時記錄、子類別為使用者帳戶管理、以及 Caller Computer Name 欄位會記錄引發鎖定的登入嘗試來源電腦名稱等內容。 

  17. Microsoft Learn, 4720(S): A user account was created。關於 4720 會在網域控制站・成員伺服器・工作站上,於每次新增使用者物件時記錄、以及子類別為使用者帳戶管理等內容。 

  18. Microsoft Learn, 1102(S): The audit log was cleared。關於事件 1102 會在每次 Windows 安全性稽核記錄檔被清除時記錄等內容。 

  19. Microsoft Learn, Audit: Shut down system immediately if unable to log security audits。關於此設定啟用時若無法記錄安全性稽核,系統會以 STOP 訊息 C0000244 {Audit Failed} 停止運作、預設值為停用、可能被轉化為刻意產生大量安全性事件以強制關機的 DoS 攻擊、以及突然停止可能導致應用程式資料無法使用等內容。  2

  20. Microsoft Learn, Maximum tolerance for computer clock synchronization。關於 Kerberos v5 為防範重送攻擊而使用時間戳記,因此對用戶端與網域控制站的時鐘偏差設有最大容許差(預設・建議皆為 5 分鐘),超過此範圍時時間戳記將不被視為真實等內容。 

共用相同標籤的最新文章。能以相近的主題延伸理解。

與本文相近的主題頁面。以本文為起點,可進一步連到相關服務與其他文章。

本文連結到以下服務頁面,歡迎從最接近的入口查看。

常見問題

整理諮詢這個主題時常見的問題。

明明沒有設定任何稽核原則,為什麼 Security 記錄檔中卻已經記錄了 4624 或 4625?
這是因為 Windows 有預設啟用的稽核子類別。例如「登入」子類別,在 Windows 10 版本 1809 以後,成功與失敗兩者都是預設啟用的,所以即使什麼都沒設定,4624(成功)與 4625(失敗)也會被記錄下來。不過在維持預設狀態的情況下,像是憑證驗證(4776)或處理程序建立(4688)這類調查時會想要的事件,大多不會被記錄。自己所在環境目前啟用了哪些項目,可以用 auditpol /get /category:* 確認。在此基礎上,將不足的子類別在詳細稽核原則那一側明確啟用,就是實務上的標準做法。
想要調查登入失敗,但在目標伺服器的 Security 記錄檔中卻找不到 4625。應該查看哪裡?
首先請確認一項原則:4625 會記錄在「嘗試登入的那台電腦」上。如果是使用者端裝置上的登入失敗,就在該裝置端;如果是存取檔案伺服器失敗,就在檔案伺服器端。接著用 auditpol /get /category:* 確認「登入」子類別的失敗稽核是否已啟用。若是網域帳戶,通常在網域控制站端的憑證驗證(4776)或 Kerberos 事前驗證失敗(4771)中也會留下記錄,當無法鎖定裝置時,從網域控制站端著手調查反而更快。若仍然找不到,請確認是否因記錄檔覆寫而使過去的記錄消失(檢查記錄檔的最大容量與最舊事件的時間)。
應該啟用處理程序建立(4688)的命令列記錄嗎?
這項設定的調查價值非常高,但也是一項必須先理解風險再決定是否啟用的設定。啟用後,所有處理程序的命令列引數都會以明文形式記錄在 Security 記錄檔中。只要有一個以命令列傳遞密碼或 API 金鑰的指令碼或業務應用程式,那份機密資訊就會變成所有能讀取 Security 記錄檔的人都看得到。Microsoft 本身也明確指出了這個注意事項。建議的順序是:先檢查自家的指令碼是否有以命令列引數傳遞機密資訊,修正相關之處後,再啟用這項設定。
Security 記錄檔的最大容量應該設為多少?
正確做法是從「希望手邊保留幾天份」反推回去,並沒有一個放諸四海皆準的數值。目前的設定與實際狀況可以用 Get-WinEvent -ListLog Security 確認,最舊事件的時間與目前時間之差,就是「實際上目前保留的天數」。增加稽核子類別會使事件量增加,因此變更設定後,務必重新確認這個實際保留天數。在事件應變中,經常需要用到數週到數個月前的記錄,因此建議在記錄因覆寫而消失之前定期匯出,或透過記錄收集機制彙整到另一台機器上,會比較安心。
帳戶鎖定(4740)的原因該如何調查?
4740 事件的「呼叫端電腦名稱(Caller Computer Name)」欄位是最初的線索。這裡記錄的是引發鎖定的失敗登入是從哪台電腦發出的。不過請注意,失敗記錄本身(4625)並不會留在發生源那一端,而是留在接受登入嘗試的那一端。如果是源自網路登入,就依時間順序追查存取目標伺服器的 4625,若是網域帳戶則追查網域控制站的 4776/4771。確定發生源裝置之後,接著要在該裝置端檢查是否有在密碼變更後仍持續使用舊憑證的項目,也就是已儲存的憑證、一直維持中斷連線狀態的遠端桌面工作階段,以及使用舊密碼組態的服務或排程工作。若鎖定反覆發生,也請一併確認時間同步是否有偏差。

作者檔案

本文作者的個人檔案頁面。

Go Komura

小村軟體有限公司 代表

以 Windows 軟體開發、技術諮詢與故障調查為中心,在難以重現的故障調查與既有資產仍在運作的專案上具有優勢。

回到部落格一覽