Aller au contenu

Artefacts

Les artefacts sont des enregistrements IOC structurés que Stentor crée automatiquement chaque fois qu'un beacon exécute une tâche. Chaque artefact capture ce qui s'est passé (création de processus, opération de fichier, modification du registre, connexion réseau), quelle technique MITRE ATT&CK a été utilisée et quelle beacon l'a produit. Les artefacts alimentent l'exportation du navigateur ATT&CK, les rapports IOC et la chronologie de l'engagement.


Comment les artefacts sont collectés

Le ArtifactRecorder s'exécute dans le pipeline des résultats de la tâche et produit des enregistrements d'artefacts à partir de deux sources :

  1. Artéfacts signalés par l'implant (source: "implant") : l'implant signale explicitement les artefacts dans sa payload de résultat de tâche, notamment le type, le chemin, la valeur et l'ID de technique facultatif.
  2. Artefacts auto-inférés (source: "auto") -- Lorsque l'implant ne signale pas d'artefacts explicites, l'enregistreur les déduit du type de tâche à l'aide de la table de mappage MITRE ATT&CK intégrée.

L'enregistrement des artefacts n'est pas bloquant : il s'exécute dans une routine goroutine en arrière-plan et insère des enregistrements par lots pour les performances. Les échecs sont enregistrés mais ne bloquent jamais le pipeline des résultats de la tâche.

sequenceDiagram
    participant Implant
    participant Relay
    participant Backend
    participant ArtifactRecorder
    participant Database

    Implant->>Relay: Task result (with optional artifacts)
    Relay->>Backend: Forward result via WebSocket
    Backend->>Backend: Process task result
    Backend->>ArtifactRecorder: RecordFromResult(beaconID, taskID, taskType, result)

    alt Implant reported artifacts
        ArtifactRecorder->>ArtifactRecorder: Use explicit artifacts (source="implant")
    else No explicit artifacts
        ArtifactRecorder->>ArtifactRecorder: Infer from task type (source="auto")
    end

    ArtifactRecorder->>Database: Batch INSERT c2_artifacts

Objet artefact

Champ Type Description
id UUID Identifiant unique de l'artefact
beacon_id UUID Beacon qui a produit l'artefact
task_id UUID Tâche qui a déclenché l'artefact (facultatif)
artifact_type chaîne Catégorie : process, file, registry, network, event_log, service
path chaîne Chemin d'accès au fichier, clé de registre, nom du processus ou adresse réseau
value chaîne Valeur associée (valeur de registre, hachage de fichier, etc.)
technique_id chaîne ID de la technique MITRE ATT&CK (par exemple, T1055.003)
tactic chaîne Tactique MITRE ATT&CK (par exemple, defense-evasion)
description chaîne Description lisible par l'homme de l'artefact
source chaîne implant (explicite) ou auto (déduit)
created_at horodatage Quand l'artefact a été enregistré

Types d'artefacts

Type Description Exemple
process Création ou injection de processus cmd.exe, powershell.exe
file Opérations du système de fichiers Chemins de chargement/téléchargement, fichiers déposés
registry Modifications de la clé de registre Clés de persistance, entrées de service
network Connexions réseau Scans de ports, mouvements latéraux, tunnels
event_log Entrées du journal des événements Windows Indicateurs du journal de sécurité
service Opérations des services Windows Création, modification de services

Cartographie automatique MITRE

Lorsqu'aucun artefact explicite n'est signalé par l'implant, l'enregistreur mappe automatiquement les types de tâches aux techniques MITRE ATT&CK :

Type de tâche Type d'artefact Technique MITRE
exec, shell process T1059.003 (shell de commande)
powershell, powershell_import, powerpick process T1059.001 (PowerShell)
inject, fork_run process T1055 (Injection de procédé)
persist registry T1547.001 (Clés d'exécution du registre)
creds, STEAL_TOKEN, MAKE_TOKEN credential Techniques d'accès aux informations d'identification
file_upload file Opérations de transfert de fichiers
file_download file Opérations de transfert de fichiers
PORTSCAN network T1046 (analyse des ports)
lateral network Techniques de mouvement latéral
socks, rportfwd network Techniques de tunneling/proxy

Types de tâches non mappés

Les types de tâches sans mappage MITRE sont ignorés silencieusement : aucun artefact n'est enregistré. Cela permet à la table d'artefacts de se concentrer sur les IOC pertinents pour la sécurité.


Interroger des artefacts

Tous les points de terminaison des artefacts se trouvent sous /api/v1/artifacts et prennent en charge la pagination via les paramètres de requête limit et offset.

Paramètres de pagination

Paramètre Type Par défaut Max. Description
limit int 50 500 Résultats par page
offset int 0 -- Décalage de pagination

Répertorier tous les artefacts

GET /api/v1/artifacts
curl -s "https://stentor.app/api/v1/artifacts?limit=50&offset=0" \
  -H "Authorization: Bearer $TOKEN" | jq

Réponse :

{
  "artifacts": [
    {
      "id": "artifact-uuid",
      "beacon_id": "beacon-uuid",
      "task_id": "task-uuid",
      "artifact_type": "process",
      "path": "cmd.exe",
      "value": "",
      "technique_id": "T1059.003",
      "tactic": "execution",
      "description": "Process created: cmd.exe (command shell)",
      "source": "auto",
      "created_at": "2026-02-21T14:30:00Z"
    }
  ],
  "total": 1247
}

Filtrer par beacon

GET /api/v1/artifacts/by-beacon/:beaconId
curl -s "https://stentor.app/api/v1/artifacts/by-beacon/$BEACON_ID?limit=100" \
  -H "Authorization: Bearer $TOKEN" | jq

Filtrer par tâche

GET /api/v1/artifacts/by-task/:taskId

Renvoie tous les artefacts pour une tâche spécifique (pas de pagination - renvoie l'ensemble complet).

curl -s "https://stentor.app/api/v1/artifacts/by-task/$TASK_ID" \
  -H "Authorization: Bearer $TOKEN" | jq

Filtrer par type

GET /api/v1/artifacts/by-type/:type

Types valides : process, file, registry, network, event_log, service.

curl -s "https://stentor.app/api/v1/artifacts/by-type/process?limit=50" \
  -H "Authorization: Bearer $TOKEN" | jq
curl -s "https://stentor.app/api/v1/artifacts/by-type/network?limit=50" \
  -H "Authorization: Bearer $TOKEN" | jq
curl -s "https://stentor.app/api/v1/artifacts/by-type/registry?limit=50" \
  -H "Authorization: Bearer $TOKEN" | jq

Filtrer par Technique MITRE

GET /api/v1/artifacts/by-technique/:techniqueId
curl -s "https://stentor.app/api/v1/artifacts/by-technique/T1059.001?limit=50" \
  -H "Authorization: Bearer $TOKEN" | jq

Filtrer par plage horaire

GET /api/v1/artifacts/by-time
Paramètre Type Obligatoire Description
start RFC3339 Oui Heure de début de plage
end RFC3339 Non Heure de fin de plage (par défaut : maintenant)
curl -s "https://stentor.app/api/v1/artifacts/by-time?start=2026-02-20T00:00:00Z&end=2026-02-21T23:59:59Z&limit=100" \
  -H "Authorization: Bearer $TOKEN" | jq

Résumé technique

Données d'utilisation des techniques agrégées pour tous les artefacts, regroupées par ID de technique et tactique.

GET /api/v1/artifacts/summary
curl -s "https://stentor.app/api/v1/artifacts/summary" \
  -H "Authorization: Bearer $TOKEN" | jq

Réponse

{
  "techniques": [
    {
      "technique_id": "T1059.001",
      "tactic": "execution",
      "count": 47,
      "first_seen": "2026-02-19T08:12:00Z",
      "last_seen": "2026-02-21T16:45:00Z"
    },
    {
      "technique_id": "T1055.003",
      "tactic": "defense-evasion",
      "count": 12,
      "first_seen": "2026-02-19T10:30:00Z",
      "last_seen": "2026-02-21T14:00:00Z"
    }
  ]
}

Ce point de terminaison alimente l’export de la couche ATT&CK Navigator et la répartition technique dans le rapport IOC.


Exportation de la couche de navigateur ATT&CK

Exportez la couverture technique de votre engagement sous forme de fichier JSON de couche ATT&CK Navigator v4.5. Le calque utilise une interpolation de couleur (du blanc au rouge) en fonction de la fréquence d'utilisation.

Couche standard

GET /api/v1/artifacts/navigator-layer
Paramètre Type Par défaut Description
name chaîne Stentor Engagement - YYYY-MM-DD Nom du calque personnalisé
preview bool false Lorsque true, omet l'en-tête Content-Disposition (pour l'aperçu dans le navigateur)
curl -s "https://stentor.app/api/v1/artifacts/navigator-layer" \
  -H "Authorization: Bearer $TOKEN" \
  -o navigator-layer.json
curl -s "https://stentor.app/api/v1/artifacts/navigator-layer?name=ACME+Corp+Q1+2026" \
  -H "Authorization: Bearer $TOKEN" \
  -o navigator-layer.json
curl -s "https://stentor.app/api/v1/artifacts/navigator-layer?preview=true" \
  -H "Authorization: Bearer $TOKEN" | jq

Couche par opération

Un deuxième mode d'exportation colore les techniques par lesquelles l'hôte/le beacon les a utilisées, ce qui facilite la visualisation de la couverture opérationnelle tout au long de l'engagement. Chaque hôte reçoit une couleur distincte et une légende mappe les noms d'hôtes aux couleurs.

GET /api/v1/artifacts/navigator-layer/by-operation
Paramètre Type Par défaut Description
name chaîne Stentor Operation - YYYY-MM-DD Nom du calque personnalisé
preview bool false Omettre l'en-tête de téléchargement pour l'aperçu dans le navigateur
curl -s "https://stentor.app/api/v1/artifacts/navigator-layer/by-operation" \
  -H "Authorization: Bearer $TOKEN" \
  -o navigator-layer-operation.json

Schémas de couleurs

Interpolation de couleur du blanc (#ffffff) au rouge (#ff6666) basée sur count / maxCount :

Utilisation Couleur Signification
0 Blanc Non observé
Faible Rose clair Utilisation occasionnelle
Élevé Rouge foncé Utilisation fréquente

Chaque hôte se voit attribuer une couleur distincte de la palette :

Indice Couleur Hex
0 Rouge #ff6666
1 Bleu #66b3ff
2 Vert #99ff99
3 Orange #ffcc66
4 Rose #ff99cc
5+ Parcourt 10 couleurs ...

Utilisation avec le navigateur ATT&CK

  1. Téléchargez la couche JSON à partir de l'un ou l'autre point de terminaison
  2. Ouvrez le Navigateur ATT&CK
  3. Cliquez sur Ouvrir la couche existante et téléchargez le fichier JSON.
  4. La carte thermique restitue la couverture technique de votre engagement

Voir Intégration MITRE ATT&CK pour la documentation complète de la base de connaissances.


Rapport du CIO

Générez un rapport structuré sur les indicateurs de compromission à partir de tous les artefacts enregistrés. Le rapport regroupe les artefacts par hôte et comprend une section sur la répartition des techniques, idéale pour le transfert du défenseur après un engagement.

GET /api/v1/artifacts/ioc-report
Paramètre Type Par défaut Description
format chaîne json Format d'exportation : json, pdf ou html
curl -s "https://stentor.app/api/v1/artifacts/ioc-report" \
  -H "Authorization: Bearer $TOKEN" | jq
curl -s "https://stentor.app/api/v1/artifacts/ioc-report?format=pdf" \
  -H "Authorization: Bearer $TOKEN" \
  -o ioc-report.pdf
curl -s "https://stentor.app/api/v1/artifacts/ioc-report?format=html" \
  -H "Authorization: Bearer $TOKEN" \
  -o ioc-report.html

Structure du rapport du CIO

{
  "generated_at": "2026-02-21T15:00:00Z",
  "total_artifacts": 523,
  "hosts": [
    {
      "hostname": "DC01",
      "ip": "10.10.10.10",
      "artifacts": [
        {
          "type": "process",
          "path": "powershell.exe",
          "value": "",
          "technique_id": "T1059.001",
          "tactic": "execution",
          "description": "Process created: powershell.exe",
          "source": "auto",
          "created_at": "2026-02-20T09:15:00Z"
        }
      ]
    }
  ],
  "technique_breakdown": [
    {
      "technique_id": "T1059.001",
      "technique_name": "PowerShell",
      "tactic": "execution",
      "artifact_count": 47,
      "hosts": ["DC01", "WS01", "WS02"]
    }
  ]
}
Section Description
hosts Artefacts regroupés par nom d'hôte cible et adresse IP
technique_breakdown Utilisation de techniques agrégées avec les listes d'hôtes concernées
total_artifacts Nombre total d'artefacts sur tous les hôtes

Détection de hachage de fichier

Pour les artefacts de type file, si le champ value contient une chaîne hexadécimale de 64 caractères, le rapport IOC remplit automatiquement le champ hash avec le hachage SHA256 pour faciliter le partage IOC.


Chronologie des fiançailles

Une vue chronologique de tous les artefacts associés aux métadonnées de beacon, prenant en charge le filtrage multidimensionnel. La chronologie est classée par ordre croissant (croissant) et est conçue pour la reconstruction de l'engagement et l'analyse post-opératoire.

GET /api/v1/artifacts/timeline

Paramètres de filtre

Paramètre Type Obligatoire Description
host chaîne Non Filtrer par nom d'hôte de beacon (correspondance exacte)
operator chaîne Non Filtrer par nom d'utilisateur de beacon (correspondance exacte)
technique chaîne Non Filtrer par ID de technique MITRE
start RFC3339 Non Début de la plage de dates
end RFC3339 Non Fin de la plage de dates
limit int Non Nombre maximum d'entrées (200 par défaut, 5 000 maximum)
offset int Non Décalage de pagination
format chaîne Non Format de sortie : json (par défaut), pdf ou html
curl -s "https://stentor.app/api/v1/artifacts/timeline" \
  -H "Authorization: Bearer $TOKEN" | jq
curl -s "https://stentor.app/api/v1/artifacts/timeline?host=DC01&limit=100" \
  -H "Authorization: Bearer $TOKEN" | jq
curl -s "https://stentor.app/api/v1/artifacts/timeline?technique=T1059.001" \
  -H "Authorization: Bearer $TOKEN" | jq
curl -s "https://stentor.app/api/v1/artifacts/timeline?start=2026-02-19T00:00:00Z&end=2026-02-21T23:59:59Z" \
  -H "Authorization: Bearer $TOKEN" | jq
curl -s "https://stentor.app/api/v1/artifacts/timeline?format=pdf&host=DC01" \
  -H "Authorization: Bearer $TOKEN" \
  -o engagement-timeline.pdf

Réponse chronologique

{
  "timeline": {
    "generated_at": "2026-02-21T15:30:00Z",
    "total_entries": 834,
    "filters": {
      "hostname": "DC01",
      "technique_id": "T1059.001"
    },
    "entries": [
      {
        "timestamp": "2026-02-19T08:12:00Z",
        "beacon_id": "beacon-uuid",
        "hostname": "DC01",
        "username": "CORP\\jdoe",
        "ip": "10.10.10.10",
        "artifact_type": "process",
        "path": "powershell.exe",
        "value": "",
        "technique_id": "T1059.001",
        "tactic": "execution",
        "description": "Process created: powershell.exe",
        "source": "auto"
      }
    ]
  }
}

Limites d'exportation

Lors de l'exportation au format PDF ou HTML, la limite est automatiquement augmentée à 5 000 entrées pour capturer la chronologie complète de l'engagement. Les réponses JSON respectent la limite fournie par l'appelant.


Référence API

Méthode Point de terminaison Description
GET /api/v1/artifacts Répertorier tous les artefacts (paginés)
GET /api/v1/artifacts/by-beacon/:beaconId Artefacts pour un beacon spécifique
GET /api/v1/artifacts/by-task/:taskId Artefacts pour une tâche spécifique
GET /api/v1/artifacts/by-type/:type Artefacts filtrés par type
GET /api/v1/artifacts/by-technique/:techniqueId Artefacts filtrés par la technique MITRE
GET /api/v1/artifacts/by-time Artefacts dans une plage de temps
GET /api/v1/artifacts/summary Résumé technique agrégé
GET /api/v1/artifacts/navigator-layer Exportation de la couche Navigateur ATT&CK
GET /api/v1/artifacts/navigator-layer/by-operation Couche Navigateur par opération
GET /api/v1/artifacts/ioc-report Rapport du CIO (JSON, PDF, HTML)
GET /api/v1/artifacts/timeline Chronologie de l'engagement (JSON, PDF, HTML)

Voir aussi