Coletor OpenGraph para BloodHound que mapeia caminhos de ataque de infraestrutura DevOps para MLOps, coletando recursos de pipelines CI/CD, service principals e plataformas de ML para análise de movimento lateral.
Um coletor OpenGraph de prova de conceito para BloodHound que mapeia caminhos de ataque de infraestrutura DevOps para MLOps.
Baseado em Pipelines of Privilege: Attack Paths from DevOps to MLOps Infrastructure por Brett Hawkins (@h4wkst3r).
O Dop2Mop coleta dados de plataformas DevOps e MLOps para identificar caminhos de ataque que permitem movimento lateral de pipelines CI/CD para infraestrutura de treinamento de machine learning. Ele gera JSON OpenGraph compatível com BloodHound para visualização e análise.
| Plataformas DevOps | Plataformas MLOps | Provedores de Identidade |
|---|---|---|
| GitHub (Actions, Repos, Secrets) | Azure Machine Learning | Azure AD Service Principals |
| Azure DevOps (Pipelines, Service Connections) | Amazon SageMaker | AWS IAM Roles OIDC/Federated Identity |
O Dop2Mop modela os cinco limites críticos de confiança identificados na pesquisa:
git clone https://github.com/h4wkst3r/dop2mop.git cd dop2mop pip install -r requirements.txt pip install -e .
## O Que é Coletado
Cada coletor reúne recursos específicos da plataforma e mapeia os limites de confiança entre eles:
| Coletor | Recursos Coletados |
|-----------|-------------------|
| **GitHub** | Organizações, repositórios, fluxos de trabalho, segredos, regras de proteção de branch, configurações OIDC, referências de imagens de contêineres, referências de buckets S3 |
| **Azure DevOps** | Organizações, projetos, pipelines (YAML), conexões de serviço (com detalhes de escopo), grupos de variáveis, pools de agentes, repositórios |
| **Azure ML** | Workspaces, clusters/instâncias de computação, datastores, ambientes de ML, modelos registrados, trabalhos/experimentos, endpoints online e em lote |
| **SageMaker** | Trabalhos de treinamento, modelos, endpoints, domínios, instâncias de notebook, funções de execução IAM (com análise de políticas), repositórios/imagens ECR, buckets S3 (filtrados para relevantes a ML) |
## Início Rápido
### Gerar Dados de Demonstração
A maneira mais rápida de ver o Dop2Mop em ação é gerar dados de demonstração mostrando os cenários de ataque da pesquisa:```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
---
## Configuração
### Arquivo de Configuração
Em vez de passar credenciais a cada execução, você pode salvá-las em um arquivo de configuração. Copie o exemplo incluído e preencha seus valores:```bash
cp dop2mop.yaml.example dop2mop.yaml
# Edit dop2mop.yaml with your credentials
Dop2Mop verifica estes locais em ordem:
--configdop2mop.yaml / dop2mop.yml / .dop2mop.yaml no diretório atual~/.dop2mop.yamlNota:
dop2mop.yamlestá em.gitignorepara evitar o commit acidental de credenciais. O arquivo de exemplo (dop2mop.yaml.example) é seguro para comitar.
Veja dop2mop.yaml.example para todas as opções disponíveis com comentários.
Ordem de prioridade: argumentos CLI > arquivo de configuração > variáveis de ambiente.
Teste as credenciais antes de executar uma coleta completa:```bash
dop2mop collect --validate -v
dop2mop collect --validate --collectors github,sagemaker -v
Isso faz uma chamada de API leve por plataforma para verificar se os tokens são válidos antes de iniciar a coleta.
### Aliases de Coletores