mirror of
https://github.com/SHOGGOTH-SECTOR/sica-fondt.git
synced 2026-08-01 08:30:20 +00:00
Place useful parts of the surrounding repos into sica-fondt by layer, per the
body model (Ada = membrane; brain/endocrine/capabilities/knowledge non-Ada):
- brain/ LLM reasoning + providers (dapr, hermes, MoMoA)
- capabilities/ REPRAG sidecars: hermes tools/skills, dapr tools, parallel
dispatch, A51 channels, and the OSINT cluster
- knowledge/ LORAG corpus: 754 cyber-skills, agency personas, secure-coding,
MITRE ATT&CK data
- reference/ defensive threat-reference (C3, shhbruh doc) + AdaYaml parser
License handling: AGPL sources (worldosint, advanced_evolution, mercury,
Reticulum) and GPL DeTTECT are SPEC-only clean-room/port descriptions — no
copyleft code copied. MIT/Apache/data parts copied as working trees.
Safety: shhbruh escape/persistence material and C3 covert-C2 kept as reference
only, not wired into the running organism. See CONSOLIDATION.md.
https://claude.ai/code/session_01UehUqEXXJJCsHoA4voCU5c
175 lines
5.3 KiB
Markdown
175 lines
5.3 KiB
Markdown
# API Reference: AWS Cloud Incident Containment
|
|
|
|
## Libraries Used
|
|
|
|
| Library | Purpose |
|
|
|---------|---------|
|
|
| `boto3` | AWS SDK for EC2, IAM, Security Groups, and CloudTrail |
|
|
| `json` | Parse and log containment actions |
|
|
| `datetime` | Timestamp containment events |
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
pip install boto3
|
|
```
|
|
|
|
## Authentication
|
|
|
|
```python
|
|
import boto3
|
|
import os
|
|
|
|
session = boto3.Session(
|
|
aws_access_key_id=os.environ.get("AWS_ACCESS_KEY_ID"),
|
|
aws_secret_access_key=os.environ.get("AWS_SECRET_ACCESS_KEY"),
|
|
region_name=os.environ.get("AWS_REGION", "us-east-1"),
|
|
)
|
|
|
|
ec2 = session.client("ec2")
|
|
iam = session.client("iam")
|
|
```
|
|
|
|
## Containment Actions
|
|
|
|
### Isolate EC2 Instance (Security Group Quarantine)
|
|
```python
|
|
def isolate_instance(instance_id):
|
|
"""Replace instance security groups with a quarantine SG that blocks all traffic."""
|
|
# Create quarantine SG if it doesn't exist
|
|
vpc_id = ec2.describe_instances(
|
|
InstanceIds=[instance_id]
|
|
)["Reservations"][0]["Instances"][0]["VpcId"]
|
|
|
|
try:
|
|
quarantine_sg = ec2.create_security_group(
|
|
GroupName="quarantine-no-access",
|
|
Description="IR Quarantine — blocks all inbound/outbound",
|
|
VpcId=vpc_id,
|
|
)
|
|
sg_id = quarantine_sg["GroupId"]
|
|
# Revoke default outbound rule
|
|
ec2.revoke_security_group_egress(
|
|
GroupId=sg_id,
|
|
IpPermissions=[{"IpProtocol": "-1", "IpRanges": [{"CidrIp": "0.0.0.0/0"}]}],
|
|
)
|
|
except ec2.exceptions.ClientError:
|
|
# SG already exists
|
|
sgs = ec2.describe_security_groups(
|
|
Filters=[{"Name": "group-name", "Values": ["quarantine-no-access"]}]
|
|
)
|
|
sg_id = sgs["SecurityGroups"][0]["GroupId"]
|
|
|
|
# Apply quarantine SG (replaces all existing SGs)
|
|
ec2.modify_instance_attribute(
|
|
InstanceId=instance_id,
|
|
Groups=[sg_id],
|
|
)
|
|
return {"instance_id": instance_id, "quarantine_sg": sg_id, "action": "isolated"}
|
|
```
|
|
|
|
### Disable IAM Access Keys
|
|
```python
|
|
def disable_user_access_keys(username):
|
|
"""Disable all access keys for a compromised IAM user."""
|
|
keys = iam.list_access_keys(UserName=username)
|
|
disabled = []
|
|
for key in keys["AccessKeyMetadata"]:
|
|
if key["Status"] == "Active":
|
|
iam.update_access_key(
|
|
UserName=username,
|
|
AccessKeyId=key["AccessKeyId"],
|
|
Status="Inactive",
|
|
)
|
|
disabled.append(key["AccessKeyId"])
|
|
return {"username": username, "keys_disabled": disabled}
|
|
```
|
|
|
|
### Revoke IAM Role Sessions
|
|
```python
|
|
def revoke_role_sessions(role_name):
|
|
"""Revoke all active sessions for an IAM role."""
|
|
iam.put_role_policy(
|
|
RoleName=role_name,
|
|
PolicyName="RevokeOlderSessions",
|
|
PolicyDocument=json.dumps({
|
|
"Version": "2012-10-17",
|
|
"Statement": [{
|
|
"Effect": "Deny",
|
|
"Action": "*",
|
|
"Resource": "*",
|
|
"Condition": {
|
|
"DateLessThan": {
|
|
"aws:TokenIssueTime": datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%SZ")
|
|
}
|
|
}
|
|
}]
|
|
}),
|
|
)
|
|
return {"role": role_name, "action": "sessions_revoked"}
|
|
```
|
|
|
|
### Snapshot EBS Volume for Forensics
|
|
```python
|
|
def snapshot_instance_volumes(instance_id):
|
|
"""Create forensic snapshots of all attached EBS volumes."""
|
|
instance = ec2.describe_instances(InstanceIds=[instance_id])
|
|
volumes = instance["Reservations"][0]["Instances"][0].get("BlockDeviceMappings", [])
|
|
snapshots = []
|
|
for vol in volumes:
|
|
vol_id = vol["Ebs"]["VolumeId"]
|
|
snap = ec2.create_snapshot(
|
|
VolumeId=vol_id,
|
|
Description=f"IR forensic snapshot — {instance_id} — {vol_id}",
|
|
TagSpecifications=[{
|
|
"ResourceType": "snapshot",
|
|
"Tags": [
|
|
{"Key": "Purpose", "Value": "incident-response"},
|
|
{"Key": "SourceInstance", "Value": instance_id},
|
|
]
|
|
}],
|
|
)
|
|
snapshots.append({"volume_id": vol_id, "snapshot_id": snap["SnapshotId"]})
|
|
return snapshots
|
|
```
|
|
|
|
### Stop Instance (Preserve State)
|
|
```python
|
|
def stop_instance(instance_id):
|
|
"""Stop instance without terminating to preserve memory and disk."""
|
|
ec2.stop_instances(InstanceIds=[instance_id])
|
|
return {"instance_id": instance_id, "action": "stopped"}
|
|
```
|
|
|
|
### Block Public S3 Bucket Access
|
|
```python
|
|
s3 = session.client("s3")
|
|
|
|
def block_public_bucket(bucket_name):
|
|
s3.put_public_access_block(
|
|
Bucket=bucket_name,
|
|
PublicAccessBlockConfiguration={
|
|
"BlockPublicAcls": True,
|
|
"IgnorePublicAcls": True,
|
|
"BlockPublicPolicy": True,
|
|
"RestrictPublicBuckets": True,
|
|
},
|
|
)
|
|
return {"bucket": bucket_name, "action": "public_access_blocked"}
|
|
```
|
|
|
|
## Output Format
|
|
|
|
```json
|
|
{
|
|
"incident_id": "IR-2025-001",
|
|
"containment_time": "2025-01-15T10:30:00Z",
|
|
"actions_taken": [
|
|
{"action": "isolate_instance", "target": "i-0abc123", "status": "success"},
|
|
{"action": "disable_access_keys", "target": "compromised-user", "keys_disabled": 2},
|
|
{"action": "snapshot_volumes", "target": "i-0abc123", "snapshots": 2},
|
|
{"action": "stop_instance", "target": "i-0abc123", "status": "success"}
|
|
]
|
|
}
|
|
```
|