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¶
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 :
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 :
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 :
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¶
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 :
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 |