Detection rules › Sigma

File Download From IP URL Via Curl.EXE

Status
test
Severity
medium
Log source
category process_creation, product windows
Author
Nasreddine Bencherchali (Nextron Systems)
Source
github.com/SigmaHQ/sigma

Detects file downloads directly from IP address URL using curl.exe

MITRE ATT&CK coverage

TacticTechniques
ExecutionNo specific technique

Telemetry coverage

ProviderRecord / event type
SysmonEvent ID 1: Process creation

Rule body

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

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
CommandLineends_with.batexcludes:CommandLine field:"CommandLine" value:".bat"
CommandLineends_with.bat'excludes:CommandLine field:"CommandLine" value:".bat'"
CommandLineends_with.bat"excludes:CommandLine
CommandLineends_with.datexcludes:CommandLine field:"CommandLine" value:".dat"
CommandLineends_with.dat'excludes:CommandLine field:"CommandLine" value:".dat'"
CommandLineends_with.dat"excludes:CommandLine
CommandLineends_with.dllexcludes:CommandLine field:"CommandLine" value:".dll"
CommandLineends_with.dll'excludes:CommandLine field:"CommandLine" value:".dll'"
CommandLineends_with.dll"excludes:CommandLine
CommandLineends_with.exeexcludes:CommandLine field:"CommandLine" value:".exe"
CommandLineends_with.exe'excludes:CommandLine field:"CommandLine" value:".exe'"
CommandLineends_with.exe"excludes:CommandLine
CommandLineends_with.gifexcludes:CommandLine field:"CommandLine" value:".gif"
CommandLineends_with.gif'excludes:CommandLine field:"CommandLine" value:".gif'"
CommandLineends_with.gif"excludes:CommandLine
CommandLineends_with.htaexcludes:CommandLine field:"CommandLine" value:".hta"
CommandLineends_with.hta'excludes:CommandLine field:"CommandLine" value:".hta'"
CommandLineends_with.hta"excludes:CommandLine
CommandLineends_with.jpegexcludes:CommandLine field:"CommandLine" value:".jpeg"
CommandLineends_with.jpeg'excludes:CommandLine field:"CommandLine" value:".jpeg'"
CommandLineends_with.jpeg"excludes:CommandLine
CommandLineends_with.logexcludes:CommandLine field:"CommandLine" value:".log"
CommandLineends_with.log'excludes:CommandLine field:"CommandLine" value:".log'"
CommandLineends_with.log"excludes:CommandLine
CommandLineends_with.msiexcludes:CommandLine field:"CommandLine" value:".msi"
CommandLineends_with.msi'excludes:CommandLine field:"CommandLine" value:".msi'"
CommandLineends_with.msi"excludes:CommandLine
CommandLineends_with.pngexcludes:CommandLine field:"CommandLine" value:".png"
CommandLineends_with.png'excludes:CommandLine field:"CommandLine" value:".png'"
CommandLineends_with.png"excludes:CommandLine
CommandLineends_with.ps1excludes:CommandLine field:"CommandLine" value:".ps1"
CommandLineends_with.ps1'excludes:CommandLine field:"CommandLine" value:".ps1'"
CommandLineends_with.ps1"excludes:CommandLine
CommandLineends_with.psm1excludes:CommandLine field:"CommandLine" value:".psm1"
CommandLineends_with.psm1'excludes:CommandLine field:"CommandLine" value:".psm1'"
CommandLineends_with.psm1"excludes:CommandLine
CommandLineends_with.vbeexcludes:CommandLine field:"CommandLine" value:".vbe"
CommandLineends_with.vbe'excludes:CommandLine field:"CommandLine" value:".vbe'"
CommandLineends_with.vbe"excludes:CommandLine
CommandLineends_with.vbsexcludes:CommandLine field:"CommandLine" value:".vbs"
CommandLineends_with.vbs'excludes:CommandLine field:"CommandLine" value:".vbs'"
CommandLineends_with.vbs"excludes:CommandLine

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
CommandLinematch
  • -O corpus 8 (sigma 6, elastic 1, chronicle 1)
  • --output corpus 4 (sigma 4)
  • --remote-name corpus 4 (sigma 4)
  • http corpus 52 (sigma 34, elastic 15, chronicle 2, splunk 1)
field:"CommandLine" kind:match
CommandLineregex_match
  • ://[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3} corpus 5 (sigma 5)
field:"CommandLine" kind:regex_match value:"://[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}"
Imageends_with
  • \curl.exe corpus 31 (sigma 31)
field:"Image" kind:ends_with value:"\curl.exe"
OriginalFileNameeq
  • curl.exe corpus 24 (sigma 13, elastic 8, splunk 3)
field:"OriginalFileName" kind:eq value:"curl.exe"