
STRIDE, MITRE ATT&CK, और PASTA फ्रेमवर्क के साथ IaC थ्रेट मॉडलर। Terraform, CloudFormation, और Kubernetes के लिए REST API, GraphQL, और Docker समर्थन।
स्टैटिक IaC थ्रेट मॉडलर जो Terraform, CloudFormation और Kubernetes मैनिफेस्ट को पार्स करता है और STRIDE, MITRE ATT&CK या PASTA फ्रेमवर्क का उपयोग करके संरचित थ्रेट मॉडल रिपोर्ट तैयार करता है। कोई नेटवर्क कॉल नहीं, कोई क्लाउड क्रेडेंशियल नहीं, पूरी तरह से ऑफलाइन। CLI, REST API या कंटेनराइज्ड सेवा के रूप में चलता है।
CLI:
pip install threatmap
threatmap scan ./examples --output report.md --fail-on HIGH
Docker:
docker run -v $(pwd):/workspace bogdynn/threatmap:2.1.0 threatmap scan /workspace --output /workspace/report.md
REST API सर्वर:
threatmap serve --host 0.0.0.0 --port 8000
# या Docker के माध्यम से:
docker run -p 8000:8000 bogdynn/threatmap:2.1.0
# API एंडपॉइंट: /health, /version, /rules, /analyze
GraphQL API:
docker run -p 8000:8000 bogdynn/threatmap:2.1.0
# GraphQL एंडपॉइंट: http://localhost:8000/graphql
# क्वेरी: health, version, rules
# म्यूटेशन: analyze(content, filename, framework)
| प्रारूप | प्रदाता | एक्सटेंशन |
|---|---|---|
| Terraform HCL | AWS, Azure, GCP | .tf |
| CloudFormation | AWS | .yaml, .yml, .json |
| Kubernetes मैनिफेस्ट | Kubernetes | .yaml, .yml |
PyPI से इंस्टॉल करें:
pip install threatmap
या स्थानीय विकास के लिए:
git clone https://github.com/bogdanticu88/threatmap.git
cd threatmap
pip install -e .
किसी निर्देशिका को स्कैन करें और stdout पर Markdown रिपोर्ट प्रिंट करें:
threatmap scan ./terraform/
एकाधिक पथों को स्कैन करें और JSON रिपोर्ट को फ़ाइल में लिखें:
threatmap scan ./terraform/ ./k8s/ ./cloudformation/ --format json --output report.json
GitHub Security के लिए इंटरैक्टिव HTML रिपोर्ट या SARIF रिपोर्ट बनाएँ:
threatmap scan ./infra/ --format html --output report.html
threatmap scan ./infra/ --format sarif --output report.sarif
CI गेट — यदि कोई CRITICAL या HIGH थ्रेट मिलता है तो exit code 1 लौटाएँ:
threatmap scan ./infra/ --fail-on HIGH --output threat-report.md
बिना पूरी रिपोर्ट लिखे केवल टर्मिनल सारांश तालिका प्रिंट करें:
threatmap scan ./infra/ --summary
उन वातावरणों के लिए केवल ASCII गंभीरता संकेतक (कोई इमोजी नहीं) का उपयोग करें जो Unicode समर्थन नहीं करते:
threatmap scan ./infra/ --ascii --output report.md
विभिन्न थ्रेट मॉडलिंग फ्रेमवर्क का उपयोग करके विश्लेषण करें:
# STRIDE (डिफ़ॉल्ट)
threatmap scan ./infra/ --framework stride
# MITRE ATT&CK (रणनीति और तकनीकों में मैप करता है)
threatmap scan ./infra/ --framework mitre --format json
# PASTA (एसेट-केंद्रित थ्रेट मॉडलिंग)
threatmap scan ./infra/ --framework pasta --format json
STRIDE (73 नियम)
MITRE ATT&CK (11 नियम, 14 रणनीति)
PASTA (12 नियम, एसेट-केंद्रित)
बंडल किए गए उदाहरणों के विरुद्ध threatmap scan ./examples --output report.md चलाने पर एक पूर्ण Markdown रिपोर्ट तैयार होती है। नीचे एक प्रतिनिधि अंश है।
| ID | गंभीरता | STRIDE श्रेणी | संसाधन | विवरण |
|---|---|---|---|---|
| T-001 | 🔴 CRITICAL | सूचना प्रकटीकरण | AuditBucket | S3 बकेट 'AuditBucket' में कोई सार्वजनिक पहुँच अवरोध कॉन्फ़िगर नहीं है — बकेट सार्वजनिक रूप से सुलभ हो सकती है। |
| T-002 | 🔴 CRITICAL | स्पूफिंग | WebSecurityGroup | सुरक्षा समूह 'WebSecurityGroup' 0.0.0.0/0 के लिए SSH/RDP (पोर्ट 22/3389) खोलता है। |
| T-003 | 🔴 CRITICAL | विशेषाधिकार वृद्धि | app_contributor | भूमिका असाइनमेंट 'app_contributor' विशेषाधिकार प्राप्त भूमिका 'Contributor' प्रदान करता है। |
| T-006 | 🟠 HIGH | सूचना प्रकटीकरण | AuditBucket | S3 बकेट 'AuditBucket' में सर्वर-साइड एन्क्रिप्शन कॉन्फ़िगर नहीं है। |
| T-008 | 🟠 HIGH | विशेषाधिकार वृद्धि | api | डिप्लॉयमेंट 'api' में कंटेनर 'api' रूट के रूप में चल सकता है (कोई runAsNonRoot=true या runAsUser=0 नहीं)। |
| T-011 | 🟠 HIGH | विशेषाधिकार वृद्धि | web | EC2 इंस्टेंस 'web' IMDSv1 को अनुमति देता है — मेटाडेटा सेवा बिना सत्र टोकन के सुलभ, जो SSRF-आधारित क्रेडेंशियल चोरी को सक्षम बनाता है। |
### T-002 — स्पूफिंग (CRITICAL)
संसाधन: AWS::EC2::SecurityGroup.WebSecurityGroup
गुण: ingress.ssh_rdp_open
निष्कर्ष: सुरक्षा समूह 'WebSecurityGroup' 0.0.0.0/0 के लिए SSH/RDP (पोर्ट 22/3389) खोलता है।
शमन: सार्वजनिक SSH/RDP पहुँच हटाएँ। AWS Systems Manager Session Manager
या IP प्रतिबंधों के साथ बास्टियन होस्ट का उपयोग करें।
रिपोर्ट एक Mermaid flowchart LR आरेख जोड़ती है। नोड्स सबसे खराब स्थिति की गंभीरता के अनुसार रंगीन होते हैं (🔴 लाल = CRITICAL, 🟠 नारंगी = HIGH)। ब्लॉक को किसी भी Mermaid रेंडरर में पेस्ट करें या GitHub पर सीधे देखें।
flowchart LR
Internet((Internet))
subgraph Networking
aws_security_group_web_sg{web_sg}
NetworkPolicy_default_deny{default-deny}
azurerm_network_security_group_app_nsg{app_nsg}
end
subgraph Compute
aws_instance_web[web]
end
subgraph Kubernetes
Namespace_myapp[myapp]
Deployment_api[api]
Service_api_svc[api-svc]
Ingress_api_ingress[api-ingress]
end
subgraph Data
aws_s3_bucket_app_data[(app_data)]
aws_db_instance_app_db[(app_db)]
azurerm_storage_account_app_storage[(app_storage)]
end
subgraph Security
azurerm_key_vault_app_kv[app_kv]
end
subgraph Identity
azurerm_role_assignment_app_contributor[/app_contributor/]
end
AWS__S3__Bucket_AppBucket -->|ref| AWS__S3__Bucket_AuditBucket
AWS__CloudTrail__Trail_AppTrail -->|ref| AWS__S3__Bucket_AuditBucket
Internet -->|HTTPS| Ingress_api_ingress
style aws_security_group_web_sg fill:#ff4444,color:#fff
style aws_s3_bucket_app_data fill:#ff4444,color:#fff
style aws_instance_web fill:#ff8800,color:#fff
style Deployment_api fill:#ff8800,color:#fff
style azurerm_key_vault_app_kv fill:#ffcc00,color:#000
style azurerm_network_security_group_app_nsg fill:#ff8800,color:#fff
style azurerm_role_assignment_app_contributor fill:#ff4444,color:#fffthreatmap में अब ग्राफ इंटेलिजेंस शामिल है जो संसाधनों के बीच संबंधों का पता लगाता है। यह स्वचालित रूप से "श्रृंखलित" खतरों की पहचान करता है जहाँ एक संसाधन (जैसे, इंटरनेट-एक्सपोज्ड EC2) से समझौता सीधे दूसरे (जैसे, निजी S3 बकेट) की ओर ले जाता है, और उन्हें विशेषाधिकार वृद्धि आक्रमण पथ के रूप में चिह्नित करता है।
आप अपने प्रोजेक्ट रूट में threatmap_rules.yaml बनाकर आंतरिक सुरक्षा आवश्यकताओं को परिभाषित कर सकते हैं।
rules:
- resource_type: "aws_s3_bucket"
property: "force_destroy"
expected: false
stride: "Tampering"
severity: "MEDIUM"
description: "Production buckets should not have force_destroy enabled."
mitigation: "Set force_destroy = false."
अधिकांश निष्कर्षों में अब एक remediation फ़ील्ड शामिल है (JSON, HTML और SARIF रिपोर्ट में दिखाई देता है) जो सुरक्षा समस्या को ठीक करने के लिए आवश्यक सटीक कोड स्निपेट प्रदान करता है।
STRIDE विश्लेषक — प्रदाता-विशिष्ट थ्रेट नियम:
threatmap/analyzers/
├── aws.py # 22 नियम — S3, IAM, EC2, RDS, EKS, CloudTrail, KMS, Lambda
├── azure.py # 19 नियम — Storage, Key Vault, NSG, RBAC, AKS, ACR, SQL
├── gcp.py # 15 नियम — GCS, Firewall, Compute, Cloud SQL, GKE, IAM, KMS
└── kubernetes.py # 17 नियम — workloads, RBAC, network, secrets
MITRE ATT&CK विश्लेषक — 11 नियम MITRE रणनीति से मैप किए गए:
PASTA विश्लेषक — 12 नियम एसेट-केंद्रित फोकस के साथ:
API:
/health, /version, /rules, /analyze, /analyze/file/graphql क्वेरी (health, version, rules) और म्यूटेशन (analyze) के साथप्रत्येक नियम एक फ़ंक्शन है जो एक Resource ऑब्जेक्ट प्राप्त करता है (जो भी स्रोत प्रारूप पार्स किया गया था, उससे सामान्यीकृत) और यदि शर्त पूरी होती है तो Threat लौटाता है। नियम सादे Python सशर्त हैं — कोई DSL नहीं, कोई regex इंजन नहीं, कोई बाहरी नियमसेट फ़ाइल नहीं।
गंभीरता शोषण क्षमता और विस्फोट त्रिज्या दोनों को दर्शाती है:
| गंभीरता | अर्थ |
|---|---|
| CRITICAL | बिना किसी अतिरिक्त शर्त के सीधे शोषण योग्य (जैसे, 0.0.0.0/0 के लिए SSH खुला, वाइल्डकार्ड IAM नीति, अज्ञात को क्लस्टर-एडमिन बाइंडिंग) |
| HIGH | एक अतिरिक्त चरण की आवश्यकता वाला महत्वपूर्ण जोखिम (जैसे, सार्वजनिक पहुँच के साथ अनएन्क्रिप्टेड RDS, EC2 इंस्टेंस पर IMDSv1) |
| MEDIUM | गहराई में रक्षा नियंत्रण अनुपलब्ध — तत्काल जोखिम कम लेकिन सुरक्षा आधार रेखा का उल्लंघन (जैसे, कोई वर्जनिंग नहीं, कोई लॉगिंग नहीं, कोई संसाधन सीमा नहीं) |
| LOW | सीमित स्वतंत्र शोषण क्षमता वाले सर्वोत्तम अभ्यास अंतराल (जैसे, Lambda VPC में नहीं) |
publicly_accessible = true, Principal: "*")।metadata_options ब्लॉक नहीं होने का अर्थ है IMDSv1 सक्रिय, क्योंकि यह AWS का डिफ़ॉल्ट है)।(stride_category, resource_name, trigger_property) पर कुंजीबद्ध होते हैं, इसलिए एक ही तार्किक समस्या कभी दो बार रिपोर्ट नहीं की जाती, भले ही वह कई फ़ाइल प्रारूपों में दिखाई दे।# .github/workflows/threat-model.yml
name: Threat Model
on: [pull_request]
jobs:
threatmap:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Python सेट करें
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: threatmap इंस्टॉल करें
run: pip install threatmap
- name: थ्रेट मॉडल स्कैन चलाएँ
run: |
threatmap scan ./infra/ \
--format markdown \
--output threat-report.md \
--fail-on HIGH
- name: थ्रेट रिपोर्ट अपलोड करें
if: always()
uses: actions/upload-artifact@v4
with:
name: threat-report
path: threat-report.md
--fail-on HIGH फ़्लैग जॉब को exit code 1 के साथ बाहर निकलने का कारण बनता है यदि कोई HIGH या CRITICAL थ्रेट पाया जाता है, जो PR मर्ज को अवरुद्ध करता है। अपलोड किया गया आर्टिफैक्ट समीक्षकों को पुल रिक्वेस्ट छोड़े बिना पूरी रिपोर्ट देता है।
| प्रदाता | नियम |
|---|---|
| AWS (Terraform + CloudFormation) | 22 |
| Azure (Terraform) | 19 |
| GCP (Terraform) | 15 |
| Kubernetes | 17 |
| कुल | 73 |
प्रति प्रदाता श्रेणियाँ कवर:
| प्रदाता | S | T | R | I | D | E |
|---|---|---|---|---|---|---|
| AWS | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Azure | ✓ | ✓ | ✓ | ✓ | — | ✓ |
| GCP | ✓ | ✓ | ✓ | ✓ | — | ✓ |
| Kubernetes | ✓ | ✓ | — | ✓ | ✓ | ✓ |
(S=स्पूफिंग, T=टैम्परिंग, R=रिपुडिएशन, I=सूचना प्रकटीकरण, D=सेवा अस्वीकृति, E=विशेषाधिकार वृद्धि)
परीक्षण चलाएँ:
pytest tests/ -v
कवरेज के साथ चलाएँ:
pytest tests/ --cov=threatmap --cov-report=term-missing
threatmap/analyzers/<provider>.py में नियम जोड़ेंtests/fixtures/ में एक फिक्स्चर जोड़ें जो नए नियम को ट्रिगर करेtests/test_analyzers.py में असर्टशन जोड़ें