Sicherheit

Erlaubnis vor Macht.

Ein Agent, der Ihre Dateien lesen, Befehle auf Ihrer Maschine ausführen, in Ihre Datenbanken schreiben und ins Internet veröffentlichen kann, ist nur sicher, wenn Sie entscheiden, was er anfasst. Jedes Werkzeug gehört zu einer Berechtigungskategorie; die Kategorie — nicht das Werkzeug — entscheidet, was Sie gefragt werden. Drei Handlungen lassen sich in keinem Modus im Voraus genehmigen.

8 KategorienErlaubnis statt Vertrauen
3 HandlungenJedes Mal gefragt, auch bei vollem Zugriff
1 SignaturschlüsselAußerhalb der öffentlichen API gehalten
Was den Agenten begrenzt

Vier Dinge stehen zwischen
einer Anweisung und Ihren Daten.

Keines davon ist das gute Urteilsvermögen des Modells. Ein Modell, das neunundneunzig von hundert Malen richtig entscheidet, ist kein Berechtigungssystem.

Vier Modi

Fragen, Auto, Plan, Voll. Der Plan-Modus ist schreibgeschützt und lehnt rundheraus ab: Er gibt Ihnen den Plan und sagt, Sie sollen den Modus wechseln, wenn er ausgeführt werden soll. Ein Modus ist eine Obergrenze, kein Vorschlag.

Acht Kategorien

Lesen, Schreiben, einen Befehl ausführen, eine Datenbank oder einen Bucket ändern, einen DNS-Eintrag schreiben, eine Nachricht senden, im Internet veröffentlichen, Credits ausgeben. Lesen fragt nie. Eine Datenbank- oder DNS-Änderung wird sogar im Auto-Modus gefragt.

Drei, die nicht vorab genehmigt werden können

Jemandem eine Nachricht senden, im öffentlichen Internet veröffentlichen und Credits für etwas anderes als einen Modellaufruf ausgeben. Jedes Mal gefragt, auch bei vollem Zugriff — « immer erlauben » gibt es für keine der drei, weil keine zurückgenommen werden kann.

Eine Obergrenze pro Antwort

Jeder Lauf trägt ein Credit-Budget. Er stoppt, wenn er es erreicht, statt Sie die Kosten hinterher entdecken zu lassen — und ein Werkzeug, das ausgibt, fragt vorher, ganz gleich was das Budget noch zulässt.

Wie es gebaut ist

Neun Mechanismen,
und der Grund für jeden.

Aus dem Code geschrieben, der sie umsetzt. Wo eine Maßnahme eine Grenze hat, steht die Grenze weiter unten auf dieser Seite, statt weggelassen zu werden.

Sitzungen
Ihr API-Schlüssel wird gegen eine kurzlebige Sitzung getauscht, signiert mit einem Schlüssel auf elliptischer Kurve. Die öffentliche API hält nur die öffentliche Hälfte: Sie kann eine Sitzung prüfen, aber keine erzeugen. Kompromittiert könnte sie sich keine Identität ausstellen.
Ihre Zugangsdaten
Eine Verbindungszeichenfolge oder ein Zugriffsschlüssel, den Sie übergeben, wird im Ruhezustand mit AES-256-GCM verschlüsselt und verlässt nie den Server. Dem Agenten werden Sammlungen, Tabellen und Präfixe gezeigt — nie Ihre Schlüssel. Der Verschlüsselungsschlüssel wird durch ein Skript getauscht, das neu verschlüsselt, nicht durch Ändern einer Konfigurationsdatei.
Ausgehende Anfragen
Jede URL, die der Server abruft, wird vor der Anfrage aufgelöst und abgelehnt, wenn sie auf eine private, lokale, Link-local- oder reservierte Adresse zeigt — vor allem auf den Cloud-Metadatenendpunkt, der Identitätstoken ausgibt. Nicht-HTTP-Schemata werden abgelehnt, Infrastrukturports blockiert, und Weiterleitungen werden von Hand verfolgt und erneut geprüft, weil eine Weiterleitung sonst um die Prüfung herumliefe. Das zählt vor allem für das eine Werkzeug, das URLs aus dem Text einer Anweisung verfolgt.
Fehler
Ein unerwarteter Ausfall antwortet mit einer generischen Meldung und einer Referenz; das vollständige Detail geht unter derselben Referenz in unser Log. Die Meldungen, die Sie erreichen — eine fehlgeschlagene Konvertierung, eine Seite, die nicht lud — sind von Datenbank-URIs, Zugangsdaten, erkennbaren Schlüsseln, internen Adressen, Cloud-Projektkennungen und Serverpfaden bereinigt.
Uploads
Ein Dateiname aus einer Anfrage wird nie zu einem Pfad. Er wird auf sein letztes Segment reduziert, reservierte Zeichen werden entfernt, und der aufgelöste Pfad muss weiterhin im Upload-Verzeichnis liegen, sonst wird der Schreibvorgang abgelehnt. Gürtel und Hosenträger, weil die erste Fassung dieser Prüfung nicht reichte.
Ratenbegrenzung
Gezählt auf die eigene Adresse des Besuchers, und einem Weiterleitungs-Header wird nur geglaubt, wenn er von einem lokalen Relais kommt — den Server so zu konfigurieren, dass er jedem Client glaubt, wird beim Start abgelehnt. Vor dieser Korrektur zählten alle Besucher als eine Adresse, sodass zwanzig falsche Passwörter von irgendwem die Anmeldung für alle sperrten.
Deployments
Umgebungsdateien, Git-Verzeichnisse und Abhängigkeiten gehen nie mit, und was weggelassen wurde, bekommen Sie mit Begründung zurück. Ein Pfad kann die Wurzel nicht verlassen. Der Servercode einer Anwendung wird aus den öffentlichen Dateien herausgenommen, statt als eine davon ausgeliefert zu werden — darin gelassen, hätte er den Quelltext der Anwendung auf ihrer eigenen Website veröffentlicht.
Ihre E-Mail
Der private DKIM-Schlüssel Ihrer Domain ist verschlüsselt, verlässt nie den Server und wird behalten statt neu erzeugt — ein neuer Schlüssel macht die Signaturen bereits gesendeter Post ungültig. Nachrichten werden mit Ihrer Domain signiert, nicht mit unserer. Und das HTML eines Absenders wird im Leser nie gerendert: Es wird zu Text reduziert, weil sonst jeder, der Ihnen schreibt, Skript in Ihrer Sitzung ausführen könnte.
Geheimnisse
Kein Geheimnis hat einen fest einprogrammierten Ersatzwert — ein fehlendes stoppt den Start, statt still einen überall gleichen Standardwert zu verwenden. Die öffentliche API verweigert den Start, wenn sie einen Schlüssel hält, den sie nicht halten darf: So bleibt der Signaturschlüssel, wo er hingehört.
Was wir nicht behaupten

Vier Dinge, die diese Seite
Ihnen nicht sagt.

Eine Sicherheitsseite, die nur Stärken auflistet, ist eine Broschüre. Dies sind die Grenzen, die wir kennen.

Wir haben keine Zertifizierung
Kein SOC 2, kein ISO 27001, kein Penetrationstestbericht eines Dritten. Wir sind ein kleines Unternehmen und werden nicht mit einem Siegel etwas anderes andeuten. Was wir stattdessen anbieten können, ist der Mechanismus — darum beschreibt diese Seite, wie die Dinge funktionieren, statt wer sie geprüft hat.
Die URL-Prüfung löst auf, sie fixiert nicht
Eine Adresse wird vor der Anfrage geprüft, nicht für deren Dauer festgehalten; ein Name, der einen Augenblick später anders antwortet, ist damit nicht ausgeschlossen. Diese Tür zu schließen hieße, die geprüfte Adresse beim Verbindungsaufbau zu fixieren, was weder der HTTP-Client noch die Browser-Engine, die wir nutzen, einfach zugänglich machen. Wir nennen es lieber hier, als die Prüfung absolut wirken zu lassen.
Eine Shell ist kein Sandkasten
Auf Ihrem eigenen Rechner läuft der Agent mit Ihren Rechten, und die Erlaubnisabfrage ist der Schutz — kein Gefängnis. Genau deshalb ist der Plan-Modus schreibgeschützt, deshalb gilt die Freigabe eines Befehls für genau diesen Befehl und nichts Weiteres, und deshalb ist die Cloud-Variante davon aus und nicht an.
Angenommen ist nicht zugestellt
Unser Relais gibt ab, sobald die Nachricht in der Warteschlange steht; was der Anbieter des Empfängers danach damit tut, wird uns nie gemeldet. Wir sagen Ihnen, von welcher Adresse eine Nachricht tatsächlich ausging, und wir weigern uns, unter einer zu senden, die Sie nicht gewählt haben — aber niemand kann Ihnen einen Posteingang versprechen.
Melden

Etwas gefunden?
Sagen Sie es uns.

Schreiben Sie an contact@iagenify.com mit « Security » am Anfang des Betreffs. Nennen Sie, was Sie getan und gesehen haben, und die Referenz, falls die Plattform Ihnen eine gegeben hat. Hat ein Proof of Concept Daten berührt, sagen Sie wessen — auch wenn es Ihre eigenen waren.

Wir lesen es

Ein Mensch, keine Warteschlange. Wenn es echt ist, erfahren Sie, was wir dagegen tun.

Wir zahlen keine Prämie

Es gibt keine Bezahlung und wir tun nicht so, als gäbe es sie. Das vorab zu sagen ist fairer, als es Sie nach der Arbeit herausfinden zu lassen.

Gehen Sie nicht weiter als nötig

Kein Denial of Service, keine Daten Dritter, kein fremdes Konto. Genug, um es zu zeigen, und dann Schluss.

Fragen

Sicherheit, im Detail.

Was darf der Agent ohne mich zu fragen?

Lesen, an einen Subagenten delegieren und eigene Notizen schreiben. Alles andere hängt von Kategorie und Modus ab: Eine Dateischreibung ist im Auto-Modus frei, eine Datenbank- oder DNS-Änderung wird selbst dort gefragt, und Senden, Veröffentlichen oder Ausgeben wird jedes Mal gefragt, was der Modus auch sagt.

Wo liegen die Werkzeugergebnisse des Agenten?

Auf dem Gerät, auf dem der Agent lief. Unsere Datenbank bewahrt den Schritt — welches Werkzeug, ein kurzes Ziel, ob es funktionierte, was es kostete, wie lange es dauerte — und nie den Inhalt eines Ergebnisses. Diese Teilung ist Absicht: Die Aufzeichnung des Geschehenen nützt Ihnen, und der Inhalt Ihrer Dateien gehört nicht uns.

Kann der Agent Ihre internen Dienste erreichen?

Nein. Die Adressprüfung ist selbst in der Entwicklung standardmäßig an, und die einzige Stelle, an der ein Workflow auf eine private Adresse hätte gerichtet werden können, hat diesen Ausweg standardmäßig abgeschaltet — die API ist öffentlich, und eine Entwicklungsbequemlichkeit dort hätte jedem Konto erlaubt, eine Antwort aus unserem eigenen Netz zu lesen.

Was passiert, wenn mein API-Schlüssel abfließt?

Ersetzen Sie ihn. Schlüssel werden als Hash gespeichert, nicht als Schlüssel, also können wir Ihnen keinen zurückzeigen — nur einen neuen ausstellen und den alten stilllegen. Eine aus einem Schlüssel abgeleitete Sitzung ist kurzlebig und an eine Sitzungsfamilie gebunden, die wir beenden können.

Haben Sie ein Bug-Bounty?

Nein. Schreiben Sie uns trotzdem, mit « Security » am Anfang des Betreffs. Wir hören es weit lieber von Ihnen.

Ist davon etwas geprüft?

Nicht von Dritten. Die Prüfungen sind unsere: Unit-Suiten ohne Netz, ein Skript, das jede Containergrenze von innerhalb des Containers zurückliest, eines, das ein Wegwerfkonto anlegt und eine echte Website ausliefert, bevor es alles Erzeugte löscht, und eines, das den Anmeldeweg von Anfang bis Ende durchspielt. Wir sagen Ihnen lieber, wessen Prüfungen das sind, als das Wort « geprüft » die Arbeit machen zu lassen.