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 Access

Telemetry coverage

ProviderRecord / event type
MSSQLSERVEREvent ID 18456

Rule body

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

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
DatamatchCLIENT: 10.excludes:Data field:"Data" value:"CLIENT: 10."
DatamatchCLIENT: 127.excludes:Data field:"Data" value:"CLIENT: 127."
DatamatchCLIENT: 169.254.excludes:Data field:"Data" value:"CLIENT: 169.254."
DatamatchCLIENT: 172.16.excludes:Data field:"Data" value:"CLIENT: 172.16."
DatamatchCLIENT: 172.17.excludes:Data field:"Data" value:"CLIENT: 172.17."
DatamatchCLIENT: 172.18.excludes:Data field:"Data" value:"CLIENT: 172.18."
DatamatchCLIENT: 172.19.excludes:Data field:"Data" value:"CLIENT: 172.19."
DatamatchCLIENT: 172.20.excludes:Data field:"Data" value:"CLIENT: 172.20."
DatamatchCLIENT: 172.21.excludes:Data field:"Data" value:"CLIENT: 172.21."
DatamatchCLIENT: 172.22.excludes:Data field:"Data" value:"CLIENT: 172.22."
DatamatchCLIENT: 172.23.excludes:Data field:"Data" value:"CLIENT: 172.23."
DatamatchCLIENT: 172.24.excludes:Data field:"Data" value:"CLIENT: 172.24."
DatamatchCLIENT: 172.25.excludes:Data field:"Data" value:"CLIENT: 172.25."
DatamatchCLIENT: 172.26.excludes:Data field:"Data" value:"CLIENT: 172.26."
DatamatchCLIENT: 172.27.excludes:Data field:"Data" value:"CLIENT: 172.27."
DatamatchCLIENT: 172.28.excludes:Data field:"Data" value:"CLIENT: 172.28."
DatamatchCLIENT: 172.29.excludes:Data field:"Data" value:"CLIENT: 172.29."
DatamatchCLIENT: 172.30.excludes:Data field:"Data" value:"CLIENT: 172.30."
DatamatchCLIENT: 172.31.excludes:Data field:"Data" value:"CLIENT: 172.31."
DatamatchCLIENT: 192.168.excludes:Data field:"Data" value:"CLIENT: 192.168."
DatamatchCLIENT: <local machine>excludes:Data field:"Data" value:"CLIENT: <local machine>"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Provider_Namematch
  • MSSQL corpus 7 (sigma 7)
field:"Provider_Name" kind:match value:"MSSQL"