Detection rules › Sigma

MSSQL Server Failed Logon From External Network

Status
test
Severity
medium
Log source
product windows, service application
Author
j4son
Source
github.com/SigmaHQ/sigma

Detects failed logon attempts from clients with external network IP to an MSSQL server. This can be a sign of a bruteforce attack.

MITRE ATT&CK coverage

TacticTechniques
Credential AccessT1110 Brute Force

Event coverage

Rule body yaml

title: MSSQL Server Failed Logon From External Network
id: ebfe73c2-5bc9-4ed9-aaa8-8b54b2b4777d
related:
    - id: 218d2855-2bba-4f61-9c85-81d0ea63ac71
      type: similar
status: test
description: Detects failed logon attempts from clients with external network IP to an MSSQL server. This can be a sign of a bruteforce attack.
references:
    - https://cybersecthreat.com/2020/07/08/enable-mssql-authentication-log-to-eventlog/
    - https://www.experts-exchange.com/questions/27800944/EventID-18456-Failed-to-open-the-explicitly-specified-database.html
author: j4son
date: 2023-10-11
modified: 2025-05-28
tags:
    - attack.credential-access
    - attack.t1110
logsource:
    product: windows
    service: application
    definition: 'Requirements: Must enable MSSQL authentication.'
detection:
    selection:
        Provider_Name|contains: 'MSSQL' # Note: We use contains to account for other third party providers - See https://github.com/SigmaHQ/sigma/issues/4876
        EventID: 18456
    filter_main_local_ips:
        Data|contains:
            - 'CLIENT: 10.' # filter_range_IP: 10.0.0.0/8
            - 'CLIENT: 172.16.' # filter_range_IP: 172.16.0.0/12
            - 'CLIENT: 172.17.'
            - 'CLIENT: 172.18.'
            - 'CLIENT: 172.19.'
            - 'CLIENT: 172.20.'
            - 'CLIENT: 172.21.'
            - 'CLIENT: 172.22.'
            - 'CLIENT: 172.23.'
            - 'CLIENT: 172.24.'
            - 'CLIENT: 172.25.'
            - 'CLIENT: 172.26.'
            - 'CLIENT: 172.27.'
            - 'CLIENT: 172.28.'
            - 'CLIENT: 172.29.'
            - 'CLIENT: 172.30.'
            - 'CLIENT: 172.31.'
            - 'CLIENT: 192.168.' # filter_range_IP: 192.168.0.0/16
            - 'CLIENT: 127.' # filter_loop_back: 127.0.0.0/8
            - 'CLIENT: 169.254.' # fileter_link-local_addressing: 169.254.0.0/16
            - 'CLIENT: <local machine>'
    condition: selection and not 1 of filter_main_*
falsepositives:
    - Unknown
level: medium

Stages and Predicates

Stage 0: condition

selection and not 1 of filter_main_*

Stage 1: selection

selection:
    Provider_Name|contains: 'MSSQL'
    EventID: 18456

Stage 2: not filter_main_local_ips

filter_main_local_ips:
    Data|contains:
        - 'CLIENT: 10.'
        - 'CLIENT: 172.16.'
        - 'CLIENT: 172.17.'
        - 'CLIENT: 172.18.'
        - 'CLIENT: 172.19.'
        - 'CLIENT: 172.20.'
        - 'CLIENT: 172.21.'
        - 'CLIENT: 172.22.'
        - 'CLIENT: 172.23.'
        - 'CLIENT: 172.24.'
        - 'CLIENT: 172.25.'
        - 'CLIENT: 172.26.'
        - 'CLIENT: 172.27.'
        - 'CLIENT: 172.28.'
        - 'CLIENT: 172.29.'
        - 'CLIENT: 172.30.'
        - 'CLIENT: 172.31.'
        - 'CLIENT: 192.168.'
        - 'CLIENT: 127.'
        - 'CLIENT: 169.254.'
        - 'CLIENT: <local machine>'

Exclusions

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

FieldKindExcluded values
DatamatchCLIENT: 10.
DatamatchCLIENT: 127.
DatamatchCLIENT: 169.254.
DatamatchCLIENT: 172.16.
DatamatchCLIENT: 172.17.
DatamatchCLIENT: 172.18.
DatamatchCLIENT: 172.19.
DatamatchCLIENT: 172.20.
DatamatchCLIENT: 172.21.
DatamatchCLIENT: 172.22.
DatamatchCLIENT: 172.23.
DatamatchCLIENT: 172.24.
DatamatchCLIENT: 172.25.
DatamatchCLIENT: 172.26.
DatamatchCLIENT: 172.27.
DatamatchCLIENT: 172.28.
DatamatchCLIENT: 172.29.
DatamatchCLIENT: 172.30.
DatamatchCLIENT: 172.31.
DatamatchCLIENT: 192.168.
DatamatchCLIENT: <local machine>

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
Provider_Namematch
  • MSSQL corpus 7 (sigma 7)