Detection rules › Kusto

NGINX - Known malicious user agent

Status
available
Severity
high
Time window
10m
Source
github.com/Azure/Azure-Sentinel

'Detects known malicious user agents'

MITRE ATT&CK coverage

Rule body kusto

id: a10c6551-bbf2-492c-aa8a-fe6efd8c9cc1
name: NGINX - Known malicious user agent
description: |
  'Detects known malicious user agents'
severity: High
status: Available
requiredDataConnectors:
  - connectorId: CustomLogsAma
    dataTypes:
      - NGINX_CL
queryFrequency: 10m
queryPeriod: 10m
triggerOperator: gt
triggerThreshold: 0
tactics:
  - InitialAccess
relevantTechniques:
  - T1190
  - T1133
query: |
  let mal_ua_list = dynamic(['Nikto', '(hydra)', '.nasl', 'absinthe', 'advanced email extractor', 'arachni/', 'autogetcontent', 'bilbo', 'BFAC', 'brutus', 'brutus/aet', 'bsqlbf', 'cgichk', 'cisco-torch', 'commix', 'core-project/1.0', 'crimscanner/', 'datacha0s', 'dirbuster', 'domino hunter', 'dotdotpwn', 'email extractor', 'fhscan core 1.', 'floodgate', 'get-minimal', 'gootkit auto-rooter scanner', 'grabber', 'grendel-scan', 'havij', 'inspath', 'internet ninja', 'jaascois', 'zmeu', 'masscan', 'metis', 'morfeus', 'mysqloit', 'n-stealth', 'nessus', 'netsparker', 'nmap nse', 'nmap scripting engine', 'nmap-nse', 'nsauditor', 'openvas', 'pangolin', 'paros', 'pmafind', 'prog.customcrawler', 'qualys was', 's.t.a.l.k.e.r.', 'security scan', 'springenwerk', 'sql power injector', 'sqlmap', 'sqlninja', 'teh forest lobster', 'this is an exploit', 'toata dragostea', 'toata dragostea mea pentru diavola', 'uil2pn', 'user-agent:', 'vega/', 'voideye', 'w3af.sf.net', 'w3af.sourceforge.net', 'w3af.org', 'webbandit', 'webinspect', 'webshag', 'webtrends security analyzer', 'webvulnscan', 'whatweb', 'whcc/', 'wordpress hash grabber', 'xmlrpc exploit', 'WPScan', 'XSpider', 'SF/', 'FooBar/42', 'ScanAlert', 'Webscanner', 'Webster', 'fantomCrew', 'fantomBrowser', 'visvo', 'magereport', 'ltx71', 'websiteprotection', 'BigCliqueBOT', '(BOT for JCE)']);
  NGINXHTTPServer
  | where HttpUserAgentOriginal has_any (mal_ua_list)
  | extend IPCustomEntity = SrcIpAddr, MalwareCustomEntity = HttpUserAgentOriginal
entityMappings:
  - entityType: IP
    fieldMappings:
      - identifier: Address
        columnName: IPCustomEntity
  - entityType: Malware
    fieldMappings:
      - identifier: Name
        columnName: MalwareCustomEntity
version: 1.0.3
kind: Scheduled

Stages and Predicates

Let binding: mal_ua_list

let mal_ua_list = dynamic(['Nikto', '(hydra)', '.nasl', 'absinthe', 'advanced email extractor', 'arachni/', 'autogetcontent', 'bilbo', 'BFAC', 'brutus', 'brutus/aet', 'bsqlbf', 'cgichk', 'cisco-torch', 'commix', 'core-project/1.0', 'crimscanner/', 'datacha0s', 'dirbuster', 'domino hunter', 'dotdotpwn', 'email extractor', 'fhscan core 1.', 'floodgate', 'get-minimal', 'gootkit auto-rooter scanner', 'grabber', 'grendel-scan', 'havij', 'inspath', 'internet ninja', 'jaascois', 'zmeu', 'masscan', 'metis', 'morfeus', 'mysqloit', 'n-stealth', 'nessus', 'netsparker', 'nmap nse', 'nmap scripting engine', 'nmap-nse', 'nsauditor', 'openvas', 'pangolin', 'paros', 'pmafind', 'prog.customcrawler', 'qualys was', 's.t.a.l.k.e.r.', 'security scan', 'springenwerk', 'sql power injector', 'sqlmap', 'sqlninja', 'teh forest lobster', 'this is an exploit', 'toata dragostea', 'toata dragostea mea pentru diavola', 'uil2pn', 'user-agent:', 'vega/', 'voideye', 'w3af.sf.net', 'w3af.sourceforge.net', 'w3af.org', 'webbandit', 'webinspect', 'webshag', 'webtrends security analyzer', 'webvulnscan', 'whatweb', 'whcc/', 'wordpress hash grabber', 'xmlrpc exploit', 'WPScan', 'XSpider', 'SF/', 'FooBar/42', 'ScanAlert', 'Webscanner', 'Webster', 'fantomCrew', 'fantomBrowser', 'visvo', 'magereport', 'ltx71', 'websiteprotection', 'BigCliqueBOT', '(BOT for JCE)']);

Stage 1: source

NGINXHTTPServer

Stage 2: where

| where HttpUserAgentOriginal has_any (mal_ua_list)

References mal_ua_list (defined above).

Stage 3: extend

| extend IPCustomEntity = SrcIpAddr, MalwareCustomEntity = HttpUserAgentOriginal

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
HttpUserAgentOriginalmatch
  • (BOT for JCE)
  • (hydra)
  • .nasl
  • BFAC
  • BigCliqueBOT
  • FooBar/42
  • Nikto
  • SF/
  • ScanAlert
  • WPScan
  • Webscanner
  • Webster
  • XSpider
  • absinthe
  • advanced email extractor
  • arachni/
  • autogetcontent
  • bilbo
  • brutus
  • brutus/aet
  • bsqlbf
  • cgichk
  • cisco-torch
  • commix
  • core-project/1.0
  • crimscanner/
  • datacha0s
  • dirbuster
  • domino hunter
  • dotdotpwn
  • email extractor
  • fantomBrowser
  • fantomCrew
  • fhscan core 1.
  • floodgate
  • get-minimal
  • gootkit auto-rooter scanner
  • grabber
  • grendel-scan
  • havij
  • inspath
  • internet ninja
  • jaascois
  • ltx71
  • magereport
  • masscan
  • metis
  • morfeus
  • mysqloit
  • n-stealth
  • nessus
  • netsparker
  • nmap nse
  • nmap scripting engine
  • nmap-nse
  • nsauditor
  • openvas
  • pangolin
  • paros
  • pmafind
  • prog.customcrawler
  • qualys was
  • s.t.a.l.k.e.r.
  • security scan
  • springenwerk
  • sql power injector
  • sqlmap
  • sqlninja
  • teh forest lobster
  • this is an exploit
  • toata dragostea
  • toata dragostea mea pentru diavola
  • uil2pn
  • user-agent:
  • vega/
  • visvo
  • voideye
  • w3af.org
  • w3af.sf.net
  • w3af.sourceforge.net
  • webbandit
  • webinspect
  • webshag
  • websiteprotection
  • webtrends security analyzer
  • webvulnscan
  • whatweb
  • whcc/
  • wordpress hash grabber
  • xmlrpc exploit
  • zmeu

Output fields

Fields the rule emits when it matches. Chronicle authors list these in the outcome block; they appear on the detection and $risk_score drives alerting. Sentinel / Defender XDR rules build them up through project / summarize / extend stages. Sentinel maps these into alert fields via entityMappings and customDetails; Defender XDR custom detections surface them as alert fields directly.

FieldSource
IPCustomEntityextend
MalwareCustomEntityextend