What are Attack Simulation Frameworks?
Attack Simulation Frameworks are platforms that automate the execution of adversary tactics, techniques, and procedures (TTPs) to continuously validate security controls and improve defensive capabilities. These frameworks use standardized attack methodologies, typically based on MITRE ATT&CK, to conduct realistic simulations that test detection, prevention, and response mechanisms.
Leading platforms include CALDERA for adversary emulation, Atomic Red Team for granular technique testing, MITRE Engenuity for evaluation methodologies, and commercial Breach and Attack Simulation (BAS) solutions like AttackIQ and SafeBreach. These tools enable organizations to move from periodic penetration testing to continuous security validation.
Attack Simulation Effectiveness Calculator
Annual Cost: $115,000
Simulations/Year: 52
Assessment: Excellent Simulation Coverage
Leading Attack Simulation Frameworks
CALDERA
MITRE's open-source automated adversary emulation platform.
• Plugin-based architecture
• MITRE ATT&CK integration
• Multi-platform support
• Open-source and extensible
Atomic Red Team
Small, focused tests for individual MITRE ATT&CK techniques.
• PowerShell and command-line based
• Community-driven test library
• Easy integration with existing tools
• Rapid deployment and execution
AttackIQ
Commercial continuous security validation platform.
• Enterprise scalability
• Security control validation
• Comprehensive reporting
• Integration ecosystem
SafeBreach
Commercial breach simulation platform with hacker's playbook.
• Safe execution environment
• Multi-vector attack simulation
• Security control optimization
• Risk quantification metrics
CALDERA Implementation Example
CALDERA Adversary Profile
Adversary profiles define the tactics, techniques, and procedures for simulation campaigns.
name: APT Simulation Profile
description: Advanced persistent threat simulation based on real-world TTPs
atomic_ordering:
- id: 1
attack:
- id: T1059.001 # PowerShell
timeout: 60
cleanup: true
- id: T1055 # Process Injection
timeout: 120
cleanup: true
- id: T1003.001 # LSASS Memory Dump
timeout: 90
cleanup: true
- id: T1021.002 # SMB/Windows Admin Shares
timeout: 180
cleanup: true
plugins:
- stockpile # Core TTPs library
- atomic # Atomic Red Team integration
- compass # ATT&CK navigator integration
- sandcat # Cross-platform agent
objectives:
- name: "Initial Access"
description: "Establish foothold in target environment"
goals:
- "Execute spear-phishing simulation"
- "Validate email security controls"
- name: "Persistence & Privilege Escalation"
description: "Maintain access and escalate privileges"
goals:
- "Test persistence mechanism detection"
- "Validate privilege escalation controls"
- name: "Lateral Movement"
description: "Move through network to achieve objectives"
goals:
- "Test network segmentation controls"
- "Validate lateral movement detection"
facts:
- trait: "domain.user.name"
value: "simulation_user"
- trait: "host.dir.staged"
value: "C:\temp\staged"
- trait: "target.network.range"
value: "10.0.0.0/16"
Custom CALDERA Ability
Custom abilities extend CALDERA with organization-specific attack techniques.
- id: 12345678-abcd-1234-efgh-123456789abc
name: Custom Credential Harvesting
description: Simulate credential harvesting specific to organization tools
tactic: credential-access
technique:
attack_id: T1003
name: Credential Dumping
platforms:
windows:
cmd:
command: |
# Custom credential harvesting simulation
$targetProcess = "custom_auth_tool.exe"
$processId = (Get-Process $targetProcess -ErrorAction SilentlyContinue).Id
if ($processId) {
# Simulate memory dumping without actual credential theft
Write-Host "SIMULATION: Would dump memory from PID $processId"
# Log simulation activity for detection validation
eventcreate /T INFORMATION /ID 9999 /L APPLICATION /SO "CALDERA_SIM" /D "Credential harvesting simulation executed against $targetProcess"
} else {
Write-Host "Target process not found - simulation skipped"
}
cleanup: |
# Cleanup simulation artifacts
Get-EventLog -LogName Application -Source "CALDERA_SIM" -Newest 1 |
ForEach-Object { Write-EventLog -LogName Application -Source "Application" -EntryType Information -EventId 9998 -Message "Simulation cleanup completed" }
parsers:
plugins.stockpile.app.parsers.basic:
- source: host.process.name
edge: has_process
requirements:
- source: host.user.name
- source: domain.user.name
timeout: 60
CALDERA Operation Execution
Python script for automated CALDERA operation management and reporting.
import asyncio
import json
import requests
from datetime import datetime
from typing import Dict, List
class CalderaAutomation:
def __init__(self, server_url: str, api_key: str):
self.server_url = server_url
self.api_key = api_key
self.session = requests.Session()
self.session.headers.update({
'KEY': api_key,
'Content-Type': 'application/json'
})
async def create_operation(
self,
name: str,
adversary_id: str,
planner: str = "atomic"
) -> Dict:
"""Create a new CALDERA operation"""
operation_data = {
'name': name,
'adversary': {'adversary_id': adversary_id},
'auto_close': False,
'state': 'paused',
'group': '',
'planner': {'id': planner},
'source': {'id': 'basic'},
'use_learning_parsers': True,
'obfuscator': 'plain-text',
'jitter': '2/8'
}
response = self.session.post(
f'{self.server_url}/api/rest',
json={
'index': 'operations',
'data': operation_data
}
)
if response.status_code == 200:
operation = response.json()
print(f"Created operation: {operation['id']}")
return operation
else:
raise Exception(f"Failed to create operation: {response.text}")
async def start_operation(self, operation_id: str) -> bool:
"""Start a CALDERA operation"""
response = self.session.patch(
f'{self.server_url}/api/rest',
json={
'index': 'operations',
'id': operation_id,
'data': {'state': 'running'}
}
)
return response.status_code == 200
async def monitor_operation(
self,
operation_id: str,
check_interval: int = 30
) -> Dict:
"""Monitor operation progress and collect results"""
while True:
response = self.session.get(
f'{self.server_url}/api/rest',
params={
'index': 'operations',
'id': operation_id
}
)
if response.status_code == 200:
operation = response.json()
state = operation.get('state', 'unknown')
print(f"Operation {operation_id} state: {state}")
print(f"Links executed: {len(operation.get('chain', []))}")
if state in ['finished', 'out_of_time']:
return await self.collect_operation_results(operation_id)
await asyncio.sleep(check_interval)
else:
raise Exception(f"Failed to get operation status: {response.text}")
async def collect_operation_results(self, operation_id: str) -> Dict:
"""Collect detailed operation results for analysis"""
# Get operation details
op_response = self.session.get(
f'{self.server_url}/api/rest',
params={'index': 'operations', 'id': operation_id}
)
operation = op_response.json()
results = {
'operation_id': operation_id,
'name': operation['name'],
'start_time': operation.get('start'),
'finish_time': operation.get('finish'),
'state': operation['state'],
'total_links': len(operation.get('chain', [])),
'successful_links': 0,
'failed_links': 0,
'techniques_executed': [],
'detection_opportunities': []
}
# Analyze execution chain
for link in operation.get('chain', []):
if link['status'] == 0: # Success
results['successful_links'] += 1
else:
results['failed_links'] += 1
# Extract technique information
ability = link.get('ability', {})
technique_id = ability.get('technique_id', 'Unknown')
technique_name = ability.get('technique_name', 'Unknown')
if technique_id not in [t['id'] for t in results['techniques_executed']]:
results['techniques_executed'].append({
'id': technique_id,
'name': technique_name,
'tactic': ability.get('tactic', 'Unknown')
})
# Identify detection opportunities
if link['status'] == 0 and not link.get('visibility', {}).get('detected', False):
results['detection_opportunities'].append({
'technique_id': technique_id,
'technique_name': technique_name,
'description': f"Technique {technique_id} executed successfully without detection",
'recommendation': f"Review detection rules for {technique_name}",
'priority': self._assess_detection_priority(technique_id)
})
return results
def _assess_detection_priority(self, technique_id: str) -> str:
"""Assess priority for detection improvement based on technique"""
high_priority_techniques = [
'T1003', # Credential Dumping
'T1055', # Process Injection
'T1105', # Ingress Tool Transfer
'T1021', # Remote Services
'T1059' # Command and Scripting Interpreter
]
# Extract base technique ID (remove sub-technique)
base_id = technique_id.split('.')[0]
return 'High' if base_id in high_priority_techniques else 'Medium'
async def generate_report(self, results: Dict) -> str:
"""Generate comprehensive operation report"""
report = {
'executive_summary': {
'operation_name': results['name'],
'execution_date': results['start_time'],
'total_techniques': len(results['techniques_executed']),
'success_rate': f"{(results['successful_links'] / results['total_links'] * 100):.1f}%",
'detection_gaps': len(results['detection_opportunities'])
},
'technique_coverage': {
'techniques_tested': results['techniques_executed'],
'tactics_covered': list(set(t['tactic'] for t in results['techniques_executed']))
},
'detection_analysis': {
'opportunities': results['detection_opportunities'],
'recommendations': [
{
'category': 'Detection Rules',
'priority': 'High',
'description': f"Review and enhance detection for {len(results['detection_opportunities'])} undetected techniques"
},
{
'category': 'Monitoring Coverage',
'priority': 'Medium',
'description': 'Expand monitoring coverage for tactics with limited visibility'
}
]
},
'next_steps': [
'Implement detection improvements for identified gaps',
'Schedule follow-up simulations to validate improvements',
'Integrate lessons learned into security awareness training'
]
}
return json.dumps(report, indent=2)
Real-World Attack Simulation Implementations
Financial Services Bank
Continuous attack simulation for regulatory compliance and threat validation.
- • AttackIQ platform with 200+ automated scenarios
- • Daily execution across all critical systems
- • Integration with SIEM and SOC workflows
- • Quarterly compliance reporting automation
Government Defense Agency
Custom CALDERA implementation for classified environment testing.
- • Air-gapped CALDERA deployment
- • Custom adversary profiles based on threat intelligence
- • Multi-classification level testing
- • Integration with defensive cyber operations
Healthcare System
SafeBreach implementation focused on medical device and patient data security.
- • HIPAA-compliant simulation scenarios
- • Medical device network segmentation testing
- • Ransomware simulation and response validation
- • Non-disruptive continuous testing
Technology Company
Hybrid approach using multiple frameworks for comprehensive coverage.
- • CALDERA for custom adversary emulation
- • Atomic Red Team for granular technique testing
- • Purple team integration with real-time collaboration
- • DevSecOps pipeline integration
MITRE Engenuity Evaluation Methodology
Evaluation Framework
- • APT Emulation: Real-world adversary behavior replication
- • Detection Scoring: Granular visibility and analytic coverage
- • Standardized Testing: Consistent evaluation across vendors
- • Public Results: Transparent methodology and findings
- • Technique Mapping: Direct MITRE ATT&CK correlation
- • Contextual Analysis: Environmental and configuration factors
Key Benefits
- • Independent, objective evaluation methodology
- • Comprehensive coverage of attack lifecycle phases
- • Standardized metrics for comparison and improvement
- • Industry-wide baseline for security effectiveness
- • Continuous refinement based on threat evolution
- • Open-source methodology available for adoption
Attack Simulation Best Practices
✅ Do
- • Align simulations with current threat intelligence and real-world TTPs
- • Implement continuous testing rather than point-in-time assessments
- • Integrate simulation results into security operations workflows
- • Use standardized frameworks like MITRE ATT&CK for consistency
- • Document and track detection improvements over time
- • Combine automated simulation with manual red team exercises
❌ Don't
- • Run simulations without clear objectives and success metrics
- • Ignore false positives or fail to tune detection rules
- • Focus solely on technique execution without detection validation
- • Operate simulation frameworks without proper safety controls
- • Neglect to involve security operations teams in simulation planning
- • Use simulation results purely for compliance checkbox exercises