Detection rules › Elastic

Potential Evasion via dotNET Framework Installation Utility

Source
github.com/elastic/protections-artifacts

The Installer tool is a command-line utility that allows you to install and uninstall server resources by executing the installer components in specified assemblies. Adversaries may abuse this utility to run malicious code.

MITRE ATT&CK coverage

Rule body

[rule]
description = """
The Installer tool is a command-line utility that allows you to install and uninstall server resources by executing the
installer components in specified assemblies. Adversaries may abuse this utility to run malicious code.
"""
id = "7558b740-a23a-4c73-a060-12ed4e1ddc14"
license = "Elastic License v2"
name = "Potential Evasion via dotNET Framework Installation Utility"
os_list = ["windows"]
reference = ["https://lolbas-project.github.io/lolbas/Binaries/Installutil/"]
version = "1.0.22"

query = '''
process where event.action == "start" and
 (
   ((process.name : "installutil.exe" or process.pe.original_file_name == "InstallUtil.exe") and process.command_line :  ("*/LogFile*", "*http*")) or

   descendant of [process where event.action == "start" and
                  (process.name : "installutil.exe" or process.pe.original_file_name == "InstallUtil.exe") and process.command_line :  "*/LogFile*"]
 ) and
 not (process.executable : "?:\\Windows\\System32\\conhost.exe" and process.args : "0xffffffff" and process.args : "-ForceV1") and
 not (process.name : "installutil.exe" and
      process.args : ("?:\\Program Files\\*", "?:\\Program Files (x86)\\*", "PFU.PaperStream.Capture.FiScannerEventService.exe", "PFU.PaperStream.Capture.ReleaseService.exe")) and
 not (process.parent.name : "installutil.exe" and process.parent.args : ("?:\\Program Files\\*", "?:\\Program Files (x86)\\*")) and
 not process.executable :
              ("?:\\Program Files\\*exe",
               "?:\\Program Files (x86)\\*.exe",
               "?:\\Windows\\System32\\wbem\\mofcomp.exe",
               "?:\\Windows\\SysWOW64\\wbem\\mofcomp.exe",
               "?:\\Windows\\system32\\conhost.exe",
               "?:\\Windows\\SysWOW64\\conhost.exe",
               "?:\\Windows\\Sys*\\net.exe",
               "?:\\Windows\\Sys*\\net1.exe",
               "?:\\Windows\\System32\\wbem\\mofcomp.exe") and
 not process.parent.executable :
              ("?:\\Program Files*\\SolarWinds\\Orion\\ConfigurationWizard.exe",
               "?:\\Program Files*\\Rescue and Smart Assistant\\InstallUtil64.exe",
               "?:\\Program Files*\\Rescue and Smart Assistant\\*.exe",
               "?:\\Windows\\System32\\msiexec.exe") and
 not (process.executable : "?:\\Windows\\System32\\sc.exe" and process.args : "delete") and
 not (process.args : "/LogFile=C:\\ProgramData\\Veeam\\Setup\\Temp\\Veeam.Backup.PowerShell.InstallLog" and process.parent.name : "msiexec.exe") and
 not (process.name : "InstallUtil.exe" and process.args : ("C:\\Estensa\\Bin64Client\\SL.Server.Cache.WindowsService.exe", "\\SolarWinds TFTP Server.exe"))
'''

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

[[threat]]
framework = "MITRE ATT&CK"
[[threat.technique]]
id = "T1218"
name = "System Binary Proxy Execution"
reference = "https://attack.mitre.org/techniques/T1218/"
[[threat.technique.subtechnique]]
id = "T1218.004"
name = "InstallUtil"
reference = "https://attack.mitre.org/techniques/T1218/004/"



[threat.tactic]
id = "TA0005"
name = "Defense Evasion"
reference = "https://attack.mitre.org/tactics/TA0005/"
[[threat]]
framework = "MITRE ATT&CK"
[[threat.technique]]
id = "T1105"
name = "Ingress Tool Transfer"
reference = "https://attack.mitre.org/techniques/T1105/"


[threat.tactic]
id = "TA0011"
name = "Command and Control"
reference = "https://attack.mitre.org/tactics/TA0011/"

[internal]
min_endpoint_version = "7.15.0"

Stages and Predicates

Stage 1: process

process where event.action == "start" and
 (
   ((process.name : "installutil.exe" or process.pe.original_file_name == "InstallUtil.exe") and process.command_line :  ("*/LogFile*", "*http*")) or

   descendant of [process where event.action == "start" and
                  (process.name : "installutil.exe" or process.pe.original_file_name == "InstallUtil.exe") and process.command_line :  "*/LogFile*"]
 ) and
 not (process.executable : "?:\\Windows\\System32\\conhost.exe" and process.args : "0xffffffff" and process.args : "-ForceV1") and
 not (process.name : "installutil.exe" and
      process.args : ("?:\\Program Files\\*", "?:\\Program Files (x86)\\*", "PFU.PaperStream.Capture.FiScannerEventService.exe", "PFU.PaperStream.Capture.ReleaseService.exe")) and
 not (process.parent.name : "installutil.exe" and process.parent.args : ("?:\\Program Files\\*", "?:\\Program Files (x86)\\*")) and
 not process.executable :
              ("?:\\Program Files\\*exe",
               "?:\\Program Files (x86)\\*.exe",
               "?:\\Windows\\System32\\wbem\\mofcomp.exe",
               "?:\\Windows\\SysWOW64\\wbem\\mofcomp.exe",
               "?:\\Windows\\system32\\conhost.exe",
               "?:\\Windows\\SysWOW64\\conhost.exe",
               "?:\\Windows\\Sys*\\net.exe",
               "?:\\Windows\\Sys*\\net1.exe",
               "?:\\Windows\\System32\\wbem\\mofcomp.exe") and
 not process.parent.executable :
              ("?:\\Program Files*\\SolarWinds\\Orion\\ConfigurationWizard.exe",
               "?:\\Program Files*\\Rescue and Smart Assistant\\InstallUtil64.exe",
               "?:\\Program Files*\\Rescue and Smart Assistant\\*.exe",
               "?:\\Windows\\System32\\msiexec.exe") and
 not (process.executable : "?:\\Windows\\System32\\sc.exe" and process.args : "delete") and
 not (process.args : "/LogFile=C:\\ProgramData\\Veeam\\Setup\\Temp\\Veeam.Backup.PowerShell.InstallLog" and process.parent.name : "msiexec.exe") and
 not (process.name : "InstallUtil.exe" and process.args : ("C:\\Estensa\\Bin64Client\\SL.Server.Cache.WindowsService.exe", "\\SolarWinds TFTP Server.exe"))

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
process.argseq-ForceV1excludes:process.args field:"process.args" value:"-ForceV1"
process.argseq0xffffffffexcludes:process.args field:"process.args" value:"0xffffffff"
process.executableeq?:\Windows\System32\conhost.exeexcludes:process.executable field:"process.executable" value:"?:\Windows\System32\conhost.exe"
process.argseq/LogFile=C:\ProgramData\Veeam\Setup\Temp\Veeam.Backup.PowerShell.InstallLogexcludes:process.args field:"process.args" value:"/LogFile=C:\ProgramData\Veeam\Setup\Temp\Veeam.Backup.PowerShell.InstallLog"
process.parent.nameeqmsiexec.exeexcludes:process.parent.name field:"process.parent.name" value:"msiexec.exe"
process.argseqC:\Estensa\Bin64Client\SL.Server.Cache.WindowsService.exe, \SolarWinds TFTP Server.exeexcludes:process.args field:"process.args" value:"C:\Estensa\Bin64Client\SL.Server.Cache.WindowsService.exe" field:"process.args" value:"\SolarWinds TFTP Server.exe"
process.nameeqInstallUtil.exeexcludes:process.name field:"process.name" value:"InstallUtil.exe"
process.argseqdeleteexcludes:process.args field:"process.args" value:"delete"
process.executableeq?:\Windows\System32\sc.exeexcludes:process.executable field:"process.executable" value:"?:\Windows\System32\sc.exe"
process.argswildcard?:\Program Files\*, ?:\Program Files (x86)\*, PFU.PaperStream.Capture.FiScannerEventService.exe, PFU.PaperStream.Capture.ReleaseService.exeexcludes:process.args
process.nameeqinstallutil.exeexcludes:process.name field:"process.name" value:"installutil.exe"
process.parent.argsstarts_with?:\Program Files\, ?:\Program Files (x86)\excludes:process.parent.args field:"process.parent.args" value:"?:\Program Files\" field:"process.parent.args" value:"?:\Program Files (x86)\"
process.parent.nameeqinstallutil.exeexcludes:process.parent.name field:"process.parent.name" value:"installutil.exe"
process.executablewildcard?:\Program Files\*exe, ?:\Program Files (x86)\*.exe, ?:\Windows\System32\wbem\mofcomp.exe, ?:\Windows\SysWOW64\wbem\mofcomp.exe, ?:\Windows\system32\conhost.exe, ?:\Windows\SysWOW64\conhost.exe, ?:\Windows\Sys*\net.exe, ?:\Windows\Sys*\net1.exe, ?:\Windows\System32\wbem\mofcomp.exeexcludes:process.executable
process.parent.executablewildcard?:\Program Files*\SolarWinds\Orion\ConfigurationWizard.exe, ?:\Program Files*\Rescue and Smart Assistant\InstallUtil64.exe, ?:\Program Files*\Rescue and Smart Assistant\*.exe, ?:\Windows\System32\msiexec.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_linewildcard
  • */LogFile*
  • *http* corpus 52 (sigma 34, elastic 15, chronicle 2, splunk 1)
field:"CommandLine" kind:wildcard
process.namewildcard
  • installutil.exe corpus 37 (elastic 32, splunk 5)
field:"process_name" kind:wildcard value:"installutil.exe"
process.pe.original_file_nameeq
  • InstallUtil.exe corpus 21 (elastic 11, sigma 6, splunk 4)
field:"OriginalFileName" kind:eq value:"InstallUtil.exe"