Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
Dop2Mop — مُجمِّع OpenGraph لـ BloodHound الذي يرسم خريطة مسارات الهجوم من البنية التحتية لـ DevOps إلى MLOps، ويجمع موارد خط أنابيب CI/CD، ومدير الخدمة، ومنصة ML لتحليل الحركة الجانبية. | Kitploit
أدوات/GitHubGitHub/h4wkst3r/dop2mop
أمن البنية التحتية السحابيةالاستطلاعأمن الحاوياتتحليل الثغرات الأمنيةجمع المعلوماتاختبار الاختراقأمن السحابةDevSecOpsإدارة الهوية والوصول (IAM)أمن سلسلة التوريدالفريق الأحمر
41منذ 4 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
GitHub
h4wkst3r/dop2mop

Dop2Mop

مُجمِّع OpenGraph لـ BloodHound الذي يرسم خريطة مسارات الهجوم من البنية التحتية لـ DevOps إلى MLOps، ويجمع موارد خط أنابيب CI/CD، ومدير الخدمة، ومنصة ML لتحليل الحركة الجانبية.

عرض المستودع

Dop2Mop

مجموعة أدوات إثبات المفهوم لجمع OpenGraph لـ BloodHound والتي ترسم مسارات الهجوم من DevOps إلى بنية MLOps.

استنادًا إلى Pipelines of Privilege: Attack Paths from DevOps to MLOps Infrastructure بقلم Brett Hawkins (@h4wkst3r).

جدول المحتويات

  • شكر وتقدير
  • نظرة عامة
    • المنصات المدعومة
    • حدود الثقة المعيّنة
  • التثبيت
    • التبعيات الاختيارية
  • بدء سريع
    • إنشاء بيانات تجريبية
    • إدخال البيانات إلى BloodHound
  • الإعدادات
    • ملف الإعدادات
    • التحقق من صحة بيانات الاعتماد
  • مرجع سطر الأوامر
    • نظرة عامة على الأوامر
    • الخيارات العامة
    • dop2mop collect
    • dop2mop demo
  • أمثلة استخدام سطر الأوامر
    • جمع أساسي
    • جمع منصة واحدة
    • جمع منصات متعددة
    • أمثلة جمع GitHub
    • أمثلة جمع Azure DevOps
    • أمثلة جمع Azure ML
    • أمثلة جمع AWS SageMaker
    • جمع البيئة الكاملة
  • متغيرات البيئة
  • أنواع العقد
    • عقد DevOps
    • عقد MLOps
    • عقد الهوية
    • عقد القطع الأثرية
  • أنواع الحواف
    • حواف مسار الهجوم
    • حواف هيكلية
  • استعلامات مثال
  • رموز مخصصة
    • تحميل الرموز إلى BloodHound
  • واجهة برمجة التطبيقات Python
    • استخدام المجمعات الفردية
    • بناء رسوم بيانية مخصصة
  • استكشاف الأخطاء وإصلاحها
    • مشكلات شائعة
  • الترخيص

شكر وتقدير

  • SpecterOps من أجل BloodHound وOpenGraph

نظرة عامة

Dop2Mop يجمع البيانات من منصات DevOps وMLOps لتحديد مسارات الهجوم التي تتيح الحركة الجانبية من خطوط أنابيب CI/CD إلى بنية التدريب على التعلم الآلي. ينتج JSON بتنسيق OpenGraph المتوافق مع BloodHound للتصور والتحليل.

المنصات المدعومة

منصات DevOpsمنصات MLOpsمزودو الهوية
GitHub (الإجراءات، المستودعات، الأسرار)Azure Machine Learningخدمة Azure AD الأساسية
Azure DevOps (خطوط الأنابيب، اتصالات الخدمة)Amazon SageMakerأدوار AWS IAM
هوية OIDC/متحدة

حدود الثقة المعيّنة

Dop2Mop يصمم حدود الثقة الخمسة الحرجة التي تم تحديدها في البحث:

  1. TB1: مستودع الكود إلى خط أنابيب CI/CD - تفعيل خطوط الأنابيب تلقائياً من التزامات الكود
  2. TB2: مصادقة الخدمة الأساسية - بيانات اعتماد NHI التي تستخدمها خطوط الأنابيب للوصول إلى منصات ML
  3. TB3: ثقة القطع الأثرية للحاوية - ثقة ضمنية في صور الحاوية من السجلات الداخلية
  4. TB4: تنفيذ تعريف المهمة - منصات ML تنفذ تعريفات المهام دون تحقق
  5. TB5: إلغاء تسلسل الكود - إلغاء تسلسل غير آمن لمجموعات البيانات (pickle, joblib)

التثبيت```bash

git clone https://github.com/h4wkst3r/dop2mop.git cd dop2mop pip install -r requirements.txt pip install -e .

root@kitploit:~
## ما يتم جمعه

يقوم كل جامع بجمع الموارد الخاصة بالمنصة ورسم خرائط لحدود الثقة بينها:

| جامع | الموارد التي تم جمعها |
|-----------|-------------------|
| **GitHub** | Organizations, repositories, workflows, secrets, branch protection rules, OIDC configurations, container image references, S3 bucket references |
| **Azure DevOps** | Organizations, projects, pipelines (YAML), service connections (with scope details), variable groups, agent pools, repositories |
| **Azure ML** | Workspaces, compute clusters/instances, datastores, ML environments, registered models, jobs/experiments, online & batch endpoints |
| **SageMaker** | Training jobs, models, endpoints, domains, notebook instances, IAM execution roles (with policy analysis), ECR repositories/images, S3 buckets (filtered to ML-relevant) |

## بداية سريعة

### إنشاء بيانات تجريبية

أسرع طريقة لرؤية Dop2Mop وهي تعمل هي إنشاء بيانات تجريبية تعرض سيناريوهات الهجوم من البحث:```bash
dop2mop demo -o demo.json

الاستيراد إلى BloodHound

  1. افتح BloodHound CE (v8.0+)
  2. انتقل إلى الإدارة ← استيراد الملفات
  3. قم برفع ملف JSON المُنشأ
  4. الاستعلام باستخدام Cypher:```cypher // Azure DevOps to Azure ML Lateral Movement MATCH p=(repo)-[:TriggersPipeline]->(pipeline)-[:UsesServiceConnection]->(svcconn)-[:AuthenticatesAs]->(workspace)-[:CodeExecution]->(compute) RETURN p

// Container Image Poisoning (Supply Chain Attack) MATCH p=(workflow)-[:CanPoisonImage]->(image)<-[:PullsImage]-(job) RETURN p

// OIDC/Federated Identity Abuse (confirmed edges) MATCH p=(workflow)-[:OIDCTrust]->(oidc)-[:CanAssumeRole]->(role)-[:SubmitsJob]->(job) RETURN p

// OIDC abuse including inferred paths MATCH p=(workflow)-[:OIDCTrust]->(oidc)-[:InferredCanAssumeRole]->(role) RETURN p

// Dataset Poisoning via Pickle Deserialization MATCH p=(workflow)-[:CanPoisonDataset]->(dataset)<-[:LoadsDataset]-(job) RETURN p

// Find repos with weak/no branch protection (TB1 exploitable) MATCH (repo)-[:BypassesProtection]->(repo) RETURN repo.name, repo.default_branch

// Find overprivileged SageMaker IAM roles MATCH (role:IAMRole) WHERE role.is_admin = true OR role.has_s3_full_access = true RETURN role.name, role.attached_policies

// Find SageMaker notebooks with root + internet access MATCH (nb:SMNotebook) WHERE nb.root_access = 'Enabled' AND nb.direct_internet_access = 'Enabled' RETURN nb.name, nb.status

// Find self-hosted ADO agent pools MATCH (agent:ADOAgent) WHERE agent.is_hosted = false RETURN agent.name, agent.pool_type

root@kitploit:~
---

## التهيئة

### ملف التهيئة

بدلاً من تمرير بيانات الاعتماد في كل تشغيل، يمكنك حفظها في ملف تهيئة. انسخ المثال المرفق واملأ القيم الخاصة بك:```bash
cp dop2mop.yaml.example dop2mop.yaml
# Edit dop2mop.yaml with your credentials

يتحقق Dop2Mop من هذه المواقع بالترتيب:

  1. المسار المحدد بواسطة --config
  2. dop2mop.yaml / dop2mop.yml / .dop2mop.yaml في الدليل الحالي
  3. ~/.dop2mop.yaml

ملاحظة: dop2mop.yaml موجود في .gitignore لمنع إضافة بيانات الاعتماد عن طريق الخطأ. الملف النموذجي (dop2mop.yaml.example) آمن للإضافة.

انظر dop2mop.yaml.example لجميع الخيارات المتاحة مع التعليقات.

ترتيب الأولوية: وسيطات سطر الأوامر > ملف الإعداد > متغيرات البيئة.

التحقق من بيانات الاعتماد

اختبر بيانات الاعتماد قبل تشغيل مجموعة كاملة:```bash

Validate all configured collectors

dop2mop collect --validate -v

Validate specific collectors

dop2mop collect --validate --collectors github,sagemaker -v

root@kitploit:~
يؤدي ذلك إلى إجراء استدعاء API خفيف لكل منصة للتحقق من صحة الرموز قبل بدء الجمع.

### أسماء مستعارة للمجمعين

يمكنك استخدام أسماء قصيرة بدلاً من أسماء الفئات الكاملة باستخدام `--collectors`:

| الاسم المستعار | المجمع |
|-------|-----------|
| `github`, `gh` | GitHubCollector |
| `ado`, `azuredevops`, `azure-devops` | AzureDevOpsCollector |
| `azureml`, `azure-ml` | AzureMLCollector |
| `sagemaker`, `sm` | SageMakerCollector |```bash
# These are equivalent:
dop2mop collect --collectors GitHubCollector,SageMakerCollector
dop2mop collect --collectors github,sagemaker
dop2mop collect --collectors gh,sm

مرجع واجهة سطر الأوامر

نظرة عامة على الأوامر```

dop2mop [options]

Commands: collect Collect data from DevOps/MLOps platforms demo Generate demo data with attack scenarios

root@kitploit:~
### الخيارات العامة

| الخيار | الوصف |
|--------|-------------|
| `-v, --verbose` | تمكين الإخراج المفصل (تسجيل مستوى INFO) |
| `--debug` | تمكين إخراج التصحيح (تسجيل مستوى DEBUG) |

---

### `dop2mop collect`

جمع البيانات من منصات DevOps وMLOps المُهيأة.```bash
dop2mop collect [OPTIONS]

الخيارات العامة

خيارات GitHub

الخيارالوصف
--github-token TOKENرمز الوصول الشخصي لـ GitHub
--github-org ORGاسم المؤسسة على GitHub
--github-enterprise-url URLرابط خادم GitHub Enterprise

خيارات Azure DevOps

الخيارالوصف
--azure-devops-token TOKENرمز الوصول الشخصي لـ Azure DevOps (PAT)
--azure-devops-access-token TOKENرمز الوصول لـ Azure DevOps (مصادقة Bearer، اختياري)
--azure-devops-org ORGاسم المؤسسة على Azure DevOps

خيارات Azure ML

خيارات AWS SageMaker

الخيارالوصف

المجمعون المتوفرون


dop2mop demo

توليد بيانات تجريبية توضح سيناريوهات الهجوم الأربعة من البحث.```bash dop2mop demo [OPTIONS]

root@kitploit:~
| الخيار | الوصف |
|--------|-------------|
| `-o, --output FILE` | مسار ملف الإخراج (الافتراضي: `dop2mop_demo.json`) |

---

### `dop2mop icons`

إنشاء تكوين أيقونة مخصصة لأنواع عقد BloodHound.```bash
dop2mop icons [OPTIONS]
الخيارالوصف
-o, --output FILEمسار ملف الإخراج (الافتراضي: dop2mop_icons.json)

أمثلة استخدام CLI

المجموعة الأساسية```bash

Collect from all configured platforms (uses environment variables)

dop2mop collect -o output.json

Use a config file

dop2mop collect --config dop2mop.yaml -o output.json -v

Validate credentials first, then collect

dop2mop collect --validate -o output.json -v

Collect with verbose logging

dop2mop collect -o output.json -v

Collect with debug logging

dop2mop collect -o output.json --debug

Collect and compress to ZIP

dop2mop collect -o output.json --zip

Limit collection size

dop2mop collect --max-items 100 -o output.json

Skip secret enumeration

dop2mop collect --no-secrets -o output.json

root@kitploit:~
### مجموعة منصة واحدة```bash
# GitHub only (aliases: github, gh)
dop2mop collect --collectors github -o github.json -v

# Azure DevOps only (aliases: ado, azuredevops)
dop2mop collect --collectors ado -o ado.json -v

# Azure ML only (aliases: azureml, azure-ml)
dop2mop collect --collectors azureml -o azureml.json -v

# SageMaker only (aliases: sagemaker, sm)
dop2mop collect --collectors sm -o sagemaker.json -v

مجموعة منصات متعددة```bash

GitHub + SageMaker

dop2mop collect --collectors github,sagemaker -o output.json -v

GitHub + Azure DevOps

dop2mop collect --collectors github,ado -o output.json -v

Azure DevOps + Azure ML (full Azure stack)

dop2mop collect --collectors ado,azureml -o azure.json -v

All collectors explicitly

dop2mop collect --collectors github,ado,azureml,sagemaker -o full.json -v

root@kitploit:~
### أمثلة مجموعة GitHub```bash
# Using environment variables
export GITHUB_TOKEN="ghp_xxxxxxxxxxxx"
export GITHUB_ORG="your-org"
dop2mop collect --collectors GitHubCollector -o github.json -v

# Using command-line arguments
dop2mop collect --collectors GitHubCollector \
  --github-token ghp_xxxxxxxxxxxx \
  --github-org your-org \
  -o github.json -v

# GitHub Enterprise Server
dop2mop collect --collectors GitHubCollector \
  --github-token ghp_xxxxxxxxxxxx \
  --github-org your-org \
  --github-enterprise-url https://github.yourcompany.com/api/v3 \
  -o github.json -v

# Skip secret enumeration
dop2mop collect --collectors GitHubCollector \
  --github-token ghp_xxxxxxxxxxxx \
  --github-org your-org \
  --no-secrets \
  -o github.json -v

# Limit to 50 repositories
dop2mop collect --collectors GitHubCollector \
  --github-token ghp_xxxxxxxxxxxx \
  --github-org your-org \
  --max-items 50 \
  -o github.json -v

أمثلة مجموعة Azure DevOps```bash

Using environment variables

export AZURE_DEVOPS_TOKEN="your-pat" export AZURE_DEVOPS_ORG="your-org" dop2mop collect --collectors AzureDevOpsCollector -o ado.json -v

Using command-line arguments (PAT)

dop2mop collect --collectors AzureDevOpsCollector
--azure-devops-token your-pat
--azure-devops-org your-org
-o ado.json -v

Using access token (Bearer auth)

dop2mop collect --collectors AzureDevOpsCollector
--azure-devops-access-token eyJ0...
--azure-devops-org your-org
-o ado.json -v

root@kitploit:~
> **ملاحظة:** أولوية التوثيق في Azure DevOps: رمز الوصول (Bearer) > PAT (Basic).
> يمكن الحصول على رموز الوصول عبر `az account get-access-token --resource 499b84ac-1321-427f-aa17-267ca6975798`.

### أمثلة مجموعة Azure ML```bash
# Using environment variables
export AZURE_SUBSCRIPTION_ID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
export AZURE_TENANT_ID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
dop2mop collect --collectors AzureMLCollector -o azureml.json -v

# Using DefaultAzureCredential (az login)
dop2mop collect --collectors AzureMLCollector \
  --azure-subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
  --azure-tenant-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
  -o azureml.json -v

# Using Service Principal
dop2mop collect --collectors AzureMLCollector \
  --azure-subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
  --azure-tenant-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
  --azure-client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
  --azure-client-secret your-secret \
  -o azureml.json -v

# Using Access Token
dop2mop collect --collectors AzureMLCollector \
  --azure-subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
  --azure-tenant-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
  --azure-access-token eyJ0... \
  -o azureml.json -v

ملاحظة: أولوية مصادقة Azure ML: رمز الوصول > مدير الخدمة > DefaultAzureCredential (az login). يمكن الحصول على رموز الوصول عبر az account get-access-token --resource https://management.azure.com/.

أمثلة مجموعة AWS SageMaker```bash

Using AWS profile (environment variable)

export AWS_PROFILE="your-profile" dop2mop collect --collectors SageMakerCollector -o sagemaker.json -v

Using AWS profile (command-line)

dop2mop collect --collectors SageMakerCollector
--aws-profile your-profile
-o sagemaker.json -v

Using access keys

dop2mop collect --collectors SageMakerCollector
--aws-access-key-id AKIAXXXXXXXXXXXXXXXX
--aws-secret-access-key xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--aws-region us-east-1
-o sagemaker.json -v

Different AWS region

dop2mop collect --collectors SageMakerCollector
--aws-profile your-profile
--aws-region us-west-2
-o sagemaker.json -v

root@kitploit:~
### مجموعة البيئة الكاملة```bash
# Set all environment variables
export GITHUB_TOKEN="ghp_xxxxxxxxxxxx"
export GITHUB_ORG="your-org"
export AZURE_DEVOPS_TOKEN="your-pat"
export AZURE_DEVOPS_ORG="your-org"
export AZURE_SUBSCRIPTION_ID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
export AZURE_TENANT_ID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
export AWS_PROFILE="your-profile"

# Collect from all platforms (auto-detects configured collectors)
dop2mop collect -o full_collection.json -v

# Or with explicit collectors
dop2mop collect \
  --collectors GitHubCollector,AzureDevOpsCollector,AzureMLCollector,SageMakerCollector \
  -o full_collection.json -v

متغيرات البيئة

يمكن تعيين جميع خيارات سطر الأوامر عبر متغيرات البيئة:

الأولوية: وسائط CLI > ملف التكوين > متغيرات البيئة.


أنواع العقد

عقد DevOps

عقد MLOps

عقد الهوية

النوعالوصف
ServicePrincipalعميل الخدمة الأساسي لـ Azure AD
IAMRoleدور IAM في AWS
OIDCIdentity

عقد الأصول

النوعالوصف
ContainerRegistryسجل الحاويات (ECR، ACR)
ContainerImageصورة الحاوية
S3Bucket

أنواع الحواف

حواف مسار الهجوم

الحواف المستنتجة

يتم إنشاء هذه الحواف بواسطة التحليل الاستدلالي عندما لا تتوفر بيانات API صريحة (مثل ARNs الأدوار المخزنة في الأسرار). تستخدم أنواع حواف مميزة حتى تتمكن من تصفيتها في استعلامات BloodHound.

النوعالوصف
InferredCanAssumeRoleهوية OIDC قد تكون قادرة على افتراض دور (مستنتج)

الحواف الهيكلية

أمثلة الاستعلامات

راجع queries/dop2mop_queries.cypher للحصول على أمثلة شاملة للاستعلامات.


الرموز المخصصة

يتضمن Dop2Mop ملف رموز مسبق التكوين لأنواع العقد المخصصة لـ BloodHound في data/custom_icons.json.

تحميل الرموز إلى BloodHound

الخيار 1: مستكشف API (الأسهل)

  1. افتح BloodHound CE وانتقل إلى الإعدادات ← مستكشف API
  2. ابحث عن POST /api/v2/custom-nodes
  3. انقر على "Try it out"
  4. الصق محتويات custom_icons.json
  5. انقر على "Execute"

الخيار 2: توثيق HMAC (موصى به للأتمتة)

أولاً، قم بإنشاء رمز API في BloodHound:

  1. انتقل إلى الإعدادات ← الإدارة ← إدارة المستخدمين
  2. انقر على مستخدمك ← إنشاء رمز
  3. احفظ معرف الرمز ومفتاح الرمز

ثم استخدم هذا البرنامج النصي Python للتحميل:```python #!/usr/bin/env python3 """Upload custom icons to BloodHound CE using HMAC authentication."""

import base64 import hashlib import hmac import json from datetime import datetime, timezone import requests

Configuration

BLOODHOUND_URL = "http://localhost:8080" TOKEN_ID = "your-token-id" TOKEN_KEY = "your-token-key" ICONS_FILE = "custom_icons.json"

def hmac_auth(method: str, uri: str, body: bytes = b"") -> dict: """Generate HMAC authentication headers.""" digester = hmac.new( base64.b64decode(TOKEN_KEY), msg=None, digestmod=hashlib.sha256 )

root@kitploit:~
now = datetime.now(timezone.utc)
timestamp = now.strftime("%Y-%m-%dT%H:%M:%SZ")

digester.update(f"{method}".encode())
digester.update(f"{uri}".encode())
digester.update(timestamp.encode())
if body:
    digester.update(body)

signature = base64.b64encode(digester.digest()).decode()

return {
    "Authorization": f"bhesignature {TOKEN_ID}",
    "RequestDate": timestamp,
    "Signature": signature,
    "Content-Type": "application/json",
}

def upload_icons(): """Upload custom icons to BloodHound.""" uri = "/api/v2/custom-nodes" url = f"{BLOODHOUND_URL}{uri}"

root@kitploit:~
with open(ICONS_FILE, "rb") as f:
    body = f.read()

headers = hmac_auth("POST", uri, body)
response = requests.post(url, headers=headers, data=body)

print(f"Status: {response.status_code}")
print(f"Response: {response.text}")
return response.status_code == 200

if name == "main": upload_icons()

root@kitploit:~
#### الخيار 3: رمز الحامل (اختبار سريع)

احصل على JWT من علامة تبويب الشبكة في أدوات المطورين بالمتصفح أثناء تسجيل الدخول إلى BloodHound:```bash
curl -X POST http://localhost:8080/api/v2/custom-nodes \
  -H "Authorization: Bearer eyJ..." \
  -H "Content-Type: application/json" \
  -d @custom_icons.json

Python API```python

from dop2mop import Dop2MopCollector, CollectorConfig

Configure collection

config = CollectorConfig( github_token="ghp_xxx", github_org="myorg", aws_profile="default", )

Validate credentials first

collector = Dop2MopCollector(config) results = collector.validate_all() print(results) # {'GitHubCollector': True, 'SageMakerCollector': True, ...}

Run collection (supports aliases)

collector.run(collectors=["github", "sm"])

Save output

collector.save("output.json")

Get statistics

print(collector.get_stats())

Get per-collector failure/skip details

print(collector.get_collection_summary())

root@kitploit:~
### استخدام المُجمِّعات الفردية```python
from dop2mop import CollectorConfig, GitHubCollector, SageMakerCollector
from dop2mop.graph import OpenGraphBuilder

# Create shared builder
builder = OpenGraphBuilder(source_kind="MLOpsBase")

# Configure
config = CollectorConfig(
    github_token="ghp_xxx",
    github_org="myorg",
    aws_profile="default",
)

# Run individual collectors
github = GitHubCollector(config, builder)
github.collect()

sagemaker = SageMakerCollector(config, builder)
sagemaker.collect()

# Save combined output
builder.save("combined.json")

بناء رسوم بيانية مخصصة```python

from dop2mop.graph import OpenGraphBuilder from dop2mop.models import NodeKind, EdgeType

builder = OpenGraphBuilder(source_kind="CustomSource")

Add nodes

builder.create_node( id="my-pipeline", kinds=[NodeKind.AZURE_DEVOPS_PIPELINE.value], name="My Pipeline", displayname="Production Pipeline", )

builder.create_node( id="my-ml-workspace", kinds=[NodeKind.AZURE_ML_WORKSPACE.value], name="ML Workspace", displayname="Training Workspace", )

Add edge

builder.create_edge( start_id="my-pipeline", end_id="my-ml-workspace", kind=EdgeType.SUBMITS_JOB, properties={"trust_boundary": "TB4"} )

Export

builder.save("custom_graph.json")

root@kitploit:~
---

## استكشاف الأخطاء وإصلاحها

### التحقق أولاً

ابدأ دائمًا بالتحقق من صحة بيانات الاعتماد لاكتشاف مشكلات المصادقة مبكرًا:```bash
dop2mop collect --validate --collectors github,sm -v

سيظهر الإخراج OK/FAILED لكل جامع قبل بدء أي تجميع.

ملخص التجميع

بعد كل تشغيل، يقوم Dop2Mop بطباعة ملخص يوضح ما تم جمعه وما فشل:```

Dop2Mop Collection Summary

Total Nodes: 142 DevOps: 45 MLOps: 38 Identity: 12 Artifact: 47

Total Edges: 201 Contains: 62 TriggersPipeline: 15 ...

──────────────────────────────────────────────────────── Collection Issues: GitHubCollector: 45 collected, 3 failed, 1 skipped FAIL: branch_protection:org/repo - 404 Not Found SKIP: branch_protection:org/private - Insufficient permissions

Output: output.json

root@kitploit:~
### المشكلات الشائعة

**"GitHub collector not configured, skipping"**
- تأكد من تعيين متغيرات البيئة `GITHUB_TOKEN` و `GITHUB_ORG`، أو مرر `--github-token` و `--github-org`

**"Azure ML collector not configured, skipping"**
- تأكد من تعيين `AZURE_SUBSCRIPTION_ID` و `AZURE_TENANT_ID`
- قم بتشغيل `az login` إذا كنت تستخدم `DefaultAzureCredential`
- بدلاً من ذلك، مرر `--azure-access-token` مع رمز صالح من `az account get-access-token`

**"SageMaker collector not configured, skipping"**
- عيّن `AWS_PROFILE` أو كلاً من `AWS_ACCESS_KEY_ID` و `AWS_SECRET_ACCESS_KEY`
- تأكد من أن بيانات الاعتماد لديها صلاحيات قراءة SageMaker

**حماية الفرع ترجع 403**
- تتطلب واجهة GitHub API صلاحيات مسؤول لقراءة قواعد حماية الفرع
- الرموز غير المسؤولة ستتخطى جمع حماية الفرع (يتم الإبلاغ عنه في الملخص)

**تحديد معدل الطلبات (أخطاء 429)**
- يقوم Dop2Mop تلقائيًا بإعادة المحاولة مع التراجع الأسي (exponential backoff) عند استجابات حد المعدل
- للمؤسسات الكبيرة، استخدم `--max-items` لتقليل استدعاءات API
- حدود GitHub للمعدل: 5,000 طلب/ساعة للمستخدمين الموثقين

**لا توجد نتائج في وحدة تحكم BloodHound Cypher**
- تأكد من أن الاستعلامات تُرجع العقد الكاملة (`RETURN a, b`) وليس الخصائص (`RETURN a.name, b.name`)
- وحدة تحكم Cypher في BloodHound مخصصة لتصور الرسم البياني، وليس للبيانات الجدولية
- استخدم متصفح Neo4j (localhost:7474) للاستعلامات القائمة على الخصائص

**تصفية الحواف المستنتجة مقابل المجمعة**
- الحواف المستنتجة تستخدم أنواعًا مميزة (مثل `InferredCanAssumeRole` بدلاً من `CanAssumeRole`)
- استعلم فقط عن الحواف المؤكدة: `MATCH p=()-[:CanAssumeRole]->() RETURN p`
- استعلم عن الحواف المستنتجة: `MATCH p=()-[:InferredCanAssumeRole]->() RETURN p`

---

## الترخيص

رخصة MIT - انظر [LICENSE](https://github.com/h4wkst3r/dop2mop/blob/HEAD/LICENSE) للتفاصيل.
تنزيل الأداة
الخيارالوصف
-o, --output FILEمسار ملف الإخراج (الافتراضي: dop2mop_output.json)
--zipضغط الإخراج إلى ملف ZIP
--config FILEمسار ملف الإعدادات YAML/JSON
--validateالتحقق من صحة الاعتمادات قبل الجمع
--collectors LISTقائمة مفصولة بفواصل من المجمعين أو الأسماء المستعارة (مثل github,sm)
--max-items Nالحد الأقصى للعناصر التي يتم جمعها لكل نوع
--no-secretsتخطي تعداد الأسرار/الاعتمادات
الخيارالوصف
--azure-subscription-id IDمعرف اشتراك Azure
--azure-tenant-id IDمعرف المستأجر لـ Azure AD
--azure-client-id IDمعرف عميل الخدمة الرئيسية (اختياري)
--azure-client-secret SECRETسر عميل الخدمة الرئيسية (اختياري)
--azure-access-token TOKENرمز الوصول لـ Azure لمصادقة Azure ML (اختياري)
--aws-access-key-id KEY
معرف مفتاح الوصول لـ AWS
--aws-secret-access-key SECRETمفتاح الوصول السري لـ AWS
--aws-region REGIONمنطقة AWS (الافتراضي: us-east-1)
--aws-profile PROFILEاسم ملف تعريف AWS CLI
اسم المجمعالمنصةالاعتمادات المطلوبة
GitHubCollectorGitHub--github-token، --github-org
AzureDevOpsCollectorAzure DevOps--azure-devops-token أو --azure-devops-access-token، --azure-devops-org
AzureMLCollectorAzure ML--azure-subscription-id، --azure-tenant-id
SageMakerCollectorAWS SageMaker--aws-profile أو --aws-access-key-id
متغير البيئةمقابل CLIالوصف
GITHUB_TOKEN--github-tokenرمز الوصول الشخصي لـ GitHub
GITHUB_ORG--github-orgاسم مؤسسة GitHub
GITHUB_ENTERPRISE_URL--github-enterprise-urlرابط خادم GitHub Enterprise
AZURE_DEVOPS_TOKEN--azure-devops-tokenرمز PAT لـ Azure DevOps
AZURE_DEVOPS_ACCESS_TOKEN--azure-devops-access-tokenرمز الوصول لـ Azure DevOps (Bearer)
AZURE_DEVOPS_ORG--azure-devops-orgمؤسسة Azure DevOps
AZURE_SUBSCRIPTION_ID--azure-subscription-idمعرف اشتراك Azure
AZURE_TENANT_ID--azure-tenant-idمعرف مستأجر Azure AD
AZURE_CLIENT_ID--azure-client-idمعرف عميل الخدمة الأساسي لـ Azure
AZURE_CLIENT_SECRET--azure-client-secretسر عميل الخدمة الأساسي لـ Azure
AZURE_ACCESS_TOKEN--azure-access-tokenرمز الوصول لـ Azure لـ Azure ML
AWS_ACCESS_KEY_ID--aws-access-key-idمعرف مفتاح الوصول لـ AWS
AWS_SECRET_ACCESS_KEY--aws-secret-access-keyمفتاح الوصول السري لـ AWS
AWS_REGION--aws-regionمنطقة AWS (الافتراضي: us-east-1)
AWS_PROFILE--aws-profileاسم ملف تعريف AWS CLI
النوعالوصف
GHOrganizationمؤسسة GitHub
GHRepositoryمستودع GitHub
GHWorkflowسير عمل GitHub Actions
GHSecretسر GitHub Actions
ADOOrganizationمؤسسة Azure DevOps
ADOProjectمشروع Azure DevOps
ADOPipelineمسار Azure DevOps
ADOServiceConnectionاتصال خدمة Azure DevOps (NHI) مع تفاصيل النطاق
ADOAgentمجموعة وكلاء Azure DevOps (مستضافة أو ذاتية الاستضافة)
ADOVariableGroupمجموعة متغيرات Azure DevOps
النوعالوصف
AzMLWorkspaceمساحة عمل Azure ML
AzMLComputeمجموعة/مثيل حوسبة Azure ML
AzMLExperimentوظيفة/تجربة Azure ML
AzMLDatastoreمخزن بيانات Azure ML
AzMLEnvironmentبيئة Azure ML (تعريف الحاوية)
AzMLModelنموذج مسجل في Azure ML
SMDomainنطاق SageMaker Studio
SMTrainingJobوظيفة تدريب SageMaker
SMModelنموذج SageMaker
SMEndpointنقطة نهاية SageMaker (تُستخدم أيضًا لنقاط نهاية Azure ML)
SMNotebookمثيل دفتر ملاحظات SageMaker
هوية موحدة OIDC
ManagedIdentityهوية مدارة من Azure
حاوية S3 من AWS
Datasetمجموعة بيانات ML
النوعحدود الثقةالوصف
TriggersPipelineTB1التزام الكود يؤدي إلى تشغيل CI/CD
HasBranchProtectionTB1المستودع يحتوي على قواعد حماية الفرع
BypassesProtectionTB1حماية فرع ضعيفة/مفقودة (قابلة للاستغلال)
AuthenticatesAsTB2المسار يستخدم عميل الخدمة الأساسي
CanAssumeRoleTB2هوية OIDC يمكنها افتراض دور IAM
OIDCTrustTB2سير العمل يستخدم اتحاد OIDC
UsesServiceConnectionTB2المسار يستخدم اتصال خدمة ADO
PullsImageTB3وظيفة التدريب تسحب صورة الحاوية
CanPoisonImageTB3المسار يمكنه تعديل صورة الحاوية
SubmitsJobTB4عميل الخدمة الأساسي يقدم وظيفة ML
CodeExecutionTB4الوظيفة تنفذ كود على الحوسبة
LoadsDatasetTB5وظيفة التدريب تحمل مجموعة البيانات
CanPoisonDatasetTB5المسار يمكنه تعديل مجموعة البيانات
DeserializesTB5إلغاء تسلسل غير آمن
InferredSubmitsJob
سير العمل قد يقدم وظيفة تدريب عبر OIDC (مستنتج)
InferredPullsImageوظيفة التدريب قد تسحب صورة حاوية مسمومة (مستنتج)
InferredLoadsDatasetوظيفة التدريب قد تحمل مجموعة بيانات مسمومة (مستنتج)
النوعالوصف
Containsعلاقة أب-ابن
MemberOfعضوية مجموعة
HasAccessToإذن الوصول إلى المورد
HasExecutionRoleالمورد يستخدم دور تنفيذ IAM
Ownsعلاقة ملكية