Detection rules › Sigma

Arbitrary DLL or Csproj Code Execution Via Dotnet.EXE

Status
test
Severity
medium
Log source
product windows, category process_creation
Author
Beyu Denis, oscd.community
Source
github.com/SigmaHQ/sigma

Detects execution of arbitrary DLLs or unsigned code via a ".csproj" files via Dotnet.EXE.

MITRE ATT&CK coverage

Event coverage

ProviderEventTitle
SysmonEvent ID 1Process creation

Rule body yaml

title: Arbitrary DLL or Csproj Code Execution Via Dotnet.EXE
id: d80d5c81-04ba-45b4-84e4-92eba40e0ad3
status: test
description: Detects execution of arbitrary DLLs or unsigned code via a ".csproj" files via Dotnet.EXE.
references:
    - https://lolbas-project.github.io/lolbas/OtherMSBinaries/Dotnet/
    - https://twitter.com/_felamos/status/1204705548668555264
    - https://bohops.com/2019/08/19/dotnet-core-a-vector-for-awl-bypass-defense-evasion/
author: Beyu Denis, oscd.community
date: 2020-10-18
modified: 2025-10-08
tags:
    - attack.stealth
    - attack.t1218
logsource:
    category: process_creation
    product: windows
detection:
    selection_img:
        - Image|endswith: '\dotnet.exe'
        - OriginalFileName: '.NET Host'
    selection_cli:
        CommandLine|endswith:
            - '.csproj'
            - '.csproj"'
            - '.dll'
            - '.dll"'
            - ".csproj'"
            - ".dll'"
    filter_optional_notepadplus_plus:
        ParentImage:
            - 'C:\Program Files (x86)\Notepad++\notepad++.exe'
            - 'C:\Program Files\Notepad++\notepad++.exe'
        CommandLine|contains|all:
            - 'C:\ProgramData\CSScriptNpp\'
            - '-cscs_path:'
            - '\cs-script\cscs.dll'
    condition: all of selection_* and not 1 of filter_optional_*
falsepositives:
    - Legitimate administrator usage
level: medium

Stages and Predicates

Stage 0: condition

all of selection_* and not 1 of filter_optional_*

Stage 1: selection_img

selection_img:
    - Image|endswith: '\dotnet.exe'
    - OriginalFileName: '.NET Host'

Stage 2: selection_cli

selection_cli:
    CommandLine|endswith:
        - '.csproj'
        - '.csproj"'
        - '.dll'
        - '.dll"'
        - ".csproj'"
        - ".dll'"

Stage 3: not filter_optional_notepadplus_plus

filter_optional_notepadplus_plus:
    ParentImage:
        - 'C:\Program Files (x86)\Notepad++\notepad++.exe'
        - 'C:\Program Files\Notepad++\notepad++.exe'
    CommandLine|contains|all:
        - 'C:\ProgramData\CSScriptNpp\'
        - '-cscs_path:'
        - '\cs-script\cscs.dll'

Exclusions

Top-level NOT(...) conjuncts: predicates this rule actively suppresses.

FieldKindExcluded values
ParentImageeqC:\Program Files (x86)\Notepad++\notepad++.exe
ParentImageeqC:\Program Files\Notepad++\notepad++.exe
CommandLinematch-cscs_path:
CommandLinematchC:\ProgramData\CSScriptNpp\
CommandLinematch\cs-script\cscs.dll

Indicators

Each row is a field, operator, and value that the rule matches. The corpus column counts how many other rules in the catalog look for the same combination: high numbers point to widely-used, community-vetted indicators. Blank or 1 shows that the indicator is specific to this rule.

FieldKindValues
CommandLineends_with
  • .csproj
  • .csproj"
  • .csproj'
  • .dll corpus 7 (sigma 7)
  • .dll" corpus 5 (sigma 5)
  • .dll' corpus 5 (sigma 5)
Imageends_with
  • \dotnet.exe corpus 2 (sigma 2)
OriginalFileNameeq
  • .NET Host