mirror of
https://github.com/mukul975/Anthropic-Cybersecurity-Skills.git
synced 2026-06-11 13:44:56 +03:00
c47eed6a64
- Fix 25 shell=True subprocess calls with list-based commands - Fix 49 verify=False in defensive skills (env-var override) - Add timeout to 231 HTTP/subprocess/socket calls - Fix 6 SQL injection patterns with whitelist validation - Replace 8 __import__() with standard imports - Remove 701 unused imports across 442 files - Add authorized-testing disclaimers to all offensive skills - Complete 11 incomplete skill directories - Expand 10 stub SKILL.md files with full content - Fix 2 YAML parse errors in frontmatter - Fix 5 pre-existing syntax errors - Convert 22 hardcoded paths/ports to environment variables - Back up 21 redundant skill pairs to .bak - Fix 2 global declaration errors - 724/724 skills with full folder anatomy (SKILL.md + agent.py + api-reference.md + LICENSE) - 0 compile errors across all 724 agent.py files
133 lines
5.0 KiB
Python
133 lines
5.0 KiB
Python
#!/usr/bin/env python3
|
|
"""Microsegmentation audit agent for zero trust network enforcement."""
|
|
|
|
import json
|
|
import os
|
|
import sys
|
|
import argparse
|
|
from datetime import datetime
|
|
|
|
try:
|
|
import requests
|
|
requests.packages.urllib3.disable_warnings()
|
|
except ImportError:
|
|
print("Install: pip install requests")
|
|
sys.exit(1)
|
|
|
|
|
|
def audit_aws_security_groups(session):
|
|
"""Audit AWS security groups for microsegmentation compliance."""
|
|
import boto3
|
|
ec2 = session.client("ec2")
|
|
findings = []
|
|
for sg in ec2.describe_security_groups()["SecurityGroups"]:
|
|
for rule in sg.get("IpPermissions", []):
|
|
for ip_range in rule.get("IpRanges", []):
|
|
cidr = ip_range.get("CidrIp", "")
|
|
if cidr == "0.0.0.0/0":
|
|
findings.append({
|
|
"sg_id": sg["GroupId"],
|
|
"sg_name": sg.get("GroupName", ""),
|
|
"port": rule.get("FromPort", "all"),
|
|
"cidr": cidr,
|
|
"severity": "HIGH",
|
|
"recommendation": "Restrict to specific CIDR blocks",
|
|
})
|
|
elif "/" in cidr:
|
|
prefix = int(cidr.split("/")[1])
|
|
if prefix < 24:
|
|
findings.append({
|
|
"sg_id": sg["GroupId"],
|
|
"sg_name": sg.get("GroupName", ""),
|
|
"port": rule.get("FromPort", "all"),
|
|
"cidr": cidr,
|
|
"severity": "MEDIUM",
|
|
"recommendation": f"Narrow CIDR from /{prefix} to /32 or workload-specific range",
|
|
})
|
|
return findings
|
|
|
|
|
|
def check_illumio_workloads(base_url, api_key, org_id):
|
|
"""Check Illumio workload segmentation status."""
|
|
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
|
|
try:
|
|
resp = requests.get(f"{base_url}/api/v2/orgs/{org_id}/workloads",
|
|
headers=headers, verify=not os.environ.get("SKIP_TLS_VERIFY", "").lower() == "true", timeout=30) # Set SKIP_TLS_VERIFY=true for self-signed certs in lab environments
|
|
resp.raise_for_status()
|
|
workloads = resp.json()
|
|
return [{
|
|
"hostname": w.get("hostname", ""),
|
|
"enforcement_mode": w.get("enforcement_mode", ""),
|
|
"visibility_level": w.get("visibility_level", ""),
|
|
"online": w.get("online", False),
|
|
} for w in workloads[:20]]
|
|
except Exception as e:
|
|
return [{"error": str(e)}]
|
|
|
|
|
|
def generate_segmentation_policy(app_tiers):
|
|
"""Generate microsegmentation policy recommendations."""
|
|
policies = []
|
|
for tier in app_tiers:
|
|
policies.append({
|
|
"tier": tier["name"],
|
|
"allowed_inbound": tier.get("inbound_from", []),
|
|
"allowed_ports": tier.get("ports", []),
|
|
"deny_default": True,
|
|
"enforcement": "block",
|
|
})
|
|
return {
|
|
"principle": "Zero Trust — deny all, allow by exception",
|
|
"policies": policies,
|
|
"example_tiers": [
|
|
{"name": "web", "inbound_from": ["load-balancer"], "ports": [443]},
|
|
{"name": "app", "inbound_from": ["web"], "ports": [8080]},
|
|
{"name": "db", "inbound_from": ["app"], "ports": [5432]},
|
|
],
|
|
}
|
|
|
|
|
|
def run_audit(profile=None, region="us-east-1"):
|
|
"""Execute microsegmentation audit."""
|
|
import boto3
|
|
session = boto3.Session(profile_name=profile, region_name=region)
|
|
print(f"\n{'='*60}")
|
|
print(f" MICROSEGMENTATION ZERO TRUST AUDIT")
|
|
print(f" Generated: {datetime.utcnow().isoformat()} UTC")
|
|
print(f"{'='*60}\n")
|
|
|
|
sg_findings = audit_aws_security_groups(session)
|
|
print(f"--- SECURITY GROUP FINDINGS ({len(sg_findings)}) ---")
|
|
for f in sg_findings[:15]:
|
|
print(f" [{f['severity']}] {f['sg_id']} ({f['sg_name']}): port {f['port']} from {f['cidr']}")
|
|
|
|
policy = generate_segmentation_policy([])
|
|
print(f"\n--- RECOMMENDED SEGMENTATION MODEL ---")
|
|
print(f" Principle: {policy['principle']}")
|
|
for tier in policy["example_tiers"]:
|
|
print(f" {tier['name']}: allow from {tier['inbound_from']} on ports {tier['ports']}")
|
|
|
|
return {"sg_findings": sg_findings, "policy": policy}
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description="Microsegmentation Audit Agent")
|
|
parser.add_argument("--profile", help="AWS CLI profile")
|
|
parser.add_argument("--region", default="us-east-1", help="AWS region")
|
|
parser.add_argument("--audit", action="store_true", help="Run audit")
|
|
parser.add_argument("--output", help="Save report to JSON file")
|
|
args = parser.parse_args()
|
|
|
|
if args.audit:
|
|
report = run_audit(args.profile, args.region)
|
|
if args.output:
|
|
with open(args.output, "w") as f:
|
|
json.dump(report, f, indent=2, default=str)
|
|
print(f"\n[+] Report saved to {args.output}")
|
|
else:
|
|
parser.print_help()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|