Vue d'ensemble et chronologie de sécurité

Toutes les protections de Bromure tournent sur l'hôte, dans le proxy et le commutateur virtuel du réseau : l'échange d'identifiants, le pare-feu de sortie, les garde-fous, les vérifications de chaîne d'approvisionnement, la détection d'injection de prompt et la protection des données personnelles. Chaque fois que l'une d'elles prend une décision — échanger un identifiant, bloquer une connexion, vérifier un paquet, retenir un message — elle l'enregistre. La fenêtre Chronologie de sécurité montre ces décisions : une Vue d'ensemble des dernières 24 heures, et une Chronologie de chaque événement.

Elle répond à une autre question que le traçage. Une trace enregistre le trafic lui-même — « qu'est-ce que l'agent a envoyé ? » — et seulement quand vous activez le traçage. La Chronologie de sécurité enregistre ce que les moteurs de sécurité ont décidé à propos de ce trafic, et elle est toujours active : chaque machine, inscrite ou non, en mode privé ou non, sans rien à configurer.

Ouvrir la fenêtre

Choisissez Fenêtre → Chronologie de sécurité…, ou appuyez sur ⌘K et prenez Chronologie de sécurité. La fenêtre s'ouvre sur l'onglet Vue d'ensemble ; le contrôle segmenté en haut à gauche bascule entre Vue d'ensemble et Chronologie. Il y a une seule fenêtre pour toute l'application ; rechoisir l'élément de menu la ramène au premier plan.

L'onglet Vue d'ensemble

La fenêtre Chronologie de sécurité sur son onglet Vue d'ensemble : « Dernières 24 heures » avec cinq tuiles (4 Bloqués, 5 Autorisés, 2 Identifiants relayés, 2 Paquets vérifiés, 0 Données personnelles remplacées), un tableau Protections avec une ligne pour chacune de Payments API, Web app et Data pipeline et les colonnes Pare-feu, Chaîne d'approvisionnement, Garde-fous, Injection de prompt, Protection des données personnelles et Courtage d'identifiants, et une liste Derniers blocages avec un blocage de pare-feu, un blocage de garde-fous et un blocage d'injection de prompt

La Vue d'ensemble est intitulée Dernières 24 heures — « Ce que les moteurs de sécurité de Bromure ont décidé pour vos agents. » Elle a trois parties.

Les tuiles

Cinq tuiles comptent les événements des dernières 24 heures :

TuileCompte
BloquésChaque événement dont la décision a été un blocage (rouge dans la Chronologie), depuis n'importe quel moteur.
AutorisésChaque événement dont la décision a été de laisser passer quelque chose (vert dans la Chronologie), depuis n'importe quel moteur.
Identifiants relayésLes événements de Courtage d'identifiants : échanges d'identifiants, tentatives d'exfiltration bloquées, et hôtes que vous avez autorisés depuis l'alerte de compromission.
Paquets vérifiésLes événements de Chaîne d'approvisionnement : chaque récupération de paquet que le proxy a vue.
Données personnelles remplacéesLe nombre de valeurs de données personnelles que la protection des données personnelles a remplacées par des substituts — des valeurs, pas des requêtes.

Cliquez une tuile pour sauter à l'onglet Chronologie. Identifiants relayés, Paquets vérifiés et Données personnelles remplacées l'ouvrent filtré sur leur moteur ; Bloqués et Autorisés l'ouvrent sur tous les moteurs, filtré sur ce résultat.

Protections

Le tableau Protections liste chaque machine de ce Mac, avec sa couleur, et montre quelles protections elle a activées — une coche verte pour activé, un tiret gris pour désactivé :

ColonneCochée quand
Pare-feuLa machine a des règles de connexion sortante dans son volet Garde-fous, ou refuse le trafic non apparié.
Chaîne d'approvisionnementAu moins une couche de chaîne d'approvisionnement est active (la barrière d'âge, OSV, socket.dev, le retrait de scripts ou l'invite de fichier de verrouillage).
Garde-fousLes garde-fous restreignent effectivement quelque chose : un service dont la politique d'écriture n'est pas Désactivée, un garde-fou de base de données, une règle de connexion sortante, ou tout identifiant réglé sur Demander avant usage. Le contournement non sécurisé par requête (X-bromure-insecure) ne compte pas, puisqu'il relâche au lieu de restreindre.
Injection de promptAu moins un détecteur d'injection de prompt est actif.
Protection des données personnellesL'interrupteur principal de la protection des données personnelles est actif avec au moins une catégorie.
Courtage d'identifiantsToujours : l'échange d'identifiants ne peut pas être désactivé.

Utilisez-le pour repérer une machine qui tourne avec moins de protections que les autres. Pour en changer une, ouvrez les réglages de cette machine (voir Référence des réglages).

Derniers blocages

Derniers blocages liste les blocages les plus récents des dernières 24 heures, les plus récents d'abord, jusqu'à huit : ce qui a été bloqué, le moteur et la décision, et il y a combien de temps. La liste est masquée quand rien n'a été bloqué.

L'onglet Chronologie

La fenêtre Chronologie de sécurité sur son onglet Chronologie : un champ Filtrer les événements…, le menu Tous les moteurs, « 8 événements », les boutons Exporter… et Effacer, et un tableau aux colonnes Heure, Espace de travail, Moteur, Condition et Décision listant des lignes Protection des données personnelles, Injection de prompt, Chaîne d'approvisionnement, Pare-feu et Courtage d'identifiants, codées en bleu, rouge et vert

La Chronologie est un tableau unique de chaque événement, les plus récents d'abord :

ColonneMontre
HeureDate et heure de la décision.
Espace de travailLa machine où cela s'est produit. Quand vous mettez des Mac distants en miroir, il indique Mac · machine.
MoteurQuel moteur a décidé, avec son icône.
ConditionCe que le moteur a vu : l'hôte, le paquet, l'extrait, la clé… Survolez pour le texte complet ; le texte peut être sélectionné et copié.
DécisionCe qu'il a décidé, avec un code couleur.
(dernière colonne)Pour les lignes du pare-feu, un bouton d'action rapide : Autoriser…, Bloquer… ou Règle… — voir Actions rapides du pare-feu. Pour un paquet bloqué par OSV ou socket.dev, Autoriser… → Toujours autoriser … dans cet espace de travail l'ajoute aux paquets de confiance de l'espace de travail (Autorisé désormais une fois que c'est fait) — voir Faire confiance à un paquet bloqué.

Les couleurs se lisent de la même façon partout dans la fenêtre :

  • Vert — autorisé : laissé passer, validé, signé.
  • Rouge — bloqué : refusé, rejeté, retenu.
  • Bleu — informatif : une transformation qui n'est ni un passage ni un blocage, comme un échange d'identifiant, une liste de versions filtrée par âge ou des scripts d'installation retirés.

La barre d'outils au-dessus du tableau le filtre :

  • Filtrer les événements… correspond au texte dans le moteur, la condition, la décision, les noms de machine et de Mac.
  • Le menu des moteurs (Tous les moteurs par défaut) liste les moteurs qui ont des événements.
  • Le menu des résultats (Tous les résultats par défaut) restreint le tableau aux événements Bloqués ou Autorisés.
  • Quand vous mettez au moins un Mac distant en miroir, un menu de machines apparaît : Toutes les machines, Ce Mac, ou un Mac distant.
  • Le compte d'événements (« 8 événements ») reflète les filtres.

Effacer vide la fenêtre. Cela ne fait que masquer les événements : ils restent sur le disque, mais les événements effacés ne reviennent pas au redémarrage de l'application. Exporter… est décrit plus bas.

Les moteurs

MoteurCe que ses lignes enregistrentExemples de décisions
Courtage d'identifiantsLes échanges d'identifiants sur le fil (Identifiants), les tentatives d'exfiltration, et les hôtes autorisés depuis l'alerte de compromission.« remplacé par sk-a…9f » (bleu) ; « bloqué — tentative d'exfiltration, VM mise en pause » (rouge), ou « bloqué — tentative d'exfiltration (alertes désactivées, VM non mise en pause) » quand la machine a les alertes d'exfiltration désactivées ; « autorisé par l'utilisateur pour cette session » (vert)
Identifiant utiliséLes signatures SSH et les signatures AWS SigV4 que l'hôte a effectuées pour l'agent.« signé » (vert)
Pare-feuLes verdicts du pare-feu de sortie, par hôte, port et protocole, avec la règle qui a décidé — ou « politique par défaut » quand aucune règle ne correspondait — pour les connexions directes comme pour celles passées par les réglages de proxy. L'hôte est le nom que le programme a demandé (www.wikipedia.org), pas le nom de CDN vers lequel il se résout. Une destination n'est signalée à nouveau qu'une fois passée une minute depuis son dernier signalement, ou aussitôt après un changement de règles ; les connexions autorisées ne sont listées que quand la machine les journalise, et leurs répétitions se replient en une ligne avec un compteur. Une connexion ouverte coupée parce que les règles ont changé a sa propre ligne.« autoriser — allow tcp github.com:443 » (vert) ; « refuser — politique par défaut » (rouge) ; « connexion fermée — « allow tcp github.com:443 » ne l'autorise plus » (rouge) ; « refuser » (rouge) pour les connexions rejetées quelles que soient les règles (IPv6, QUIC, fragments IP)
Garde-fousLes blocages de politique d'écriture (Garde-fous), avec la méthode et le chemin.« bloqué — … » (rouge)
Chaîne d'approvisionnementChaque récupération de paquet, y compris les téléchargements .deb d'apt (Protection de la chaîne d'approvisionnement).« vérifié », « téléchargé » (vert) ; « vérifié — versions plus récentes que le délai de refroidissement masquées », « scripts d'installation retirés » (bleu) ; « bloqué — … » (rouge)
Injection de promptLes détections, avec le détecteur, la source et un court extrait (Détection d'injection de prompt).« journaliser », « autorisé » (vert) ; « bloqué » (rouge)
Protection des données personnellesLes requêtes dans lesquelles des données personnelles ont été remplacées, avec les décomptes par type et l'hôte — jamais les valeurs (Protection des données personnelles) — et les requêtes dont l'analyse a épuisé le budget de modèle.« remplacé par des substituts » (bleu) ; « partiel — budget de modèle atteint ; règles de motif seulement » (bleu)
Délégation entre agentsChaque message qu'un agent a envoyé à un autre par délégation.« relayé » (bleu) ; « retenu — injection de prompt » (rouge)
TLS amontLes certificats amont que l'hôte a refusé de faire confiance, et les usages du contournement non sécurisé par requête.« bloqué — … » (rouge) ; « autorisé — validation de certificat ignorée (X-bromure-insecure) ; aucun identifiant injecté » (vert)

Actions rapides du pare-feu

Les lignes du pare-feu peuvent modifier sur-le-champ les règles de connexions sortantes de la machine. Utilisez le bouton de la dernière colonne de la ligne, ou faites un clic droit sur la ligne. Le changement est enregistré dans la machine et s'y applique immédiatement si elle tourne — sans redémarrage.

  • Une connexion bloquée — Autoriser hôte:port ajoute une règle d'autorisation pour exactement cet hôte, ce protocole et ce port, placée en tête pour l'emporter sur la règle qui l'a bloquée. Quand l'hôte est un sous-domaine, Autoriser tout domaine:port est aussi proposé (par exemple github.com pour api.github.com), qui couvre tous les sous-domaines — sauf sous les domaines de CDN et d'hébergement mutualisé (cloudflare.net, cloudfront.net, amazonaws.com, github.io, herokuapp.com…), où « tout » voudrait dire tous les clients de ce fournisseur. Les autres noms par lesquels l'hôte s'est résolu (ses alias de CDN) sont proposés ensuite comme hôtes exacts. Chacun propose Toujours, Pendant 15 minutes, Pendant 1 heure ou Jusqu'à l'arrêt de l'espace de travail ; une règle temporisée se désactive d'elle-même quand le temps est écoulé. Si la même règle existe déjà, le menu dit d'abord où elle en est (désactivée, ou active jusqu'à quand), de sorte que réautoriser ne la raccourcit jamais en silence. Si une règle de refus l'a bloquée, cette règle peut aussi être désactivée ou supprimée.
  • Une connexion autorisée par une règle — Désactiver la règle garde la règle mais l'empêche de correspondre (recochez-la dans l'éditeur pour la rétablir) ; Supprimer la règle l'efface. Les connexions que le changement refuse désormais sont coupées.
  • Une connexion autorisée parce qu'aucune règle ne correspondait — Bloquer hôte (ou Bloquer tout domaine) ajoute une règle de refus vers lui pour tous les protocoles et tous les ports.

Les règles créées ici utilisent le nom que le programme a demandé, le même nom que vérifie le proxy, de sorte qu'elles tiennent quelle que soit la façon dont le programme se connecte.

Quand les règles ont changé depuis l'enregistrement de la ligne — un hôte bloqué autorisé depuis, ou l'inverse — le bouton indique Autorisé désormais ou Bloqué désormais et son menu nomme la règle (ou la politique par défaut) qui décide maintenant, au lieu de proposer à nouveau le même changement.

Les actions rapides n'apparaissent que pour les lignes qu'un changement de règle peut affecter : pas pour les rejets IPv6, QUIC ou de fragments, ni pour les blocages de méthodes HTTP des règles web. Sur les lignes d'un Mac distant, le bouton est grisé : changez les règles de cette machine dans ses réglages, sur le Mac qui la fait tourner.

Note : si les réglages de la machine sont ouverts, le tableau des règles reprend le changement. Les modifications non enregistrées sont conservées : le changement y est fusionné règle par règle, et une note au-dessus du tableau le signale. Si vos modifications ne peuvent pas être fusionnées (une règle qui ne s'analyse pas encore), la note propose Recharger (prendre les règles enregistrées) ou Garder mes modifications.

La Chronologie n'enregistre que des décisions de sécurité. Les lectures de fichiers, les commandes, les appels d'outils et l'usage des modèles n'y sont pas ; ils appartiennent au traçage.

Exporter des événements

Exporter… (dans la barre d'outils des deux onglets) enregistre les événements dans un fichier CSV, nommé bromure-security-<date>.csv par défaut. Depuis l'onglet Chronologie, il enregistre exactement ce que le tableau montre, filtres appliqués ; depuis l'onglet Vue d'ensemble, il enregistre chaque événement de la fenêtre. Les lignes sont les plus anciennes d'abord, avec les colonnes time (ISO 8601), machine (« This Mac » ou le nom du Mac distant), workspace, engine, condition, decision et outcome (allowed, blocked ou info).

Stockage et conservation

  • Chaque événement est ajouté à un fichier quotidien dans ~/Library/Application Support/BromureAC/security-timeline/, une ligne JSON par événement, nommé <yyyy-MM-dd>.jsonl (dates UTC).
  • Les fichiers de plus de 90 jours sont supprimés.
  • Au lancement, la fenêtre recharge les 5 000 événements les plus récents, et n'en tient au plus 5 000 en mémoire ; les plus anciens restent dans les fichiers.
  • Les événements ne contiennent que des aperçus : des aperçus de jeton comme sk-a…f9q3, des aperçus d'extrait, des décomptes de données personnelles. Aucune valeur secrète ou personnelle n'est écrite.

Les Mac distants

Les moteurs tournent sur le Mac qui héberge les machines. Quand un client distant met un autre Mac en miroir, il reçoit les événements les plus récents de ce Mac et les montre dans sa propre fenêtre Chronologie de sécurité, aux côtés des siens. Les événements de chaque Mac mis en miroir sont tenus à part de ceux de ce Mac, pour que le menu de machines puisse les séparer et que la colonne Espace de travail nomme le Mac.

Rapport avec la télémétrie d'entreprise

Sur un Mac inscrit auprès de bromure.io, les mêmes événements de moteur sont aussi envoyés à l'organisation comme événements cloud (credential.token_swap, egress.firewall, supply_chain.fetch, prompt_injection.detection, privacy.pii_swap et d'autres), sauf si la machine est en Mode privé. La Chronologie de sécurité locale en est indépendante : elle enregistre chaque événement, que le Mac soit inscrit ou non et que le mode privé soit actif ou non. Voir Traçage et audit et Entreprise.