Detection rules › Elastic

Command Obfuscation via Unicode Modifier Letters

Source
github.com/elastic/protections-artifacts

Identifies the presence of unicode modifier letters in the process command_line. Adversaries sometimes replace ASCII characters with visually similar Unicode modifier letters or combining marks to evade simple string-based detections.

MITRE ATT&CK coverage

Rule body

[rule]
description = """
Identifies the presence of unicode modifier letters in the process command_line. Adversaries sometimes replace ASCII
characters with visually similar Unicode modifier letters or combining marks to evade simple string-based detections.
"""
id = "2c7b91fa-f43d-46aa-887d-e5f3f032b29e"
license = "Elastic License v2"
name = "Command Obfuscation via Unicode Modifier Letters"
os_list = ["windows"]
reference = ["https://www.wietzebeukema.nl/blog/windows-command-line-obfuscation"]
version = "1.0.1"

query = '''
process where event.action == "start" and user.id != "S-1-5-18" and
 (
   process.name : ("reg.exe", "net.exe", "net1.exe", "certutil.exe", "MSHTA.EXE", "msiexec.exe", "bitsadmin.exe", "CertReq.exe", "PrintBrm.exe", "MSBuild.exe", "wuauclt.exe", "curl.exe", "wget.exe", "ssh.exe", "Cmd.Exe", "PowerShell.EX", "CONHOST.EXE", "wscript.exe", "cscript.exe", "REGSVR32.EXE", "RUNDLL32.EXE", "procdump.exe", "ntdsutil.exe", "diskshadow.exe", "schtasks.exe", "sc.exe", "wmic.exe", "VSSADMIN.EXE", "WBADMIN.EXE", "sftp.exe", "scp.exe", "esentutl.exe", "InstallUtil.exe", "wevtutil.exe") or
   process.pe.original_file_name in ("reg.exe", "net.exe", "net1.exe", "CertUtil.exe", "MSHTA.EXE", "msiexec.exe", "bitsadmin.exe", "CertReq.exe", "PrintBrm.exe", "MSBuild.exe", "wuauclt.exe", "curl.exe", "wget.exe", "ssh.exe", "Cmd.Exe", "PowerShell.EX", "CONHOST.EXE", "wscript.exe", "cscript.exe", "REGSVR32.EXE", "RUNDLL32.EXE", "procdump", "ntdsutil.exe", "diskshadow.exe", "schtasks.exe", "sc.exe", "wmic.exe", "VSSADMIN.EXE", "WBADMIN.EXE", "sftp.exe", "scp.exe", "esentutl.exe", "InstallUtil.exe", "wevtutil.exe")
 ) and
 process.command_line regex """.*[ʰ-˿ᴬ-ᶻ]+.*""" and
 not (process.name : "cmd.exe" and process.parent.executable : ("C:\\Program Files\\Smaart Suite\\Smaart.exe", "C:\\Program Files (x86)\\NetDocuments\\ndOffice\\ndOffice.exe", "C:\\Program Files (x86)\\Smaart 8\\Smaart.exe", "E:\\Spectrum\\Notifier\\sd_notifier\\SD_Notifier.exe")) and
 not (process.name : "rundll32.exe" and process.args : "C:\\WINDOWS\\system32\\davclnt.dll,DavSetCookie")
'''

min_endpoint_version = "7.15.0"
optional_actions = []
[[actions]]
action = "kill_process"
field = "process.entity_id"
state = 0
tree = true

[[threat]]
framework = "MITRE ATT&CK"
[[threat.technique]]
id = "T1027"
name = "Obfuscated Files or Information"
reference = "https://attack.mitre.org/techniques/T1027/"
[[threat.technique.subtechnique]]
id = "T1027.010"
name = "Command Obfuscation"
reference = "https://attack.mitre.org/techniques/T1027/010/"



[threat.tactic]
id = "TA0005"
name = "Defense Evasion"
reference = "https://attack.mitre.org/tactics/TA0005/"

[internal]
min_endpoint_version = "7.15.0"

Stages and Predicates

Stage 1: process

process where event.action == "start" and user.id != "S-1-5-18" and
 (
   process.name : ("reg.exe", "net.exe", "net1.exe", "certutil.exe", "MSHTA.EXE", "msiexec.exe", "bitsadmin.exe", "CertReq.exe", "PrintBrm.exe", "MSBuild.exe", "wuauclt.exe", "curl.exe", "wget.exe", "ssh.exe", "Cmd.Exe", "PowerShell.EX", "CONHOST.EXE", "wscript.exe", "cscript.exe", "REGSVR32.EXE", "RUNDLL32.EXE", "procdump.exe", "ntdsutil.exe", "diskshadow.exe", "schtasks.exe", "sc.exe", "wmic.exe", "VSSADMIN.EXE", "WBADMIN.EXE", "sftp.exe", "scp.exe", "esentutl.exe", "InstallUtil.exe", "wevtutil.exe") or
   process.pe.original_file_name in ("reg.exe", "net.exe", "net1.exe", "CertUtil.exe", "MSHTA.EXE", "msiexec.exe", "bitsadmin.exe", "CertReq.exe", "PrintBrm.exe", "MSBuild.exe", "wuauclt.exe", "curl.exe", "wget.exe", "ssh.exe", "Cmd.Exe", "PowerShell.EX", "CONHOST.EXE", "wscript.exe", "cscript.exe", "REGSVR32.EXE", "RUNDLL32.EXE", "procdump", "ntdsutil.exe", "diskshadow.exe", "schtasks.exe", "sc.exe", "wmic.exe", "VSSADMIN.EXE", "WBADMIN.EXE", "sftp.exe", "scp.exe", "esentutl.exe", "InstallUtil.exe", "wevtutil.exe")
 ) and
 process.command_line regex """.*[ʰ-˿ᴬ-ᶻ]+.*""" and
 not (process.name : "cmd.exe" and process.parent.executable : ("C:\\Program Files\\Smaart Suite\\Smaart.exe", "C:\\Program Files (x86)\\NetDocuments\\ndOffice\\ndOffice.exe", "C:\\Program Files (x86)\\Smaart 8\\Smaart.exe", "E:\\Spectrum\\Notifier\\sd_notifier\\SD_Notifier.exe")) and
 not (process.name : "rundll32.exe" and process.args : "C:\\WINDOWS\\system32\\davclnt.dll,DavSetCookie")

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
process.argseqC:\WINDOWS\system32\davclnt.dll,DavSetCookieexcludes:process.args field:"process.args" value:"C:\WINDOWS\system32\davclnt.dll,DavSetCookie"
process.nameeqrundll32.exeexcludes:process.name field:"process.name" value:"rundll32.exe"
process.nameeqcmd.exeexcludes:process.name field:"process.name" value:"cmd.exe"
process.parent.executableeqC:\Program Files\Smaart Suite\Smaart.exe, C:\Program Files (x86)\NetDocuments\ndOffice\ndOffice.exe, C:\Program Files (x86)\Smaart 8\Smaart.exe, E:\Spectrum\Notifier\sd_notifier\SD_Notifier.exeexcludes:process.parent.executable

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
event.actioneq
  • start corpus 391 (elastic 391)
field:"EventType" kind:eq value:"start"
process.command_lineregex_match
  • .*[ʰ-˿ᴬ-ᶻ]+.* corpus 2 (elastic 2)
field:"CommandLine" kind:regex_match value:".*[ʰ-˿ᴬ-ᶻ]+.*"
process.namewildcard
  • CONHOST.EXE corpus 12 (elastic 11, splunk 1)
  • CertReq.exe corpus 20 (elastic 20)
  • Cmd.Exe corpus 121 (elastic 92, splunk 29)
  • InstallUtil.exe corpus 37 (elastic 32, splunk 5)
  • MSBuild.exe corpus 39 (elastic 36, splunk 3)
  • MSHTA.EXE corpus 84 (elastic 79, splunk 5)
  • PowerShell.EX
  • PrintBrm.exe corpus 4 (elastic 4)
  • REGSVR32.EXE corpus 73 (elastic 68, splunk 5)
  • RUNDLL32.EXE corpus 126 (elastic 100, splunk 26)
  • VSSADMIN.EXE corpus 9 (elastic 6, splunk 3)
  • WBADMIN.EXE corpus 8 (elastic 6, splunk 2)
  • bitsadmin.exe corpus 23 (elastic 21, splunk 2)
  • certutil.exe corpus 44 (elastic 38, splunk 6)
  • cscript.exe corpus 67 (elastic 65, splunk 2)
  • curl.exe corpus 34 (elastic 31, splunk 3)
  • diskshadow.exe corpus 5 (elastic 4, splunk 1)
  • esentutl.exe corpus 6 (elastic 5, splunk 1)
  • msiexec.exe corpus 46 (elastic 41, splunk 5)
  • net.exe corpus 28 (elastic 26, splunk 2)
  • net1.exe corpus 39 (elastic 20, splunk 19)
  • ntdsutil.exe corpus 5 (elastic 4, splunk 1)
  • procdump.exe corpus 3 (elastic 3)
  • reg.exe corpus 27 (elastic 18, splunk 9)
  • sc.exe corpus 32 (elastic 17, splunk 15)
  • schtasks.exe corpus 30 (elastic 19, splunk 11)
  • scp.exe corpus 5 (elastic 5)
  • sftp.exe corpus 3 (elastic 3)
  • ssh.exe corpus 8 (elastic 8)
  • wevtutil.exe corpus 10 (elastic 6, splunk 4)
  • wget.exe corpus 6 (elastic 6)
  • wmic.exe corpus 66 (elastic 39, splunk 27)
  • wscript.exe corpus 83 (elastic 82, splunk 1)
  • wuauclt.exe corpus 7 (elastic 7)
field:"process_name" kind:wildcard
process.pe.original_file_namein
  • CONHOST.EXE corpus 3 (sigma 2, elastic 1)
  • CertReq.exe corpus 5 (elastic 4, sigma 1)
  • CertUtil.exe corpus 30 (sigma 14, elastic 10, splunk 6)
  • Cmd.Exe corpus 81 (sigma 43, elastic 21, splunk 17)
  • InstallUtil.exe corpus 21 (elastic 11, sigma 6, splunk 4)
  • MSBuild.exe corpus 20 (elastic 15, splunk 4, sigma 1)
  • MSHTA.EXE corpus 40 (elastic 21, sigma 13, splunk 6)
  • PowerShell.EX
  • PrintBrm.exe
  • REGSVR32.EXE corpus 37 (sigma 17, elastic 15, splunk 5)
  • RUNDLL32.EXE corpus 78 (sigma 35, elastic 22, splunk 21)
  • VSSADMIN.EXE corpus 12 (elastic 9, sigma 3)
  • WBADMIN.EXE corpus 19 (elastic 11, sigma 6, splunk 2)
  • bitsadmin.exe corpus 20 (sigma 9, elastic 8, splunk 2, kusto 1)
  • cscript.exe corpus 32 (sigma 17, elastic 15)
  • curl.exe corpus 24 (sigma 13, elastic 8, splunk 3)
  • diskshadow.exe corpus 7 (sigma 4, elastic 2, splunk 1)
  • esentutl.exe corpus 5 (sigma 2, elastic 2, splunk 1)
  • msiexec.exe corpus 20 (elastic 11, sigma 5, splunk 4)
  • net.exe corpus 31 (sigma 19, elastic 10, splunk 2)
  • net1.exe corpus 44 (sigma 19, splunk 19, elastic 6)
  • ntdsutil.exe corpus 3 (elastic 2, sigma 1)
  • procdump corpus 6 (elastic 3, sigma 2, splunk 1)
  • reg.exe corpus 43 (sigma 32, splunk 8, elastic 3)
  • sc.exe corpus 30 (sigma 12, splunk 10, elastic 8)
  • schtasks.exe corpus 31 (sigma 18, elastic 9, splunk 4)
  • scp.exe
  • sftp.exe
  • ssh.exe
  • wevtutil.exe corpus 7 (sigma 5, elastic 1, splunk 1)
  • wget.exe corpus 3 (sigma 3)
  • wmic.exe corpus 80 (sigma 38, elastic 24, splunk 18)
  • wscript.exe corpus 38 (elastic 21, sigma 17)
  • wuauclt.exe corpus 5 (elastic 3, sigma 2)
field:"OriginalFileName" kind:in
user.idne
  • S-1-5-18 corpus 36 (elastic 36)
field:"user.id" kind:ne value:"S-1-5-18"