Detection rules › Elastic

Ingress Transfer via Windows Utility

Source
github.com/elastic/protections-artifacts

Identifies attempt to download remote content by commonly abused ingress tool transfer binaries.

MITRE ATT&CK coverage

TacticTechniques
Command & Control

Rule body

[rule]
description = "Identifies attempt to download remote content by commonly abused ingress tool transfer binaries."
id = "4e3a6c40-37b7-466f-8ed4-8e40b2cf3c5b"
license = "Elastic License v2"
name = "Ingress Transfer via Windows Utility"
os_list = ["windows"]
version = "1.0.3"

query = '''
process where event.action == "start" and
(
 ((process.name : "CertUtil.exe" or process.pe.original_file_name == "CertUtil.exe") and
  process.args : "-urlcache" and process.command_line : "*http*") or

 ((process.pe.original_file_name == "CertReq.exe" or process.name : "CertReq.exe") and
  process.args : "-Post" and process.command_line : "*http*")
 )
'''

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

[[optional_actions]]
action = "rollback"
field = "process.entity_id"
state = 0

[[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 : "CertUtil.exe" or process.pe.original_file_name == "CertUtil.exe") and
  process.args : "-urlcache" and process.command_line : "*http*") or

 ((process.pe.original_file_name == "CertReq.exe" or process.name : "CertReq.exe") and
  process.args : "-Post" and process.command_line : "*http*")
 )

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
event.actioneq
  • start corpus 391 (elastic 391)
field:"EventType" kind:eq value:"start"
process.argswildcard
  • -Post corpus 2 (elastic 2)
  • -urlcache corpus 3 (elastic 3)
field:"process.args" kind:wildcard
process.command_linewildcard
  • *http* corpus 52 (sigma 34, elastic 15, chronicle 2, splunk 1)
field:"CommandLine" kind:wildcard value:"*http*"
process.namewildcard
  • CertReq.exe corpus 20 (elastic 20)
  • CertUtil.exe corpus 44 (elastic 38, splunk 6)
field:"process_name" kind:wildcard
process.pe.original_file_nameeq
  • CertReq.exe corpus 5 (elastic 4, sigma 1)
  • CertUtil.exe corpus 30 (sigma 14, elastic 10, splunk 6)
field:"OriginalFileName" kind:eq