Detection rules › Sigma

NetNTLM Downgrade Attack - Registry

Status
test
Severity
high
Log source
product windows, category registry_event
Author
Florian Roth (Nextron Systems), wagga, Nasreddine Bencherchali (Splunk STRT)
Source
github.com/SigmaHQ/sigma

Detects NetNTLM downgrade attack

MITRE ATT&CK coverage

Event coverage

Rule body yaml

title: NetNTLM Downgrade Attack - Registry
id: d67572a0-e2ec-45d6-b8db-c100d14b8ef2
status: test
description: Detects NetNTLM downgrade attack
references:
    - https://web.archive.org/web/20171113231705/https://www.optiv.com/blog/post-exploitation-using-netntlm-downgrade-attacks
    - https://www.ultimatewindowssecurity.com/wiki/page.aspx?spid=NSrpcservers
author: Florian Roth (Nextron Systems), wagga, Nasreddine Bencherchali (Splunk STRT)
date: 2018-03-20
modified: 2024-12-03
tags:
    - attack.persistence
    - attack.defense-impairment
    - attack.t1685
    - attack.t1112
logsource:
    product: windows
    category: registry_event
detection:
    selection_regkey:
        TargetObject|contains|all:
            - 'SYSTEM\'
            - 'ControlSet'
            - '\Control\Lsa'
    selection_value_lmcompatibilitylevel:
        TargetObject|endswith: '\lmcompatibilitylevel'
        Details:
            - 'DWORD (0x00000000)'
            - 'DWORD (0x00000001)'
            - 'DWORD (0x00000002)'
    selection_value_ntlmminclientsec:
        TargetObject|endswith: '\NtlmMinClientSec'
        Details:
            - 'DWORD (0x00000000)' # No Security
            - 'DWORD (0x00000010)' # Only Integrity
            - 'DWORD (0x00000020)' # Only confidentiality
            - 'DWORD (0x00000030)' # Both Integrity and confidentiality
    selection_value_restrictsendingntlmtraffic:
        # Note: The obvious values with issues are 0x00000000 (allow all) and 0x00000001 (audit).
        # 0x00000002 can be secure but only if "ClientAllowedNTLMServers" is properly configured
        # Hence all values should be monitored and investigated
        TargetObject|endswith: '\RestrictSendingNTLMTraffic'
    condition: selection_regkey and 1 of selection_value_*
falsepositives:
    - Services or tools that set the values to more restrictive values
level: high

Stages and Predicates

Stage 0: condition

selection_regkey and 1 of selection_value_*

Stage 1: selection_regkey

selection_regkey:
    TargetObject|contains|all:
        - 'SYSTEM\'
        - 'ControlSet'
        - '\Control\Lsa'

Stage 2: selection_value_lmcompatibilitylevel

selection_value_lmcompatibilitylevel:
    TargetObject|endswith: '\lmcompatibilitylevel'
    Details:
        - 'DWORD (0x00000000)'
        - 'DWORD (0x00000001)'
        - 'DWORD (0x00000002)'

Stage 3: selection_value_ntlmminclientsec

selection_value_ntlmminclientsec:
    TargetObject|endswith: '\NtlmMinClientSec'
    Details:
        - 'DWORD (0x00000000)'
        - 'DWORD (0x00000010)'
        - 'DWORD (0x00000020)'
        - 'DWORD (0x00000030)'

Stage 4: selection_value_restrictsendingntlmtraffic

selection_value_restrictsendingntlmtraffic:
    TargetObject|endswith: '\RestrictSendingNTLMTraffic'

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
Detailseq
  • DWORD (0x00000000) corpus 38 (sigma 36, chronicle 2)
  • DWORD (0x00000001) corpus 40 (sigma 36, chronicle 4)
  • DWORD (0x00000002) corpus 11 (sigma 9, chronicle 1, kusto 1)
  • DWORD (0x00000010)
  • DWORD (0x00000020)
  • DWORD (0x00000030)
TargetObjectends_with
  • \NtlmMinClientSec
  • \RestrictSendingNTLMTraffic
  • \lmcompatibilitylevel
TargetObjectmatch
  • ControlSet corpus 3 (sigma 3)
  • SYSTEM\ corpus 2 (sigma 2)
  • \Control\Lsa