Event ID 4663 spiegato: audit di accesso a file e registro con SACL
4663 è il record di audit dell'oggetto per ogni accesso. Configura le SACL sui file e sulle chiavi giuste e ottieni un log byte per byte di chi ha toccato cosa. Utile per ransomware, exfil e furto di credential store.
L'Event ID 4663, „È stato tentato un accesso a un oggetto", scatta sul canale Security ogni volta che un file, una chiave di registro o un oggetto kernel auditati vengono toccati in un modo che corrisponde alla loro System Access Control List. A differenza della maggior parte dei record Security, 4663 non produce nulla per default. Devi prima configurare la SACL sull'oggetto. Per questo la maggior parte degli ambienti non lo ha. Per questo anche quelli che lo hanno hanno un vantaggio di detection quasi sleale su un piccolo insieme di tecniche.
Se strumenti 4663 su esattamente cinque cose e ignori il resto, prenderai lo staging del credential dump, gli sweep di ransomware e il furto DPAPI a un costo inferiore a qualsiasi EDR.
Dove scatta
Sull'host che possiede l'oggetto. Le SACL su file scattano sul file server. Le SACL del registro locale scattano sulla workstation. Le SACL su oggetti AD scattano sul DC. Non esiste un record centrale. Per avere visibilità su tutto il parco verso uno share sensibile, devi inoltrare Security dal file server che lo ospita. Questo fa inciampare la gente di continuo.
I campi del record
<Data Name="SubjectUserSid">S-1-5-21-...-1107</Data>
<Data Name="SubjectUserName">alice</Data>
<Data Name="SubjectDomainName">CORP</Data>
<Data Name="SubjectLogonId">0x2a4c8</Data>
<Data Name="ObjectServer">Security</Data>
<Data Name="ObjectType">File</Data>
<Data Name="ObjectName">C:\Windows\System32\config\SAM</Data>
<Data Name="HandleId">0x4d0</Data>
<Data Name="AccessList">%%4416 %%4423</Data>
<Data Name="AccessMask">0x80</Data>
<Data Name="ProcessId">0x1d34</Data>
<Data Name="ProcessName">C:\Windows\System32\reg.exe</Data>
<Data Name="ResourceAttributes">-</Data>
Quelli che contano:
ObjectType.File,Key(registro),Process,Token,Directory,Section. Qualsiasi classe di oggetto che supporta SACL.ObjectName. Path completo. Per i file, un path Windows. Per le chiavi di registro, il path completo sotto\REGISTRY\MACHINE\...(nonHKLM\...come scriveresti in regedit).AccessList. Cosa è stato tentato, come token di diritto di accesso decodificati. I comuni:%%4416= ReadData / ListDirectory%%4417= WriteData / AddFile%%4418= AppendData / AddSubdirectory%%4419= ReadEA,%%4420= WriteEA%%4423= ReadAttributes,%%4424= WriteAttributes%%4425= DELETE
AccessMask. Bitmask grezza diSTANDARD_RIGHTS_*e dei diritti specifici dell'oggetto effettivamente richiesti.ProcessNameeProcessId. Il processo che ha aperto l'handle. Pivota a 4688 o Sysmon 1 per il contesto completo del processo.SubjectLogonId. Pivota a 4624 per la sessione originante, l'IP sorgente se logon di rete, e l'utente.
Accendere 4663 sono tre passi e la gente ne salta uno
- Audit policy. Abilita le sub-policy Object Access per File System e/o Registry, success e/o failure. Group Policy o
auditpol /set /subcategory:"File System" /success:enable /failure:enable. - SACL sull'oggetto. Proprietà, scheda Sicurezza, Avanzate, scheda Controllo nella GUI. O
Set-Acl,icacls /audit. Specifichi quale principal, quali diritti e se auditare success, failure o entrambi. - Per il registro, stesso flusso tramite Autorizzazioni della chiave di regedit, Avanzate, Controllo.
Senza (1) i record non vengono mai scritti. Senza (2) Windows non ha idea che tu volessi auditare niente. Senza (3) stai auditando solo file. La gente più spesso salta (2) perché il passo (1) sembra dover bastare. Non basta.
Le SACL che si guadagnano lo stipendio su ogni server:
C:\Windows\System32\config\SAM,SECURITY,SYSTEM. AuditaEveryone : ReadData : Success. Qualsiasi cosa legga questi diversa daLocalSystemè credential dumping.- File
*.dmpinC:\Windows\Tempe%TEMP%. AuditaEveryone : WriteData : Success. Un processo che scrive un.dmpqui è o Windows dopo un crash, o un operatore Mimikatz. C:\ProgramData\Microsoft\Crypto\RSAeC:\Users\*\AppData\Roaming\Microsoft\Protect. Directory di master-key DPAPI. AuditaReadData : Success. Qualsiasi cosa li legga al di fuori della sessione dell'utente stesso sta rubando segreti.HKLM\SECURITYeHKLM\SAM. Equivalenti su registro. Stesso audit.- Share di file sensibili: finanza, legale, payroll. Audita
WriteData + DELETE : Successper cogliere sweep ransomware e cancellazioni di massa.
I pattern che davvero coglierai
Lettura dell'hive SAM o SYSTEM
Ogni 4663 con ObjectName che termina in \config\SAM, \config\SECURITY o \config\SYSTEM, dove ProcessName non sia services.exe, lsass.exe o wininit.exe, e SubjectUserSid non sia S-1-5-18. Questo è reg save HKLM\SAM, esentutl /y contro una shadow copy, o qualsiasi strumento di credential dumping con accesso a hive a livello file. Incrocia col registro per eventuali file di hive di backup lasciati dietro.
Minidump di LSASS scritto
Un 4663 WriteData per un file .dmp in C:\Windows\Temp\, C:\ProgramData\ o %TEMP%, con ProcessName di rundll32.exe, procdump*.exe o qualsiasi cosa che chiami comsvcs.dll. Il caso da manuale è rundll32.exe C:\Windows\System32\comsvcs.dll MiniDump <pid> lsass.dmp full. Incrocia con 4688 per la CommandLine. Il 4663 lo coglie anche quando l'EDR dormiva.
Sweep di cifratura ransomware
Molti 4663 con AccessMask che include WriteData + DELETE contro file in uno share sensibile entro secondi, tutti dallo stesso SubjectLogonId e ProcessName. Un vero processo di backup tocca file in un pattern misurato e throttled. Il ransomware sweepa un albero di directory veloce quanto il disco permette. La forma lo tradisce.
Furto di master-key DPAPI
4663 ReadData su file sotto \AppData\Roaming\Microsoft\Protect\<sid>\ da qualsiasi processo diverso dalla sessione propria dell'utente. Il segno inequivocabile è che SubjectUserSid sia un SID diverso da quello incorporato nel path.
Lettura del file di password Group Policy Preferences
4663 ReadData su file che combaciano con \SYSVOL\<domain>\Policies\*\Groups.xml, o Services.xml, Drives.xml, ScheduledTasks.xml. Questo è Get-GPPPassword. La tecnica è vecchia. I file SYSVOL spesso esistono ancora su domini legacy, e ti sorprenderesti di quante volte qualcuno prenda la chiave AES offuscata da MSDN e se ne vada con una credenziale di dominio.
Sigma: lettura hive SAM
title: SAM Hive Read from Disk (Credential Dumping)
id: 5e1f9a3a-49a3-4f31-9c2e-8f5b1c2d3a4f
status: stable
description: A non-system process opened the SAM/SECURITY/SYSTEM registry hive file with read access.
references:
- https://attack.mitre.org/techniques/T1003/002/
- https://attack.mitre.org/techniques/T1003/004/
logsource:
product: windows
service: security
detection:
selection:
EventID: 4663
ObjectType: 'File'
ObjectName|endswith:
- '\config\SAM'
- '\config\SECURITY'
- '\config\SYSTEM'
AccessList|contains: '%%4416'
filter_system:
SubjectUserSid: 'S-1-5-18'
ProcessName|endswith:
- '\services.exe'
- '\lsass.exe'
- '\wininit.exe'
- '\smss.exe'
condition: selection and not filter_system
falsepositives:
- Volume Shadow Copy backup processes (track by ProcessName)
- Legitimate forensic agents (Velociraptor, GRR)
level: high
tags:
- attack.credential_access
- attack.t1003.002
KQL: sweep di cifratura ransomware
SecurityEvent
| where EventID == 4663
| where ObjectType == "File"
| where AccessMask in ("0x10000", "0x40000", "0x100", "0x2") // DELETE, WriteData
| summarize Files=dcount(ObjectName), Sample=any(ObjectName)
by SubjectLogonId, ProcessName, bin(TimeGenerated, 1m)
| where Files >= 100
| order by TimeGenerated desc
100 file distinti scritti-o-cancellati al minuto sotto una singola sessione di logon è uno sweep. Punto.
Splunk: accesso master-key DPAPI
index=wineventlog EventCode=4663 ObjectName="*\\AppData\\Roaming\\Microsoft\\Protect\\*"
| rex field=ObjectName "Protect\\\\(?<owner_sid>S-[\\d\\-]+)\\\\"
| where SubjectUserSid != owner_sid AND SubjectUserSid != "S-1-5-18"
| table _time SubjectUserName ProcessName ObjectName
Mapping ATT&CK
- T1003.002 OS Credential Dumping: Security Account Manager. Letture di hive SAM.
- T1003.004 LSA Secrets. Letture di hive SECURITY.
- T1003.001 LSASS Memory. Scritture
.dmp(combinato col contesto di processo). - T1555.004 Credentials from Password Stores: Windows Credential Manager. Accesso a
\AppData\Local\Microsoft\Credentials\. - T1552.006 Unsecured Credentials: Group Policy Preferences. Letture di SYSVOL
Groups.xml. - T1486 Data Encrypted for Impact. Pattern di massa
WriteData + DELETE. - T1565.001 Stored Data Manipulation. Scritture arbitrarie su share di dati monitorati.
La trappola del volume delle SACL
Impostare Everyone : Tutto l'accesso : Success+Failure su una directory affollata produce centinaia di migliaia di 4663 al minuto e seppellisce la raccolta. Le SACL sono strumenti di precisione. Audita:
- Solo i tipi di accesso che ti interessano. ReadData per i credential store. WriteData + DELETE per gli share di dati. Raramente entrambi insieme.
- Solo success. I failure sono più rari e raramente interessanti in questo corpus.
- File specifici, non interi dischi. Il file SAM, non tutto
C:\Windows\System32\config\. Lo share HR, non tuttoD:\. - Principal specifici quando puoi. Per oggetti di classe SAM,
Everyoneva bene perché l'accesso legittimo è comunque tramiteLocalSystem. Per dati condivisi, audita solo i principal che davvero toccano i dati.
Una SACL ben sintonizzata su cinque oggetti ad alto valore produce 50-200 record al giorno per host. Del tutto trattabile.
Falsi positivi che sembrano identici agli attacchi
- I backup Volume Shadow Copy generano traffico 4663 denso durante una finestra di backup. Tagga il
ProcessNamedell'orchestratore di backup. - Le scansioni antivirus on-access aprono ogni file in una directory target. Gli account di servizio del prodotto AV domineranno qualunque regola 4663 ingenua. Whitelist per SID.
- I servizi di indicizzazione (Windows Search) toccano i metadati tramite
ReadAttributes. Solitamente filtrabili perAccessList. - I restore in staging di backup sembrano scritture ransomware (molti file, un processo, in una directory). Il processo ti dice la differenza.
- La scansione real-time di Defender legge tutto. Se auditi troppo larghi, domina il rumore.
Cosa 4663 non ti dice
- Il contenuto dell'accesso. Vedi che un file è stato letto o scritto, non cosa è stato letto o scritto. Per quello, EDR o FIM.
- Perché l'accesso è avvenuto. Per correlare all'intenzione utente, abbina a 4688 o Sysmon 1 per il contesto completo del processo chiamante.
- Handle chiusi. 4663 scatta all'apertura dell'handle. Gli eventi di chiusura sono 4658, raramente utili per il rilevamento di attacchi.
- Path di rete in modo trasparente. L'accesso SMB a uno share scatta 4663 sul server. Il client non vede niente. Hai bisogno della raccolta lato server.
- Accesso fallito per default. Molti shop auditano solo Success. Configura Failure solo se ti interessano davvero i tentativi sventati.
Dove si inserisce 4663 in una timeline
Catena classica di credential dump LSASS:
- 4624. Logon admin, LogonType 3 o 10.
- 4672. SeDebugPrivilege concesso con la sessione.
- 4688.
rundll32.exe C:\Windows\System32\comsvcs.dll MiniDump <pid> C:\Windows\Temp\lsass.dmp full. - 4663.
WriteDataversoC:\Windows\Temp\lsass.dmpdarundll32.exe. Oro forense. Prova di exfil in staging. - 4688. Spostamento file o archiviazione (operatore che estrae il dump).
- 1102. Log Security svuotato. Alcuni operatori lo fanno. Molti dimenticano.
Il passo 4 è il segnale più economico e più specifico nella catena. Identifica direttamente l'artefatto di furto di credenziali per nome, su disco, col processo chiamante allegato. Le letture di hive SAM, l'accesso alle master-key DPAPI e le letture di Groups.xml in SYSVOL funzionano allo stesso modo.