The definitive, production-ready Sysmon configuration for Windows security monitoring - comprehensive, modular, and performance-optimized.
- Why Logging Matters
- Why Sysmon?
- Quick Start (5-Minute Setup)
- Repository Architecture
- Configuration Profiles
- Advanced Usage
- Performance Characteristics
- MITRE ATT&CK Coverage
- Customization Guide
- Troubleshooting
- Contributing
- FAQ
You can't detect what you can't see.
In modern security operations, visibility is the foundation of defense. Without comprehensive logging:
- Incident response is blind: No evidence trail to investigate breaches
- Threats go undetected: Advanced attackers operate in silence
- Compliance fails: Regulatory requirements demand audit trails (PCI-DSS, HIPAA, GDPR, NIST)
- Forensics is impossible: No artifacts to analyze post-compromise
Default Windows logging captures only a fraction of security-relevant events. Sysmon fills the critical gaps.
System Monitor (Sysmon) is a Windows system service from Microsoft Sysinternals that provides:
| Feature | Benefit |
|---|---|
| Process Creation Tracking | Full command-line logging with parent-child relationships |
| Network Connections | Every TCP/UDP connection with process context |
| File & Registry Monitoring | Detects persistence mechanisms and data exfiltration |
| Image Loading | DLL/driver loading for injection detection |
| Named Pipe Activity | Lateral movement and C2 communication |
| DNS Queries | Malicious domain detection at the endpoint |
| Process Injection Detection | CreateRemoteThread, Process Hollowing, APC injection |
| WMI Event Monitoring | Persistence and remote execution detection |
| Clipboard Capture | Data theft detection (privacy-aware) |
| Process Tampering | Anti-evasion and integrity monitoring |
- Granular Filtering: Reduce noise while maintaining visibility
- Performance Optimized: Kernel-level driver with minimal overhead
- Free & Supported: Official Microsoft tool, no licensing costs
- SIEM-Friendly: Writes to standard Windows Event Log
- Persistent: Survives reboots, tracks early-boot activity
- Attack-Resistant: Protected against common evasion techniques
- Windows 10/11 or Server 2016+ (64-bit)
- Administrator privileges
- PowerShell 5.1 or later
- Internet connection (for download)
# 1. Download Sysmon and this configuration
Invoke-WebRequest -Uri "https://download.sysinternals.com/files/Sysmon.zip" -OutFile "Sysmon.zip"
Expand-Archive -Path "Sysmon.zip" -DestinationPath ".\Sysmon"
# 2. Install with recommended balanced configuration
.\deployment\Install-Sysmon.ps1 -ConfigProfile "balanced"
# 3. Verify installation
Get-Service Sysmon64
Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" -MaxEvents 10REM Extract Sysmon and navigate to directory
cd C:\Tools\Sysmon
REM Install with configuration
Sysmon64.exe -accepteula -i ..\configurations\sysmon-base.xml
REM Verify
sc query Sysmon64That's it! Sysmon is now logging security-relevant events to:
Event Viewer → Applications and Services → Microsoft → Windows → Sysmon → Operational
This repository uses a hybrid modular design inspired by olafhartong/sysmon-modular, optimized for flexibility and maintainability.
sysmon-ultimate/
├── configurations/
│ ├── sysmon-base.xml # Monolithic all-in-one config
│ ├── sysmon-modular.xml # Modular loader (references modules/)
│ └── modules/
│ ├── techniques/ # MITRE ATT&CK technique-based
│ │ ├── T1003_credential_dumping.xml
│ │ ├── T1055_process_injection.xml
│ │ ├── T1047_wmi_execution.xml
│ │ └── [50+ technique modules]
│ ├── categories/ # Event type-based
│ │ ├── 01_process_creation.xml
│ │ ├── 03_network_connections.xml
│ │ ├── 07_image_loaded.xml
│ │ └── [all event types 1-30]
│ ├── exclusions/ # Noise reduction
│ │ ├── global_exclusions.xml
│ │ ├── microsoft_exclusions.xml
│ │ └── common_software.xml
│ └── compliance/ # Regulatory requirements
│ ├── pci_dss_required.xml
│ ├── hipaa_required.xml
│ └── nist_recommended.xml
├── deployment/ # Installation scripts
├── testing/ # Validation tools
├── performance/ # Benchmarking utilities
├── documentation/ # Detailed guides
├── tools/ # Configuration generators
└── examples/ # Pre-built profiles
Technique Modules (techniques/): Organized by MITRE ATT&CK IDs for threat-focused customization
- Use Case: Enable detection for specific adversary behaviors
- Example: Enable only
T1003_credential_dumping.xml+T1021_remote_services.xmlfor targeted monitoring
Category Modules (categories/): Organized by Sysmon event types for event-focused tuning
- Use Case: Tune specific log sources (e.g., reduce network logging, enhance registry monitoring)
- Example: Customize
03_network_connections.xmlto exclude internal IPs
Exclusion Modules (exclusions/): Pre-built filters for common noisy applications
- Use Case: Reduce false positives without custom configuration
- Example: Apply
microsoft_exclusions.xmlto filter Windows Update noise
Pre-built configurations for different operational needs:
| Profile | CPU Impact | Daily Logs (Avg Workstation) | Use Case |
|---|---|---|---|
| Minimal | <2% | ~100MB | Critical detections only, resource-constrained environments |
| Balanced | <5% | ~500MB | Recommended - Production default, optimal visibility/performance |
| Comprehensive | <10% | ~1.5GB | Maximum coverage for high-security environments |
| Forensics | ~15% | ~3GB | Incident response mode, temporary deep-dive investigations |
| Feature | Minimal | Balanced | Comprehensive | Forensics |
|---|---|---|---|---|
| Process Creation | Critical paths only | All processes | All + hashes | All + full CLI |
| Network Connections | External only | All non-local | All + DNS | All + payloads |
| File Operations | Executable zones | Suspicious paths | All critical areas | Everything |
| Registry Monitoring | Run keys | Persistence keys | All security keys | Full registry |
| Image Loading | Unsigned only | Suspicious DLLs | All non-MS | Every DLL |
# View available profiles
.\deployment\Install-Sysmon.ps1 -ListProfiles
# Install with specific profile
.\deployment\Install-Sysmon.ps1 -ConfigProfile "balanced"
# Switch profiles on existing installation
.\deployment\Update-Sysmon.ps1 -ConfigProfile "comprehensive"Use the modular system to create organization-specific configurations:
# Generate custom config from selected modules
.\tools\Generate-ModularConfig.ps1 `
-TechniqueModules @("T1003","T1055","T1047") `
-CategoryModules @("01","03","10") `
-ExcludeNoisySoftware `
-OutputPath ".\my-custom-config.xml"SOC Detection Lab (threat hunting focus):
.\tools\Generate-ModularConfig.ps1 -Profile "forensics" -IncludeCompliance:$falseDomain Controller (authentication monitoring):
.\tools\Generate-ModularConfig.ps1 `
-TechniqueModules @("T1003","T1021","T1078","T1550") `
-EnableRegistryMonitoring `
-ExcludeDomainControllerNoiseWorkstation Fleet (balanced production):
# Use pre-built balanced profile
.\deployment\Install-Sysmon.ps1 -ConfigProfile "balanced" -DeployViaSCCM# Update configuration without restarting service (hot-reload)
.\deployment\Update-Sysmon.ps1 -ConfigPath ".\configurations\sysmon-base.xml" -NoRestart
# Validate before deployment
.\testing\Validate-Configuration.ps1 -ConfigPath ".\my-custom-config.xml"Performance testing conducted on: Intel i7-10700K, 32GB RAM, Windows 11 Pro 23H2
| Configuration | Idle CPU | Active CPU (Office Work) | Active CPU (Heavy Dev) | Memory | Daily Event Volume |
|---|---|---|---|---|---|
| No Sysmon | 1-3% | 8-15% | 25-40% | ~2GB | 0 events |
| Minimal | 1-3% | 8-16% | 25-42% | ~2.1GB | ~5K events |
| Balanced | 1-4% | 9-18% | 26-45% | ~2.3GB | ~20K events |
| Comprehensive | 2-5% | 11-22% | 28-50% | ~2.6GB | ~60K events |
| Forensics | 3-8% | 15-30% | 35-60% | ~3.1GB | ~150K events |
Key Findings:
- Balanced profile: Adds only 1-3% CPU overhead in real-world usage
- Memory footprint: Minimal (~100-500MB depending on profile)
- Disk I/O: Negligible impact with proper log rotation
- Network: Zero network overhead (logs locally)
If experiencing performance issues:
- Start conservative: Use
minimalprofile initially - Analyze logs: Identify high-volume event sources
- Apply exclusions: Use environment-specific exclusion templates
- Iteratively expand: Add rules incrementally while monitoring impact
# Benchmark your environment
.\performance\Benchmark-Sysmon.ps1 -DurationMinutes 60 -GenerateReport
# Measure log volume before tuning
.\performance\Measure-LogVolume.ps1 -Days 7This configuration provides detection coverage for 200+ techniques across all ATT&CK tactics:
| Tactic | Techniques Covered | Coverage % | Priority Techniques |
|---|---|---|---|
| Reconnaissance | 8/10 | 80% | T1592, T1595, T1596 |
| Resource Development | 5/7 | 71% | T1583, T1584, T1587 |
| Initial Access | 9/9 | 100% | T1566, T1190, T1133 |
| Execution | 12/14 | 86% | T1059, T1047, T1053 |
| Persistence | 18/19 | 95% | T1547, T1053, T1543 |
| Privilege Escalation | 13/14 | 93% | T1055, T1068, T1134 |
| Defense Evasion | 38/42 | 90% | T1055, T1562, T1070 |
| Credential Access | 15/15 | 100% | T1003, T1558, T1110 |
| Discovery | 24/30 | 80% | T1083, T1057, T1082 |
| Lateral Movement | 9/9 | 100% | T1021, T1047, T1550 |
| Collection | 15/17 | 88% | T1005, T1039, T1113 |
| Command & Control | 16/16 | 100% | T1071, T1573, T1090 |
| Exfiltration | 8/9 | 89% | T1041, T1048, T1567 |
| Impact | 10/13 | 77% | T1486, T1490, T1561 |
Total: 200/224 techniques = 89.3% coverage
# Generate coverage report
.\tools\Update-MitreMapping.ps1 -GenerateReport -OutputFormat HTML
# View techniques by priority
Get-Content .\documentation\mitre-mapping-matrix.csv | ConvertFrom-Csv | Where-Object {$_.Priority -eq "Critical"}Techniques not detectable via Sysmon (require network/cloud logging):
- T1071.001: C2 over HTTPS (requires TLS inspection)
- T1567: Cloud exfiltration (requires cloud logs)
- T1199: Supply chain compromise (requires vendor monitoring)
See documentation/mitre-mapping-matrix.csv for complete mapping.
- Copy the template:
Copy-Item ".\configurations\modules\exclusions\environment_specific_template.xml" `
".\configurations\modules\exclusions\my_company_exclusions.xml"- Edit with your tools:
<!-- Exclude your backup software -->
<ProcessCreate onmatch="exclude">
<Image condition="is">C:\Program Files\Veeam\Veeam.Backup.Service.exe</Image>
</ProcessCreate>
<!-- Exclude your deployment tool -->
<ProcessCreate onmatch="exclude">
<ParentImage condition="is">C:\Program Files\SCCM\CcmExec.exe</ParentImage>
<CommandLine condition="contains">-DeploymentID</CommandLine>
</ProcessCreate>- Regenerate configuration:
.\tools\Generate-ModularConfig.ps1 -IncludeCustomExclusions ".\configurations\modules\exclusions\my_company_exclusions.xml"High-volume software (e.g., Chrome, Java, Node.js):
<!-- Reduce Chrome network logging -->
<NetworkConnect onmatch="exclude">
<Image condition="end with">chrome.exe</Image>
<DestinationIp condition="is private"/> <!-- Only log external connections -->
</NetworkConnect>
<!-- Reduce Node.js file creation spam -->
<FileCreate onmatch="exclude">
<Image condition="end with">node.exe</Image>
<TargetFilename condition="contains">\node_modules\</TargetFilename>
</FileCreate>Template for new technique module:
<Sysmon schemaversion="4.90">
<!-- MITRE ATT&CK: T1234 - Example Technique -->
<!-- Description: Detects adversary behavior XYZ -->
<!-- Priority: High | Expected FP Rate: Low | Est. Events: 10-50/day -->
<EventFiltering>
<RuleGroup name="T1234_example_technique" groupRelation="or">
<!-- Rule 1: Specific indicator -->
<ProcessCreate onmatch="include">
<CommandLine condition="contains">malicious_pattern</CommandLine>
</ProcessCreate>
<!-- Rule 2: Contextual detection -->
<NetworkConnect onmatch="include">
<Rule groupRelation="and">
<Image condition="end with">suspicious_tool.exe</Image>
<DestinationPort condition="is">4444</DestinationPort>
</Rule>
</NetworkConnect>
</RuleGroup>
</EventFiltering>
</Sysmon>Solution:
# Validate XML syntax
.\testing\Validate-Configuration.ps1 -ConfigPath ".\configurations\sysmon-base.xml"
# Check for common errors
- Ensure all XML tags are properly closed
- Verify schemaversion matches your Sysmon version (use 4.90 for v15+)
- Check for special characters in conditions (use < for <, & for &)Solution:
# 1. Identify noisy event sources
.\performance\Measure-LogVolume.ps1 -Days 1 -GroupBy EventID
# 2. Apply targeted exclusions
# Edit configurations\modules\exclusions\environment_specific_template.xml
# 3. Switch to lighter profile temporarily
.\deployment\Update-Sysmon.ps1 -ConfigProfile "minimal"
# 4. Use smart exclusion generator
.\tools\Generate-SmartExclusions.ps1 -AnalyzeDays 7 -SuggestExclusionsSolution:
# 1. Identify high-cost rules
.\performance\Benchmark-Sysmon.ps1 -IdentifyBottlenecks
# 2. Common culprits:
# - Network logging for high-traffic servers (exclude internal subnets)
# - File creation in temp directories (exclude)
# - Image loading for .NET applications (reduce)
# 3. Apply performance tuning
.\deployment\Update-Sysmon.ps1 -ConfigProfile "balanced" -ApplyPerformanceTuningSolution:
REM 1. Verify service is running
sc query Sysmon64
REM 2. Check driver is loaded
fltmc instances
REM 3. Verify configuration is active
Sysmon64.exe -c
REM 4. Check event log size limits
wevtutil gl "Microsoft-Windows-Sysmon/Operational"
REM 5. Increase log size if needed
wevtutil sl "Microsoft-Windows-Sysmon/Operational" /ms:1073741824 :: 1GB- Check the FAQ: FAQ Section below
- Review Documentation: documentation/ folder
- Search Issues: Check existing GitHub issues
- Create Issue: Provide OS version, Sysmon version, configuration used, error messages
We welcome contributions from the security community! This repository thrives on collective expertise.
- Report Issues: Found a bug or false positive? Open an issue
- Submit Detection Rules: Have a new technique module? Submit a PR
- Improve Documentation: Clarify guides or add examples
- Performance Optimization: Share tuning discoveries
- Test & Validate: Help test on different environments
- Follow module template structure
- Include MITRE ATT&CK mapping comments
- Document expected false positive rate
- Test on at least Windows 10/11 or Server 2019/2022
- Ensure XML validates: Run
.\testing\Validate-Configuration.ps1 - Measure performance impact: Include benchmark results for high-volume rules
Contributors will be acknowledged in CHANGELOG.md and this README.
Q: Is this configuration suitable for production use?
A: Yes. The balanced profile is designed for production environments and has been tested across diverse infrastructures. Start conservative, then expand coverage.
Q: Does this work with my SIEM (Splunk, Elastic, Sentinel, etc.)? A: Yes. Sysmon writes to standard Windows Event Log. All major SIEMs have built-in Sysmon parsers. See documentation/siem-integration.md for platform-specific guidance.
Q: Can I use this with other security tools (EDR, AV)? A: Yes. Sysmon complements EDR/AV by providing telemetry for custom detections and forensics. It does not conflict with security software.
Q: How often should I update the configuration? A: Review quarterly or after major threat intelligence updates. Subscribe to repository updates for new technique modules.
Q: What's the difference between this and other Sysmon configs? A: See documentation/comparative-analysis.md for detailed comparison with SwiftOnSecurity, sysmon-modular, and others.
Q: Which Sysmon version is required? A: Minimum Sysmon 13.0. Recommended: Latest version (15.0+) for full event coverage and performance improvements.
Q: Does this support Linux Sysmon? A: Not currently. This repository focuses on Windows. Linux Sysmon uses different architecture (eBPF) and configuration format.
Q: Can I use include and exclude rules together? A: Yes, but use carefully. Sysmon processes exclusions after inclusions. Recommendation: Use inclusion-only or exclusion-only per event type for clarity.
Q: How do I log to a centralized location? A: Use Windows Event Forwarding (WEF) or a SIEM agent (Winlogbeat, Splunk UF, etc.). Sysmon writes locally; external tools handle forwarding.
Q: What's the impact on endpoint performance?
A: Balanced profile: 1-3% CPU overhead. Comprehensive: 3-7%. See Performance Characteristics for benchmarks.
Q: Can attackers disable Sysmon? A: Only with admin/SYSTEM privileges. Sysmon logs tampering attempts (Event ID 16, 255). Protect with: Protected Process Light (PPL), driver signing, WDAC policies.
Q: How do I handle log rotation? A: Configure Windows Event Log size/archival:
wevtutil sl "Microsoft-Windows-Sysmon/Operational" /ms:1073741824 /ab:trueOr forward to SIEM for central storage.
Q: How do I test if my configuration is working? A: Use Atomic Red Team tests:
.\testing\Test-DetectionCoverage.ps1 -RunAtomicTests -TechniqueIDs @("T1003","T1055","T1047")Q: I'm getting too many false positives from [X] application. How do I fix this? A:
- Identify the noisy process:
.\performance\Measure-LogVolume.ps1 -GroupBy Image - Add targeted exclusion to
configurations\modules\exclusions\environment_specific_template.xml - Reload config:
.\deployment\Update-Sysmon.ps1
Q: Can I merge this with my existing Sysmon config? A: Yes. Use the merge tool:
.\tools\Merge-SysmonConfigs.ps1 -Config1 ".\my-old-config.xml" -Config2 ".\configurations\sysmon-base.xml" -Output ".\merged.xml"Q: How do I enable only specific MITRE techniques? A: Use modular configuration:
.\tools\Generate-ModularConfig.ps1 -TechniqueModules @("T1003","T1055","T1047","T1021")Q: What's the difference between sysmon-base.xml and sysmon-modular.xml?
A: sysmon-base.xml is a monolithic all-in-one file (easier deployment). sysmon-modular.xml references separate modules (easier customization). Functionality is identical.
- TrustedSec Sysmon Community Guide
- SwiftOnSecurity Sysmon Config
- Olaf Hartong Sysmon Modular
- JPCERT Tool Analysis
- Sysmon Configuration Masterclass
- Atomic Red Team - Test your detections
- Malware Archaeology Logging Cheat Sheets
- Version: 1.0.0
- Status: Production Ready
- Last Updated: 2025-10-30
- Maintainers: Community-driven (see CONTRIBUTORS.md)
- Web-based configuration builder (GUI for custom configs)
- Cloud integration (Azure Sentinel, AWS Security Hub)
- Linux Sysmon for Windows compatibility
- Automated threat intelligence feed integration
- Machine learning-based exclusion suggestions
This project is licensed under the MIT License - see LICENSE for details.
This configuration incorporates best practices from the Sysmon community. We gratefully acknowledge the pioneering work of SwiftOnSecurity, Olaf Hartong, Florian Roth, Michael Haag, JPCERT/CC, and countless other contributors.
Special thanks to:
- Microsoft Sysinternals Team - For creating and maintaining Sysmon
- SwiftOnSecurity - For the foundational sysmon-config that started it all
- Olaf Hartong - For pioneering modular architecture and MITRE mapping
- Florian Roth (Neo23x0) - For threat intelligence-driven rules
- Michael Haag - For DFIR-focused detection logic
- JPCERT/CC - For comprehensive attack tool analysis
- TrustedSec - For community education and documentation
- The entire InfoSec community - For continuous improvement through collaboration
Built by the community, for the community. Contributions welcome.