/
linux_curl_upload_file.yml
93 lines (93 loc) · 3.91 KB
/
linux_curl_upload_file.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
name: Linux Curl Upload File
id: c1de2d9a-0c02-4bb4-a49a-510c6e9cf2bf
version: 1
date: '2022-07-29'
author: Michael Haag, Splunk
status: production
type: TTP
description: The following analytic identifies curl being utilized with the -F or
--form, --upload-file, -T, -d, --data, --data-raw, -I and --head switches to upload
AWS credentials or config to a remote destination. This enables uploading of binary
files and so forth. To force the 'content' part to be a file, prefix the file name
with an @ sign. To just get the content part from a file, prefix the file name with
the symbol <. The difference between @ and < is then that @ makes a file get attached
in the post as a file upload, while the < makes a text field and just get the contents
for that text field from a file. This technique was utlized by the TeamTNT group
to exfiltrate AWS credentials.
data_source:
- Sysmon for Linux EventID 1
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Endpoint.Processes where Processes.process_name=curl
Processes.process IN ("*-F *", "*--form *","*--upload-file *","*-T *","*-d *","*--data
*","*--data-raw *", "*-I *", "*--head *") AND Processes.process IN ("*.aws/credentials*".
"*.aws/config*") by Processes.dest Processes.user Processes.parent_process_name
Processes.process_name Processes.process Processes.process_id Processes.parent_process_id
| `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
| `linux_curl_upload_file_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
you must ingest logs that contain the process GUID, process name, and parent process.
Additionally, you must ingest complete command-line executions. These logs must
be processed using the appropriate Splunk Technology Add-ons that are specific to
the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint`
data model. Use the Splunk Common Information Model (CIM) to normalize the field
names and speed up the data modeling process.
known_false_positives: Filtering may be required. In addition to AWS credentials,
add other important files and monitor. The inverse would be to look for _all_ -F
behavior and tune from there.
references:
- https://curl.se/docs/manpage.html
- https://www.cadosecurity.com/team-tnt-the-first-crypto-mining-worm-to-steal-aws-credentials/
- https://gtfobins.github.io/gtfobins/curl/
tags:
analytic_story:
- Linux Living Off The Land
- Data Exfiltration
- Ingress Tool Transfer
asset_type: Endpoint
confidence: 80
impact: 80
message: An instance of $process_name$ was identified on endpoint $dest$ by user
$user$ attempting to upload important files to a remote destination.
mitre_attack_id:
- T1105
observable:
- name: user
type: User
role:
- Victim
- name: dest
type: Hostname
role:
- Victim
- name: process_name
type: Process
role:
- Child Process
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
required_fields:
- _time
- Processes.dest
- Processes.user
- Processes.parent_process_name
- Processes.parent_process
- Processes.original_file_name
- Processes.process_name
- Processes.process
- Processes.process_id
- Processes.parent_process_path
- Processes.process_path
- Processes.parent_process_id
risk_score: 64
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1105/atomic_red_team/curl-linux-sysmon.log
source: Syslog:Linux-Sysmon/Operational
sourcetype: sysmon_linux
update_timestamp: true