Detection rules › Splunk
Multiple Archive Files Http Post Traffic
The following analytic detects the high-frequency exfiltration of archive files via HTTP POST requests. It leverages HTTP stream logs to identify specific archive file headers within the request body. This activity is significant as it often indicates data exfiltration by APTs or trojan spyware after data collection. If confirmed malicious, this behavior could lead to the unauthorized transfer of sensitive data to an attacker’s command and control server, potentially resulting in severe data breaches and loss of confidential information.
Known false positives
- Normal archive transfer via HTTP protocol may trip this detection.
MITRE ATT&CK coverage
| Tactic | Techniques |
|---|---|
| Exfiltration |
Rule body
name: Multiple Archive Files Http Post Traffic
id: 4477f3ea-a28f-11eb-b762-acde48001122
version: 13
creation_date: '2021-04-22'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: The following analytic detects the high-frequency exfiltration of archive files via HTTP POST requests. It leverages HTTP stream logs to identify specific archive file headers within the request body. This activity is significant as it often indicates data exfiltration by APTs or trojan spyware after data collection. If confirmed malicious, this behavior could lead to the unauthorized transfer of sensitive data to an attacker’s command and control server, potentially resulting in severe data breaches and loss of confidential information.
data_source:
- Splunk Stream HTTP
search: |-
`stream_http` http_method=POST
| eval archive_hdr1=substr(form_data,1,2)
| eval archive_hdr2 = substr(form_data,1,4)
| stats values(form_data) as http_request_body min(_time) as firstTime max(_time) as lastTime count
BY src_ip dest_ip http_method
http_user_agent uri_path url
bytes_in bytes_out archive_hdr1
archive_hdr2
| where count >20 AND (archive_hdr1 = "7z" OR archive_hdr1 = "PK" OR archive_hdr2="Rar!")
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `multiple_archive_files_http_post_traffic_filter`
how_to_implement: To successfully implement this search, you need to be ingesting logs with the stream HTTP logs or network logs that catch network traffic. Make sure that the http-request-body, payload, or request field is enabled in stream http configuration.
known_false_positives: Normal archive transfer via HTTP protocol may trip this detection.
references:
- https://attack.mitre.org/techniques/T1560/001/
- https://www.mandiant.com/resources/apt39-iranian-cyber-espionage-group-focused-on-personal-information
- https://www.microsoft.com/security/blog/2021/01/20/deep-dive-into-the-solorigate-second-stage-activation-from-sunburst-to-teardrop-and-raindrop/
finding:
title: A http post $http_method$ sending packet with possible archive bytes header in uri path $uri_path$
entity:
field: src_ip
type: system
score: 50
threat_objects:
- field: url
type: url
analytic_story:
- Data Exfiltration
- Command And Control
- APT37 Rustonotto and FadeStealer
- Hellcat Ransomware
asset_type: Endpoint
mitre_attack_id:
- T1048.003
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: web
security_domain: network
Stages and Predicates
Stage 1: search
`stream_http` http_method=POST
Stage 2: eval
| eval archive_hdr1=substr(form_data,1,2)
Stage 3: eval
| eval archive_hdr2 = substr(form_data,1,4)
Stage 4: stats
| stats values(form_data) as http_request_body min(_time) as firstTime max(_time) as lastTime count
BY src_ip dest_ip http_method
http_user_agent uri_path url
bytes_in bytes_out archive_hdr1
archive_hdr2
Stage 5: where
| where count >20 AND (archive_hdr1 = "7z" OR archive_hdr1 = "PK" OR archive_hdr2="Rar!")
Stage 6: search
| `security_content_ctime(firstTime)`
Stage 7: search
| `security_content_ctime(lastTime)`
Stage 8: search
| `multiple_archive_files_http_post_traffic_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
archive_hdr1 | eq |
| field:"archive_hdr1" kind:eq |
archive_hdr2 | eq |
| field:"archive_hdr2" kind:eq |
count | gt |
| field:"count" kind:gt value:"20" |
http_method | eq |
| field:"http_method" kind:eq value:"POST" |
sourcetype | eq |
| field:"sourcetype" kind:eq value:"stream:http" |