Folge 23: von Akash Mukherjee in Mountain View, CA (Juli 2021)
Vorherige Folgen
Wenn wir Chrome entwickeln, tragen viele Komponenten zur Umgebung bei, die die Ausgabe eines Artefakts beeinflusst. Vom Betriebssystem aus wurden unterstützende Bibliotheken, Abhängigkeiten von Drittanbietern installiert installierte Tools und die Laufzeitumgebung selbst, Jede davon ist mit unterschiedlichen Sicherheitsniveaus ausgestattet.
Bisher verwendet Google die Binärautorisierung, Interne Prüfung der Laufzeiterzwingung, mit der Insiderrisiken minimiert werden indem sichergestellt wird, dass die Produktionssoftware und -konfiguration bei Google bereitgestellt wird. ordnungsgemäß überprüft wurde und ihre Herkunft nachvollziehbar ist.
Sie sorgen dafür, dass der Build nicht von einer einzelnen Person manipuliert werden kann. und die Lieferkette für Artefakte, die auf LUCI basieren, Google verringert das Risiko für Software, die wir an Nutzer versenden.
Seit letztem Jahr erstellt das System für jeden Build einen überprüfbaren Build. Manifest: ein signiertes JWT die in den Build eingeflossen sind, kryptografische Hashes erstellter Binärdateien und Artefakte sowie vollständige Build-Parameter. Mit diesem Build-Manifest können wir ein Artefakt zu den Quellen zurückverfolgen, und der Build-Prozess und seine Ausgaben überprüfbar.
Außerdem können wir anhand des Manifests prüfen, ob das erstellte Artefakt geändert wurde da Änderungen die Signatur ungültig machen würden. Insgesamt Das bietet uns eine Chain of Custody für Artefakte, die zwischen vertrauenswürdigen Systemen wechseln.
Die Binärautorisierung wird als System in zwei Schritten implementiert. Das System generiert eine provenance mit Build-Zeit-Informationen; wird die Richtlinie vor dem Signieren oder Installieren von Software erzwungen.
def CreateProvenance(self, build_manifest: Mapping[str, Any]):
"""Builder generates and signs provenance given build manifest. Signed JWT is placed
alongside built artifact."""
Bevor Sie die produzierten Softwareartefakte mit der Signaturinfrastruktur von Google signieren, Die Richtlinie wird erzwungen, um bestimmte Mindestsicherheitsanforderungen des Builds zu erfüllen.
def VerifyProvenance(self, artifact_hash: str, provenance: str):
"""Provenance is verified using a policy engine service before signing an artifact."""
Die Anforderungen lassen sich in etwa vier Bereiche unterteilen:
- Versionsverwaltung:Schützt die Daten, die in den Build aufgenommen wurden.
- Build: Schützt den Prozess, der die Quelle in eine Binärdatei konvertiert.
- Herkunft: Attestierung, die ein überprüfbares Build-Manifest enthält.
- Richtlinie:Regeln, die bestimmen, ob ein bestimmtes Artefakt in einem bestimmten Kontext qualifiziert ist.
Überprüfung der Richtlinienerzwingung im Rahmen der CI- und CD-Prozesse für Chrome und die Infrastruktur implementieren konnten wir überprüfen, ob der Code und die Konfiguration bestimmte Mindestsicherheitsstandards erfüllen. Das ist eine wichtige Kontrollmöglichkeit, eines potenziell böswilligen Insiders oder eines gehackten Insiderkontos die Software zu modifizieren, die wir den Nutzern zur Verfügung stellen.