Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Dop2Mop — BloodHound向けのOpenGraphコレクターで、DevOpsからMLOpsインフラへの攻撃経路をマッピングし、CI/CDパイプライン、サービスプリンシパル、MLプラットフォームリソースを収集して横方向移動の分析を行います。 | Kitploit
ツール/GitHubGitHub/h4wkst3r/dop2mop
クラウドインフラストラクチャセキュリティ偵察コンテナセキュリティ脆弱性分析情報収集ペネトレーションテストクラウドセキュリティDevSecOpsアイデンティティ&アクセス管理 (IAM)サプライチェーンセキュリティレッドチーミング
414ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
GitHub
h4wkst3r/dop2mop

Dop2Mop

BloodHound向けのOpenGraphコレクターで、DevOpsからMLOpsインフラへの攻撃経路をマッピングし、CI/CDパイプライン、サービスプリンシパル、MLプラットフォームリソースを収集して横方向移動の分析を行います。

リポジトリを見る

Dop2Mop

BloodHound用の概念実証OpenGraphコレクター。DevOpsからMLOpsインフラストラクチャへの攻撃パスをマッピングします。

Pipelines of Privilege: Attack Paths from DevOps to MLOps Infrastructure(Brett Hawkins (@h4wkst3r) 著)に基づいています。

目次

  • 謝辞
  • 概要
    • 対応プラットフォーム
    • マッピングされた信頼境界
  • インストール
    • オプションの依存関係
  • クイックスタート
    • デモデータの生成
    • BloodHoundへの取り込み
  • 設定
    • 設定ファイル
    • 認証情報の検証
  • CLIリファレンス
    • コマンド概要
    • グローバルオプション
    • dop2mop collect
    • dop2mop demo
  • CLI使用例
    • 基本収集
    • 単一プラットフォームの収集
    • 複数プラットフォームの収集
    • GitHub収集例
    • Azure DevOps収集例
    • Azure ML収集例
    • AWS SageMaker収集例
    • フル環境収集
  • 環境変数
  • ノードタイプ
    • DevOpsノード
    • MLOpsノード
    • IDノード
    • 成果物ノード
  • エッジタイプ
    • 攻撃パスエッジ
    • 構造エッジ
  • クエリ例
  • カスタムアイコン
    • BloodHoundへのアイコンアップロード
  • Python API
    • 個別コレクターの使用
    • カスタムグラフの構築
  • トラブルシューティング
    • よくある問題
  • ライセンス

謝辞

  • BloodHoundとOpenGraphの提供に対してSpecterOps

概要

Dop2MopはDevOpsおよびMLOpsプラットフォームからデータを収集し、CI/CDパイプラインから機械学習トレーニングインフラストラクチャへの横方向の移動を可能にする攻撃パスを特定します。可視化と分析のためにBloodHound互換のOpenGraph JSONを出力します。

対応プラットフォーム

DevOpsプラットフォームMLOpsプラットフォームIDプロバイダー
GitHub (Actions, Repos, Secrets)Azure Machine LearningAzure AD Service Principals
Azure DevOps (Pipelines, Service Connections)Amazon SageMakerAWS IAM Roles
OIDC/Federated Identity

マッピングされた信頼境界

Dop2Mopは研究で特定された5つの重要な信頼境界をモデル化します:

  1. TB1: コードリポジトリからCI/CDパイプラインへ - コードコミットからのパイプラインの自動トリガー
  2. TB2: サービスプリンシパル認証 - パイプラインがMLプラットフォームにアクセスするために使用するNHI資格情報
  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** | 組織、リポジトリ、ワークフロー、シークレット、ブランチ保護ルール、OIDC構成、コンテナイメージ参照、S3バケット参照 |
| **Azure DevOps** | 組織、プロジェクト、パイプライン(YAML)、サービス接続(スコープ詳細付き)、変数グループ、エージェントプール、リポジトリ |
| **Azure ML** | ワークスペース、コンピュートクラスター/インスタンス、データストア、ML環境、登録済みモデル、ジョブ/実験、オンラインおよびバッチエンドポイント |
| **SageMaker** | トレーニングジョブ、モデル、エンドポイント、ドメイン、ノートブックインスタンス、IAM実行ロール(ポリシー分析付き)、ECRリポジトリ/イメージ、S3バケット(ML関連にフィルタリング済み) |

## クイックスタート

### デモデータの生成

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を参照してください。

優先順位: CLI引数 > 設定ファイル > 環境変数。

認証情報の検証

完全な収集を実行する前に認証情報をテストしてください:```bash

Validate all configured collectors

dop2mop collect --validate -v

Validate specific collectors

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

root@kitploit:~
これにより、各プラットフォームに対して軽量なAPI呼び出しを行い、トークンが有効であることを収集開始前に確認します。

### Collector Aliases

`--collectors` を使用して、完全なクラス名の代わりに短い名前を使用できます。

| Alias | Collector |
|-------|-----------|
| `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

title: 概要 sidebar_label: 概要 slug: /

CLI リファレンス

コマンド概要```

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オプション

OptionDescription
--github-token TOKENGitHub個人アクセストークン
--github-org ORGGitHub組織名
--github-enterprise-url URLGitHub Enterprise ServerのURL

Azure DevOpsオプション

OptionDescription
--azure-devops-token TOKENAzure DevOps個人アクセストークン (PAT)
--azure-devops-access-token TOKENAzure DevOpsアクセストークン (Bearer認証、オプション)
--azure-devops-org ORGAzure DevOps組織名

Azure MLオプション

AWS SageMakerオプション

OptionDescription
--aws-access-key-id KEY

利用可能なコレクター


dop2mop demo

研究から得られた4つの攻撃シナリオを示すデモデータを生成します。```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 Collection の例```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 ノード

アイデンティティノード

Kind説明
ServicePrincipalAzure AD サービスプリンシパル
IAMRoleAWS IAM ロール
OIDCIdentityOIDC フェデレーション ID

アーティファクトノード

Kind説明
ContainerRegistryコンテナレジストリ (ECR, ACR)
ContainerImageコンテナイメージ
S3BucketAWS S3 バケット

エッジタイプ

攻撃パスエッジ

推論エッジ

これらのエッジは、明示的な API データが利用できない場合 (例: シークレットに保存されたロール ARN)、ヒューリスティック分析によって作成されます。これらは個別のエッジタイプを使用するため、BloodHound クエリでフィルタリングできます。

Kind説明
InferredCanAssumeRoleOIDC ID がロールを引き受け可能である可能性があります (推論)
InferredSubmitsJob

構造エッジ

クエリ例

包括的なクエリ例については、queries/dop2mop_queries.cypher を参照してください。


カスタムアイコン

Dop2Mop には、data/custom_icons.json に BloodHound カスタムノードタイプ用の事前設定済みアイコンファイルが含まれています。

BloodHound へのアイコンのアップロード

オプション 1: API Explorer (最も簡単)

  1. BloodHound CE を開き、Settings → API Explorer に移動します。
  2. POST /api/v2/custom-nodes を見つけます。
  3. 「Try it out」をクリックします。
  4. custom_icons.json の内容を貼り付けます。
  5. 「Execute」をクリックします。

オプション 2: HMAC 認証 (自動化に推奨)

まず、BloodHound で API トークンを作成します。

  1. Settings → Administration → Manage Users に移動します。
  2. ユーザーをクリック → Create Token をクリックします。
  3. Token ID と Token Key を保存します。

次に、この 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: Bearer Token(クイックテスト)

ブラウザのDevToolsのNetworkタブから、BloodHoundにログインした状態でJWTを取得してください:```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コレクターが設定されていません。スキップします"**
- `GITHUB_TOKEN` と `GITHUB_ORG` 環境変数が設定されていることを確認するか、`--github-token` と `--github-org` を渡してください

**"Azure MLコレクターが設定されていません。スキップします"**
- `AZURE_SUBSCRIPTION_ID` と `AZURE_TENANT_ID` が設定されていることを確認してください
- `DefaultAzureCredential` を使用する場合は `az login` を実行してください
- または、`--azure-access-token` に `az account get-access-token` からの有効なトークンを渡してください

**"SageMakerコレクターが設定されていません。スキップします"**
- `AWS_PROFILE` または `AWS_ACCESS_KEY_ID` と `AWS_SECRET_ACCESS_KEY` の両方を設定してください
- 認証情報にSageMakerの読み取り権限があることを確認してください

**ブランチ保護が403を返す**
- GitHub APIはブランチ保護ルールを読み取るために管理者アクセスが必要です
- 管理者権限のないトークンはブランチ保護の収集をスキップします(サマリーに報告されます)

**レート制限(429エラー)**
- Dop2Mopはレート制限応答に対して指数バックオフで自動的に再試行します
- 大規模な組織では、`--max-items` を使用してAPI呼び出しを減らしてください
- GitHubのレート制限: 認証済みユーザーは1時間あたり5,000リクエスト

**BloodHoundのCypherコンソールで結果が表示されない**
- クエリがプロパティ(`RETURN a.name, b.name`)ではなく、完全なノード(`RETURN a, b`)を返すことを確認してください
- BloodHoundのCypherコンソールはグラフ可視化用であり、表形式データ用ではありません
- プロパティベースのクエリにはNeo4j Browser(localhost:7474)を使用してください

**推論エッジと収集エッジのフィルタリング**
- 推論エッジは異なるタイプを使用します(例:`CanAssumeRole` の代わりに `InferredCanAssumeRole`)
- 確認済みエッジのみをクエリ: `MATCH p=()-[:CanAssumeRole]->() RETURN p`
- 推論エッジをクエリ: `MATCH p=()-[:InferredCanAssumeRole]->() RETURN p`

---

## ライセンス

MITライセンス - 詳細は[LICENSE](https://github.com/h4wkst3r/dop2mop/blob/HEAD/LICENSE)をご覧ください。
ツールをダウンロード
OptionDescription
-o, --output FILE出力ファイルパス (デフォルト: dop2mop_output.json)
--zip出力をZIPファイルに圧縮
--config FILEYAML/JSON設定ファイルへのパス
--validate収集前に資格情報を検証
--collectors LISTカンマ区切りのコレクターまたはエイリアスのリスト(例:github,sm)
--max-items Nタイプごとに収集する最大アイテム数
--no-secretsシークレット/認証情報の列挙をスキップ
OptionDescription
--azure-subscription-id IDAzureサブスクリプションID
--azure-tenant-id IDAzure ADテナントID
--azure-client-id IDサービスプリンシパルのクライアントID(オプション)
--azure-client-secret SECRETサービスプリンシパルのクライアントシークレット(オプション)
--azure-access-token TOKENAzure ML認証用のAzureアクセストークン(オプション)
AWSアクセスキーID
--aws-secret-access-key SECRETAWSシークレットアクセスキー
--aws-region REGIONAWSリージョン(デフォルト:us-east-1)
--aws-profile PROFILEAWS CLIプロファイル名
Collector NamePlatformRequired Credentials
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-tokenGitHub パーソナルアクセストークン
GITHUB_ORG--github-orgGitHub 組織名
GITHUB_ENTERPRISE_URL--github-enterprise-urlGitHub Enterprise Server URL
AZURE_DEVOPS_TOKEN--azure-devops-tokenAzure DevOps PAT
AZURE_DEVOPS_ACCESS_TOKEN--azure-devops-access-tokenAzure DevOps アクセストークン (Bearer)
AZURE_DEVOPS_ORG--azure-devops-orgAzure DevOps 組織
AZURE_SUBSCRIPTION_ID--azure-subscription-idAzure サブスクリプション ID
AZURE_TENANT_ID--azure-tenant-idAzure AD テナント ID
AZURE_CLIENT_ID--azure-client-idAzure サービスプリンシパル クライアント ID
AZURE_CLIENT_SECRET--azure-client-secretAzure サービスプリンシパル シークレット
AZURE_ACCESS_TOKEN--azure-access-tokenAzure ML 用 Azure アクセストークン
AWS_ACCESS_KEY_ID--aws-access-key-idAWS アクセスキー ID
AWS_SECRET_ACCESS_KEY--aws-secret-access-keyAWS シークレットアクセスキー
AWS_REGION--aws-regionAWS リージョン (デフォルト: us-east-1)
AWS_PROFILE--aws-profileAWS CLI プロファイル名
Kind説明
GHOrganizationGitHub 組織
GHRepositoryGitHub リポジトリ
GHWorkflowGitHub Actions ワークフロー
GHSecretGitHub Actions シークレット
ADOOrganizationAzure DevOps 組織
ADOProjectAzure DevOps プロジェクト
ADOPipelineAzure DevOps パイプライン
ADOServiceConnectionAzure DevOps サービス接続 (NHI) とスコープの詳細
ADOAgentAzure DevOps エージェントプール (ホステッドまたはセルフホステッド)
ADOVariableGroupAzure DevOps 変数グループ
Kind説明
AzMLWorkspaceAzure ML ワークスペース
AzMLComputeAzure ML コンピュートクラスター/インスタンス
AzMLExperimentAzure ML ジョブ/実験
AzMLDatastoreAzure ML データストア
AzMLEnvironmentAzure ML 環境 (コンテナ定義)
AzMLModelAzure ML 登録済みモデル
SMDomainSageMaker Studio ドメイン
SMTrainingJobSageMaker トレーニングジョブ
SMModelSageMaker モデル
SMEndpointSageMaker エンドポイント (Azure ML エンドポイントにも使用)
SMNotebookSageMaker ノートブックインスタンス
ManagedIdentityAzure マネージド ID
DatasetML データセット
Kindトラストバウンダリ説明
TriggersPipelineTB1コードコミットが CI/CD をトリガー
HasBranchProtectionTB1リポジトリにブランチ保護ルールがあります
BypassesProtectionTB1脆弱/欠如しているブランチ保護 (悪用可能)
AuthenticatesAsTB2パイプラインがサービスプリンシパルを使用
CanAssumeRoleTB2OIDC ID が IAM ロールを引き受け可能
OIDCTrustTB2ワークフローが OIDC フェデレーションを使用
UsesServiceConnectionTB2パイプラインが ADO サービス接続を使用
PullsImageTB3トレーニングジョブがコンテナイメージをプル
CanPoisonImageTB3パイプラインがコンテナイメージを変更可能
SubmitsJobTB4サービスプリンシパルが ML ジョブを送信
CodeExecutionTB4ジョブがコンピュートでコードを実行
LoadsDatasetTB5トレーニングジョブがデータセットをロード
CanPoisonDatasetTB5パイプラインがデータセットを変更可能
DeserializesTB5安全でないデシリアライゼーション
ワークフローが OIDC を介してトレーニングジョブを送信する可能性があります (推論)
InferredPullsImageトレーニングジョブが悪意のあるコンテナイメージをプルする可能性があります (推論)
InferredLoadsDatasetトレーニングジョブが悪意のあるデータセットをロードする可能性があります (推論)
Kind説明
Contains親子関係
MemberOfグループメンバーシップ
HasAccessToリソースへのアクセス権限
HasExecutionRoleリソースが IAM/実行ロールを使用
Owns所有関係