Detection rules › Sigma

Suspicious File Download From File Sharing Domain Via Curl.EXE

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

Detects potentially suspicious file download from file sharing domains using curl.exe

MITRE ATT&CK coverage

TacticTechniques
ExecutionNo specific technique

Event coverage

ProviderEventTitle
SysmonEvent ID 1Process creation

Rule body yaml

title: Suspicious File Download From File Sharing Domain Via Curl.EXE
id: 56454143-524f-49fb-b1c6-3fb8b1ad41fb
status: test
description: Detects potentially suspicious file download from file sharing domains using curl.exe
references:
    - https://labs.withsecure.com/publications/fin7-target-veeam-servers
    - https://github.com/WithSecureLabs/iocs/blob/344203de742bb7e68bd56618f66d34be95a9f9fc/FIN7VEEAM/iocs.csv
author: Nasreddine Bencherchali (Nextron Systems)
date: 2023-05-05
modified: 2025-12-10
tags:
    - attack.execution
logsource:
    category: process_creation
    product: windows
detection:
    selection_img:
        - Image|endswith: '\curl.exe'
        - OriginalFileName: 'curl.exe'
    selection_websites:
        CommandLine|contains:
            - '.githubusercontent.com'       # Includes both gists and github repositories / Michael Haag (idea)
            - 'anonfiles.com'
            - 'cdn.discordapp.com'
            - 'ddns.net'
            - 'dl.dropboxusercontent.com'
            - 'ghostbin.co'
            - 'github.com'
            - 'glitch.me'
            - 'gofile.io'
            - 'hastebin.com'
            - 'mediafire.com'
            - 'mega.nz'
            - 'onrender.com'
            - 'pages.dev'
            - 'paste.ee'
            - 'pastebin.com'
            - 'pastebin.pl'
            - 'pastetext.net'
            - 'pixeldrain.com'
            - 'privatlab.com'
            - 'privatlab.net'
            - 'send.exploit.in'
            - 'sendspace.com'
            - 'storage.googleapis.com'
            - 'storjshare.io'
            - 'supabase.co'
            - 'temp.sh'
            - 'transfer.sh'
            - 'trycloudflare.com'
            - 'ufile.io'
            - 'w3spaces.com'
            - 'workers.dev'
    selection_http:
        CommandLine|contains: 'http'
    selection_flag:
        CommandLine|contains:
            - ' -O'  # covers the alias for --remote-name and --output
            - '--remote-name'
            - '--output'
    selection_ext:
        CommandLine|endswith:
            - ".ps1"
            - ".ps1'"
            - '.ps1"'
            - ".dat"
            - ".dat'"
            - '.dat"'
            - ".msi"
            - ".msi'"
            - '.msi"'
            - ".bat"
            - ".bat'"
            - '.bat"'
            - ".exe"
            - ".exe'"
            - '.exe"'
            - ".vbs"
            - ".vbs'"
            - '.vbs"'
            - ".vbe"
            - ".vbe'"
            - '.vbe"'
            - ".hta"
            - ".hta'"
            - '.hta"'
            - ".dll"
            - ".dll'"
            - '.dll"'
            - ".psm1"
            - ".psm1'"
            - '.psm1"'
    condition: all of selection_*
falsepositives:
    - Unknown
level: high
regression_tests_path: regression_data/rules/windows/process_creation/proc_creation_win_curl_download_susp_file_sharing_domains/info.yml

Stages and Predicates

Stage 0: condition

all of selection_*

Stage 1: selection_img

selection_img:
    - Image|endswith: '\curl.exe'
    - OriginalFileName: 'curl.exe'

Stage 2: selection_websites

selection_websites:
    CommandLine|contains:
        - '.githubusercontent.com'
        - 'anonfiles.com'
        - 'cdn.discordapp.com'
        - 'ddns.net'
        - 'dl.dropboxusercontent.com'
        - 'ghostbin.co'
        - 'github.com'
        - 'glitch.me'
        - 'gofile.io'
        - 'hastebin.com'
        - 'mediafire.com'
        - 'mega.nz'
        - 'onrender.com'
        - 'pages.dev'
        - 'paste.ee'
        - 'pastebin.com'
        - 'pastebin.pl'
        - 'pastetext.net'
        - 'pixeldrain.com'
        - 'privatlab.com'
        - 'privatlab.net'
        - 'send.exploit.in'
        - 'sendspace.com'
        - 'storage.googleapis.com'
        - 'storjshare.io'
        - 'supabase.co'
        - 'temp.sh'
        - 'transfer.sh'
        - 'trycloudflare.com'
        - 'ufile.io'
        - 'w3spaces.com'
        - 'workers.dev'

Stage 3: selection_http

selection_http:
    CommandLine|contains: 'http'

Stage 4: selection_flag

selection_flag:
    CommandLine|contains:
        - ' -O'
        - '--remote-name'
        - '--output'

Stage 5: selection_ext

selection_ext:
    CommandLine|endswith:
        - ".ps1"
        - ".ps1'"
        - '.ps1"'
        - ".dat"
        - ".dat'"
        - '.dat"'
        - ".msi"
        - ".msi'"
        - '.msi"'
        - ".bat"
        - ".bat'"
        - '.bat"'
        - ".exe"
        - ".exe'"
        - '.exe"'
        - ".vbs"
        - ".vbs'"
        - '.vbs"'
        - ".vbe"
        - ".vbe'"
        - '.vbe"'
        - ".hta"
        - ".hta'"
        - '.hta"'
        - ".dll"
        - ".dll'"
        - '.dll"'
        - ".psm1"
        - ".psm1'"
        - '.psm1"'

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.

FieldKindValues
CommandLineends_with
  • .bat corpus 4 (sigma 4)
  • .bat" corpus 4 (sigma 4)
  • .bat' corpus 4 (sigma 4)
  • .dat corpus 6 (sigma 6)
  • .dat" corpus 4 (sigma 4)
  • .dat' corpus 4 (sigma 4)
  • .dll corpus 7 (sigma 7)
  • .dll" corpus 5 (sigma 5)
  • .dll' corpus 5 (sigma 5)
  • .exe corpus 6 (sigma 6)
  • .exe" corpus 4 (sigma 4)
  • .exe' corpus 4 (sigma 4)
  • .hta corpus 6 (sigma 6)
  • .hta" corpus 4 (sigma 4)
  • .hta' corpus 4 (sigma 4)
  • .msi corpus 5 (sigma 4, elastic 1)
  • .msi" corpus 4 (sigma 4)
  • .msi' corpus 4 (sigma 4)
  • .ps1 corpus 6 (sigma 6)
  • .ps1" corpus 4 (sigma 4)
  • .ps1' corpus 4 (sigma 4)
  • .psm1 corpus 5 (sigma 5)
  • .psm1" corpus 4 (sigma 4)
  • .psm1' corpus 4 (sigma 4)
  • .vbe corpus 7 (sigma 7)
  • .vbe" corpus 4 (sigma 4)
  • .vbe' corpus 4 (sigma 4)
  • .vbs corpus 7 (sigma 7)
  • .vbs" corpus 4 (sigma 4)
  • .vbs' corpus 4 (sigma 4)
CommandLinematch
  • -O corpus 7 (sigma 6, chronicle 1)
  • --output corpus 4 (sigma 4)
  • --remote-name corpus 4 (sigma 4)
  • .githubusercontent.com corpus 5 (sigma 4, chronicle 1)
  • anonfiles.com corpus 6 (sigma 5, chronicle 1)
  • cdn.discordapp.com corpus 6 (sigma 5, chronicle 1)
  • ddns.net corpus 6 (sigma 5, chronicle 1)
  • dl.dropboxusercontent.com corpus 6 (sigma 5, chronicle 1)
  • ghostbin.co corpus 6 (sigma 5, chronicle 1)
  • github.com corpus 4 (sigma 4)
  • glitch.me corpus 6 (sigma 5, chronicle 1)
  • gofile.io corpus 6 (sigma 5, chronicle 1)
  • hastebin.com corpus 6 (sigma 5, chronicle 1)
  • http corpus 39 (sigma 34, elastic 2, chronicle 2, splunk 1)
  • mediafire.com corpus 6 (sigma 5, chronicle 1)
  • mega.nz corpus 6 (sigma 5, chronicle 1)
  • onrender.com corpus 6 (sigma 5, chronicle 1)
  • pages.dev corpus 6 (sigma 5, chronicle 1)
  • paste.ee corpus 6 (sigma 5, chronicle 1)
  • pastebin.com corpus 6 (sigma 5, chronicle 1)
  • pastebin.pl corpus 6 (sigma 5, chronicle 1)
  • pastetext.net corpus 6 (sigma 5, chronicle 1)
  • pixeldrain.com corpus 3 (sigma 3)
  • privatlab.com corpus 6 (sigma 5, chronicle 1)
  • privatlab.net corpus 6 (sigma 5, chronicle 1)
  • send.exploit.in corpus 6 (sigma 5, chronicle 1)
  • sendspace.com corpus 6 (sigma 5, chronicle 1)
  • storage.googleapis.com corpus 6 (sigma 5, chronicle 1)
  • storjshare.io corpus 6 (sigma 5, chronicle 1)
  • supabase.co corpus 6 (sigma 5, chronicle 1)
  • temp.sh corpus 6 (sigma 5, chronicle 1)
  • transfer.sh corpus 6 (sigma 5, chronicle 1)
  • trycloudflare.com corpus 6 (sigma 5, chronicle 1)
  • ufile.io corpus 6 (sigma 5, chronicle 1)
  • w3spaces.com corpus 6 (sigma 5, chronicle 1)
  • workers.dev corpus 6 (sigma 5, chronicle 1)
Imageends_with
  • \curl.exe corpus 30 (sigma 30)
OriginalFileNameeq
  • curl.exe corpus 15 (sigma 12, splunk 3)