Aller au contenu

Regroupement des beacons

Le regroupement de beacons permet aux operateurs d'organiser les beacons actifs en groupes nommes pour une gestion multi-beacons efficace. Les groupes portent un label de couleur, apparaissent sous forme de badges dans les vues tableau et graphe, et servent d'unite pour les operations par lot -- les taches, les changements de sleep et les sorties peuvent cibler un groupe entier en une seule action.

Les groupes sont des objets persistants cote serveur stockes dans PostgreSQL. Ils survivent aux reconnexions des beacons, aux redemarrages du relais et aux redemarrages du serveur.

Fonctionnalites associees

  • L'execution de taches par lot est detaillee dans Automatisation et playbooks
  • Les prereglages de filtres (section ci-dessous) permettent de sauvegarder des configurations de filtres reutilisables combinant l'appartenance aux groupes avec les filtres OS, nom d'hote et nom d'utilisateur

Apercu

Fonctionnalite Description
Groupes nommes Creer des groupes avec un nom, une description et une couleur (6 couleurs predefinies)
Assignation de beacons Ajouter ou retirer des beacons des groupes via l'API ou le menu contextuel au clic droit
Prereglages de filtres Sauvegarder des configurations de filtres (OS, nom d'hote, nom d'utilisateur, groupe) pour une reutilisation en un clic
Badges de groupe Des badges colores apparaissent a cote des noms d'hote des beacons dans les vues tableau et graphe
Operations par lot Executer des taches, modifier le sleep ou quitter tous les beacons d'un groupe a la fois

Gestion des groupes

Creation d'un groupe

API :

curl -s -X POST "https://stentor.app/api/v1/c2/beacon-groups" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Domain Controllers",
    "description": "All DC beacons in the target domain",
    "color": "#22C55E"
  }'

Reponse :

{
  "id": "a1b2c3d4-...",
  "name": "Domain Controllers",
  "description": "All DC beacons in the target domain",
  "color": "#22C55E",
  "created_by": "operator-uuid",
  "created_at": "2026-02-21T12:00:00Z",
  "updated_at": "2026-02-21T12:00:00Z"
}

Couleurs disponibles :

Couleur Code hexadecimal
Rouge #EF4444
Orange #F97316
Jaune #EAB308
Vert #22C55E
Bleu #3B82F6 (par defaut)
Violet #A855F7

Si aucune color n'est fournie, le groupe est par defaut en Bleu (#3B82F6).

Flux UI : Ouvrez la barre d'outils du cockpit et cliquez sur New Group. La boite de dialogue de gestion de groupe fournit des champs pour le nom, la description et un selecteur de couleurs avec les six couleurs predefinies ci-dessus.

Liste des groupes

curl -s "https://stentor.app/api/v1/c2/beacon-groups" \
  -H "Authorization: Bearer $TOKEN"

Renvoie un tableau de tous les groupes, classes par date de creation (le plus recent en premier).

Mise a jour d'un groupe

curl -s -X PUT "https://stentor.app/api/v1/c2/beacon-groups/$GROUP_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "DCs - Primary",
    "description": "Primary domain controllers only",
    "color": "#A855F7"
  }'

Les trois champs (name, description, color) sont envoyes lors de la mise a jour. Le champ name est obligatoire.

Flux UI : Dans la boite de dialogue de gestion de groupe, cliquez sur l'icone de modification a cote d'un groupe existant pour ouvrir le formulaire de modification avec les valeurs pre-remplies.

Suppression d'un groupe

curl -s -X DELETE "https://stentor.app/api/v1/c2/beacon-groups/$GROUP_ID" \
  -H "Authorization: Bearer $TOKEN"

Renvoie 204 No Content en cas de succes. La suppression d'un groupe supprime en cascade tous les enregistrements d'appartenance -- les beacons eux-memes ne sont pas affectes, seule l'association au groupe est supprimee.


Assignation de beacons

Ajout de beacons a un groupe

Assignez un ou plusieurs beacons a un groupe en une seule requete :

curl -s -X POST "https://stentor.app/api/v1/c2/beacon-groups/$GROUP_ID/beacons" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "beacon_ids": [
      "beacon-uuid-1",
      "beacon-uuid-2",
      "beacon-uuid-3"
    ]
  }'

Reponse :

{
  "status": "added"
}

Les assignations en double sont silencieusement ignorees (comportement upsert).

Flux UI : Faites un clic droit sur une ligne de beacon dans le tableau du cockpit, selectionnez Assign to Group dans le menu contextuel, puis choisissez le groupe cible. Plusieurs beacons peuvent etre selectionnes au prealable pour une assignation groupee.

Retrait de beacons d'un groupe

Retirez des beacons d'un groupe en utilisant DELETE avec un corps de requete contenant les IDs des beacons :

curl -s -X DELETE "https://stentor.app/api/v1/c2/beacon-groups/$GROUP_ID/beacons" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "beacon_ids": [
      "beacon-uuid-1"
    ]
  }'

Reponse :

{
  "status": "removed"
}

Retrait en masse

Le point de terminaison de retrait accepte un tableau d'IDs de beacons pour un retrait en masse en une seule requete. Il n'y a pas de parametre de chemin par beacon individuel.

Liste des membres du groupe

Recuperez un groupe avec les IDs de ses beacons membres via le point de terminaison du groupe individuel :

curl -s "https://stentor.app/api/v1/c2/beacon-groups/$GROUP_ID" \
  -H "Authorization: Bearer $TOKEN"

Reponse :

{
  "id": "a1b2c3d4-...",
  "name": "Domain Controllers",
  "description": "All DC beacons in the target domain",
  "color": "#22C55E",
  "created_by": "operator-uuid",
  "created_at": "2026-02-21T12:00:00Z",
  "updated_at": "2026-02-21T12:00:00Z",
  "beacon_ids": [
    "beacon-uuid-1",
    "beacon-uuid-2",
    "beacon-uuid-3"
  ]
}

Le tableau beacon_ids contient les UUIDs de tous les beacons actuellement assignes au groupe. Il n'y a pas de sous-route GET /beacons separee -- les IDs des membres sont integres dans la reponse detaillee du groupe.


Prereglages de filtres

Les prereglages de filtres sauvegardent une combinaison nommee de filtres de la liste de beacons pour une reutilisation en un clic. Les prereglages peuvent filtrer par OS, nom d'hote, nom d'utilisateur et appartenance a un groupe.

Creation d'un prereglage

curl -s -X POST "https://stentor.app/api/v1/c2/filter-presets" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Windows DCs",
    "filters": {
      "os": "windows",
      "hostname": "DC",
      "username": "",
      "group_id": "a1b2c3d4-..."
    }
  }'

Reponse :

{
  "id": "preset-uuid",
  "name": "Windows DCs",
  "filters": {
    "os": "windows",
    "hostname": "DC",
    "username": "",
    "group_id": "a1b2c3d4-..."
  },
  "created_by": "operator-uuid",
  "created_at": "2026-02-21T12:00:00Z",
  "updated_at": "2026-02-21T12:00:00Z"
}

L'objet filters est stocke en JSON et peut contenir toute combinaison de cles de filtrage. Les chaines vides ou les cles omises sont traitees comme "pas de filtre" pour ce champ.

Liste des prereglages

curl -s "https://stentor.app/api/v1/c2/filter-presets" \
  -H "Authorization: Bearer $TOKEN"

Renvoie tous les prereglages sauvegardes, classes par date de creation (le plus recent en premier).

Application d'un prereglage

Flux UI : Les prereglages sauvegardes apparaissent dans la barre de filtres au-dessus du tableau des beacons. Cliquez sur le nom d'un prereglage pour appliquer instantanement sa configuration de filtre sauvegardee. La liste des beacons se met a jour pour n'afficher que les beacons correspondants.

Mise a jour d'un prereglage

curl -s -X PUT "https://stentor.app/api/v1/c2/filter-presets/$PRESET_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Windows DCs (mis a jour)",
    "filters": {
      "os": "windows",
      "hostname": "DC0",
      "username": "",
      "group_id": "a1b2c3d4-..."
    }
  }'

Suppression d'un prereglage

curl -s -X DELETE "https://stentor.app/api/v1/c2/filter-presets/$PRESET_ID" \
  -H "Authorization: Bearer $TOKEN"

Renvoie 204 No Content en cas de succes.


Badges de groupe

Vue tableau

Les groupes apparaissent sous forme de badges colores a cote du nom d'hote de chaque beacon dans le tableau des beacons. La couleur de fond du badge correspond a la couleur configuree du groupe. Si un beacon appartient a plusieurs groupes, plusieurs badges sont affiches cote a cote.

Vue graphe

Dans le graphe de pivot (vue graphe du cockpit), chaque MachineNode affiche une superposition de badge de groupe. Les beacons appartenant a plusieurs groupes affichent des badges empiles pour indiquer toutes les appartenances aux groupes en un coup d'oeil.

Identification visuelle

Utilisez des couleurs distinctes pour chaque groupe (par exemple, Rouge pour les cibles de haute valeur, Vert pour les controleurs de domaine, Bleu pour les postes de travail) afin d'identifier rapidement les categories de beacons dans les vues tableau et graphe.


Operations par lot sur les groupes

Les operations par lot permettent d'envoyer une tache a chaque beacon d'un groupe avec un seul appel API ou une seule action UI. Le point de terminaison itere sur tous les membres du groupe, met la tache en file d'attente pour chaque beacon actif et renvoie un resume des envois reussis et echoues.

Point de terminaison API :

POST /api/v1/c2/beacon-groups/:id/batch-task

Tacher tous les beacons d'un groupe

Executez une commande shell sur chaque beacon d'un groupe :

curl -s -X POST "https://stentor.app/api/v1/c2/beacon-groups/$GROUP_ID/batch-task" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "shell",
    "data": {
      "method": "exec",
      "params": {
        "command": "whoami"
      }
    }
  }'

Reponse :

{
  "dispatched": 3,
  "failed": 0,
  "errors": [],
  "group_id": "a1b2c3d4-...",
  "beacon_ids": ["beacon-uuid-1", "beacon-uuid-2", "beacon-uuid-3"]
}

Le compteur dispatched indique les mises en file d'attente reussies. Le compteur failed et le tableau errors signalent les beacons qui n'ont pas pu recevoir la tache (par exemple, beacon introuvable dans le registre actif).

Sleep de tous les beacons d'un groupe

Definissez l'intervalle de sleep et le jitter pour tous les beacons d'un groupe :

curl -s -X POST "https://stentor.app/api/v1/c2/beacon-groups/$GROUP_ID/batch-task" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "state",
    "data": {
      "method": "sleep",
      "params": {
        "sleep": 60,
        "jitter": 10
      }
    }
  }'

Quitter tous les beacons d'un groupe

Terminez tous les beacons d'un groupe :

curl -s -X POST "https://stentor.app/api/v1/c2/beacon-groups/$GROUP_ID/batch-task" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "exit",
    "data": {
      "method": "exit",
      "params": {}
    }
  }'

Operation destructrice

Quitter tous les beacons d'un groupe est irreversible. L'interface utilisateur exige une confirmation explicite avant d'envoyer la commande de sortie. Tous les beacons du groupe se termineront proprement.

Flux UI : La boite de dialogue de lot de groupe fournit trois modes d'operation accessibles depuis le menu contextuel du groupe :

Operation Bouton UI Description
Tache Execute Choisissez le type de tache (Shell, PowerShell, PowerShell Import, Run, Execute) et entrez une commande
Sleep Set Sleep Entrez l'intervalle de sleep (secondes) et le pourcentage de jitter (0--99)
Quitter Exit All Confirmez la sortie destructrice pour tous les beacons du groupe

Pour les schemas detailles d'execution de taches par lot et les playbooks planifies, consultez Automatisation et playbooks.


Resume de l'API REST

Methode Point de terminaison Description
POST /api/v1/c2/beacon-groups Creer un nouveau groupe
GET /api/v1/c2/beacon-groups Lister tous les groupes
GET /api/v1/c2/beacon-groups/:id Obtenir les details du groupe avec les IDs des beacons membres
PUT /api/v1/c2/beacon-groups/:id Mettre a jour un groupe
DELETE /api/v1/c2/beacon-groups/:id Supprimer un groupe (suppression en cascade des appartenances)
POST /api/v1/c2/beacon-groups/:id/beacons Ajouter des beacons a un groupe
DELETE /api/v1/c2/beacon-groups/:id/beacons Retirer des beacons d'un groupe
POST /api/v1/c2/beacon-groups/:id/batch-task Envoyer une tache a tous les beacons d'un groupe
POST /api/v1/c2/filter-presets Creer un prereglage de filtre
GET /api/v1/c2/filter-presets Lister tous les prereglages de filtres
PUT /api/v1/c2/filter-presets/:id Mettre a jour un prereglage de filtre
DELETE /api/v1/c2/filter-presets/:id Supprimer un prereglage de filtre