Skip to main content
4663SecurityObject AccessSecurity tier 1

Event ID 4663: An attempt was made to access an object

Event ID 4663 records that an access right was actually used on a file, registry key or other object. It is written only when the object's SACL asks for that access. The fields that matter are ObjectName, AccessMask and ProcessName, which together show who touched which object, how, and with which program.

What Triggers Event 4663 and How to Read AccessMask

Event 4663 covers four audit subcategories: File System, Kernel Object, Registry and Removable Storage. It is written when a process uses an access right on an object that has a system access control list entry matching both the account and the type of access. Microsoft is blunt about the default state: no audit events are generated for the default file system SACLs. That one sentence explains most forum threads titled "event 4663 not logging". Turning the subcategory on is half of the job, and placing a SACL on the folder or key you care about is the other half.

The sibling event matters for what 4663 cannot do. Event 4656 is logged when a handle is requested and has both Success and Failure forms. Event 4663 is logged when the right is used and has no Failure form at all. If you want to see someone probing for files they are not allowed to open, the evidence is a 4656 failure, not a 4663. And 4658, the handle closed event, only appears if you also enabled Audit Handle Manipulation. HandleId is the field that lets you stitch the three together.

The fields are short. The Subject block names the account and its SubjectLogonId. ObjectServer is Security. ObjectType says what kind of object it was: File, Key, Directory and Process are common values. ObjectName is the path. ProcessId is hexadecimal and matches the new process ID in a 4688 on the same host, and ProcessName is the executable that did the work. ResourceAttributes arrived in version 1 with Windows Server 2012 and Windows 8; it shows a "-" when the object has none.

AccessMask is a sum, which trips people up. In Microsoft's own sample the value is 0x6, and the AccessList names WriteData and AppendData: 0x2 plus 0x4. For file objects the building blocks are ReadData or ListDirectory 0x1, WriteData or AddFile 0x2, AppendData 0x4, ReadEA 0x8, WriteEA 0x10, Execute or Traverse 0x20, DeleteChild 0x40, ReadAttributes 0x80, WriteAttributes 0x100, DELETE 0x10000, READ_CONTROL 0x20000, WRITE_DAC 0x40000, WRITE_OWNER 0x80000 and SYNCHRONIZE 0x100000. For registry keys, ReadData means query key value, WriteData means set key value and ReadEA means enumerate subkeys. When a mask looks odd, subtract the largest block that fits and repeat.

Reads are plentiful and rarely worth an alert outside a few crown-jewel paths. Microsoft's monitoring advice for this event points at WriteData, AppendData, WriteEA, DeleteChild, WriteAttributes, DELETE, WRITE_DAC and WRITE_OWNER, which is the list of rights that change or destroy something. For kernel objects the same page says the events have little to no security relevance and are hard to parse, so scope your SACLs to File and Key objects on named paths.

ProcessName is where the sample earns its keep. It shows 7za.exe running from a user's Temp folder and reading a payroll export, one right (ReadData, 0x1), one file. A single event like that is weak. The pattern is stronger: an archiver or sync client launched from a writable user path against a protected folder is what data staging looks like (MITRE T1005, Data from Local System). Microsoft suggests comparing ProcessName with the process you expect for that object, flagging executables outside System32 and Program Files, and matching restricted substrings such as mimikatz or cain.exe.

Over a network share, 4663 loses the client address. Microsoft's comparison of the audit subcategories notes that Audit File System leaves out information that Detailed File Share records, the client's IP address being the example. On a file server, pair 4663 with 5145 for the source and use SubjectLogonId to land on the 4624 network logon that created the session. Volume is entirely a function of your SACLs, so start with one sensitive path, watch a day of traffic, then widen.

Registry keys follow the same rules. Put a SACL on a persistence location such as a Run key and a Set key value from an unknown process shows up as WriteData against ObjectType Key, with the key path in ObjectName. The Removable Storage subcategory is the quiet member of the family. With it enabled, copying files from a laptop to a USB stick leaves reads on the source files and writes to the device, which can document a manual exfiltration that no network sensor would ever see.

Event 4663 Fields

FieldWhat it tells youSimulated value
SubjectUserSidSID of the account that used the access right.S-1-5-21-424242-1104
SubjectUserNameName of the account that used the access right.j.smith
SubjectDomainNameDomain or computer name of the account.CORP
SubjectLogonIdLogon session ID; correlates to the 4624 that opened the session.0x4a91c3
ObjectServerAlways Security for this event.Security
ObjectTypeKind of object accessed, such as File, Key or Directory.File
ObjectNamePath or name of the accessed object.D:\Finance\Q3-payroll-export.xlsx
HandleIdHandle to the object; correlates with 4656 and 4658.0x9f4
AccessListRights used, as message codes that mirror AccessMask.%%4416
AccessMaskSum of the access rights used; 0x1 is ReadData on a file.0x1
ProcessIdHexadecimal ID of the process that used the right; matches the new process ID in a 4688.0x1b58
ProcessNameFull path of the executable that accessed the object.C:\Users\j.smith\AppData\Local\Temp\7za.exe
ResourceAttributesAttributes of the object (version 1); '-' when not applicable.-

Inspect Event 4663 Values

Click a field to inspect the full simulated value, the way you would expand it in a SIEM event view.

Example Event 4663 Log

A representative Security entry for Event 4663, generated deterministically by our telemetry engine so every field holds a realistic, internally consistent value.

Simulated example generated by SOCSimulator Research
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-Security-Auditing" />
    <EventID>4663</EventID>
    <Version>0</Version>
    <Level>0</Level>
    <Task>0</Task>
    <Opcode>0</Opcode>
    <Keywords>0x8020000000000000</Keywords>
    <TimeCreated SystemTime="2025-12-01T10:55:05.000Z" />
    <EventRecordID>309914</EventRecordID>
    <Channel>Security</Channel>
    <Computer>WS-SIM-001.corp.socsimulator.example</Computer>
    <Security />
  </System>
  <EventData>
    <Data Name="SubjectUserSid">S-1-5-21-424242-1104</Data>
    <Data Name="SubjectUserName">j.smith</Data>
    <Data Name="SubjectDomainName">CORP</Data>
    <Data Name="SubjectLogonId">0x4a91c3</Data>
    <Data Name="ObjectServer">Security</Data>
    <Data Name="ObjectType">File</Data>
    <Data Name="ObjectName">D:\Finance\Q3-payroll-export.xlsx</Data>
    <Data Name="HandleId">0x9f4</Data>
    <Data Name="AccessList">%%4416</Data>
    <Data Name="AccessMask">0x1</Data>
    <Data Name="ProcessId">0x1b58</Data>
    <Data Name="ProcessName">C:\Users\j.smith\AppData\Local\Temp\7za.exe</Data>
    <Data Name="ResourceAttributes">-</Data>
  </EventData>
</Event>

Detecting Event 4663

Protected folder touched by a process that runs from outside the Windows and Program Files folders

Replace D:\Finance\ with the folder your SACL covers. ProcessName uses drive letters here, unlike 5156 which uses \device\harddiskvolume paths. SPL assumes sourcetype XmlWinEventLog:Security.

index=wineventlog sourcetype=XmlWinEventLog:Security EventCode=4663 ObjectType=File
| where like(ObjectName, "D:\\Finance\\%")
| where NOT (like(ProcessName, "C:\\Windows\\%") OR like(ProcessName, "C:\\Program Files%"))
| table _time, host, SubjectUserName, ProcessName, ObjectName, AccessMask

One process touching hundreds of distinct files in a minute (staging or ransomware shape)

Tune the threshold of 200 against your baseline; a backup agent will trip any fixed number unless you exclude its ProcessName.

index=wineventlog sourcetype=XmlWinEventLog:Security EventCode=4663 ObjectType=File
| bin _time span=1m
| stats dc(ObjectName) as files by _time, host, SubjectUserName, ProcessName
| where files >= 200

DELETE, WRITE_DAC or WRITE_OWNER used on files in the protected folder

AccessMask is a sum, so combined requests such as 0x110000 will not match these exact values; add the combinations you see on your servers.

index=wineventlog sourcetype=XmlWinEventLog:Security EventCode=4663 ObjectType=File AccessMask IN ("0x10000", "0x40000", "0x80000")
| where like(ObjectName, "D:\\Finance\\%")
| table _time, host, SubjectUserName, ProcessName, ObjectName, AccessMask

ProcessName contains a restricted substring

Microsoft's own examples are mimikatz and cain.exe. Add the archivers and sync clients that should never touch the protected path on your estate.

index=wineventlog sourcetype=XmlWinEventLog:Security EventCode=4663
| where match(ProcessName, "(?i)mimikatz|cain\\.exe|rclone\\.exe")
| table _time, host, SubjectUserName, ProcessName, ObjectName, AccessMask

True Positive vs False Positive

Most 4663 traffic is legitimate software doing its job: backup agents, antivirus scanners, search indexers and EDR sensors reading files all day, each under a stable ProcessName. Opening a document in Explorer can also produce several events in a row for a single human action. The first piece of tuning is a per-path baseline of ProcessName values. Once you know which executables normally touch the finance folder, the unexpected one is easy to isolate, and that works far better than any threshold on event counts.

Four shapes are worth a rule. The first is an unfamiliar process, especially one running from a user-writable folder, reading or writing a protected path. The second is fan-out: one process under one SubjectLogonId touching hundreds of distinct ObjectName values inside a minute, with WriteData or DELETE in the mask. That is the footprint of mass encryption or of a staging script walking a share. The third is DELETE (0x10000) on audit trails, logs or shared documents by an account that does not own them, which maps to indicator removal, T1070. The fourth is WRITE_DAC or WRITE_OWNER on a sensitive folder, where someone is rewriting the permissions that would otherwise stop them.

When one fires, work outward from the process. ProcessId leads to the 4688 for that process, which gives you the parent and command line. SubjectLogonId leads to the 4624 and tells you whether the session was interactive or a network logon. If the logon was a network one, the share events carry the source address. Check the file's last-known hash and the signer of the executable before you decide it is a backup agent you have not seen before.

Be honest about what the log cannot show. It reports the right that was used, so a handle opened and then abandoned may leave nothing behind, and denied attempts are invisible unless you also collect 4656 failures. A SACL that was edited away leaves no 4663 at all, so alert on the permission change itself (event 4670) for the paths you care about. Treat silence as missing data until you have proven the SACL is in place, by touching a test file and finding the event.

MITRE ATT&CK® Techniques

Event 4663 telemetry feeds detections for these ATT&CK® techniques:

Practice Investigating Event 4663

Reading about an attempt was made to access an object is one thing. Working the detection inside a live console is another. These free SOCSimulator operations cover the attack techniques Event 4663 helps you detect:

Start investigating free

Frequently Asked Questions

What is event ID 4663?
It records that a specific access right was used on an object such as a file, folder, registry key or removable-storage file. It is generated only when the object's SACL has an entry covering that access. It identifies the account, the object, the AccessMask and the process that performed the access.
Why is event ID 4663 not logging?
Usually because only half of the setup exists. The File System, Registry or Kernel Object subcategory has to be enabled for Success, and the object itself needs a SACL entry matching the account and access type. Default file system SACLs produce no events, so a fresh share logs nothing until you add one.
What is the difference between event 4656 and 4663?
4656 is logged when a handle to an object is requested and can be a success or a failure. 4663 is logged when the access right is used and has no failure form. For denied attempts, collect 4656 failures; for what happened to the file, use 4663.
How do I see who deleted a file with event 4663?
Look for a 4663 on the file's ObjectName with DELETE (0x10000) in AccessMask. The SACL must include the Delete permission for the account, otherwise nothing is written. SubjectUserName and ProcessName then tell you who and with what; correlate SubjectLogonId with the 4624 for the session.
What does AccessMask 0x6 mean in a 4663 event?
AccessMask is the sum of the rights used. 0x6 is 0x2 (WriteData, or AddFile on a directory) plus 0x4 (AppendData, or AddSubdirectory). Microsoft's sample event uses exactly this value for a text file written from Notepad.

Sources

“4663 field schema, AccessMask table for file and registry objects, no failure events, difference from 4656, and Microsoft's monitoring recommendations”

“Events are generated only for objects with a configured SACL and no events for the default file system SACLs; 4658 depends on Audit Handle Manipulation”

“Audit File System excludes some information that Detailed File Share records, such as the client's IP address”

“T1005 Data from Local System, the staging behavior that file-access auditing helps to expose”

“T1070 Indicator Removal, the technique behind deleting logs and files”

Event ID

Event ID 1102: Audit Log Cleared & How to Detect It

Event ID 1102 fires whenever the Windows Security log is cleared. Learn who cleared it, why it demands investigation, an…

Read more
Glossary

What is Data Exfiltration? SOC Glossary

Data exfiltration in cyber security is the unauthorized transfer of data from an organization's systems to infrastructur…

Read more
Glossary

What is Persistence? SOC Glossary

Persistence is the set of techniques an adversary uses to keep access to a compromised system after whatever gave them t…

Read more
Glossary

What is Threat Hunting? SOC Glossary

Threat hunting is the proactive search through security telemetry for attackers that existing controls missed. The hunte…

Read more
Career Path

SOC Analyst (Tier 2) Career Guide: Salary & Skills

Tier 2 SOC Analysts handle the investigations that Tier 1 escalates. You dig into multi-stage attacks, coordinate contai…

Read more
Career Path

Threat Hunter Career Guide: Salary & Skills

Threat Hunters do not wait for alerts. You develop hypotheses based on threat intelligence and adversary behavior models…

Read more
Technique

Data from Local System (T1005): Detection Training

This is the collection step on a single host: the adversary searches local drives, configuration files, the registry, an…

Read more
Technique

Indicator Removal (T1070): Detection Training

Indicator Removal is the cleanup step: an adversary deletes or alters the artifacts that would expose the intrusion, cle…

Read more
Comparison

SOCSimulator vs. LetsDefend: Platform Comparison

SOCSimulator wins on operational realism. You get multi-tool shift simulation with SLA pressure, noise injection, and al…

Read more
Event ID

Windows Event ID Library: SOC Reference

Windows Security and Sysmon event IDs with simulated log samples, field tables, and tested detection queries.

Read more
Feature

Shift Mode: Real-Time SOC Simulation

Practice alert triage under realistic time pressure with SLA timers and noise injection.

Read more
Feature

Operations: Guided Training Operations

Structured CTF-style investigation operations covering real-world attack scenarios.

Read more