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

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

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

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

دليل الأدوات

الفئات

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

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
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]
    

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

    الخيارالوصف
    -o, --output FILEمسار ملف الإخراج (الافتراضي: dop2mop_output.json)
    --zipضغط الإخراج إلى ملف ZIP
    --config FILEمسار ملف الإعدادات YAML/JSON
    --validateالتحقق من صحة الاعتمادات قبل الجمع
    --collectors LISTقائمة مفصولة بفواصل من المجمعين أو الأسماء المستعارة (مثل github,sm)
    --max-items Nالحد الأقصى للعناصر التي يتم جمعها لكل نوع
    --no-secretsتخطي تعداد الأسرار/الاعتمادات

    خيارات 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

    الخيارالوصف
    --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 SageMaker

    الخيارالوصف
    --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

    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الوصف
    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

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


    أنواع العقد

    عقد DevOps

    النوعالوصف
    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

    عقد MLOps

    النوعالوصف
    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

    عقد الهوية

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

    عقد الأصول

    النوعالوصف
    ContainerRegistryسجل الحاويات (ECR، ACR)
    ContainerImageصورة الحاوية
    S3Bucketحاوية 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إلغاء تسلسل غير آمن

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

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

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

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

    النوعالوصف
    Containsعلاقة أب-ابن
    MemberOfعضوية مجموعة
    HasAccessToإذن الوصول إلى المورد
    HasExecutionRoleالمورد يستخدم دور تنفيذ IAM
    Ownsعلاقة ملكية

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

    راجع 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/main/LICENSE) للتفاصيل.
    
    تنزيل الأداة