OpenGraph-Sammler für BloodHound, der Angriffspfade von DevOps- zu MLOps-Infrastrukturen abbildet und CI/CD-Pipeline-, Dienstprinzipal- und ML-Plattform-Ressourcen für die Lateral-Movement-Analyse sammelt.
Ein Proof-of-Concept OpenGraph-Collector für BloodHound, der Angriffspfade von DevOps- zu MLOps-Infrastruktur abbildet.
Basierend auf Pipelines of Privilege: Attack Paths from DevOps to MLOps Infrastructure von Brett Hawkins (@h4wkst3r).
Dop2Mop sammelt Daten von DevOps- und MLOps-Plattformen, um Angriffspfade zu identifizieren, die laterale Bewegungen von CI/CD-Pipelines zur Trainingsinfrastruktur für maschinelles Lernen ermöglichen. Die Ausgabe erfolgt als BloodHound-kompatibles OpenGraph-JSON zur Visualisierung und Analyse.
| DevOps-Plattformen | MLOps-Plattformen | Identitätsanbieter |
|---|---|---|
| GitHub (Actions, Repos, Secrets) | Azure Machine Learning | Azure AD-Dienstprinzipale |
| Azure DevOps (Pipelines, Serviceverbindungen) | Amazon SageMaker | AWS IAM-Rollen OIDC/Föderierte Identität |
Dop2Mop modelliert die fünf in der Forschung identifizierten kritischen Vertrauensgrenzen:
git clone https://github.com/h4wkst3r/dop2mop.git cd dop2mop pip install -r requirements.txt pip install -e .
## Was gesammelt wird
Jeder Collector sammelt plattformspezifische Ressourcen und kartiert die Vertrauensgrenzen zwischen ihnen:
| Collector | Gesammelte Ressourcen |
|-----------|----------------------|
| **GitHub** | Organisationen, Repositories, Workflows, Secrets, Branch-Protection-Regeln, OIDC-Konfigurationen, Container-Image-Referenzen, S3-Bucket-Referenzen |
| **Azure DevOps** | Organisationen, Projekte, Pipelines (YAML), Serviceverbindungen (mit Umfangsdetails), Variablengruppen, Agent-Pools, Repositories |
| **Azure ML** | Workspaces, Compute-Cluster/-Instanzen, Datastores, ML-Umgebungen, registrierte Modelle, Jobs/Experimente, Online- und Batch-Endpunkte |
| **SageMaker** | Training-Jobs, Modelle, Endpoints, Domains, Notebook-Instanzen, IAM-Ausführungsrollen (mit Richtlinienanalyse), ECR-Repositories/-Images, S3-Buckets (gefiltert auf ML-relevante) |
## Schnellstart
### Demo-Daten generieren
Der schnellste Weg, Dop2Mop in Aktion zu sehen, besteht darin, Demo-Daten zu generieren, die die Angriffsszenarien aus der Forschung zeigen:```bash
dop2mop demo -o demo.json
MATCH (u:User)
RETURN u
``````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
Anstatt bei jeder Ausführung Anmeldeinformationen zu übergeben, können Sie diese in einer Konfigurationsdatei speichern. Kopieren Sie das beigefügte Beispiel und füllen Sie Ihre Werte ein:
cp config.example.yml config.yml```bash
cp dop2mop.yaml.example dop2mop.yaml
Dop2Mop überprüft diese Orte in der folgenden Reihenfolge:
1. Pfad, der mit `--config` angegeben wurde
2. `dop2mop.yaml` / `dop2mop.yml` / `.dop2mop.yaml` im aktuellen Verzeichnis
3. `~/.dop2mop.yaml`
> **Hinweis:** `dop2mop.yaml` befindet sich in `.gitignore`, um ein versehentliches Committen von Anmeldedaten zu verhindern. Die Beispieldatei (`dop2mop.yaml.example`) kann bedenkenlos committet werden.
Siehe [dop2mop.yaml.example](https://github.com/h4wkst3r/dop2mop/blob/main/dop2mop.yaml.example) für alle verfügbaren Optionen mit Kommentaren.
**Prioritätsreihenfolge:** CLI-Argumente > Konfigurationsdatei > Umgebungsvariablen.
### Anmeldedatenvalidierung
Testen Sie Anmeldedaten vor dem Durchführen einer vollständigen Sammlung:```bash
# Validate all configured collectors
dop2mop collect --validate -v