Collettore OpenGraph per BloodHound che mappa i percorsi di attacco dall'infrastruttura DevOps a quella MLOps, raccogliendo risorse di pipeline CI/CD, service principal e piattaforma ML per l'analisi del movimento laterale.
Un raccoglitore OpenGraph proof-of-concept per BloodHound che mappa i percorsi di attacco dall'infrastruttura DevOps all'infrastruttura MLOps.
Basato su Pipelines of Privilege: Attack Paths from DevOps to MLOps Infrastructure di Brett Hawkins (@h4wkst3r).
Dop2Mop raccoglie dati dalle piattaforme DevOps e MLOps per identificare percorsi di attacco che consentono il movimento laterale dalle pipeline CI/CD all'infrastruttura di addestramento del machine learning. Produce JSON OpenGraph compatibile con BloodHound per visualizzazione e analisi.
| Piattaforme DevOps | Piattaforme MLOps | Provider di Identità |
|---|---|---|
| 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 modella i cinque confini di fiducia critici identificati nella ricerca:
git clone https://github.com/h4wkst3r/dop2mop.git cd dop2mop pip install -r requirements.txt pip install -e .
## Cosa viene raccolto
Ogni collettore raccoglie risorse specifiche della piattaforma e mappa i confini di fiducia tra di esse:
| Collettore | Risorse raccolte |
|-----------|-------------------|
| **GitHub** | Organizzazioni, repository, workflow, segreti, regole di protezione dei rami, configurazioni OIDC, riferimenti a immagini container, riferimenti a bucket S3 |
| **Azure DevOps** | Organizzazioni, progetti, pipeline (YAML), connessioni di servizio (con dettagli sull'ambito), gruppi di variabili, pool di agent, repository |
| **Azure ML** | Workspace, cluster/istanze di calcolo, datastore, ambienti ML, modelli registrati, job/esperimenti, endpoint online e batch |
| **SageMaker** | Job di addestramento, modelli, endpoint, domini, istanze notebook, ruoli di esecuzione IAM (con analisi delle policy), repository/immagini ECR, bucket S3 (filtrati per rilevanza ML) |
## Avvio Rapido
### Genera Dati Demo
Il modo più rapido per vedere Dop2Mop in azione è generare dati demo che mostrino gli scenari di attacco della ricerca:```bash
dop2mop demo -o demo.json
MATCH (n) RETURN n LIMIT 25
``````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
Invece di passare le credenziali ogni volta, puoi salvarle in un file di configurazione. Copia l'esempio incluso e inserisci i tuoi valori:```bash cp dop2mop.yaml.example dop2mop.yaml
Dop2Mop controlla queste posizioni in ordine:
1. Percorso specificato da `--config`
2. `dop2mop.yaml` / `dop2mop.yml` / `.dop2mop.yaml` nella directory corrente
3. `~/.dop2mop.yaml`
> **Nota:** `dop2mop.yaml` è in `.gitignore` per evitare di committare accidentalmente credenziali. Il file di esempio (`dop2mop.yaml.example`) è sicuro da committare.
Vedi [dop2mop.yaml.example](https://github.com/h4wkst3r/dop2mop/blob/main/dop2mop.yaml.example) per tutte le opzioni disponibili con commenti.
**Ordine di priorità:** argomenti CLI > file di configurazione > variabili d'ambiente.
### Validazione delle credenziali
Verifica le credenziali prima di eseguire una raccolta completa:```bash
# Validate all configured collectors
dop2mop collect --validate -v
# Validate specific collectors
dop2mop collect --validate --collectors github,sagemaker -v
Questo effettua una chiamata API leggera per piattaforma per verificare che i token siano validi prima di iniziare la raccolta.