Коллектор OpenGraph для BloodHound, который отображает пути атак от инфраструктуры DevOps до инфраструктуры MLOps, собирая ресурсы CI/CD pipeline, service principal и ML platform для анализа латерального перемещения.
Прототип сборщика OpenGraph для BloodHound, отображающего пути атак от DevOps до инфраструктуры MLOps.
Основано на Pipelines of Privilege: Attack Paths from DevOps to MLOps Infrastructure авторства Brett Hawkins (@h4wkst3r).
Dop2Mop собирает данные с платформ DevOps и MLOps для выявления путей атак, обеспечивающих боковое перемещение из конвейеров CI/CD в инфраструктуру обучения машинного обучения. Он выводит JSON OpenGraph, совместимый с BloodHound, для визуализации и анализа.
| Платформы DevOps | Платформы MLOps | Поставщики идентификации |
|---|---|---|
| GitHub (Actions, Repos, Secrets) | Azure Machine Learning | Azure AD Service Principals |
| Azure DevOps (Pipelines, Service Connections) | Amazon SageMaker | AWS IAM Roles OIDC/Federated Identity |
Dop2Mop моделирует пять критических границ доверия, выявленных в исследовании:
git clone https://github.com/h4wkst3r/dop2mop.git cd dop2mop pip install -r requirements.txt pip install -e .
## What's Collected
Each collector gathers platform-specific resources and maps the trust boundaries between them:
| Collector | Resources Collected |
|-----------|-------------------|
| **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) |
## Quick Start
### Generate Demo Data
The fastest way to see Dop2Mop in action is to generate demo data showing the attack scenarios from the research:```bash
dop2mop demo -o demo.json
// 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
## Конфигурация
### Файл конфигурации
Вместо того чтобы передавать учетные данные при каждом запуске, вы можете сохранить их в конфигурационном файле. Скопируйте прилагаемый пример и заполните свои значения:```bash
cp dop2mop.yaml.example dop2mop.yaml
# Edit dop2mop.yaml with your credentials
Dop2Mop проверяет следующие местоположения по порядку:
--configdop2mop.yaml / dop2mop.yml / .dop2mop.yaml в текущей директории~/.dop2mop.yamlПримечание:
dop2mop.yamlнаходится в.gitignore, чтобы предотвратить случайную фиксацию учетных данных. Файл примера (dop2mop.yaml.example) безопасен для фиксации.
Смотрите dop2mop.yaml.example для всех доступных опций с комментариями.
Приоритет: аргументы CLI > файл конфигурации > переменные окружения.
Протестируйте учетные данные перед запуском полного сбора:```bash
dop2mop collect --validate -v
dop2mop collect --validate --collectors github,sagemaker -v
Это позволяет выполнять облегчённый API-вызов для каждой платформы, чтобы проверить действительность токенов перед началом сбора.
### Псевдонимы сборщиков
Вы можете использовать короткие имена вместо полных имён классов с помощью `--collectors`: