Convert Figma logo to code with AI

olafhartong logosysmon-modular

A repository of sysmon configuration modules

2,706
595
2,706
53

Top Related Projects

Sysmon for Linux

A repository for using windows event forwarding for incident detection and response

Quick Overview

Sysmon-modular is a project that provides a modular and flexible configuration approach for Microsoft Sysmon, a Windows system monitoring tool. It allows users to customize and fine-tune their Sysmon configuration by combining various XML-based rule sets, making it easier to adapt to specific monitoring needs and threat detection scenarios.

Pros

  • Highly customizable and modular approach to Sysmon configuration
  • Extensive collection of pre-built rule sets for various use cases
  • Active community and regular updates to address new threats and techniques
  • Improved manageability and version control of Sysmon configurations

Cons

  • Requires familiarity with Sysmon and its configuration syntax
  • May require additional testing and validation when combining multiple rule sets
  • Can potentially generate large volumes of logs, requiring proper log management infrastructure
  • Some rule sets may need customization for specific environments or to reduce false positives

Getting Started

  1. Clone the repository:

    git clone https://github.com/olafhartong/sysmon-modular.git
    
  2. Navigate to the repository folder:

    cd sysmon-modular
    
  3. Use the provided PowerShell script to generate a custom configuration:

    .\Merge-SysmonXml.ps1 -Path .\* -AsString | Out-File sysmonconfig.xml
    
  4. Install or update Sysmon with the generated configuration:

    sysmon.exe -i sysmonconfig.xml
    
  5. To update an existing Sysmon installation:

    sysmon.exe -c sysmonconfig.xml
    

Remember to review and customize the generated configuration file to suit your specific monitoring needs and environment.

Competitor Comparisons

Sysmon for Linux

Pros of SysmonForLinux

  • Native Linux support, providing comprehensive system monitoring for Linux environments
  • Developed and maintained by Microsoft, ensuring regular updates and support
  • Integrates seamlessly with other Microsoft security products and Azure services

Cons of SysmonForLinux

  • Limited customization options compared to sysmon-modular's modular approach
  • May have a steeper learning curve for users familiar with Windows-based Sysmon
  • Potentially higher resource usage due to its comprehensive monitoring capabilities

Code Comparison

SysmonForLinux configuration example:

<Sysmon schemaversion="4.60">
  <EventFiltering>
    <RuleGroup name="Linux Events">
      <ProcessCreate onmatch="include"/>
      <FileCreate onmatch="include"/>
    </RuleGroup>
  </EventFiltering>
</Sysmon>

sysmon-modular configuration example:

<Sysmon schemaversion="4.60">
  <EventFiltering>
    <ProcessCreate onmatch="include">
      <Rule groupRelation="or">
        <CommandLine condition="contains">suspicious_command</CommandLine>
      </Rule>
    </ProcessCreate>
  </EventFiltering>
</Sysmon>

The code comparison shows that while both repositories use XML-based configurations, sysmon-modular offers more granular control over rule definitions, allowing for more specific and modular configurations.

A repository for using windows event forwarding for incident detection and response

Pros of Windows Event Forwarding

  • Native Windows solution, no additional software required
  • Centralized event collection and management
  • Scalable for large enterprise environments

Cons of Windows Event Forwarding

  • Limited to Windows event logs
  • Requires more complex setup and configuration
  • Less granular control over data collection compared to Sysmon

Code Comparison

Windows Event Forwarding configuration (WEF):

<Subscription>
  <SubscriptionId>Security</SubscriptionId>
  <SubscriptionType>SourceInitiated</SubscriptionType>
  <EventSources>
    <EventSource>
      <ComputerName>*</ComputerName>
    </EventSource>
  </EventSources>
</Subscription>

Sysmon Modular configuration:

<Sysmon schemaversion="4.30">
  <EventFiltering>
    <ProcessCreate onmatch="include">
      <Rule groupRelation="or">
        <CommandLine condition="contains">powershell</CommandLine>
        <CommandLine condition="contains">cmd.exe</CommandLine>
      </Rule>
    </ProcessCreate>
  </EventFiltering>
</Sysmon>

Windows Event Forwarding is a native Windows solution for centralized event collection, while Sysmon Modular offers more detailed and customizable system monitoring. WEF is easier to implement in Windows-only environments, but Sysmon provides greater flexibility and granular control over data collection.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

sysmon-modular | A Sysmon configuration repository for everybody to customise

license Maintenance GitHub last commit Build Sysmon config with all modules Twitter Discord Shield

This is a Microsoft Sysinternals Sysmon download here configuration repository, set up modular for easier maintenance and generation of specific configs.

Please keep in mind that any of these configurations should be considered a starting point, tuning per environment is strongly recommended.

Note: to get even more value out of the FileExecutable event, consider getting the most up to date version of the LOLdrivers config merged into the config as well. You can easily do that by grabbing the file and adding it in the 29_file_execute_detected folder and generate a new config.

The sysmonconfig.xml within the repo is automatically generated after a successful merge by the PowerShell script and a successful load by Sysmon in an Azure Pipeline run. More info on how to generate a custom config, incorporating your own modules here

Pre-Grenerated configurations

TypeConfigDescription
defaultsysmonconfig.xmlThis is the balanced configuration, most used, more information here
default+sysmonconfig-with-filedelete.xmlThis is the balanced configuration, most used, more information including FileDelete file saves
verbosesysmonconfig-excludes-only.xmlThis is the very verbose configuration, all events are included, only the exclusion modules are applied. This should not be used in production without validation, will generate a significant amount of data and might impact performance. More information here
super verbosesysmonconfig-research.xmlA configuration with extreme verbosity. The log volume expected from this file is significantly high, really DO NOT USE IN PRODUCTION! This config is only for research, this will use way more CPU/Memory. Only enable prior to running the to be investigated technique, when done load a lighter config.
MDE augmentsysmonconfig-mde-augmentation.xmlA configuration to augment Defender for Endpoint, intended to augment the information and have as little overlap as possible. This is based on the default/balanced config and will not generate all events for Sysmon, there are comments in the config. In the benefit of IR, consider using the excludes only config and only ingest the enriching events. (Blog with more rationale soon)

Index


Next to the documentation below, there is also a video on how to use this project.

how to use this project


NOTICE; Sysmon below 15 will not completely be compatible with this configuration

Older versions are still available in the branches, but are not as complete as the current branch

To understand added features in the versions, have a look at my small blog post and newer articles or watch my DerbyCon talk

Note: I do recommend using a minimal number of configurations within your environment for multiple obvious reasons, like; maintenance, output equality, manageability and so on. But do make tailored configurations for Domain Controllers, Servers and workstations.


Required actions

I highly recommend looking at the configs before implementing them in your production environment. This enables you to have as actionable logging as possible and as litte noise as possible.

Customization

You will need to install and observe the results of the configuration in your own environment before deploying it widely. For example, you will need to exclude actions of your antivirus, which will otherwise likely fill up your logs with useless information.

Generating a config

PowerShell

$> git clone https://github.com/olafhartong/sysmon-modular.git
$> cd sysmon modular
$> . .\Merge-SysmonXml.ps1
$> Merge-AllSysmonXml -Path ( Get-ChildItem '[0-9]*\*.xml') -AsString | Out-File sysmonconfig.xml

Generating custom configs

Below functions with great thanks to mbmy

New Function: Find-RulesInBasePath - takes a base path (i.e. C:\folder\sysmon-modular) and finds all candidate xml rule files based upon regex pattern

Example: PS C:\Users\sysmon\sysmon-modular> Find-RulesInBasePath -BasePath C:\users\sysmon\sysmon-modular\ -OutputRules | Out-File available_rules.txt

Merge-AllSysmonXml New Parameters:

-BasePath - finds all candidate xml rule files from a provided path based upon regex pattern and merges them

Example: PS C:\Users\sysmon\sysmon-modular> Merge-AllSysmonXml -AsString -BasePath C:\Users\sysmon\sysmon-modular\

-ExcludeList - Combined with -BasePath, takes a list of rules and excludes them from found rules prior to merge

Example: PS C:\Users\sysmon\sysmon-modular> Merge-AllSysmonXml -AsString -BasePath C:\Users\sysmon\sysmon-modular\ -ExcludeList C:\users\sysmon\sysmon-modular\exclude_rules.txt

-IncludeList - Combined with -BasePath, finds all available rules from base path but only merges those defined in a list

Example: PS C:\Users\sysmon\sysmon-modular> Merge-AllSysmonXml -AsString -BasePath C:\Users\sysmon\sysmon-modular\ -IncludeList C:\users\sysmon\sysmon-modular\include_rules.txt

NOTE The BasePath needs to be the full path to the sysmon-modular files (for example c:\tools\sysmon-modular), otherwise PowerShell will not be able to locate them, resulting in a default config.

Include/Exclude List Format Example:

3_network_connection_initiated\include_native_windows_tools.xml
12_13_14_registry_event\exclude_internet_explorer_settings.xml
12_13_14_registry_event\exclude_webroot.xml
17_18_pipe_event\include_winreg.xml
19_20_21_wmi_event\include_wmi_create.xml
2_file_create_time\exclude_chrome.xml
3_network_connection_initiated\include_native_windows_tools.xml
3_network_connection_initiated\include_ports_proxies.xml
8_create_remote_thread\include_general_commment.xml
8_create_remote_thread\include_psinject.xml
9_raw_access_read\include_general_commment.xml

Building a config with all sysmon-modular rules for certain event IDs (include whole directory) and then disabling all event ids without imported rules

Example:

# generate the config
$sysmonconfig =  Merge-AllSysmonXml  -BasePath . -IncludeList $workingFolder\include.txt -VerboseLogging -PreserveComments

# flip off any rule groups where rules were not imported
foreach($rg in $sysmonconfig.SelectNodes("/Sysmon/EventFiltering/RuleGroup [*/@onmatch]"))
{
    $ruleNodes = $rg.SelectNodes("./* [@onmatch]")

    if(     $ruleNodes -eq $null `
        -or $ruleNodes.ChildNodes.count -gt 0)
    {
        # no rule nodes found (unlikely) or more than one rule found
        continue
    }

    # RuleGroup with only one rule node
    $ruleNode = $ruleNodes[0]

    if($ruleNode.onmatch -eq "exclude" -and $ruleNode.ChildNodes.count -eq 0 )
    {
        $message = "{0} {1} has no matching conditions.  Toggled to 'include' to limit output" -f $ruleNode.Name,$rg.Name
        Write-Warning $message

        $ruleNode.onmatch = "include"
        $comment = $sysmonconfig.CreateComment($message)
        $rg.AppendChild($comment) | Out-Null
    }
}

Include/Exclude List Format Example (for entire rule/event families):

1_process_creation
5_process_ended
11_file_create
23_file_delete
7_image_load
17_18_pipe_event

Use

Install

Run with administrator rights

sysmon.exe -accepteula -i sysmonconfig.xml

Update existing configuration

Run with administrator rights

sysmon.exe -c sysmonconfig.xml

Python generator tool

This is a new feature, created by cnnrshd

Priority-based Rules Sorting

  1. Simple Python script that can merge based on a similar format to preexisting Include Lists - the only difference is it takes a CSV with two columns, filepath and priority
  2. A config formatted using a csv file
  3. A simple template
  4. Schemaversion is dynamic and based on the highest schema version of provided rules.

Configs generated using this script maintain comments and proper XML indentation is enforced, increasing readability and allowing easier cross-referencing of rule files

example prompt

python merge_sysmon_configs.py config_lists/default_list/default_list.csv -f csv -b templates/sysmon_template.xml  -o test.xml

** This way of generating content is still new and experimental. There is no support for the custom versions like the MDE augment and exclude-only versions yet.


Sysmon Community

There are three major Sysmon configurations:

Contributing

Pull requests / issue tickets and new additions will be greatly appreciated!

More information

I started a series of blog posts covering this repo;

MITRE ATTACK

I strive to map all configurations to the ATT&CK framework whenever Sysmon is able to detect it. Please note this is a possible log entry that might lead to a detection, not in all cases is this the only telemetry for that technique. Additionally there might be more techniques releated to that rule, the one mapped is the one I deemed most likely.