Containment Playbooks Skill
Comprehensive containment procedures for isolating security threats during active incidents. Provides structured playbooks for network, endpoint, identity, cloud, and application containment.
Capabilities
-
Network Containment: Host isolation, firewall blocks, DNS sinkholing, network segmentation
-
Endpoint Containment: EDR isolation, process termination, service disabling, memory preservation
-
Identity Containment: Account disable, session termination, credential reset, MFA reset
-
Cloud Containment: IAM revocation, resource isolation, API key rotation, security group lockdown
-
Application Containment: WAF rules, rate limiting, service shutdown, database lockdown
-
Email Containment: Message quarantine, sender blocking, rule removal
-
Playbook Execution: Track and document containment actions
Quick Start
from containment_utils import ( NetworkContainment, EndpointContainment, IdentityContainment, CloudContainment, ApplicationContainment, EmailContainment, ContainmentPlaybook, ContainmentAction )
Create playbook for incident
playbook = ContainmentPlaybook('INC-2024-001', 'Ransomware Containment')
Network containment
network = NetworkContainment() action = network.isolate_host('192.168.1.50', 'WORKSTATION-15', 'Ransomware infection') playbook.add_action(action)
Endpoint containment
endpoint = EndpointContainment() action = endpoint.quarantine_endpoint('WORKSTATION-15', 'edr_api_key') playbook.add_action(action)
Identity containment
identity = IdentityContainment() action = identity.disable_account('jdoe', 'Compromised credentials') playbook.add_action(action)
Generate containment report
print(playbook.generate_report())
Usage
Network Containment: Host Isolation
Isolate a compromised host from the network.
Example:
from containment_utils import NetworkContainment, ContainmentPlaybook
playbook = ContainmentPlaybook('INC-2024-001', 'Host Isolation') network = NetworkContainment()
Full network isolation
action = network.isolate_host( ip_address='192.168.1.50', hostname='WORKSTATION-15', reason='Active malware infection', isolation_type='full', # full, partial, or monitor allow_list=['192.168.1.10'] # Allow IR team access )
playbook.add_action(action) print(f"Status: {action.status}") print(f"Commands: {action.commands}")
Network Containment: Firewall Block
Block malicious IPs, domains, or ports.
Example:
from containment_utils import NetworkContainment
network = NetworkContainment()
Block malicious IP
action = network.firewall_block( target='198.51.100.1', target_type='ip', direction='both', # inbound, outbound, both reason='C2 server', duration_hours=24 )
Block malicious domain
action = network.firewall_block( target='evil-domain.com', target_type='domain', direction='outbound', reason='Malware distribution site' )
Block port range
action = network.firewall_block( target='4444-4450', target_type='port', direction='both', reason='Common backdoor ports' )
print(action.generate_firewall_rules())
Network Containment: DNS Sinkholing
Redirect malicious domains to a sinkhole.
Example:
from containment_utils import NetworkContainment
network = NetworkContainment()
malicious_domains = [ 'malware-c2.com', 'data-exfil.net', 'phishing-site.org' ]
action = network.dns_sinkhole( domains=malicious_domains, sinkhole_ip='10.0.0.100', # Internal sinkhole server reason='Active C2 domains', log_queries=True )
print(f"Domains sinkholed: {len(action.targets)}") print(f"DNS config: {action.dns_config}")
Network Containment: Network Segmentation
Implement emergency network segmentation.
Example:
from containment_utils import NetworkContainment
network = NetworkContainment()
action = network.segment_network( source_vlan=100, # Compromised VLAN target_vlan=999, # Quarantine VLAN affected_hosts=['192.168.1.50', '192.168.1.51', '192.168.1.52'], allow_ir_access=True, ir_subnet='10.0.100.0/24' )
print(f"VLAN changes: {action.vlan_config}") print(f"ACL rules: {action.acl_rules}")
Endpoint Containment: EDR Quarantine
Quarantine endpoint using EDR platform.
Example:
from containment_utils import EndpointContainment
endpoint = EndpointContainment()
action = endpoint.quarantine_endpoint( hostname='WORKSTATION-15', edr_platform='crowdstrike', # crowdstrike, sentinelone, defender, carbon_black isolation_level='full', # full, selective allow_list=['10.0.100.0/24'], # IR team subnet preserve_evidence=True )
print(f"EDR API call: {action.api_payload}") print(f"Isolation status: {action.status}")
Endpoint Containment: Process Termination
Terminate malicious processes.
Example:
from containment_utils import EndpointContainment
endpoint = EndpointContainment()
action = endpoint.terminate_process( hostname='WORKSTATION-15', process_name='malware.exe', process_id=1234, kill_children=True, # Also kill child processes create_memory_dump=True # Preserve for forensics )
print(f"Commands: {action.commands}") print(f"Evidence preserved: {action.evidence_path}")
Endpoint Containment: Service Disable
Disable malicious or compromised services.
Example:
from containment_utils import EndpointContainment
endpoint = EndpointContainment()
action = endpoint.disable_service( hostname='SERVER-01', service_name='MaliciousService', stop_immediately=True, disable_autostart=True, backup_config=True )
print(f"Service status: {action.status}") print(f"Rollback info: {action.rollback_commands}")
Endpoint Containment: Memory Preservation
Capture memory for forensic analysis before containment.
Example:
from containment_utils import EndpointContainment
endpoint = EndpointContainment()
action = endpoint.preserve_memory( hostname='WORKSTATION-15', output_path='/evidence/INC-2024-001/', tool='winpmem', # winpmem, dumpit, magnet_ram compress=True, hash_output=True )
print(f"Memory dump: {action.output_file}") print(f"Hash: {action.file_hash}") print(f"Chain of custody: {action.custody_record}")
Identity Containment: Account Disable
Disable compromised user accounts.
Example:
from containment_utils import IdentityContainment
identity = IdentityContainment()
action = identity.disable_account( username='jdoe', reason='Account compromised in phishing attack', directory='active_directory', # active_directory, azure_ad, okta, google preserve_data=True, notify_manager=True )
print(f"Account status: {action.status}") print(f"LDAP command: {action.commands}")
Identity Containment: Session Termination
Terminate all active sessions for a user.
Example:
from containment_utils import IdentityContainment
identity = IdentityContainment()
action = identity.terminate_sessions( username='jdoe', session_types=['all'], # all, vpn, rdp, web, cloud force=True, invalidate_tokens=True )
print(f"Sessions terminated: {action.session_count}") print(f"Tokens invalidated: {action.tokens_invalidated}")
Identity Containment: Password Reset
Force password reset for compromised accounts.
Example:
from containment_utils import IdentityContainment
identity = IdentityContainment()
action = identity.force_password_reset( username='jdoe', require_mfa_reenroll=True, expire_immediately=True, notify_user=True, generate_temp_password=True )
print(f"Temp password: {action.temp_password}") # Securely transmitted print(f"MFA status: {action.mfa_status}")
Identity Containment: Service Account Rotation
Rotate compromised service account credentials.
Example:
from containment_utils import IdentityContainment
identity = IdentityContainment()
action = identity.rotate_service_account( account_name='svc_backup', credential_type='password', # password, api_key, certificate update_dependent_services=True, services=['BackupService', 'ScheduledTask1'] )
print(f"New credential generated: {action.credential_rotated}") print(f"Services updated: {action.services_updated}")
Cloud Containment: IAM Revocation
Revoke cloud IAM permissions.
Example:
from containment_utils import CloudContainment
cloud = CloudContainment()
action = cloud.revoke_iam_permissions( principal='arn:aws:iam::123456789:user/compromised-user', cloud_provider='aws', # aws, azure, gcp revocation_type='all', # all, specific preserve_audit_logs=True )
print(f"Policies detached: {action.policies_removed}") print(f"Access keys disabled: {action.keys_disabled}")
Cloud Containment: Resource Isolation
Isolate compromised cloud resources.
Example:
from containment_utils import CloudContainment
cloud = CloudContainment()
action = cloud.isolate_resource( resource_id='i-0123456789abcdef0', resource_type='ec2_instance', cloud_provider='aws', isolation_method='security_group', # security_group, nacl, vpc allow_forensic_access=True, forensic_ip='10.0.100.50' )
print(f"Security group: {action.security_group_id}") print(f"Isolation rules: {action.isolation_rules}")
Cloud Containment: API Key Revocation
Revoke compromised API keys and tokens.
Example:
from containment_utils import CloudContainment
cloud = CloudContainment()
action = cloud.revoke_api_keys( key_ids=['AKIA1234567890ABCDEF'], cloud_provider='aws', create_new_keys=False, # Don't auto-create replacements notify_owner=True )
print(f"Keys revoked: {action.keys_revoked}") print(f"Affected services: {action.affected_services}")
Cloud Containment: Security Group Lockdown
Emergency security group modifications.
Example:
from containment_utils import CloudContainment
cloud = CloudContainment()
action = cloud.lockdown_security_group( security_group_id='sg-0123456789abcdef0', cloud_provider='aws', lockdown_type='deny_all', # deny_all, allow_ir_only, block_egress ir_cidrs=['10.0.100.0/24'], preserve_logging=True )
print(f"Rules removed: {action.rules_removed}") print(f"New rules: {action.new_rules}")
Application Containment: WAF Rules
Deploy emergency WAF rules.
Example:
from containment_utils import ApplicationContainment
app = ApplicationContainment()
action = app.deploy_waf_rule( rule_name='Block_SQLi_Attack', rule_type='block', # block, rate_limit, challenge conditions=[ {'field': 'uri', 'operator': 'contains', 'value': '/api/search'}, {'field': 'body', 'operator': 'regex', 'value': r'(union|select|insert)'} ], waf_provider='cloudflare', # cloudflare, aws_waf, akamai priority=1 )
print(f"Rule ID: {action.rule_id}") print(f"WAF config: {action.waf_config}")
Application Containment: Rate Limiting
Implement emergency rate limiting.
Example:
from containment_utils import ApplicationContainment
app = ApplicationContainment()
action = app.rate_limit( endpoint='/api/login', limit=10, # Requests per window window_seconds=60, action='block', # block, throttle, challenge scope='ip', # ip, user, global whitelist=['10.0.0.0/8'] )
print(f"Rate limit config: {action.config}")
Application Containment: Service Shutdown
Emergency application service shutdown.
Example:
from containment_utils import ApplicationContainment
app = ApplicationContainment()
action = app.shutdown_service( service_name='payment-api', shutdown_type='graceful', # graceful, immediate drain_connections=True, display_maintenance_page=True, notify_stakeholders=['security@company.com', 'oncall@company.com'] )
print(f"Service status: {action.status}") print(f"Connections drained: {action.connections_drained}")
Application Containment: Database Lockdown
Lock down database access.
Example:
from containment_utils import ApplicationContainment
app = ApplicationContainment()
action = app.lockdown_database( database='production_db', db_type='postgresql', # postgresql, mysql, mssql, mongodb lockdown_level='read_only', # read_only, admin_only, full_lockdown revoke_users=['app_user', 'report_user'], preserve_admin=['dba_admin'] )
print(f"Users revoked: {action.users_revoked}") print(f"Rollback script: {action.rollback_script}")
Email Containment: Message Quarantine
Quarantine malicious emails.
Example:
from containment_utils import EmailContainment
email = EmailContainment()
action = email.quarantine_messages( search_criteria={ 'sender': 'attacker@malicious.com', 'subject_contains': 'Invoice', 'date_range': ('2024-01-15', '2024-01-16') }, email_platform='office365', # office365, google, exchange delete_from_mailboxes=True, preserve_for_analysis=True )
print(f"Messages quarantined: {action.message_count}") print(f"Affected users: {action.affected_users}")
Email Containment: Sender Block
Block malicious senders.
Example:
from containment_utils import EmailContainment
email = EmailContainment()
action = email.block_sender( sender='attacker@malicious.com', block_type='domain', # email, domain email_platform='office365', add_to_threat_list=True )
print(f"Block rule: {action.block_rule}")
Email Containment: Inbox Rule Removal
Remove malicious inbox rules.
Example:
from containment_utils import EmailContainment
email = EmailContainment()
action = email.remove_inbox_rules( username='jdoe', rule_criteria={ 'forwards_externally': True, 'deletes_messages': True }, email_platform='office365' )
print(f"Rules removed: {action.rules_removed}") print(f"Rule details: {action.rule_details}")
Playbook Management
Track and document containment actions.
Example:
from containment_utils import ContainmentPlaybook, ContainmentAction
Create playbook
playbook = ContainmentPlaybook( incident_id='INC-2024-001', name='Ransomware Containment', analyst='analyst1' )
Execute containment actions
... (use containment utilities as shown above)
Mark action complete
playbook.complete_action(action.id, 'Successfully isolated host')
Mark action failed with rollback
playbook.fail_action(action.id, 'Isolation failed', rollback=True)
Generate reports
print(playbook.generate_report()) print(playbook.generate_executive_summary())
Export to JSON for SOAR integration
print(playbook.to_json())
Configuration
Environment Variables
Variable Description Required Default
CONTAINMENT_LOG_PATH
Log file path No ./containment.log
EDR_API_KEY
EDR platform API key For EDR actions
CLOUD_CREDENTIALS
Cloud provider credentials For cloud actions
Rollback Configuration
All containment actions support rollback:
Get rollback commands
rollback = action.get_rollback() print(rollback.commands)
Execute rollback
rollback.execute()
Limitations
-
No Direct Execution: Generates commands/configs, does not execute directly
-
API Integration: Requires API credentials for platform-specific actions
-
Network Dependencies: Some actions require network connectivity to targets
-
Permission Requirements: Actions require appropriate administrative permissions
Troubleshooting
Action Failed to Execute
Problem: Containment action reports failure
Solution: Check permissions and connectivity:
Verify connectivity
action = network.verify_connectivity(target_ip) print(action.reachable)
Check required permissions
print(action.required_permissions)
Rollback Not Available
Problem: Cannot rollback a containment action
Solution: Some destructive actions cannot be rolled back:
if action.rollback_available: action.rollback() else: print(f"Manual intervention required: {action.rollback_instructions}")
Related Skills
-
detection: Detect threats to contain
-
incident-response: Full IR workflow
-
remediation: Post-containment cleanup
-
soc-operations: Alert triage
References
-
Detailed API Reference
-
NIST SP 800-61 Rev. 2
-
SANS Incident Handler's Handbook