14. Bedrohungsmodell¶
Dieses Kapitel sagt, was Pepsi schützt, vor wem und wie weit — die Zusicherungn. Das nächste Kapitel, Sicherheitsmodell, beschreibt die Mechanismen, die sie tragen (die Kontentrennung, die Datenbankrechte, die setuid-Programme, die Schlüsselverwahrung), und ist dasjenige, das nach einer Kompromittierung zu lesen ist. Jede Zusicherung hier nennt den Mechanismus, auf dem sie beruht, und jedes verbleibende Risiko — etwas, das Pepsi nicht schützt — wird als solches benannt, statt es der Schlussfolgerung zu überlassen.
14.1. Wie dieses Kapitel zu lesen ist¶
Eine Sicherheitszusage hat drei Teile: ein Schutzgut (was schützenswert ist), einen Angreifer (wer es haben will und was er bereits tun kann) und einen Mechanismus (was zwischen beiden steht). Das Kapitel ist genauso gegliedert:
Schutzgüter listet auf, was Pepsi hält und auf welche Eigenschaft es jeweils ankommt.
Beteiligte und wie weit jedem vertraut wird listet alle auf, die rechtmäßig mit einer Installation interagieren, denn die meisten Angreifer sind einer von ihnen, der sich fehlverhält.
Vertrauensgrenzen zeigt, wo Befugnis den Besitzer wechselt.
Angreifer behandelt jede Klasse der Reihe nach: was sie tun kann, was sie aufhält und was sie trotzdem erreicht.
Ende-zu-Ende-Verschlüsselung: zwei Verwahrungsmodi und Was ein Sicherheitsindikator bedeutet geben die kryptographischen Zusicherungn an, die sich danach unterscheiden, wer den Schlüssel hält.
Adressbezogene Einstellungen sind eine Vertrauensgrenze, Der Netzwerkangreifer und Verfügbarkeit behandeln die drei Bereiche, in denen die Antwort davon abhängt, wie die Installation konfiguriert ist.
Die Garantien auf einen Blick fasst alles in einer Tabelle zusammen.
Zwei Wörter werden streng verwendet. Gilt bedeutet, dass die Zusicherung von einem Mechanismus durchgesetzt wird, den der betreffende Angreifer nicht abschalten kann. Verbleibendes Risiko bedeutet, dass der Angreifer es erreicht, und der Text sagt das mit Absicht.
14.2. Schutzgüter¶
Schutzgut |
Wo es liegt |
Die Eigenschaft, auf die es ankommt |
|---|---|---|
Mail unterwegs |
|
Vertraulichkeit und Integrität während der Einreihung; sie muss den Empfänger erreichen, an den sie adressiert war, und niemanden sonst. |
Zugestellte Mail |
Das |
Pepsis Teil: an das richtige Postfach als der richtige Benutzer zustellen, nie an das eines anderen — und für einen Benutzer mit einem Client-Schlüssel eine verschlüsselt eingetroffene Nachricht nie lesbar ablegen ( |
Gespeicherte Secure-Link-Nachrichten |
|
Vertraulichkeit gegenüber jedem, der die PIN nicht hat. |
Private Ende-zu-Ende-Schlüssel |
|
Nie offengelegt; nur von den beiden Krypto-Stages und |
Domain-Signaturschlüssel und Dienstgeheimnisse |
DKIM-Schlüssel im Dateisystem (Gruppe |
Vertraulichkeit; jedes nur für das Konto lesbar, das es verwendet. |
Absenderidentität und Reputation |
Was die obigen Schlüssel ermöglichen: für die Domain signieren (DKIM, ARC), Absender umschreiben (SRS), sich für Mail als unsere verbürgen ( |
Niemand außerhalb der Pipeline darf Mail versenden, die die Autorität unserer Domain trägt; der Server darf weder zu einem offenen Relay noch zu einer Backscatter-Quelle werden. |
Benutzerbezogene Signaturen |
OpenPGP-/S/MIME-Signaturen, die |
Eine Signatur als alice wird nur auf Mail erstellt, die alice eingeliefert hat. |
Sicherheitsindikatoren |
|
Integrität: Ein Leser oder eine spätere Stage darf ihnen glauben. |
Konfiguration und Richtlinie |
|
Integrität: Nur der Operator bestimmt die Richtlinie, und jeder Benutzer nur seinen eigenen Teil davon. |
Metadaten der Korrespondenz |
Umschläge in der Warteschlange, |
Vertraulichkeit gegenüber Außenstehenden; siehe Was Pepsi nicht schützt dazu, was für wen sichtbar ist. |
Privatsphäre gegenüber Dritten |
Was den Host aus eigenem Antrieb verlässt: Abfragen der Schlüsselentdeckung (DNS, WKD, VKS, LDAP), TLS-Berichte, Opt-in-Telemetrie. |
Das Minimum offenlegen, und nichts, dem der Operator nicht zugestimmt hat. |
Geld |
GNU-Taler-Wallets, gesteuert von |
Ein Wallet wird nur von seinem Eigentümer ausgegeben oder, automatisch, innerhalb des vom Operator festgelegten Budgets, und nur gegen eine Zahlungsforderung für Mail, die wir wirklich gesendet haben. |
Zugangsdaten der Verwaltungsoberfläche |
|
Aus der Datenbank nicht wiederherstellbar; nicht wiederverwendbar. |
Verfügbarkeit |
Die Pipeline als Ganzes. |
Mail fließt auch bei feindseliger Eingabe weiter; ein Fehler führt zum Aufschub, nicht zu Verlust oder Offenlegung. Siehe Verfügbarkeit. |
14.3. Beteiligte und wie weit jedem vertraut wird¶
Beteiligter |
Vertrauen |
|---|---|
Der Operator (root, oder wer auch immer |
Voll vertraut, und zwar präzise ausgedrückt: Der Operator konfiguriert die Pipeline, hält jedes Geheimnis und sieht in Gateway-Verwahrung jede durchlaufende Nachricht. Keine Zusicherung in diesem Handbuch gilt gegenüber einem Operator, der den Server verändert. Die Zusicherungn für gespeicherte Daten (verpackte Schlüssel, Secure-Link-Chiffrat, Digests von Zugangsdaten) gelten gegenüber einem passiven Leser gespeicherter Daten — einem gestohlenen Backup, einem reinen Datenbankadministrator —, nie gegenüber jemandem, der das laufende System kontrolliert. |
Ein Datenbankadministrator ohne root auf dem Host |
Für die Zwecke dieses Modells ein passiver Angreifer: kann jede Tabelle lesen und ändern, kann |
Die Pipeline (das Konto |
Vertraut, Mail zu verarbeiten, und deshalb Teil dessen, worauf ein Angreifer zielt. Jede Stage kann jede eingereihte Nachricht lesen und umschreiben; siehe Eine kompromittierte Komponente dazu, was eine einzelne kompromittierte Stage wert ist. |
Lokale Shell-Benutzer |
Feindselig untereinander und gegenüber Pepsi. Ein Benutzer darf Mail als er selbst einliefern (über |
Reine Mail-Benutzer (SMTP-Submission, IMAP, keine Shell) |
Feindselig untereinander. Ihre Hebel sind die Einlieferung (unter den Identitäten, die |
Vertrauenswürdige Relay-Hosts ( |
Vertraut, Mail mit lokaler Herkunft einzuliefern. Ein kompromittierter ist ein kompromittierter Einlieferer für jede Adresse, als die er senden darf. |
Delegierte Administratoren (API-Tokens und Konsolenkonten mit engem Geltungsbereich, einschließlich |
Feindselig jenseits ihres Geltungsbereichs: Ein Beteiligter kann nie Zugangsdaten ausstellen, die stärker sind als er selbst ( |
Listenmitglieder, Listenverwalter und Moderatoren |
Feindselig jenseits ihrer Listen. Ein getrenntes Kontensystem ( |
Entfernte Absender |
Feindselig. Alles, was sie senden — Umschlag, Header, MIME-Struktur, Chiffrat, Schlüssel, |
Entfernte empfangende MTAs |
Nicht vertrauenswürdig für die Vertraulichkeit, es sei denn, TLS ist authentifiziert (DANE oder eine durchgesetzte MTA-STS-Richtlinie); siehe Der Netzwerkangreifer. |
Schlüsselquellen der Korrespondenten (deren DNS, WKD-Host, ein VKS-Server, ein LDAP-Verzeichnis) |
Genau so weit vertraut, wie die Vertrauensleiter sie einstuft (Schlüsselverwaltung). Eine Domain kann immer für ihre eigenen Benutzer sprechen. |
Externe Helfer, die der Operator einbindet (Milter, der LMTP-Server, der Smarthost, Taler-Wallets und -Exchanges) |
Vertraut mit dem, was der Operator ihnen übergibt: Ein Milter sieht die Nachricht im Klartext, ein LMTP-Server legt sie ab, ein Smarthost leitet sie weiter. |
14.4. Vertrauensgrenzen¶
Befugnis wechselt an einer kleinen Zahl von Stellen den Besitzer, und jeder Mechanismus in Sicherheitsmodell sitzt an einer davon:
remote MTAs, local users browser / API client
senders (sendmail) (operator, delegate)
| | |
=====|====================|=========== B1: network ==|=================
v v v
+--------------+ SO_PEERCRED +-----------------------+
| pepsi-ingress|<- B2: submission | pepsi-httpd |
| (auth, SPF, | identity | B6: scopes, CSRF |
| DKIM, DMARC)| +-----------+-----------+
+------+-------+ | setup_task
| workqueue row v (a request)
=======|===== B3: queue (pepsi.workqueue) +-----------------------+
v | pepsi-setup apply |
+---------------------+ B4: setuid/gid | (root; B7: re-checks)|
| stages as `pepsi` |------------------+ +-----------------------+
| (dispatcher, ARC, | |
| SRS, dkim-sign ...)| v
+----+----------------+ +-----------------------------+
| | helpers: become the user |
| B5: key custody | (maildir, .forward, wallet) |
v +-----------------------------+
+---------------------+
| encrypt / decrypt | crypto_identity.private_wrapped
| (setuid pepsi-crypto)| + KEK in secrets.d
+---------------------+
B1 — das Netzwerk. Alles Eintreffende ist feindselig, bis Ingress es authentifiziert hat, und selbst dann wird nur dem Urteil vertraut, nie dem Inhalt. Ausgehend wird einem Hop nur so weit vertraut, wie sein TLS authentifiziert ist.
B2 — die Einlieferungsidentität. Ingress entscheidet, wer eine Nachricht eingeliefert hat: SASL, ein Client-Zertifikat, MYNETWORKS oder SO_PEERCRED am lokalen Socket. USERNAME_MAP entscheidet dann, welche From:-/Umschlagidentitäten dieser Einlieferer verwenden darf. Nur an dieser Stelle wird die Frage „darf diese Person als diese Adresse senden?“ gestellt.
B3 — die Warteschlange. Alles nach Ingress ist eine Tabelle, die jede Pipeline-Stage lesen und schreiben darf. Die Urteile, die Ingress festgehalten hat (state.auth, state.local_origin), und die, die spätere Stages hinzufügen (state.spam, state.signature_verified), sind innerhalb dieser Grenze nicht authentifizierte Daten: Man glaubt ihnen, weil nur Pipeline-Code sie schreiben kann. Das ist die größte einzelne Vertrauensannahme des Entwurfs, und deshalb behandelt Eine kompromittierte Komponente eine pepsi-Stage als gleichwertig mit der Warteschlange.
B4 — die Helper. Drei Arbeiten erfordern es, ein bestimmter lokaler Benutzer zu sein (ein Maildir schreiben, auf eine ~/.forward reagieren, ein Wallet steuern). Jede ist ein kleiner setuid-root-Helper, nur über eine setgid-Stage erreichbar, der vollständig zum Zielbenutzer wechselt, bevor er irgendetwas berührt, das dem Benutzer gehört.
B5 — Schlüsselverwahrung. Nur pepsi-crypto hält sowohl die verpackten privaten Schlüssel als auch den KEK. Die Krypto-Stages überschreiten diese Grenze bei jeder Nachricht; nichts sonst in der Pipeline tut das.
B6 — die Verwaltungsoberfläche. Jede Anfrage wird authentifiziert (SO_PEERCRED, Bearer-Token oder Passwort + Sitzung) und gegen den einen Geltungsbereich des Endpunkts autorisiert.
B7 — der privilegierte Applier. Die Web-Schicht hat keine root-Befugnis. Sie hält fest, was geschehen soll, in pepsi.setup_task; pepsi-setup apply, das als root läuft und getrennt gestartet wird, validiert jede Aufgabe erneut gegen die Befugnis des Anfragenden und führt sie aus. Das Entfernen des Pakets pepsi-httpd-admin entfernt den Applier, was diese Grenze absolut macht.
14.5. Angreifer¶
14.5.1. Ein passiver Netzwerkbeobachter¶
Kann: den Verkehr zwischen Pepsi und anderen MTAs sowie zwischen Clients und Pepsi mitlesen.
Aufgehalten durch: opportunistisches STARTTLS in beide Richtungen, TLS bei der Submission (vorgeschrieben, außer am lokalen UNIX-Socket), HTTPS für das Portal und die Konsole. Ende-zu-Ende-verschlüsselte Nachrichten bleiben auf der Leitung verschlüsselt, was auch immer der Transport ist.
Erreicht trotzdem: die Transport-Metadaten — welche Hosts miteinander sprechen, wann und wie viel — und den Klartext jedes Hops, bei dem die Gegenseite überhaupt kein TLS anbietet.
14.5.2. Ein aktiver Netzwerkangreifer¶
Kann: Verkehr abfangen, verändern und verwerfen; STARTTLS entfernen; sein eigenes Zertifikat vorlegen; und mit einem lügenden Resolver auf dem Weg DNS fälschen.
Aufgehalten durch: nur das, was die Installation und die Gegenseite konfiguriert haben. Mit den Standardwerten kann ein aktiver Angreifer einen ausgehenden Hop auf Klartext herabstufen oder ihn mit seinem eigenen Zertifikat abfangen, es sei denn, die empfangende Domain veröffentlicht eine MTA-STS-Richtlinie enforce (standardmäßig beachtet) oder DANE-TLSA-Einträge (die der Standardwert DANE = warn nur protokolliert). Siehe Der Netzwerkangreifer für das gehärtete Profil, das dies schließt.
Erreicht trotzdem: einen Denial of Service, immer. Mit DANE strict wird ein Angriff in einen Aufschub statt einer Offenlegung umgewandelt — die beste verfügbare Antwort, keine vollständige.
14.5.3. Ein entfernter Absender¶
Kann: beliebige Bytes an Port 25 senden: gefälschte From:-Header, fehlerhaftes MIME, feindseliges Chiffrat und feindselige Signaturen, Autocrypt- und Autocrypt-Gossip-Header, gefälschte DSNs, gefälschte Zahlungsforderungen und gefälschte Pepsi-Sicherheits-Header.
Aufgehalten durch:
Parser werden als Angriffsfläche behandelt. Jede Stage parst feindselige Eingaben; der empfindlichste Parser, der CMS-/S/MIME-Code in
pepsi-crypto, wird gefuzzt (Testsuite).Gefälschte Indikatoren werden entfernt. Jeder
X-Pepsi-*-Header wird aus eingehender Mail entfernt, bevor die Decrypt-Stage ihre eigenen schreibt, und Betreff-Markierungen[decrypted]/[verified]werden entfernt, bevor unsere hinzugefügt werden.Geerntete Schlüssel können sich nicht als unsere Benutzer ausgeben. Aus eingehender Mail gelernte Schlüssel landen auf den untersten Sprossen der Vertrauensleiter, und für jede Adresse, für die wir eine Identität halten, hat unser eigener Schlüssel Vorrang vor jedem zwischengespeicherten Schlüssel (
lookup_own_first). Ein gefälschtesFrom: alice@our-domainmit einemAutocrypt:-Header kann daher weder die Verschlüsselung für Alice umlenken noch eine Signatur als ihre verifizieren lassen.Gossip ist begrenzt. Nur aus Mail, die verschlüsselt eintraf, nur über
To:-/Cc:-Adressen, nie über unsere eigenen Benutzer, nie unter Verdrängung eines besseren Schlüssels und nie fähig, ein Signatururteilvalidzu erzeugen. Ein gegossipter Schlüssel verlässt die unterste Sprosse nur, wenn sein Eigentümer denselben Schlüssel selbst bekannt gibt, was ihn auf die Sprosseinboundbefördert (auditiert alskey.peer.promote, nie als Rotation) und immer noch keinvaliderzeugen kann.Eine Schlüsselrotation ist nie still. Das Ersetzen des geernteten Schlüssels eines Korrespondenten durch einen neueren (Autocrypts „der neueste gewinnt“) schreibt in derselben Anweisung eine Audit-Zeile und benachrichtigt per Mail die lokalen Empfänger der Nachricht, die dies ausgelöst hat; unter
ACCEPT_ROTATION = expiredwird es abgelehnt, solange der gespeicherte Schlüssel gültig ist.Schleifen werden unterbrochen. Mail mit Null-Absender wird nie gebounct, Auto-Replies folgen der Unterdrückung nach RFC 3834 (
pepsi-common::autoreply),.forward-Ketten tragen einen Schleifenschutz, Hop-Zahlen sind begrenzt, und eine Nachricht, die den Ingress dieses HostsMAX_SELF_HOPSMal durchlaufen hat, wird abgelehnt.Kein Backscatter. Eine Adresse an einer bedienten Domain, für die nichts auf dem Host bürgt, wird bei
RCPTabgelehnt (VERIFY_RECIPIENTS), und ein Bounce geht nur an einen Umschlagabsender, den die Nachricht authentifiziert hat (BOUNCE_UNAUTHENTICATED), sodass ein gefälschter Absender nicht im Auftrag des Spammers angeschrieben wird.Zahlungsforderungen werden geprüft.
pepsi-stage-auto-paybezahlt nur für Mail, von der es beweisen kann, dass wir sie gesendet haben (dasPepsi-Origin-HMAC), und nur innerhalb des Budgets je Nachricht und — wennMAX_TOTAL_PER_DAYgesetzt ist — des Tagesbudgets des zahlenden Wallets. Ein Korrespondent kann jede Forderung trotzdem bis zu dem bepreisen, was diese Budgets übrig lassen; den Verlust zu begrenzen ist Aufgabe des Tageslimits, nicht des Beweises.Authentifizierung wird standardmäßig festgehalten, nicht durchgesetzt. Eingehendes SPF, DKIM und DMARC sind fail-open: Nur ein eindeutiger DMARC-Fehlschlag unter
DMARC_ENFORCEführt zur Ablehnung. Eine gefälschte Nachricht wird daher mit ehrlichemAuthentication-Resultszugestellt statt abgelehnt.
Erreicht trotzdem: Codeausführung in einer Stage, falls ein Parser-Fehler existiert (siehe Eine kompromittierte Komponente); eine Nachricht mit gefälschtem From: im Postfach des Empfängers, wenn der Operator DMARC nicht durchsetzt; ein von ihm gewählter Schlüssel, mit dem Mail an eine Adresse, für die wir keine Identität halten, verschlüsselt wird, auf den Trust-on-first-use-Stufen, sofern MIN_TRUST sie nicht ausschließt — auch indem er den geernteten Schlüssel eines Korrespondenten unter einem gefälschten From: durch einen neueren ersetzt, was auditiert und den Empfängern angekündigt, aber nicht verhindert wird, außer bei ACCEPT_ROTATION = expired. Er erfährt außerdem aus den RCPT-Antworten, welche Adressen an einer verifizierten Domain existieren — wie bei jedem MTA, der unbekannte Benutzer ablehnt —, mit zehn Rateversuchen pro Verbindung (MAX_INVALID_RECIPIENTS). Wo diese Adresse eine unserer ist — ein bedienter Benutzer, für den wir keine Identität halten und den ein gefälschtes From: erreichen kann, wann immer DMARC auf unserer eigenen Domain nicht durchgesetzt wird —, wird der untergeschobene Schlüssel ebenfalls nicht verhindert, ist aber nicht unsichtbar: pepsi-keys peer unclaimed listet jede bediente Adresse auf, über deren Verschlüsselung ein geernteter oder per Gossip erhaltener Schlüssel entscheidet, als Arbeitsliste für den Operator, sie zu bestätigen und in Identitäten umzuwandeln (Die Benutzer finden, die ihren eigenen Schlüssel mitbringen).
14.5.4. Ein lokaler Shell-Benutzer¶
Kann: jedes für alle ausführbare Programm ausführen, sich mit für alle zugänglichen Sockets verbinden und für alle lesbare Dateien lesen — einschließlich pepsi.conf, weshalb diese keine Geheimnisse enthält.
Aufgehalten durch:
Einlieferung nur als er selbst. Der lokale Submission-Socket darf Modus
0666haben, weil Ingress die Identität des Aufrufers ausSO_PEERCREDnimmt und anUSERNAME_MAPübergibt; ein Benutzer kann nur unter den Identitäten senden, die seinem Login zugeordnet sind.Kein privilegiertes Programm ist von einem gewöhnlichen Konto aus erreichbar, außer
pepsi-whitelist, das absichtlich für alle ausführbar ist und seinen eigenen Namensraum je Login durchsetzt. Die anderen setuid-/setgid-Programme haben Modus2550oder4750und sind nur fürpepsioder eine eigene Gruppe ausführbar — und2550statt2755ist die ganze Verteidigung: Ausführbarkeit für alle gäbe jedem Konto die Gruppe, die den Zugang zu einem setuid-root-Helper öffnet.Setuid-Programme bereinigen, bevor sie vertrauen.
pepsi-whitelistwechselt sofort zum aufrufenden Benutzer, löscht die Umgebungsvariablen, die die Konfiguration und libpq steuern, lehnt-cab und erhöht die Privilegien nur rund um seine Datenbankverbindung wieder. Das Parsen von Postfächern geschieht in einem separaten Prozess, der die Privilegien nie zurückerlangen kann (setresuidauf allen drei IDs).Helper werden vollständig zum Benutzer. Die Helper für Maildir,
.forwardund Wallet setzen jede UID und GID auf den Zielbenutzer und lehnen root ab, sodass die eigenen Dateien eines Benutzers mit dessen Befugnis berührt werden und mit keiner anderen.
Erreicht trotzdem: die Konfigurationstopologie (bediente Domains, den Pipeline-Graphen, Hostnamen) aus der für alle lesbaren pepsi.conf.
14.5.5. Ein reiner Mail-Benutzer¶
Kann: Mail über einen authentifizierten Kanal einliefern, Steuernachrichten an die Steueradressen senden und die Self-Service-Webseiten nutzen, die seine Installation aktiviert.
Aufgehalten durch: USERNAME_MAP (als welche Adressen er senden und für welche er einen Schlüssel registrieren darf); die Steuer-Stages, die jede Aktion an den authentifizierten Umschlag-Absender einer state.local_origin-Nachricht knüpfen; die Allowlist EDITABLE_STAGES, die begrenzt, was seine Überschreibungen berühren dürfen (siehe Adressbezogene Einstellungen sind eine Vertrauensgrenze); und, für einen Benutzer, der auch ein Unix-Konto ist, die Helper, die nur mit der Befugnis dieses Kontos handeln.
Erreicht trotzdem: Kontrolle über die Behandlung seiner eigenen Mail innerhalb dessen, was der Operator editierbar gemacht hat — einschließlich, bei einer editierbaren Stage, des Rechts, seine eigene Kopie einer Nachricht woandershin zu leiten als an das Standardziel des Operators.
14.5.6. Wer das Mail-Passwort eines Benutzers hat¶
Kann: alles, was der reine Mail-Benutzer kann, als dieser Benutzer: Mail mit gebundenem From: einliefern, Steuernachrichten senden und meist auch das Postfach per IMAP lesen, da dasselbe Passwort es öffnet.
Der Weg über die Schlüsselregistrierung, und was ihn schließt. Als ein Benutzer einzuliefern ist das, was einen Schlüssel als seinen registriert (ein eingelieferter Autocrypt:-Header oder der Befehl register), daher genügt ein gestohlenes Passwort, um den eigenen Schlüssel des Angreifers zum öffentlichen Gesicht der Adresse zu machen: Künftige Mail von Korrespondenten wird dann an ihn verschlüsselt, und damit erstellte Signaturen verifizieren als die des Benutzers. Die Benachrichtigung „ein neuer Schlüssel wurde registriert“ ist nur eine teilweise Abhilfe — dasselbe Passwort liest das Postfach, in dem sie landet, und kann sie löschen.
Ein Benutzer, der einen zweiten Faktor einrichtet (otp enroll, siehe Schlüsselverwaltung), schließt diesen Weg. Von da an benötigt jede Änderung an seinen Schlüsseln, die ein Benutzer vornehmen kann — ein Befehl zur Schlüsselregistrierung oder -stilllegung per E-Mail, Erzeugen, Registrieren oder Widerrufen in der Web-Konsole unter own:<address>, ein unprivilegiertes pepsi-keys —, einen aktuellen sechsstelligen TOTP-Code aus seiner Authenticator-App, und der Autocrypt:-Header einer gewöhnlichen Nachricht registriert überhaupt nichts. Dasselbe gilt für das Ersetzen oder Entfernen des zweiten Faktors selbst.
Aufgehalten durch (mit zweitem Faktor): den Code (RFC 6238, ein 30-Sekunden-Schritt, ±1 Schritt Abweichung); Wiederholungsschutz (ein Code wird einmal akzeptiert, für einen späteren Schritt als den zuletzt verwendeten); eine Sperre nach zehn aufeinanderfolgenden falschen Codes, die nur der Operator aufhebt (pepsi-keys otp reset, DELETE /api/v1/otp/{address}); und die Verwahrung — das Geheimnis ist unter dem KEK des Schlüsselspeichers verpackt, und die Tabelle otp_key ist allein pepsi-crypto gewährt, sodass weder pepsi-httpd noch eine gewöhnliche Stage ein Geheimnis lesen, einen Zähler zurücksetzen oder eine Einrichtung löschen kann.
Erreicht trotzdem:
Ohne zweiten Faktor alles oben Genannte. Nichts erzwingt einen; es ist die Entscheidung des Benutzers, und bis er sie trifft, ist die Benachrichtigung die einzige Abhilfe.
Die erste Einrichtung. Die Einrichtung erfordert keinen Code (es gibt noch keinen), daher besitzt ein Angreifer, der zuerst dort ist, den zweiten Faktor, und der Benutzer braucht den Operator, um ihn zurückzusetzen. Die Antwort auf die Einrichtung — die das Geheimnis enthält — landet im Postfach, und ein späterer Dieb des Passworts, der sie ungelöscht findet, hat beide Faktoren: Die Antwort fordert dazu auf, sie zu löschen.
Ein Denial of Service auf die Self-Service-Schlüsselverwaltung. Zehn falsche Codes sperren sie, was ein Angreifer immer herbeiführen kann; das Zurücksetzen durch den Operator ist die Abhilfe, und die Sperre beeinträchtigt nie die Mailzustellung oder die Verschlüsselung.
Die Veröffentlichungsschalter der Web-Konsole. Das Hochladen auf einen Schlüsselserver, das Umschalten der WKD-Veröffentlichung und die Wahl des primären MTA-Schlüssels geschehen direkt in
pepsi-httpd, das keinen Code prüfen kann, daher ändert einown:<address>-Beteiligter sie ohne einen. Keiner davon ändert, welchem Schlüssel für die Adresse vertraut wird; dieselben Vorgänge per E-Mail oderpepsi-keysbenötigen den Code sehr wohl.Das Lesen des Postfachs und das Senden von Mail als der Benutzer — das Passwort ist das Passwort.
14.5.7. Ein delegierter Administrator¶
Kann: alles, was die Geltungsbereiche seines Tokens oder Kontos erlauben — zum Beispiel queue:read ohne queue:write oder own:<address> für eine Adresse.
Aufgehalten durch: den einzelnen deklarierten Geltungsbereich jedes Endpunkts, durchgesetzt aus der Tabelle, aus der das OpenAPI-Dokument erzeugt wird; scope_escalation beim Ausstellen von Zugangsdaten; und, für own:, eine erneute Prüfung der Adresse am Endpunkt und nochmals im Applier für jede privilegierte Aufgabe.
Erreicht trotzdem: die Daten, die sein Geltungsbereich liest. queue:read sieht Umschläge und state (nie Header oder Nachrichtentexte — die Abfragen der Konsole wählen diese Spalten nicht aus), logs:read den Korrespondenzgraphen, keys:read jeden öffentlichen Schlüssel.
14.5.8. Wer eine Kopie der Datenbank hat¶
Ein Backup, ein Replikat, ein SQL-Injection-Brückenkopf auf einem Lesepfad. Ein Angreifer, der die Datenbank hat listet es vollständig auf. Kurz gesagt: erhält die eingereihte Mail im Klartext und alle Metadaten; erhält nicht irgendeinen privaten Schlüssel (verpackt unter einem KEK außerhalb der Datenbank), irgendeinen Secure-Link-Nachrichtentext (PIN und Pfeffer fehlen beide) oder irgendwelche verwendbaren Zugangsdaten (Argon2id und Digests).
Wer die Datenbank schreiben kann, als Schema-Eigentümer oder als Pipeline-Rolle, kontrolliert zusätzlich die Warteschlange und die state-Schlüssel — und damit alles, was B3 zufolge dort geglaubt wird.
14.5.9. Wer die Konfiguration oder ein Geheimnis hat¶
pepsi.conf ist Aufklärung. Jedes secrets.d-Fragment ist genau eine Fähigkeit: Der SRS-Schlüssel fälscht SRS-Adressen, der Pepsi-Origin-Schlüssel fälscht „das haben wir gesendet“ (und lenkt so Auto-Pay), der Pfeffer entfernt einen von zwei Faktoren aus dem Secure-Link-Schlüssel, der KEK öffnet die verpackten Schlüssel, sofern der Angreifer auch die Datenbank hat. Schreibender Zugriff auf pepsi.conf ist root vorbehalten, weil sie die Programme benennt, die die Pipeline ausführt. Siehe Ein Angreifer, der die Konfigurationsdatei hat.
14.5.10. Eine kompromittierte Komponente¶
Der realistische ernste Fall: Ein Parser-Fehler ermöglicht Codeausführung in einem Prozess. Die Reichweite jedes Kontos ist durch seine Betriebssystemidentität und seine Datenbankrechte begrenzt (Die Privilegientrennung).
Kompromittiert |
Erreicht |
Erreicht nicht |
|---|---|---|
Eine |
Die ganze Warteschlange: Nachrichten lesen, ändern, umleiten, löschen oder einschleusen. Jedes |
Irgendeinen privaten Ende-zu-Ende-Schlüssel oder den KEK; die Secure-Link-Chiffratspalte; die Konfigurationsüberlagerung; die Aufgabenwarteschlange von root; die Verwaltungszugangsdaten; ein anderes Unix-Konto. |
|
Alles oben Genannte, dazu jeden privaten Ende-zu-Ende-Schlüssel und den KEK: Sie kann alle eingehende Mail an serverseitig gehaltene Schlüssel entschlüsseln und als jede Identität signieren, und sie kann die Schlüssel entwenden. |
Schlüssel, deren private Hälfte der Benutzer in seinem eigenen Client behält ( |
|
Jede Nachricht beim Eintreffen, vor jeder Stage; den SRS-Schlüssel; den TLS-Schlüssel des Listeners; die Adresse jeder Mailingliste (die Empfängerprüfung). Er entscheidet B2 und kann daher eine Nachricht als beliebiger lokaler Einlieferer zulassen. |
Irgendeine bereits eingereihte Nachricht (seine Datenbankrolle darf der Warteschlange etwas hinzufügen und nichts davon lesen); Einstellungen, Whitelists, Schlüssel; irgendeinen privaten Ende-zu-Ende-Schlüssel; Schreibzugriff auf |
|
Die Umschläge und den |
Die Header oder den Nachrichtentext einer eingereihten Nachricht; die Einstellungen und Whitelists der Benutzer; root, |
|
Den Cache der Korrespondentenschlüssel und die Warteschlange der Entdeckungsanfragen; daher kann es einen Korrespondentenschlüssel auf jedem Rang platzieren. |
Die Warteschlange; unsere eigenen Identitäten (die Vorrang vor dem Cache haben). |
Ein setuid-Helper (Maildir, |
Root, wenn er kompromittiert wird, bevor er die Privilegien abgibt. Diese werden klein gehalten und parsen erst, nachdem sie zum Benutzer geworden sind. |
— |
Wichtig
Signaturen sind nur so stark wie die Pipeline-Rolle. Eine benutzerbezogene Signatur sagt „diese Installation hat diese Nachricht von alice angenommen“, und diese Aussage trifft pepsi-stage-encrypt auf Grundlage eines From:-Headers, den jede pepsi-Stage umschreiben darf, nachdem Ingress ihn geprüft hat. Die Kontentrennung schützt die Schlüssel — eine kompromittierte Stage kann keinen entwenden, daher endet der Schaden, wenn die Stage repariert ist, und kein Schlüsselwechsel ist nötig —, aber nicht deren Verwendung. Domain-DKIM-Signaturen sind in derselben Lage. Dies ist ein bekanntes verbleibendes Risiko, festgehalten in Sicherheitsmodell.
14.6. Ende-zu-Ende-Verschlüsselung: zwei Verwahrungsmodi¶
„Ende-zu-Ende“ braucht ein Ende. Pepsi unterstützt zwei, je Identität, und jede Zusicherung hängt davon ab, in welchem sich ein Schlüssel befindet.
14.6.1. Gateway-Verwahrung (custody = local, der MTA-Schlüssel)¶
Der Server erzeugt den Schlüssel, hält die private Hälfte verpackt und signiert und entschlüsselt im Namen des Benutzers. Der Benutzer liest gewöhnliche Mail in einem beliebigen Client.
Das Ende ist der Server. Der Schutz besteht zwischen Domains und im Ruhezustand:
Beim Transport zwischen Installationen: Mail ist vom sendenden Gateway (oder Client) bis zum empfangenden verschlüsselt. Ein Netzwerkangreifer und jedes Relay dazwischen sieht Chiffrat.
Im Ruhezustand gegenüber einem passiven Leser: Eine Datenbankkopie liefert verpackte Schlüssel, aber nicht den KEK; ein gestohlenes
secrets.dliefert den KEK, aber nicht die Schlüssel.Nicht gegenüber dem Operator, root oder einer kompromittierten ``pepsi-crypto``-Stage: Sie sehen Klartext und verwenden die Schlüssel.
Nicht gegenüber einer kompromittierten Pipeline bei Signaturen — siehe den Kasten oben.
Mail in der Warteschlange ist Klartext, auf beiden Seiten der Krypto-Stages; das ist es, was eine Pipeline ist. Verschlüsseln Sie die Datenbank im Ruhezustand, wenn das von Bedeutung ist.
Im Postfach abgelegte Mail ist Klartext — dem Mailspeicher wird vertraut —, es sei denn, der Empfänger hält zusätzlich einen Client-Schlüssel und
pepsi-stage-reencryptist in der Pipeline; in diesem Fall wird die abgelegte Kopie erneut an diesen Schlüssel versiegelt (siehe unten).[stage-reencrypt] ON_NO_CLIENT_KEY = bounce(für die ganze Site oder je Empfänger) lehnt Mail ab, statt sie lesbar abzulegen.
Dies ist das Modell einer S/MIME-Gateway-Appliance, und es ist mit Absicht gewählt: Es schützt Benutzer, die nie etwas installieren werden.
14.6.2. Client-Verwahrung (custody = client, der MUA-Schlüssel)¶
Der eigene Mail-Client des Benutzers hält den privaten Schlüssel; Pepsi hält nur die öffentliche Hälfte (registriert über pepsi-keys, die Konsole, den Steuerbefehl register oder den eigenen Autocrypt:-Header des Benutzers).
Das Ende ist der Client des Benutzers. Pepsi veröffentlicht den Schlüssel (er wird in WKD zum öffentlichen Gesicht der Adresse), verschlüsselt Mail von anderen lokalen Benutzern an ihn und reicht an ihn verschlüsselte Mail ungeöffnet durch — selbst wenn sich unter den Empfängern auch ein MTA-Schlüssel desselben Benutzers befindet. Was das bringt:
Gegenüber einem Datenbankdieb, einer kompromittierten Stage oder einer kompromittierten Krypto-Stage: An den Client-Schlüssel verschlüsselte Mail kann nicht gelesen werden — kein Serverprozess hat je die private Hälfte gehalten.
Nicht gegenüber einem böswilligen Operator, der immer noch (a) einen anderen Schlüssel in das einsetzen kann, was Pepsi veröffentlicht (WKD, DANE, VKS), und in den Vorrang
own, sodass künftige Mail an einen Schlüssel seiner Wahl verschlüsselt wird; (b) Mail lesen kann, die im Klartext eintraf, bevor Pepsi sie an den Benutzer verschlüsselte; und (c) Mail unterdrücken oder verzögern kann. Ein Benutzer, der Schutz vor dem Operator braucht, muss seine Korrespondenten an einen außerhalb des Kanals verifizierten Fingerabdruck verschlüsseln lassen.Signaturen, die der Benutzer in seinem Client erstellt, gehören allein ihm; Pepsi fügt über Mail, die der Client bereits signiert hat, keine eigene Signatur hinzu.
Nur für Mail, die tatsächlich an diesen Schlüssel verschlüsselt ist — beim Transport. Ein Benutzer kann beide Arten halten: Der MTA-Schlüssel wird nicht stillgelegt, wenn ein MUA-Schlüssel hinzukommt, und er öffnet weiterhin Mail von Korrespondenten, die ihn noch verwenden. Diese Mail befindet sich, solange sie eingereiht ist, in Gateway-Verwahrung, mit den Garantien der Gateway-Verwahrung.
Im Ruhezustand wird Mail, die das Gateway geöffnet hat, erneut an den Client-Schlüssel versiegelt, wenn
pepsi-stage-reencryptvor der lokalen Zustellung läuft: Die Spam-, Sprach- und Whitelist-Stages lesen den Klartext, und abgelegt wird Chiffrat, das nur der Client öffnet. Das schützt die abgelegte Kopie gegenüber jedem, der später den Mailspeicher, die Datenbank oder den Server erlangt; es macht den Durchgang des Klartexts durch die Warteschlange nicht ungeschehen, den eine kompromittierte Stage oder der Operator zu dem Zeitpunkt hätte lesen oder umleiten können. Mail, die im Klartext eintraf, wird so abgelegt, wie sie eintraf — sie zu versiegeln, würde eine Vertraulichkeit behaupten, die sie nie hatte. Es wird keine Signatur hinzugefügt: Die Stage hält keinen privaten Schlüssel, und das Urteil über die Absendersignatur ist dasjenige, daspepsi-stage-decryptfestgehalten hat.
14.6.3. Die Wahl zwischen beiden¶
Angreifer |
Gateway-Verwahrung |
Client-Verwahrung |
|---|---|---|
Passiver Netzwerkbeobachter |
Geschützt |
Geschützt |
Dieb der Datenbank oder eines Backups |
Geschützt (Schlüssel verpackt) |
Geschützt (kein privater Schlüssel) |
Kompromittierte gewöhnliche Stage |
Liest eingereihten Klartext; kann Signaturen erlangen; kann den Schlüssel nicht entwenden |
Liest Mail nur, wenn sie im Klartext eintraf; kann nicht als der Benutzer signieren |
Kompromittierte |
Schlüssel entwendet; alle Mail lesbar |
Geschützt für an den Client-Schlüssel verschlüsselte Mail |
Böswilliger Operator |
Nicht geschützt |
Nicht geschützt für künftige Mail (Schlüsseltausch); geschützt für Mail, die bereits an einen verifizierten Fingerabdruck verschlüsselt ist |
Dieb des Mailspeichers nach der Zustellung |
Nicht geschützt (im Klartext abgelegt) |
Geschützt: an den Client-Schlüssel verschlüsselte Mail und — mit |
14.6.4. Schlüssel von Korrespondenten¶
Die Verschlüsselung an einen Korrespondenten ist nur so gut wie die Herkunft des Schlüssels. Die Vertrauensleiter (Schlüsselverwaltung) stuft jede Quelle ein, und [pepsi-keydiscovery] MIN_TRUST legt die Untergrenze fest. Die Standard-Untergrenze ist die unterste Sprosse, daher wird an Trust-on-First-Use-Schlüssel verschlüsselt — was einen passiven Lauscher besiegt und einen Angreifer nicht besiegt, der die Schlüsselquelle des Korrespondenten kontrolliert oder einen geernteten Schlüssel einschleusen kann, bevor der echte gesehen wird. Das ist ein bewusster Kompromiss: Die Alternative zu einem TOFU-Schlüssel ist Klartext, nicht ein besserer Schlüssel. Eine Installation, die Klartext (oder das Secure-Link-Portal) einem nicht authentifizierten Schlüssel vorzieht, hebt die Untergrenze an; siehe Der Netzwerkangreifer.
Derselbe Kompromiss bestimmt, wie ein Schlüssel wechselt. Innerhalb der Trust-on-first-use-Sprossen gewinnt der neueste Schlüssel (die Aktualisierung des Peer-Zustands nach Autocrypt Level 1), und „neuester“ wird anhand einer Nachricht beurteilt, deren From: der Absender geschrieben hat — ein entfernter Absender, der die Adresse eines Korrespondenten fälschen kann, kann daher künftige Mail an diesen Korrespondenten an einen Schlüssel seiner Wahl gehen lassen. Was Pepsi garantiert, ist, dass dies nie still geschieht: Jede solche Ersetzung ist eine Audit-Log-Zeile, geschrieben von der Anweisung, die sie vornimmt, und die lokalen Empfänger der Nachricht, die sie verursacht hat, erhalten per Mail beide Fingerabdrücke (Eine Rotation ist niemals still). Ein Operator, der es vorzieht, echte Rotationen abzulehnen, statt gefälschte anzunehmen, setzt ACCEPT_ROTATION = expired, unter dem ein gültiger gespeicherter Schlüssel nie durch eine Nachricht ersetzt wird; der Korrespondent kann unsere Mail dann nicht lesen, bis ein Operator seinen neuen Schlüssel von Hand annimmt oder der gespeicherte Schlüssel das Ablaufdatum erreicht, das er selbst angibt. Dieses Datum wird beim Lernen aus dem eigenen Material des gespeicherten Schlüssels gelesen (einer OpenPGP-Selbstsignatur, einem X.509-notAfter), und bei einem erneuten Sichten desselben OpenPGP-Schlüssels bewegt es sich immer nur nach hinten — das Wiedereinspielen einer älteren Kopie des Zertifikats, deren frühere Selbstsignatur einen kürzeren, verstrichenen Ablauf hatte, kann einen gültigen Schlüssel daher nicht tot aussehen lassen.
Ein gegossipter Schlüssel, den der Eigentümer später selbst bekannt gibt, wird auf die Sprosse des Eigentümers befördert, statt ersetzt zu werden (Ein gegossipter Schlüssel, den sein Eigentümer bestätigt, wird befördert). Das gewährt einem entfernten Absender nichts, was ein gefälschtes From: nicht bereits gewährte: Ein gefälschter Autocrypt:-Header mit dem eigenen Schlüssel des Angreifers verdrängt eine gegossipte Zeile ohnehin aufgrund des Rangs, daher kann das Wiederholen des gegossipten Schlüssels nur bestätigen, was gespeichert war. Die Beförderung ändert den Rang, mit dem die Zeile sich verteidigt, nie das Urteil, das eine gegen sie geprüfte Signatur erreichen kann.
14.7. Was ein Sicherheitsindikator bedeutet¶
Ein Leser, eine Filterregel und spätere Stages handeln alle nach dem, was Pepsi über eine Nachricht sagt. Die Bedeutung jedes Indikators ist exakt:
[decrypted],state.encryptedDie Nachricht traf verschlüsselt an einen Schlüssel ein, den diese Installation hielt, und wurde hier geöffnet. Sie sagt nichts darüber aus, wer sie gesendet hat.
[verified],state.signature_verified, UrteilvalidEine Signatur, die den Klartext abdeckt, wurde verifiziert, und der Schlüssel ist verankert: unsere eigene Identität, ein manuell festgelegter Schlüssel, ein per DNSSEC validierter DANE-Schlüssel, ein WKD-Schlüssel oder eine S/MIME-Kette zu einem vom Operator installierten Vertrauensanker — eine Kette, die zudem innerhalb jeder
nameConstraints-Grenze und jeder Zertifikatsrichtlinien-Anforderung bleibt, die die CAs auf ihr setzen, die des Ankers eingeschlossen, sodass das Verankern einer Partner-CA für den Namensraum des Partners bürgt und für nichts weiter. Nichts Schwächeres — ein geernteter, gegossipter, angehängter oder VKS-Schlüssel, eine DANE-Antwort ohne das AD-Bit, eine CA, die niemand gewählt hat — kann es erzeugen; diese ergebenvalid-untrusted. Eine Signatur, die nur Chiffrat abdeckt, erzeugt es ebenfalls nie, denn jeder, der ein Chiffrat hat, kann seine eigene Signatur darum legen.Authentication-ResultsWas Ingress über SPF, DKIM, DMARC und ARC gefolgert hat, wie festgehalten; es ist kein Filter. Eingehende Authentifizierung ist fail-open.
X-Pepsi-CryptoDie Zusammenfassung der Decrypt-Stage. Glaubwürdig nur, weil jeder eingehende
X-Pepsi-*-Header zuerst entfernt wird; ein Client darf ihm bei Mail, die nicht durch eine Pepsi-Decrypt-Stage gelaufen ist, nicht glauben.
Jeder dieser Indikatoren wird von Pipeline-Code in die Warteschlange geschrieben (Grenze B3). Gegenüber einem entfernten Absender bedeuten sie, was sie sagen; gegenüber einer kompromittierten pepsi-Stage, die jeden von ihnen schreiben kann, bedeuten sie nichts.
14.8. Adressbezogene Einstellungen sind eine Vertrauensgrenze¶
Die Konfiguration ist geschichtet (Konfiguration): die INI-Datei, dann die Datenbanküberlagerung des Operators (global, domain:, address:), dann pepsi.settings — die eine Schicht, die ein Kontoinhaber schreiben kann, per E-Mail über pepsi-stage-edit-settings. Die Schichten darunter gehören dem Operator; diese gehört dem Benutzer und wird als nicht vertrauenswürdige Eingabe behandelt:
Nur Stages, die der Operator in
EDITABLE_STAGESaufführt, können geändert werden. Eine Bearbeitung jedes anderen Abschnitts wird abgelehnt, und nichts wird gespeichert.Nur die eigene Kopie des Benutzers ist betroffen. Eine Überschreibung ist an den Umschlagabsender lokal eingelieferter Mail und an den Umschlagempfänger aller anderen Mail geknüpft, und eine Nachricht, deren Empfänger-Überschreibungen voneinander abweichen, wird zuerst aufgeteilt, sodass die Einstellungen eines Benutzers nie auf die Kopie eines anderen Benutzers wirken.
Identitätsoptionen sind gesperrt (
SIGNING_DOMAIN): Als welche Domain eine Nachricht signiert wird, entscheidet der Operator.Programme können nicht ersetzt werden. Welches Programm eine Stage ausführt, ihr Standard-Nachfolger
NEXT_STAGEundBOUNCE_STAGEwerden aus der Datei des Operators genommen; eine Überschreibung davon hat keine Wirkung (undPROGRAMist durch die Edit-Stage zusätzlich auf einenpepsi-stage-*-Befehl beschränkt).Jede Bearbeitung wird validiert, vom eigenen Parser der zuständigen Stage, gegen die effektive Konfiguration, die sie ergeben würde, bevor sie gespeichert wird.
Geheimnisse werden nie zurückgegeben. Die Antwort zitiert die effektiven Optionen, wobei jeder Wert, der Zugangsdaten enthält, maskiert ist, mit demselben Prädikat wie die API.
Was eine editierbare Stage dem Benutzer tatsächlich in die Hand gibt, ist jede Option, die diese Stage aus ihrem eigenen Abschnitt liest — einschließlich ihrer Verzweigungsziele (TRUE_STAGE, QUARANTINE_STAGE, RESPONSE_STAGE, SECURE_LINK_STAGE und dergleichen). Ein Benutzer kann seine eigene Mail also über einen anderen Zweig leiten als den Standard des Operators. Das ist die beabsichtigte Macht; die Folge ist eine Regel für den Operator:
Warnung
Führen Sie in EDITABLE_STAGES nie eine Stage auf, deren Wirkung verpflichtend sein soll. Insbesondere:
pepsi-stage-encrypt—ENCRYPT,SIGNundSECURE_LINK_STAGEentscheiden, ob eine Nachricht im Klartext hinausgeht. Führen Sie sie nur auf, wenn Benutzer das für ihre eigene Mail wählen dürfen.pepsi-stage-dkim-sign,pepsi-stage-arc,pepsi-stage-srs— diese schützen die Reputation der Domain, nicht die des Benutzers.pepsi-stage-decryptauf einem gemeinsamen Pfad — ihreQUARANTINE_STAGEundON_BAD_SIGNATUREleiten eingehende Mail.Die Anti-Spam- und Whitelist-Stages, wenn die Richtlinie der Site ist, dass Filterung nicht optional ist.
Jede Zustell- oder Relay-Stage — ihre Zugangsdaten sind maskiert, ihre Ziele aber nicht.
UNRESTRICTED_UNSAFE_STAGES = yes hebt die Beschränkungen für PROGRAM und Identitäten vollständig auf; es macht jede editierbare Stage zu einer, die der Benutzer vollständig kontrolliert.
14.9. Der Netzwerkangreifer¶
Die Standardwerte besiegen einen passiven Lauscher, keinen aktiven. Jeder Hop verwendet TLS, wenn die Gegenseite es anbietet, und jeder Schlüssel, den die Leiter findet, wird zur Verschlüsselung verwendet, aber ein Angreifer auf dem Weg kann STARTTLS entfernen, ein Zertifikat austauschen oder (mit dem Resolver) einen Schlüssel austauschen, überall dort, wo die Gegenseite keine Richtlinie veröffentlicht hat, die das verbietet. Das ist die Haltung jedes opportunistischen MTA, und sie ist es, die Mail an die Mehrheit der Domains fließen lässt, die nichts veröffentlichen.
Ein gehärtetes Profil macht eine Installation widerstandsfähig gegen einen aktiven Angreifer, überall dort, wo die Gegenseite etwas veröffentlicht hat, gegen das geprüft werden kann:
Einstellung |
Was sie schließt |
|---|---|
Ein validierender Resolver auf einem vertrauenswürdigen Pfad ( |
Jede DNSSEC-basierte Prüfung unten hängt davon ab, dass das AD-Bit ehrlich ist; ohne einen findet DANE nichts, und nichts wird mit Warnung herabgestuft. |
|
Eine Gegenseite mit DNSSEC-signierten |
|
Eine Gegenseite mit einer |
|
Verschlüsselung nur an Schlüssel, deren Veröffentlichung jemand nachgewiesen hat, der das Postfach oder die Domain kontrolliert; unterhalb der Untergrenze geht die Nachricht im Klartext oder an das Secure-Link-Portal, wie |
|
Mail, die das |
Veröffentlichen Sie Ihre eigenen |
Derselbe Schutz für Mail, die an Sie gesendet wird, durch Absender, die prüfen. |
Selbst gehärtet kann ein aktiver Angreifer immer einen Denial of Service verursachen; das Profil wandelt Abfangen in Aufschub um.
14.10. Verfügbarkeit¶
Das Verfügbarkeitsziel von Pepsi ist enger als sein Vertraulichkeitsziel und als Regel formuliert: Bei feindseliger Eingabe wird eine Nachricht aufgeschoben statt verloren, und ein Fehler schließt, statt offenzulegen. Eine Stage, die nicht entscheiden kann, parkt die eine Nachricht oder lässt sie fehlschlagen; sie hält ihre Nachbarn nicht an, und sie sendet nie im Klartext, weil eine Prüfung nicht vorgenommen werden konnte. Volumetrisches Fluten des Netzwerks oder des Hosts liegt außerhalb des Rahmens — das gehört vor den MTA.
Innerhalb dieses Rahmens ist jede Ressource, die ein Angreifer Pepsi aufwenden lassen kann, wie folgt begrenzt. Offen kennzeichnet eine Lücke: Sie ist in docs/ROADMAP.md mit der gewählten Lösung festgehalten, und bis sie geschlossen ist, ist die Komponente nur so robust wie die Grenzen um sie herum.
14.10.1. SMTP-Ingress¶
Ressource |
Grenze |
Status |
|---|---|---|
Verbindungen |
|
Begrenzt |
Nachrichten |
|
Begrenzt |
Empfängerprüfungen |
|
Begrenzt |
Nachrichtengröße und -form |
|
Begrenzt |
Zeit |
|
Begrenzt |
Passwort-Raten |
Drei fehlgeschlagene |
Begrenzt |
Authentifizierungsaufwand |
Das Limit von zehn Abfragen bei SPF, höchstens 50 ARC-Sätze, |
Begrenzt |
14.10.2. Die Warteschlange und die Pipeline¶
Ressource |
Grenze |
Status |
|---|---|---|
Warteschlangentiefe und Festplatte |
|
Begrenzt |
Speicherverstärkung |
Der Nachrichtentext einer Nachricht wird einmal in |
Begrenzt |
Fairness |
|
Begrenzt |
Ein hängender oder abstürzender Worker |
|
Begrenzt |
Wiederholungen |
|
Begrenzt |
Parsen |
MIME-Tiefe 16–32 und Anzahl der Teile; dekomprimierter OpenPGP-Klartext beim Streamen auf 64 MiB gedeckelt; drei Klartext-Signaturschichten über dem Chiffrat; X.509-Ketten von acht, mit höchstens 64 Richtlinien oder Richtlinienzuordnungen je Zertifikat im Richtlinienbaum und 220 Vergleichen von Namen gegen Teilbäume je Zertifikat bei der Prüfung der Namensbeschränkungen; geerntetes und gegossiptes Schlüsselmaterial in Anzahl und Größe gedeckelt; ein OpenPGP-Zertifikat von irgendjemand anderem mit einem RSA-Schlüssel über 8192 Bit abgelehnt (S/MIME endet bei 4096); die Spracherkennung liest höchstens 20 000 Zeichen. |
Begrenzt |
14.10.3. Schleifen und Verstärkung¶
Mail-Schleifen enden bei
MAX_HOP_COUNT(30) an den Relay-Stages, am Kettenschutz für.forward, bei Alias-Tiefe 32 und bei fünf Listen-Hops. Für einen Bounce wird nie ein Bounce erzeugt.Automatische Antworten — Abwesenheitsnotizen, Sekretariats-Challenges und die Zahlungsaufforderung der Anti-Spam-Stage — befolgen alle die Unterdrückungsregeln aus RFC 3834 in
pepsi-common::autoreply, sodass keine davon auf eine Liste, einen Massenversand, einen anderen Responder oder einen Zustellbericht antwortet. Abwesenheitsnotizen sind außerdem auf eine je Korrespondent jeSUPPRESS_DAYSbegrenzt, Sekretariats-Challenges auf fünf je Absender und Tag und Zahlungsaufforderungen auf eine je Absender und geschütztem Postfach jeBLOCK_RESPONSE_SUPPRESS(standardmäßig eine Stunde), entschieden und festgehalten in einer Anweisung, sodass parallele Worker nicht beide senden können.Mailinglisten vervielfachen einen Beitrag um ihre Mitgliederzahl, daher werden die Beiträge eines Absenders an eine Liste, die
SENDER_POSTS_PER_HOUR(30) in einer Stunde überschreiten, für den Moderator zurückgehalten statt verteilt, und eine Liste hält höchstensMAX_HELD_MESSAGES(1000) Beiträge zur Moderation zurück — darüber hinaus wird ein Beitrag, der zurückgehalten würde, verworfen, der neue statt des ältesten, sodass eine Flut nicht hinausspülen kann, was ein Moderator noch nicht gesehen hat. Listen-Hops sind wie oben gedeckelt.Mail, die die Webformulare senden (Listenanmeldung, Passwort-Zurücksetzung), ist je Zieladresse auf zwei pro Stunde begrenzt, und je Client, sodass die Formulare nicht benutzt werden können, um das Postfach eines Dritten zu fluten.
Die Schlüsselentdeckung beantwortet jede Adresse einmal, wie viele Nachrichten auch fragen (Anfragen werden dedupliziert), merkt sich Fehlschläge (
NEGATIVE_TTL,ERROR_TTL), deckelt eine Antwort auf 256 KiB und eine Weiterleitung auf denselben Host und setzt der gesamten Antwort eine Frist — ein Server, der Bytes tröpfeln lässt, kann eine Entdeckungsmethode, die ihrerseits jede andere Abfrage bedient, nicht blockieren. Eine Nachricht wartet höchstensTIMEOUTauf einen Schlüssel, bevor sie ohne einen fortfährt.
14.10.4. Die Web-Schicht¶
Ressource |
Grenze |
Status |
|---|---|---|
Verbindungen und langsame Clients |
|
Begrenzt |
Argon2id (PINs und Passwörter) |
Eine Ableitung je CPU gleichzeitig, außerhalb des Executors; eine Anfrage, die nicht binnen Sekunden einen Platz bekommt, wird mit |
Begrenzt |
Anfragerümpfe |
8 KiB für Formulare, 1 MiB für die Verwaltungs-API, 8 MiB für die Listen-API. |
Begrenzt |
Gespeicherte Daten |
Secure-Link-Nachrichten verfallen ( |
Begrenzt |
14.10.5. Geld und Postfächer¶
Auto-Pay gibt höchstens
MAX_TOTALje von uns gesendeter Nachricht aus und, wennMAX_TOTAL_PER_DAYgesetzt ist, höchstens so viel je Wallet in beliebigen 24 Stunden, beides atomar in einer Anweisung gebucht (je Wallet serialisiert), sodass nebenläufige Forderungen — für eine Nachricht oder für viele — keines von beiden überziehen können, und eine Zahlung, die nicht abgewickelt werden kann, wird beiden wieder gutgeschrieben. Ohne das Tageslimit kann jemand, der viele unserer Nachrichten erhalten hat, für jedeMAX_TOTALfordern, daher sollte es überall gesetzt sein, wo Auto-Pay es ist. Es gilt bewusst nicht je Korrespondent: Mailinglisten und Aliase machen die fordernde Partei unerkennbar, während das Wallet immer bekannt ist. UnterWALLET_SCOPE = unifiedgehört das eine Wallet allen, sodass ein Korrespondent den Tag für alle Absender aufbrauchen kann — eine Verweigerung automatischer Zahlung (die Forderungen erzeugen dann wie üblich einen Bounce), kein Verlust über das Limit hinaus.Postfachkontingente lehnen nur auf Grundlage einer Messung ab, nie einer Schätzung, und die drei Regeln, die verhindern, dass ein volles Postfach geschlossen bleibt, nachdem sein Eigentümer es geleert hat (ein Höchstalter für die Messung, nach der Ingress handelt, ein erneutes Messen vor dem Ablehnen und der Timer
pepsi-quota reconcile), stehen in pepsi-quota.
14.11. Was Pepsi nicht schützt¶
Irgendetwas gegenüber root oder einem böswilligen Operator. Siehe Beteiligte und wie weit jedem vertraut wird.
Verkehrsanalyse. Wer mit wem korrespondiert, wann und wie viel, ist für jeden sichtbar, der das Netzwerk, die Warteschlange oder die Logs sehen kann. Ende-zu-Ende-Verschlüsselung verschlüsselt keine Umschläge, und der Header-Schutz deckt nur ab, was der Container zulässt.
Klartext in der Warteschlange. Jede Stage muss die Nachricht lesen, die sie verarbeitet.
Signaturen gegenüber einer kompromittierten Pipeline, wie oben.
Die eigene Kompromittierung von Korrespondenten. Ein Schlüssel, den eine kompromittierte Domain veröffentlicht, ist ein kompromittierter Schlüssel, auf welchem Rang auch immer die Leiter diese Domain einstuft.
Postfächer der Empfänger nach der Zustellung, bis auf eine Sache: Für einen Benutzer mit einem Client-Schlüssel wird Mail, die das Gateway entschlüsselt hat, erneut an ihn versiegelt abgelegt (Client-Verwahrung (custody = client, der MUA-Schlüssel)).
Privatsphäre der Abfragen gegenüber der Domain des Korrespondenten. Das Entdecken eines Schlüssels teilt dem DNS und dem WKD-Host dieser Domain mit, dass jemand hier im Begriff ist, an die Adresse zu schreiben; ein VKS-Server erfährt dasselbe.
ALLOW_DOMAINS/DENY_DOMAINSundDISCOVERY = nobegrenzen das (Schlüsselverwaltung). TLS-Berichte und Opt-in-Telemetrie legen nur aggregierte Zähler offen; Telemetrie ist aus, bis der Operator sie einschaltet — an einem Terminal oder in der Konsole, die sie erst anbieten kann, sobald der Operatorpepsi-telemetry-clientgestartet und[pepsi]von Hand eineSYSTEM_IDgegeben hat.
14.12. Die Garantien auf einen Blick¶
„Ja“ bedeutet, dass der Angreifer dieses Schutzgut kompromittieren kann; „Nein“ bedeutet, dass ein Mechanismus es verhindert; „Teilweise“ wird in dem Abschnitt erläutert, der in der ersten Spalte genannt ist.
Angreifer |
Eingereihte Mail |
Private E2E-Schlüssel |
Signieren als Benutzer / als die Domain |
Einstellungen und Mail anderer Benutzer |
Geld |
Zugangsdaten |
Abgelegte Mail (Benutzer mit MUA-Schlüssel) |
|---|---|---|---|---|---|---|---|
Passives Netzwerk |
Nein |
Nein |
Nein |
Nein |
Nein |
Nein |
Nein |
Aktives Netzwerk (Standardwerte) |
Teilweise (Herabstufung) |
Nein |
Nein |
Nein |
Nein |
Nein |
Nein |
Entfernter Absender |
Nein |
Nein |
Nein |
Nein |
Teilweise (Budget) |
Nein |
Nein |
Lokaler Shell-Benutzer |
Nein |
Nein |
Nein |
Nein |
Nein |
Nein |
Nein |
Reiner Mail-Benutzer |
Nein |
Nein |
Nein |
Nein |
Nur eigenes Wallet |
Nein |
Nein |
Gestohlenes Mail-Passwort |
Nein |
Nein |
Teilweise (kein zweiter Faktor) |
Nein |
Nur eigenes Wallet |
Nein |
Teilweise (kein zweiter Faktor) |
Delegierter Administrator |
Teilweise (Geltungsbereich) |
Nein |
Nein |
Teilweise (Geltungsbereich) |
Nein |
Nein |
Nein |
Datenbankkopie |
Ja |
Nein |
Nein |
Nur Lesen |
Nein |
Nein |
Nein |
Ein Geheimnis-Fragment |
Nein |
Nein (KEK allein) |
Teilweise (je Geheimnis) |
Nein |
Teilweise (Origin-Schlüssel) |
Nein |
Nein |
Kompromittierte |
Ja |
Nein |
Ja |
Ja |
Teilweise (Budget) |
Nein |
Teilweise (künftige Mail) |
Kompromittierte Krypto-Stage |
Ja |
Ja (Gateway-Verwahrung) |
Ja |
Ja |
Teilweise (Budget) |
Nein |
Teilweise (künftige Mail) |
Kompromittiertes |
Teilweise (Umschläge, Leitweg; kein Inhalt) |
Nein |
Nein |
Teilweise (Leitweg; keine Einstellungen) |
Nein |
Seine eigenen Tabellen |
Nein |
Operator / root |
Ja |
Ja (Gateway-Verwahrung) |
Ja |
Ja |
Ja |
Ja |
Teilweise (künftige Mail) |
„Teilweise (kein zweiter Faktor)“ bei einem gestohlenen Mail-Passwort: Ohne zweiten Faktor kann der Dieb seinen eigenen Schlüssel als den des Benutzers registrieren, was Signaturen als die des Benutzers verifizieren lässt und künftige Mail — abgelegte Mail eingeschlossen — an einen Schlüssel versiegeln lässt, den er hält; ist einer eingerichtet, benötigt jede Schlüsseländerung einen Code (Wer das Mail-Passwort eines Benutzers hat).
Abgelegte Mail ist eine Nachricht, die das Gateway entschlüsselt und vor der Zustellung erneut an den eigenen Client-Schlüssel des Empfängers versiegelt hat (pepsi-stage-reencrypt, siehe Client-Verwahrung (custody = client, der MUA-Schlüssel)). „Teilweise (künftige Mail)“: Ein Angreifer, der die Pipeline, eine Krypto-Stage oder den Host kontrolliert, kann Mail lesen — oder ihr erneutes Versiegeln stoppen —, die durchläuft, solange er die Kontrolle hat, und kann nie eine bereits abgelegte Kopie öffnen, da kein Serverprozess den Client-Schlüssel hält. Für einen Benutzer ohne MUA-Schlüssel trifft die Spalte nicht zu: Seine Mail wird im Klartext abgelegt oder unter ON_NO_CLIENT_KEY = bounce abgelehnt.
Die Matrix deckt ab, was hier gehalten wird. Der Schlüssel, mit dem künftige Mail an einen Korrespondenten verschlüsselt wird, ist durch Schlüssel von Korrespondenten abgedeckt: Ein entfernter Absender, der das From: dieses Korrespondenten fälschen kann, kann einen Trust-on-First-Use-Schlüssel ersetzen (Teilweise — immer auditiert und den Empfängern angekündigt; abgelehnt, solange der gespeicherte Schlüssel gültig ist — nicht widerrufen und nicht über das Ablaufdatum hinaus, das er selbst angibt — unter ACCEPT_ROTATION = expired), und kann nie einen festgelegten, veröffentlichten oder vom Operator eingetragenen ersetzen.
14.13. Siehe auch¶
Sicherheitsmodell — die Mechanismen hinter jedem „Nein“ oben. Schlüsselverwaltung — Verwahrung, die Vertrauensleiter, Entdeckung. Das Secure-Link-Ausweichportal — der Rückfall ohne Schlüssel und sein PIN-Modell. Die administrative API — Geltungsbereiche und der Applier. Konfiguration — die Schichtung, auf der die Einstellungsgrenze aufsitzt.