Sécurité

L'autorisation avant la puissance.

Un agent qui peut lire vos fichiers, exécuter des commandes sur votre machine, écrire dans vos bases et publier sur internet n'est sûr que si vous décidez de ce qu'il touche. Chaque outil appartient à une catégorie d'autorisation ; c'est la catégorie — pas l'outil — qui décide de ce qu'on vous demande. Trois actes ne peuvent jamais être approuvés d'avance, quel que soit le mode.

8 catégoriesL'autorisation, pas la confiance
3 actesDemandés chaque fois, même en accès complet
1 clé de signatureTenue hors de l'API publique
Ce qui borne l'agent

Quatre choses séparent
une consigne de vos données.

Aucune n'est le bon jugement du modèle. Un modèle qui décide correctement quatre-vingt-dix-neuf fois sur cent n'est pas un système d'autorisation.

Quatre modes

Demander, Auto, Plan, Complet. Le mode Plan est en lecture seule et refuse d'emblée : il vous rend le plan et vous dit de changer de mode si vous voulez qu'il soit exécuté. Un mode est un plafond, pas une suggestion.

Huit catégories

Lire, écrire, exécuter une commande, modifier une base ou un bucket, écrire un enregistrement DNS, envoyer un message, publier sur internet, dépenser des crédits. Lire ne demande jamais. Une modification de base ou de DNS est demandée même en mode Auto.

Trois qu'on ne peut pas pré-approuver

Envoyer un message à quelqu'un, publier sur l'internet public, et dépenser des crédits pour autre chose qu'un appel de modèle. Demandés chaque fois, y compris en accès complet — « toujours autoriser » n'existe pour aucun des trois, parce qu'aucun ne se reprend.

Un plafond par réponse

Chaque exécution porte un budget en crédits. Elle s'arrête en l'atteignant, plutôt que de vous laisser découvrir le coût après coup — et un outil qui dépense demande d'abord, quoi que le budget permette encore.

Comment c'est bâti

Neuf mécanismes,
et la raison de chacun.

Écrits à partir du code qui les met en œuvre. Quand une mesure a une limite, la limite est plus bas sur cette page plutôt qu'omise.

Les sessions
Votre clé d'API est échangée contre une session courte signée par une clé à courbe elliptique. L'API publique ne détient que la moitié publique : elle peut vérifier une session, pas en créer une. Compromise, elle ne pourrait pas se fabriquer une identité.
Vos identifiants
Une chaîne de connexion ou une clé d'accès que vous confiez est chiffrée au repos en AES-256-GCM et ne quitte jamais le serveur. L'agent voit des collections, des tables et des préfixes — jamais vos clés. La clé de chiffrement se change par un script qui rechiffre, pas en modifiant un fichier de configuration.
Les requêtes sortantes
Toute URL que le serveur va chercher est résolue avant la requête et refusée si elle tombe sur une adresse privée, locale, de lien-local ou réservée — le point de métadonnées du cloud avant tout, qui délivre des jetons d'identité. Les schémas non HTTP sont refusés, les ports d'infrastructure bloqués, et les redirections suivies à la main puis revérifiées, parce qu'une redirection contournerait autrement le contrôle. Cela compte surtout pour le seul outil qui suit des URL trouvées dans le texte d'une consigne.
Les erreurs
Une panne inattendue répond par un message générique et une référence ; le détail complet part dans notre journal sous cette même référence. Les messages qui vous parviennent — une conversion ratée, une page qui n'a pas chargé — sont nettoyés des URI de bases, des identifiants, des clés reconnaissables, des adresses internes, des identifiants de projet cloud et des chemins du serveur.
Les téléversements
Un nom de fichier venu d'une requête ne devient jamais un chemin. Il est réduit à son dernier segment, les caractères réservés sont retirés, et le chemin résolu doit rester dans le dossier de dépôt sous peine de refus. Ceinture et bretelles, parce que la première version de ce contrôle ne suffisait pas.
Les limites de débit
Comptées sur l'adresse du visiteur, et un en-tête de transfert n'est cru que s'il vient d'un relais local — configurer le serveur pour croire n'importe quel client est refusé au démarrage. Avant ce correctif, tous les visiteurs comptaient comme une seule adresse : vingt mauvais mots de passe de n'importe qui bloquaient la connexion pour tout le monde.
Les déploiements
Les fichiers d'environnement, les dossiers Git et les dépendances ne partent jamais, et ce qui a été écarté vous est rendu avec un motif. Un chemin ne peut pas sortir de la racine. Le code serveur d'une application est retiré des fichiers publics au lieu d'y être servi — laissé dedans, il aurait publié le source de l'application sur son propre site.
Votre courriel
La clé privée DKIM de votre domaine est chiffrée, ne quitte jamais le serveur, et est conservée plutôt que régénérée — une nouvelle clé invalide les signatures du courrier déjà envoyé. Les messages sont signés de votre domaine, pas du nôtre. Et le HTML d'un expéditeur n'est jamais rendu dans le lecteur : il est réduit en texte, sinon quiconque vous écrit pourrait exécuter du script dans votre session.
Les secrets
Aucun secret n'a de valeur de repli codée en dur — un secret manquant arrête le démarrage au lieu d'employer silencieusement une valeur par défaut identique partout. L'API publique refuse de démarrer si elle détient une clé qu'elle n'a pas à détenir : c'est ainsi que la clé de signature reste où elle doit être.
Ce que nous n'affirmons pas

Quatre choses que cette page
ne vous dit pas.

Une page de sécurité qui n'énumère que des forces est une brochure. Voici les limites que nous connaissons.

Nous n'avons aucune certification
Pas de SOC 2, pas d'ISO 27001, aucun rapport de test d'intrusion par un tiers. Nous sommes une petite société et nous n'allons pas laisser croire le contraire avec un badge. Ce que nous pouvons offrir à la place, c'est le mécanisme — d'où cette page, qui décrit comment les choses fonctionnent plutôt que qui les a auditées.
La garde d'URL résout, elle n'épingle pas
Une adresse est vérifiée avant la requête, pas retenue pendant toute sa durée : un nom qui répond autrement un instant plus tard n'est donc pas écarté. Fermer cette porte veut dire épingler l'adresse vérifiée au moment de la connexion, ce que ni le client HTTP ni le moteur de navigateur que nous employons n'exposent simplement. Nous préférons le nommer ici plutôt que laisser la garde passer pour absolue.
Un terminal n'est pas un bac à sable
Sur votre propre ordinateur, l'agent s'exécute avec vos droits, et la demande d'autorisation est la protection — pas une prison. C'est précisément pour cela que le mode Plan est en lecture seule, qu'une commande approuvée l'est en tant que cette commande et rien de plus large, et que la version cloud de tout ceci est éteinte plutôt qu'allumée.
Accepté n'est pas remis
Notre relais rend la main dès que le message est en file ; ce que le fournisseur du destinataire en fait ensuite ne nous est jamais rapporté. Nous vous disons de quelle adresse un message est réellement parti, et nous refusons d'envoyer sous une adresse que vous n'avez pas choisie — mais personne ne peut vous promettre une boîte de réception.
Signalement

Vous avez trouvé
quelque chose ?

Écrivez à contact@iagenify.com avec « Security » en tête du sujet. Dites ce que vous avez fait, ce que vous avez vu, et la référence si la plateforme vous en a donné une. Si une démonstration a touché des données, dites lesquelles — y compris si c'étaient les vôtres.

Nous le lisons

Une personne, pas une file d'attente. Si c'est réel, vous saurez ce que nous en faisons.

Nous n'avons pas de prime

Il n'y a pas de paiement et nous n'allons pas faire semblant. Le dire d'emblée est plus honnête que de vous le laisser découvrir après le travail.

N'allez pas plus loin qu'il ne faut

Pas de déni de service, pas de données d'un tiers, pas de compte qui n'est pas le vôtre. De quoi le montrer, puis on s'arrête.

Questions

La sécurité, en détail.

Que peut faire l'agent sans me demander ?

Lire, déléguer à un sous-agent, et écrire ses propres notes. Tout le reste dépend de la catégorie et du mode : une écriture de fichier est libre en Auto, une modification de base ou de DNS est demandée même là, et envoyer, publier ou dépenser est demandé chaque fois, quoi que dise le mode.

Où vivent les résultats d'outils de l'agent ?

Sur l'appareil où l'agent s'est exécuté. Notre base garde l'étape — quel outil, une cible courte, si ça a marché, ce que ça a coûté, combien de temps — et jamais le contenu d'un résultat. Ce partage est délibéré : la trace de ce qui s'est passé vous est utile, et le contenu de vos fichiers ne nous appartient pas.

L'agent peut-il atteindre vos services internes ?

Non. Le contrôle d'adresse est actif par défaut même en développement, et le seul endroit où un flux aurait pu être pointé vers une adresse privée a cette échappatoire éteinte par défaut — l'API est publique, et un confort de développement à cet endroit aurait laissé n'importe quel compte lire une réponse venue de notre propre réseau.

Que se passe-t-il si ma clé d'API fuit ?

Remplacez-la. Les clés sont stockées sous forme d'empreinte, pas en clair : nous ne pouvons pas vous en remontrer une, seulement en émettre une nouvelle et retirer l'ancienne. Une session issue d'une clé est de courte durée et rattachée à une famille de sessions que nous pouvons clore.

Avez-vous une prime aux failles ?

Non. Écrivez-nous quand même, avec « Security » en tête du sujet. Nous préférons de loin l'apprendre de vous.

Tout cela est-il audité ?

Pas par un tiers. Les contrôles sont les nôtres : des suites unitaires sans réseau, un script qui relit chaque borne d'un conteneur depuis l'intérieur du conteneur, un autre qui crée un compte jetable et déploie un vrai site avant de tout supprimer, et un dernier qui exerce le parcours de connexion de bout en bout. Nous préférons vous dire à qui sont ces contrôles plutôt que laisser le mot « vérifié » faire le travail.