
k8scout v0.1.2
قم بإسقاط ملف ثنائي واحد في Pod Kubernetes مخترق وقم فورًا بتخطيط كل مسار هجوم واقعي إلى cluster-admin، node escape، secret theft، و cloud IAM takeover.
k8scout
بيتا — محرك مسارات الهجوم على Kubernetes بشكل ثنائي واحد لتقييمات الأمان المصرح بها.
أسقطه في جراب مخترق، وشغّله، واحصل على خريطة لكل مسار تصعيد واقعي — من موقعك الحالي إلى مدير العنقود، وصول العقدة، سرقة الأسرار، وأدوار IAM السحابية.
الفكرة
لديك RCE في جراب Kubernetes. ماذا بعد؟
يجيب k8scout على هذا السؤال. يكتشف تلقائيًا ما يمكن لحساب خدمة الجراب المخترق فعله، ويرسم خريطة RBAC، ويتتبع مسارات الهجوم متعددة الخطوات من موقعك الحالي إلى الأهداف عالية القيمة.
يعمل في ثلاثة أوضاع:
- الوضع الهجومي (افتراضي) — التشغيل من داخل جراب مخترق. يكتشف هويتك، وأذوناتك، وجميع مسارات التصعيد القابلة للوصول من موقعك الحالي.
- وضع المراجع (
--reviewer-mode) — التشغيل بحساب خدمة للقراءة فقط لتدقيق سطح الهجوم الكامل للعنقود لجميع الهويات. - وضع الاستطلاع (
--recon) — نظرة سريعة منخفضة البصمة على هويتك فقط، والأذونات الفعلية، والموارد التي يمكنك لمسها. بدون رسم بياني أو إيجاد مسار. أضف--bruteforce-nsلاكتشاف مساحات الأسماء التي لا يمكنك سردها على مستوى العنقود.
عرض توضيحي
ما يكتشفه
يبني k8scout رسمًا بيانيًا موزونًا للأذونات ويشغل إيجاد المسار القائم على Dijkstra لاكتشاف سلاسل هجوم واقعية متعددة الخطوات:
- من الجراب إلى مدير العنقود — عبر روابط RBAC، أو تعديل عبء العمل، أو إنشاء CRB
- الهروب من الحاوية إلى العقدة — عبر حاويات مميزة، hostPID، hostNetwork، قدرات خطيرة، أو تركيبات hostPath
- الحركة الجانبية — تنفيذ أوامر في جرابات أخرى، سرقة رموز حسابات الخدمة الخاصة بها، التمرير عبر أذوناتها
- سرقة الأسرار وبيانات الاعتماد — رموز حسابات الخدمة المثبتة، الأسرار، configmaps مع بيانات اعتماد مسربة، رموز مهملة
- تصعيد IAM السحابي — IRSA (AWS)، GKE Workload Identity، Azure Workload Identity، إساءة استخدام جمهور الرمز المسقط
- سلاسل الانتحال — استيلاء SA-to-SA عبر أذونات الانتحال
- تعديل عبء العمل — تصحيح نشر لتغيير حساب الخدمة الخاص به، ثم وراثة أذونات حساب الخدمة هذا
- حقن webhook — التحكم في webhook متحول للحقن في أعباء العمل المستقبلية
- إساءة استخدام مشغل GitOps — ArgoCD، Flux، External Secrets، وتصعيد صلاحيات مشغل Vault
- اكتشاف سوء التكوين — روابط معلقة، أفعال wildcard، رموز مثبتة تلقائيًا، أسرار نصية واضحة في متغيرات البيئة
كل نتيجة تتضمن معرفات تقنية MITRE ATT&CK، ودرجة مخاطر، ومسار هجوم خطوة بخطوة مع العقد الفعلية للرسم البياني المعنية. إجمالي 50 قاعدة كشف.
بدء سريع
من داخل جراب مخترق (حالة الاستخدام الأساسية)
# Copy the binary into the pod
kubectl cp k8scout-linux-amd64 <ns>/<pod>:/tmp/k8scout
# Run it
kubectl exec -it <ns>/<pod> -- chmod +x /tmp/k8scout
kubectl exec -it <ns>/<pod> -- /tmp/k8scout --out /tmp/result.json
# Pull the results
kubectl cp <ns>/<pod>:/tmp/result.json ./result.json
# This flow works exactly like this in you're revshell!
يكتشف الثنائي تلقائيًا أنه يعمل داخل العنقود، ويحدد الجراب وحساب الخدمة، ويبدأ إيجاد المسار من موقعك الحالي.
الاستخدام المقصود: مهام اختبار الاختراق، عمليات الفريق الأحمر، مراجعات الأمان الداخلية، وتدقيق تعزيز العنقود. احصل دائمًا على التصريح المناسب قبل التشغيل ضد أي عنقود.
من جهازك المحلي
# Uses ~/.kube/config or $KUBECONFIG
k8scout --all-namespaces --out result.json
# Target a single namespace
k8scout --namespace production --out result.json
وضع الاستطلاع (فحص سريع للأذونات والموارد)
# Who am I, what can I do, and what resources can I access?
k8scout --recon
# Discover namespaces you can't list cluster-wide (built-in wordlist)
k8scout --recon --bruteforce-ns
# Bruteforce with your own namespace wordlist (one name per line)
k8scout --recon --bruteforce-ns --ns-wordlist ./namespaces.txt
يتجاوز وضع الاستطلاع بناء الرسم البياني والاستدلال والذكاء الاصطناعي — إنها أسرع طريقة للإجابة على "ما الذي يمتلكه هذا الرمز فعليًا؟". يُبلغ عن الهوية الحالية، وأذوناتها الفعلية (SelfSubjectRulesReview)، ومصفوفة قدرات لكل مورد (SelfSubjectAccessReview). --bruteforce-ns يؤكد وجود مساحة اسم عبر قراءة كائنات معروفة تمتلكها كل مساحة اسم (كائن مساحة الاسم نفسه، حساب الخدمة الافتراضي default، أو ConfigMap kube-root-ca.crt) — مفيد عندما لا تستطيع الهوية سرد مساحات الأسماء ولكن قد تظل قادرة على الوصول إلى مساحات محددة.
وضع المراجع (تدقيق كامل للعنقود)
# Deploy the read-only RBAC and job
kubectl apply -f deploy/rbac.yaml
kubectl apply -f deploy/job.yaml
# Or run directly with reviewer permissions
k8scout --reviewer-mode --all-namespaces --out result.json
مع سرد ذكاء اصطناعي
export OPENAI_API_KEY="sk-..."
k8scout --all-namespaces --out result.json
التثبيت
ثنائيات مُجمّعة مسبقًا
نزّلها من صفحة الإصدارات. جميع الثنائيات مرتبطة بشكل ثابت بدون اعتماديات.
| الملف الثنائي | المنصة |
|---|---|
k8scout-linux-amd64 | لينكس x86-64 |
k8scout-linux-arm64 | لينكس ARM64 |
k8scout-darwin-amd64 | ماك Intel |
k8scout-darwin-arm64 | ماك Apple Silicon |
البناء من المصدر
يتطلب Go 1.22+.
git clone https://github.com/hac01/k8scout
cd k8scout
make build # native binary
make build-linux # static Linux amd64 binary
make build-all # all four release targets
كيف يعمل
k8scout (running inside compromised pod)
|
├── 1. Detect foothold
│ Pod name (HOSTNAME), SA (TokenReview), Node (downward API)
│
├── 2. Discover permissions
│ SSRR per namespace + ~30 concurrent SSAR spot-checks
│ (always permitted, no RBAC needed)
│
├── 3. Enumerate cluster objects (graceful degradation if denied)
│ Namespaces, RBAC, Workloads, Pods, Secrets, Nodes, Webhooks, CRDs
│
├── 4. Build attack graph
│ Nodes: pods, SAs, roles, bindings, secrets, workloads, nodes, cloud identities
│ Edges: runs_as, mounts, authenticates_as, can_exec, can_patch,
│ can_impersonate, runs_on, assumes_cloud_role, granted_by, ...
│
├── 5. Find attack paths (Dijkstra from foothold to high-value targets)
│ Weighted by attacker effort — cheapest (most realistic) paths first
│ Targets: cluster-admin, nodes, SA tokens, cloud IAM, privileged workloads
│
├── 6. Run inference rules (50 rules with MITRE ATT&CK mapping)
│
├── 7. Optional: AI risk narrative (GPT-4o)
│
└── 8. Output: text summary + JSON report
حتى مع حساب خدمة ضئيل لا يمكنه سرد الجرابات أو كائنات RBAC، يقوم الأداة بتجميع رسم بياني للتواجد من بيانات الهوية وحدها وتكتشف ما يمكن الوصول إليه عبر أذونات SSRR/SSAR.
تصور الرسم البياني للهجوم
حمّل تقرير JSON في web/graph.html في أي متصفح (سحب وإفلات، لا حاجة لخادم).
- علامة التبويب مسارات الهجوم — مرتبة حسب درجة المخاطر، كل منها يظهر السلسلة الكاملة متعددة القفزات من نقطة البداية إلى الهدف
- عرض السلاسل المتعددة — تصور مسارات الهجوم المتداخلة في وقت واحد على رسم بياني واحد
- رسم بياني موجه بالقوة — جميع العقد والحواف مع تصنيفات ملونة وحلقات درجة المخاطر
- وضع التركيز — يخفف الضوضاء الهيكلية لإبراز العقد ذات الصلة بالهجوم
- زر تبديل RBAC — يخفي عقد RBAC لكنه يظهرها تلقائيًا عندما تكون جزءًا من مسار هجوم نشط
- الخريطة المصغرة — التنقل في الرسوم البيانية الكبيرة دون فقدان السياق
- تفاصيل العقدة — انقر على أي عقدة للحصول على البيانات الوصفية والاتصالات والنتائج ذات الصلة
- التصدير — تنزيل تقرير اختبار اختراق HTML مستقل
مرجع سطر الأوامر
k8scout [flags]
Flags:
--out string Output JSON file path (default "k8scout-result.json")
--namespace string Enumerate a single namespace
--all-namespaces Enumerate all accessible namespaces (default true)
--format string Output format: text | json (default "text")
--timeout int Per-request timeout in seconds (default 60)
--log-level string debug | info | warn | error (default "info")
--kubeconfig string Path to kubeconfig (auto-detected if not set)
--reviewer-mode Full cluster RBAC audit for all identities
--recon Quick recon: identity, permissions (SSRR), accessible resources (SSAR)
--bruteforce-ns Bruteforce namespace names to find ones you can't list (use with --recon)
--ns-wordlist string Custom namespace wordlist for --bruteforce-ns (defaults to a built-in list)
--stealth Skip SSRR/SSAR to reduce audit log footprint
--skip-ssar Skip SSAR spot-checks only
--openai-key string OpenAI API key (or OPENAI_API_KEY env var)
--openai-model string OpenAI model (default "gpt-4o")
--skip-ai Skip AI narrative generation
متطلبات RBAC
عند التشغيل من جراب مخترق: لا حاجة إلى RBAC خاص. SSRR و SSAR مسموحان دائمًا. تتدهور الأداة بشكل أنيق إذا لم يستطع حساب الخدمة سرد كائنات العنقود — فهي تكتشف الأذونات وتولد النتائج مما هو متاح.
للتعداد الكامل (موصى به لحساب خدمة k8scout): وصول للقراءة فقط معرف في deploy/rbac.yaml:
namespaces,nodes: get, listserviceaccounts,secrets(metadata only),configmaps: get, listpods,deployments,daemonsets,statefulsets,jobs,cronjobs: get, listroles,rolebindings,clusterroles,clusterrolebindings: get, listmutatingwebhookconfigurations,validatingwebhookconfigurations: get, list
لا تُقرأ قيم الأسرار أبدًا إلا إذا أكدت الهوية إذن GET عبر SSAR.
ملاحظات عن الإصدار بيتا
k8scout في مرحلة تطوير نشطة. إذا واجهت خطأ، أو نتيجة إيجابية كاذبة، أو فجوة في الاكتشاف في عنقودك، فيرجى فتح مشكلة. النتائج الإيجابية الكاذبة والمسارات المفقودة مفيدة بشكل خاص — يرجى تضمين JSON النتيجة مجهولة المصدر إذا كان ذلك ممكنًا.
الترخيص
MIT