Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion sigma/cli/analyze.py
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ def analyze_attack(
max_color,
],
"minValue": min_score,
"maxValue": max_score or max(scores.values()),
"maxValue": max_score if max_score is not None else (max(scores.values()) if scores else 0),
},
"techniques": layer_techniques,
}
Expand Down
9 changes: 9 additions & 0 deletions tests/files/noattack/plain_rule.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
title: Plain rule without ATT&CK tags
id: 11111111-2222-3333-4444-555555555555
status: test
logsource:
category: process_creation
detection:
selection:
Image|endswith: '\evil.exe'
condition: selection
19 changes: 19 additions & 0 deletions tests/test_analyze.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,25 @@ def test_attack_generate_min_color():
assert "#123456" in result.stdout


def test_attack_generate_no_attack_tags():
cli = CliRunner()
result = cli.invoke(
analyze_attack, ["max", "-", "tests/files/noattack"]
)
assert result.exit_code == 0
assert '"maxValue": 0' in result.stdout
assert '"techniques": []' in result.stdout


def test_attack_generate_max_score_zero():
cli = CliRunner()
result = cli.invoke(
analyze_attack, ["--max-score", "0", "max", "-", "tests/files/valid"]
)
assert result.exit_code == 0
assert '"maxValue": 0' in result.stdout


def test_attack_generate_no_subtechniques():
cli = CliRunner()
result = cli.invoke(
Expand Down