Detection rules › Sigma
File Download From IP URL Via Curl.EXE
Detects file downloads directly from IP address URL using curl.exe
MITRE ATT&CK coverage
| Tactic | Techniques |
|---|---|
| Execution | No specific technique |
Event coverage
| Provider | Event | Title |
|---|---|---|
| Sysmon | Event ID 1 | Process creation |
Rule body yaml
title: File Download From IP URL Via Curl.EXE
id: 9cc85849-3b02-4cb5-b371-3a1ff54f2218
related:
- id: 5cb299fc-5fb1-4d07-b989-0644c68b6043
type: similar
status: test
description: Detects file downloads directly from IP address URL using curl.exe
references:
- https://labs.withsecure.com/publications/fin7-target-veeam-servers
- https://github.com/WithSecureLabs/iocs/blob/344203de742bb7e68bd56618f66d34be95a9f9fc/FIN7VEEAM/iocs.csv
- https://github.com/pr0xylife/IcedID/blob/8dd1e218460db4f750d955b4c65b2f918a1db906/icedID_09.28.2023.txt
author: Nasreddine Bencherchali (Nextron Systems)
date: 2023-10-18
tags:
- attack.execution
logsource:
category: process_creation
product: windows
detection:
selection_img:
- Image|endswith: '\curl.exe'
- OriginalFileName: 'curl.exe'
selection_ip:
CommandLine|re: '://[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
selection_http:
CommandLine|contains: 'http'
selection_flag:
CommandLine|contains:
- ' -O' # covers the alias for --remote-name and --output
- '--remote-name'
- '--output'
filter_main_ext:
# Note: This filter exists to avoid duplication with 5cb299fc-5fb1-4d07-b989-0644c68b6043
CommandLine|endswith:
- '.bat'
- '.bat"'
- '.dat'
- '.dat"'
- '.dll'
- '.dll"'
- '.exe'
- '.exe"'
- '.gif'
- '.gif"'
- '.hta'
- '.hta"'
- '.jpeg'
- '.jpeg"'
- '.log'
- '.log"'
- '.msi'
- '.msi"'
- '.png'
- '.png"'
- '.ps1'
- '.ps1"'
- '.psm1'
- '.psm1"'
- '.vbe'
- '.vbe"'
- '.vbs'
- '.vbs"'
- ".bat'"
- ".dat'"
- ".dll'"
- ".exe'"
- ".gif'"
- ".hta'"
- ".jpeg'"
- ".log'"
- ".msi'"
- ".png'"
- ".ps1'"
- ".psm1'"
- ".vbe'"
- ".vbs'"
condition: all of selection_* and not 1 of filter_main_*
falsepositives:
- Unknown
level: medium
regression_tests_path: regression_data/rules/windows/process_creation/proc_creation_win_curl_download_direct_ip_exec/info.yml
Stages and Predicates
Stage 0: condition
all of selection_* and not 1 of filter_main_*Stage 1: selection_img
selection_img:
- Image|endswith: '\curl.exe'
- OriginalFileName: 'curl.exe'
Stage 2: selection_ip
selection_ip:
CommandLine|re: '://[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
Stage 3: selection_http
selection_http:
CommandLine|contains: 'http'
Stage 4: selection_flag
selection_flag:
CommandLine|contains:
- ' -O'
- '--remote-name'
- '--output'
Stage 5: not filter_main_ext
filter_main_ext:
CommandLine|endswith:
- '.bat'
- '.bat"'
- '.dat'
- '.dat"'
- '.dll'
- '.dll"'
- '.exe'
- '.exe"'
- '.gif'
- '.gif"'
- '.hta'
- '.hta"'
- '.jpeg'
- '.jpeg"'
- '.log'
- '.log"'
- '.msi'
- '.msi"'
- '.png'
- '.png"'
- '.ps1'
- '.ps1"'
- '.psm1'
- '.psm1"'
- '.vbe'
- '.vbe"'
- '.vbs'
- '.vbs"'
- ".bat'"
- ".dat'"
- ".dll'"
- ".exe'"
- ".gif'"
- ".hta'"
- ".jpeg'"
- ".log'"
- ".msi'"
- ".png'"
- ".ps1'"
- ".psm1'"
- ".vbe'"
- ".vbs'"
Exclusions
Top-level NOT(...) conjuncts: predicates this rule actively suppresses.
| Field | Kind | Excluded values |
|---|---|---|
CommandLine | ends_with | .bat |
CommandLine | ends_with | .bat' |
CommandLine | ends_with | .bat" |
CommandLine | ends_with | .dat |
CommandLine | ends_with | .dat' |
CommandLine | ends_with | .dat" |
CommandLine | ends_with | .dll |
CommandLine | ends_with | .dll' |
CommandLine | ends_with | .dll" |
CommandLine | ends_with | .exe |
CommandLine | ends_with | .exe' |
CommandLine | ends_with | .exe" |
CommandLine | ends_with | .gif |
CommandLine | ends_with | .gif' |
CommandLine | ends_with | .gif" |
CommandLine | ends_with | .hta |
CommandLine | ends_with | .hta' |
CommandLine | ends_with | .hta" |
CommandLine | ends_with | .jpeg |
CommandLine | ends_with | .jpeg' |
CommandLine | ends_with | .jpeg" |
CommandLine | ends_with | .log |
CommandLine | ends_with | .log' |
CommandLine | ends_with | .log" |
CommandLine | ends_with | .msi |
CommandLine | ends_with | .msi' |
CommandLine | ends_with | .msi" |
CommandLine | ends_with | .png |
CommandLine | ends_with | .png' |
CommandLine | ends_with | .png" |
CommandLine | ends_with | .ps1 |
CommandLine | ends_with | .ps1' |
CommandLine | ends_with | .ps1" |
CommandLine | ends_with | .psm1 |
CommandLine | ends_with | .psm1' |
CommandLine | ends_with | .psm1" |
CommandLine | ends_with | .vbe |
CommandLine | ends_with | .vbe' |
CommandLine | ends_with | .vbe" |
CommandLine | ends_with | .vbs |
CommandLine | ends_with | .vbs' |
CommandLine | ends_with | .vbs" |
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.
| Field | Kind | Values |
|---|---|---|
CommandLine | match |
|
CommandLine | regex_match |
|
Image | ends_with |
|
OriginalFileName | eq |
|