Skip to content

Commit 0028d39

Browse files
committed
Merge branch 'master' into cisco_isovalent
2 parents 8cecfe4 + 5e38ead commit 0028d39

File tree

1,155 files changed

+11262
-7736
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,155 files changed

+11262
-7736
lines changed

.github/dependabot.yml

Lines changed: 0 additions & 7 deletions
This file was deleted.

.github/validate_dataset_ymls.py

Lines changed: 0 additions & 46 deletions
This file was deleted.

.github/workflows/validate.yml

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
name: Validate Attack Data
2+
3+
on:
4+
pull_request:
5+
branches: [ master, main ]
6+
types: [opened, synchronize, reopened]
7+
paths:
8+
- 'datasets/**/*.yml'
9+
- 'datasets/**/*.yaml'
10+
- 'bin/validate.py'
11+
- 'bin/dataset_schema.json'
12+
- 'bin/requirements.txt'
13+
push:
14+
branches: [ master, main ]
15+
paths:
16+
- 'datasets/**/*.yml'
17+
- 'datasets/**/*.yaml'
18+
- 'bin/validate.py'
19+
- 'bin/dataset_schema.json'
20+
- 'bin/requirements.txt'
21+
22+
permissions:
23+
contents: read
24+
issues: write
25+
pull-requests: write
26+
27+
jobs:
28+
validate-attack-data:
29+
runs-on: ubuntu-latest
30+
31+
steps:
32+
- name: Checkout repository
33+
uses: actions/checkout@v4
34+
with:
35+
lfs: true
36+
37+
- name: Set up Python
38+
uses: actions/setup-python@v4
39+
with:
40+
python-version: '3.9'
41+
cache: 'pip'
42+
43+
- name: Install dependencies
44+
run: |
45+
python -m pip install --upgrade pip
46+
pip install -r bin/requirements.txt
47+
48+
# Validate all YAML files
49+
- name: Validate all YAML files
50+
run: |
51+
python bin/validate.py
52+
env:
53+
PYTHONPATH: ${{ github.workspace }}/bin
54+
55+
# PR-specific success/failure handling
56+
- name: Comment PR on validation failure
57+
if: failure() && github.event_name == 'pull_request'
58+
uses: actions/github-script@v7
59+
with:
60+
script: |
61+
const { owner, repo, number } = context.issue;
62+
63+
const body = `❌ **Attack Data Validation Failed**
64+
65+
The YAML files in this PR do not pass validation. Please check the workflow logs for detailed error messages and fix the issues before merging.
66+
67+
[View workflow run](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})`;
68+
69+
await github.rest.issues.createComment({
70+
owner,
71+
repo,
72+
issue_number: number,
73+
body: body
74+
});
75+
76+
- name: Comment PR on validation success
77+
if: success() && github.event_name == 'pull_request'
78+
uses: actions/github-script@v7
79+
with:
80+
script: |
81+
const { owner, repo, number } = context.issue;
82+
83+
const body = `✅ **Attack Data Validation Passed**
84+
85+
All YAML files in this PR have been successfully validated against the schema.
86+
87+
Ready for review and merge! 🚀`;
88+
89+
await github.rest.issues.createComment({
90+
owner,
91+
repo,
92+
issue_number: number,
93+
body: body
94+
});
95+
96+
# Push-specific failure handling (create issue)
97+
- name: Create issue on validation failure (Push)
98+
if: failure() && github.event_name == 'push'
99+
uses: actions/github-script@v7
100+
with:
101+
script: |
102+
const title = `🚨 Attack Data Validation Failed - ${new Date().toISOString().split('T')[0]}`;
103+
const body = `**Validation failed on push to ${context.ref}**
104+
105+
Commit: ${context.sha}
106+
107+
The YAML files in the datasets directory do not pass validation. This indicates that invalid data has been merged into the main branch.
108+
109+
**Action Required:**
110+
1. Review the [failed workflow run](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})
111+
2. Fix the validation errors
112+
3. Create a hotfix PR to resolve the issues
113+
`;
114+
115+
await github.rest.issues.create({
116+
owner: context.repo.owner,
117+
repo: context.repo.repo,
118+
title: title,
119+
body: body,
120+
labels: ['bug', 'validation-failure', 'high-priority']
121+
});
122+
123+

README.md

Lines changed: 26 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -45,51 +45,35 @@ git lfs pull --include=datasets/attack_techniques/T1003.001/atomic_red_team/wind
4545

4646
# Anatomy of a Dataset 🧬
4747
### Datasets
48-
Datasets are defined by a common YML structure. The structure has the following fields:
49-
50-
|field| description|
51-
|---|---|
52-
| id | UUID of dataset |
53-
|name | name of author |
54-
| date | last modified date |
55-
| dataset | array of URLs where the hosted version of the dataset is located |
56-
| description | describes the dataset as detailed as possible |
57-
| environment | markdown filename of the environment description see below |
58-
| technique | array of MITRE ATT&CK techniques associated with dataset |
59-
| references | array of URLs that reference the dataset |
60-
| sourcetypes | array of sourcetypes that are contained in the dataset |
61-
62-
63-
For example
64-
48+
example:
6549
```
66-
id: 405d5889-16c7-42e3-8865-1485d7a5b2b6
6750
author: Patrick Bareiss
51+
id: cc9b25e1-efc9-11eb-926b-550bf0943fbb
6852
date: '2020-10-08'
69-
description: 'Atomic Test Results: Successful Execution of test T1003.001-1 Windows
70-
Credential Editor Successful Execution of test T1003.001-2 Dump LSASS.exe Memory
71-
using ProcDump Return value unclear for test T1003.001-3 Dump LSASS.exe Memory using
72-
comsvcs.dll Successful Execution of test T1003.001-4 Dump LSASS.exe Memory using
73-
direct system calls and API unhooking Return value unclear for test T1003.001-6
74-
Offline Credential Theft With Mimikatz Return value unclear for test T1003.001-7
75-
LSASS read with pypykatz '
53+
description: 'Atomic Test Results: Successful Execution of test T1003.003-1 Create
54+
Volume Shadow Copy with NTDS.dit Successful Execution of test T1003.003-2 Copy NTDS.dit
55+
from Volume Shadow Copy Successful Execution of test T1003.003-3 Dump Active Directory
56+
Database with NTDSUtil Successful Execution of test T1003.003-4 Create Volume Shadow
57+
Copy with WMI Return value unclear for test T1003.003-5 Create Volume Shadow Copy
58+
with Powershell Successful Execution of test T1003.003-6 Create Symlink to Volume
59+
Shadow Copy '
7660
environment: attack_range
77-
technique:
78-
- T1003.001
79-
dataset:
80-
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.001/atomic_red_team/windows-powershell.log
81-
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.001/atomic_red_team/windows-security.log
82-
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.001/atomic_red_team/windows-sysmon.log
83-
- https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1003.001/atomic_red_team/windows-system.log
84-
references:
85-
- https://attack.mitre.org/techniques/T1003/001/
86-
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1003.001/T1003.001.md
87-
- https://github.com/splunk/security-content/blob/develop/tests/T1003_001.yml
88-
sourcetypes:
89-
- XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
90-
- WinEventLog:Microsoft-Windows-PowerShell/Operational
91-
- WinEventLog:System
92-
- WinEventLog:Security
61+
directory: atomic_red_team
62+
mitre_technique:
63+
- T1003.003
64+
datasets:
65+
- name: crowdstrike_falcon
66+
path: /datasets/attack_techniques/T1003.003/atomic_red_team/crowdstrike_falcon.log
67+
sourcetype: crowdstrike:events:sensor
68+
source: crowdstrike
69+
- name: 4688_windows-security
70+
path: /datasets/attack_techniques/T1003.003/atomic_red_team/4688_windows-security.log
71+
sourcetype: XmlWinEventLog
72+
source: XmlWinEventLog:Security
73+
- name: windows-sysmon
74+
path: /datasets/attack_techniques/T1003.003/atomic_red_team/windows-sysmon.log
75+
sourcetype: XmlWinEventLog
76+
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
9377
```
9478

9579

@@ -129,14 +113,6 @@ pip install -r bin/requirements.txt
129113

130114
See a quick demo 📺 of this process [here](https://www.youtube.com/watch?v=41NAG0zGg40).
131115

132-
### Into DSP
133-
134-
To send datasets into DSP the simplest way is to use the [scloud](https://docs.splunk.com/Documentation/DSP/1.1.0/Admin/AuthenticatewithSCloud) command-line-tool as a requirement.
135-
136-
1. Download the dataset
137-
2. Ingest the dataset into DSP via scloud command `cat attack_data.json | scloud ingest post-events --format JSON
138-
3. Build a pipeline that reads from the firehose and you should see the events.
139-
140116
# Contribute Datasets 🥰
141117

142118
1. Generate a dataset
@@ -162,7 +138,7 @@ This project takes advantage of automation to generate datasets using the attack
162138

163139
## License
164140

165-
Copyright 2023 Splunk Inc.
141+
Copyright 2025 Splunk Inc.
166142

167143
Licensed under the Apache License, Version 2.0 (the "License");
168144
you may not use this file except in compliance with the License.

attack_data_service/.dockerignore

Lines changed: 0 additions & 6 deletions
This file was deleted.

attack_data_service/Dockerfile

Lines changed: 0 additions & 22 deletions
This file was deleted.

0 commit comments

Comments
 (0)