Die Anwendung baut nach dem Patch zwar wieder, aber niemand kann später belegen, welcher Commit, welche Abhängigkeit und welcher Test das Ergebnis getragen hat.

Die schnellste Lösung: Bauen Sie nicht die komplette OpenAI Defense Factory nach, sondern starten Sie mit einer einzigen häufigen Patch-Validierungsstrecke in einer temporären isolierten Umgebung. Allgemeine Aufgaben laufen in einem elastischen Ausführungspool; nur Xcode-, macOS- und andere Apple-Toolchain-Aufgaben werden an einen getrennten Cloud-Mac-Pool weitergereicht.

Für wen diese Anleitung gedacht ist

Diese Anleitung ist für Plattformingenieure gedacht, die aus Codex-Security-Funden eine dynamisch reproduzierbare Prüfung machen müssen.
Sie hilft Sicherheitsteams, Agent-Zugangsdaten, Netzwerkausgänge und Schreibrechte voneinander zu trennen.
DevSecOps- und Technikverantwortliche erhalten außerdem eine Entscheidungsgrundlage für iOS-, macOS- und plattformübergreifende Tests mit elastischen Mac-Ressourcen.

Die offizielle Referenzarchitektur von OpenAI Defense Factory beschreibt einen kontinuierlichen Verteidigungsprozess und empfiehlt, mit einem einzelnen Arbeitsablauf zu beginnen. Sie ist jedoch keine allgemein verbindliche Implementierungsvorschrift. Auch Produktstatus, Skills und Integrationen müssen vor dem Aufbau anhand der aktuellen Codex-Security-Dokumentation geprüft werden.

Zuletzt aktualisiert am 04.09.2026; Angaben zu Architektur, Produktstatus und Apple-Werkzeugen wurden gegen die in diesem Beitrag verlinkten offiziellen Quellen geprüft.

Der Pilot beginnt mit einem begrenzten Zustandsmodell

Der erste Fehler in solchen Projekten ist nicht ein fehlender Agent, sondern ein zu großer Startumfang. Wenn ein Team gleichzeitig mehrere Repositorys, verschiedene Programmiersprachen, alle Ticketwege und die vollständige Produktionsfreigabe automatisieren will, lässt sich ein fehlerhafter Testlauf kaum noch von einem fehlerhaften Prozess unterscheiden.

Wir wählen deshalb ein einzelnes Repository, eine Klasse von Sicherheitsbefunden und eine reversible Patch-Art. Der Pilot soll die Strecke vom Fund bis zur unabhängigen Nachprüfung beweisen, nicht die gesamte Sicherheitsorganisation ersetzen.

Für jeden Vorgang verwenden wir fünf klar getrennte Zustände:

  1. Kandidat: Eine Analyse weist auf eine mögliche Schwachstelle hin, aber die Ausführung hat sie noch nicht bestätigt.
  2. Reproduziert: Die festgelegten Bedingungen erzeugen das beobachtete Verhalten erneut.
  3. Patch zur Prüfung: Eine Änderung liegt vor, ist aber noch nicht unabhängig bewertet.
  4. Reparatur bestätigt: Eine neue Ausführungsumgebung zeigt, dass das Sicherheitsverhalten korrigiert wurde.
  5. Freigabeentscheidung: Ein dafür berechtigter Mensch entscheidet über Zusammenführung, Bereitstellung oder Rückstellung.

Diese Trennung beantwortet eine wichtige Grenze: Codex Security liefert eine Entdeckung beziehungsweise einen Prüfimpuls; das Geschäftssystem verwaltet Vorgänge; die Ausführungsumgebung erzeugt die technische Evidenz. Ein Scan-Ergebnis darf daher nicht automatisch als bestätigte Schwachstelle in das Ticket oder als freigegebener Patch weitergereicht werden.

Zu jedem Zustand speichern wir mindestens fünf Nachweisgruppen: den exakten Code-Stand, die Abhängigkeitsauflösung, die Umgebungs- und Dienstkonfiguration, die Testausgabe sowie die menschliche Freigabe oder Zurückstellung. Die Zahl ist hier kein Produktlimit, sondern unser Mindestdatensatz für eine spätere Rekonstruktion.

Stoppbedingung: Der Pilot hält an, wenn Code-Stand oder Abhängigkeiten nicht eindeutig feststehen.
Rückfall: Der Vorgang bleibt „Kandidat“ oder „unsicher“; das Team fordert fehlende Belege an, statt die Abschlussquote künstlich zu erhöhen.

Codex Security nach einem Fund mit reproduzierbaren Belegen verbinden

Ein brauchbarer Nachweis enthält nicht nur eine Codezeile. Wir dokumentieren die Eingangsbedingung, den betroffenen Versionsstand, die relevante Konfiguration, den ausgeführten Test und die beobachtete Ausgabe. Dazu kommt die Frage, ob das Verhalten in einer unveränderten Baseline und nach dem Patch jeweils beobachtet wurde.

Statische Ablaufverfolgung allein ersetzt keine dynamische Bestätigung. Wenn ein Dienst wegen einer fehlenden Variablen, einer falschen Datenbankversion oder eines defekten Teststarts nicht läuft, lautet das Ergebnis „nicht ausführbar“ oder „unsicher“ – nicht automatisch „behoben“ und auch nicht „Sicherheitslücke bestätigt“.

In der ersten Aufbauphase werden Steuerung und Ausführung getrennt

Wir teilen die Plattform in zwei Ebenen.

Die Steuerungsebene übernimmt Planung, Richtlinien, temporäre Identitäten, Genehmigungen und den Zugang zu einem Credentials-Proxy. Sie soll keine Anwendungsprozesse kompilieren und möglichst keinen Quelltext als dauerhafte Arbeitskopie halten.

Die Ausführungsebene startet eine unabhängige, zerstörbare Umgebung. Dort werden Repository, Abhängigkeiten, Dienste und Tests zusammengeführt. Ein Agent erhält nur die Werkzeuge, die für den konkreten Auftrag erforderlich sind. Persönliche Langzeit-Token gehören weder in ein Image noch in eine Umgebungsvariable, die über Artefakte oder Prozessprotokolle sichtbar werden könnte.

Für die drei wichtigsten externen Systeme definieren wir getrennte Rollen:

Zielsystem Erlaubte Aufgabe im Pilot Nicht automatisch erlaubt
Quellcode-Repository Einen festgelegten Commit lesen, einen Patch als isoliertes Artefakt erzeugen Zusammenführen, Branch-Schutz umgehen, persönliche Token verwenden
Artefakt- und Abhängigkeitsquelle Freigegebene Pakete und Basis-Images beziehen Neue Bezugsquellen oder unbestätigte Binärdateien einführen
Ticket- und Freigabesystem Ergebnisentwurf und Belegverweis vorbereiten Ticket schließen, Priorität ändern oder Produktion freigeben

Für temporäre Identitäten kann ein OIDC-basierter Vertrauenspfad sinnvoll sein. Die Dokumentation zum OIDC-Zugriff in Cloud-Umgebungen beschreibt die Grundidee, kurzlebige Identitätsnachweise anstelle dauerhaft gespeicherter Schlüssel zu verwenden. Die konkrete Vertrauensbeziehung, Zielgruppe und Ablaufzeit müssen jedoch zur eigenen Identitätsplattform passen.

Der allgemeine Ausführungspool und der Cloud-Mac-Pool erhalten unterschiedliche Identitäten, Richtlinien und Scheduler-Kennzeichnungen. Ein Job darf nicht allein deshalb auf einem Mac landen, weil dort gerade Kapazität frei ist. Die Zuweisung braucht ein ausdrückliches Merkmal wie „Apple-Toolchain erforderlich“.

Stoppbedingung: Ein Auftrag verlangt mehr Schreibrechte, Netzwerkausgänge oder Zugangsdaten als die Policy vorsieht.
Rückfall: Ausführung ohne externe Schreiboperation; ein Mensch prüft den vorbereiteten Diff oder das Ergebnis und startet die nächste Stufe bewusst.

Der erste Lauf erzeugt eine belastbare Baseline

Bevor wir einen Sicherheitsbefund importieren, bauen wir die Anwendung aus einem festgelegten Commit in einer neuen Umgebung. Das verhindert, dass ein Entwickler-Arbeitsverzeichnis, ein lokaler Cache oder eine unbemerkte Konfigurationsdatei den Befund verfälscht.

Die Reihenfolge ist entscheidend:

  1. Commit oder unveränderlichen Quellstand festlegen und seine Identität im Auftrag speichern.
  2. Abhängigkeiten aus der freigegebenen Liste auflösen; nicht benötigte Paketquellen blockieren.
  3. Umgebungsvariablen, Testdaten und Dienstkonfiguration aus einem versionierten Template einsetzen.
  4. Anwendung ohne den Sicherheitsbefund bauen und starten.
  5. Normale Funktionstests ausführen und ihre Ausgabe unverändert archivieren.
  6. Erst danach den Kandidatenbefund und seine reproduzierbaren Eingabedaten importieren.
  7. Baseline, Befund, Patch-Stand und Nachprüfung als getrennte Laufereignisse speichern.

Für Apple-Projekte prüfen wir früh, ob die notwendige Toolchain tatsächlich vorhanden ist. Apples Dokumentation zu den Xcode Command Line Tools ist die maßgebliche Referenz für Installation und Nutzung; ein allgemeiner Container kann diese Voraussetzung nicht ersetzen. Bei signiertem macOS-Code kommen Zertifikate, Profile und die konkrete Signaturkette hinzu. Dafür ist die Apple-Anleitung zum Erstellen signierten Mac-Codes heranzuziehen.

Der Baseline-Lauf besitzt drei mögliche Ausgänge: „bereit für Sicherheitsprüfung“, „Umgebung fehlerhaft“ oder „Test nicht anwendbar“. Nur der erste Ausgang darf die dynamische Befundprüfung starten. Damit wird ein fehlender Dienst nicht versehentlich als behobene Schwachstelle interpretiert.

Muss für jeden Agent eine eigene Umgebung entstehen?

Nicht zwingend. Entscheidend ist die Isolation der einzelnen Aufgabe und ihrer Identität, nicht eine dauerhaft bereitgehaltene Maschine pro Agent. Ein gemeinsamer, sauber zurückgesetzter Ausführungspool kann mehrere Jobs nacheinander bedienen, sofern Arbeitsbereich, Token, Netzwerkregeln und Protokollpfad pro Auftrag getrennt sind.

Eine eigene Umgebung ist sinnvoll, wenn ein Auftrag besonders privilegierte Werkzeuge, inkompatible Abhängigkeiten, sensible Testdaten oder eine längere Wiederaufnahme benötigt. Für gewöhnliche reproduzierbare Prüfungen ist eine temporäre Umgebung mit eindeutiger Job-ID meist leichter zu löschen und zu auditieren als eine Sammlung dauerhaft laufender Agent-Maschinen.

Die dynamische Prüfung bleibt beweisorientiert

In der Prüfphase darf der Agent den notwendigen Quelltext lesen, die autorisierten Tests ausführen und innerhalb des Auftragsbereichs temporäre Dateien erzeugen. Außenwirkungen bleiben jedoch bewusst eingeschränkt. Das Erstellen eines Tickets, das Verändern eines Repositorys, das Senden an einen externen Dienst oder der Zugriff auf produktionsnahe Systeme braucht eine unabhängige Genehmigung.

Wir speichern pro Lauf mindestens:

  • die reproduzierbare Eingangsbedingung,
  • den betroffenen Versionsstand,
  • die exakte Test- oder Prüfroutine,
  • Exit-Status und relevante Ausgaben,
  • Abweichungen zwischen Baseline und Patch,
  • die Identität der ausführenden Umgebung,
  • eine Zuordnung zu manueller Prüfung oder Zurückstellung.

Die Belege liegen außerhalb des vergänglichen Arbeitsbereichs in einem Audit-Speicher. Dort werden keine unnötigen Geheimnisse abgelegt; Ausgaben müssen vor der Archivierung auf Token, personenbezogene Daten und Testdaten mit Produktionsbezug geprüft werden. DSGVO-Anforderungen betreffen dabei nicht nur den Speicherort, sondern auch Zugriff, Aufbewahrungszweck und Löschkonzept.

Ein Agent darf aus einem unklaren Ergebnis keinen erfolgreichen Abschluss formulieren. Wenn der Test wegen unvollständiger Voraussetzungen nicht wiederholbar ist, bleibt der Zustand „unsicher“. Diese scheinbar langsamere Entscheidung schützt vor einem gefährlichen Automatismus: Ein geschlossenes Ticket belegt noch keine eingesetzte Reparatur.

Patch-Erzeugung und unabhängige Nachprüfung

Die Sitzung, die einen Patch erzeugt, darf nicht zugleich die abschließende Freigabe ausstellen. Wir behandeln Patch-Erstellung und Patch-Nachprüfung als zwei getrennte Aufgaben mit zwei Statusketten. Der zweite Auftrag startet in einer neuen Umgebung und erhält den Patch als unveränderliches Eingabeartefakt.

Prüfpunkt Patch-Erstellung Unabhängige Nachprüfung
Ausgangszustand Baseline plus Befund Neuer Aufbau aus Baseline plus Patch
Schreibrechte Diff oder Patch-Artefakt im Arbeitsbereich Keine automatische Zusammenführung
Sicherheitsprüfung Entwurf und erste lokale Prüfung Wiederholung unter frischen Bedingungen
Funktionstests Schnelle Plausibilitätsprüfung Sicherheits- und Regressionstests
Entscheidung Vorschlag „zur Prüfung“ Bestätigung, Unsicherheit oder Rückstellung

Die Nachprüfung umfasst deshalb mindestens zwei unterschiedliche Testarten: einen Test, der das ursprüngliche Fehlverhalten unter autorisierten Bedingungen prüft, und normale Regressionstests für die betroffene Funktion. Wir führen beide gegen den neuen Code-Stand aus und halten fest, welche Tests nicht anwendbar waren.

Bei iOS- und macOS-Projekten entscheidet die Abhängigkeit von Apple-Werkzeugen, ob ein realer Mac notwendig ist. Quelltextanalyse, Formatprüfung und manche plattformunabhängigen Tests können im allgemeinen Pool laufen. Ein echter Mac ist dagegen erforderlich, wenn Xcode, Apple-SDKs, Codesignatur, Simulator, gerätespezifische Werkzeuge oder macOS-Laufzeitverhalten Teil der Aussage sind.

Cloud-Mac-Zuweisung für Apple-Aufgaben

Ein Cloud-Mac ist somit kein allgemeiner Ersatz für jede Sicherheitsprüfung. Er ist eine spezialisierte, isolierte Ausführungsstufe. Wir übergeben nur den festgelegten Commit, die freigegebenen Abhängigkeiten, den Patch und die erforderlichen Testdaten. Zertifikate und Signaturschlüssel werden über einen kontrollierten Vermittler bezogen und nicht dauerhaft im Arbeitsbereich hinterlegt.

Die Trennung verhindert zwei typische Fehlkonfigurationen: Erstens werden teure oder knappere Mac-Ressourcen nicht mit Linux- oder plattformneutralen Jobs blockiert. Zweitens gelangt ein allgemeiner Agent nicht über eine vermeintlich bequeme gemeinsame Identität an Apple-spezifische Signatur- oder Build-Rechte.

Die Freigabekette bleibt dreistufig: Zusammenführung, Bereitstellung und Prüfung nach der Bereitstellung. Eine erfolgreiche Cloud-Mac-Ausführung bestätigt den Build- und Testzustand; sie beweist nicht, dass die Änderung bereits produktiv ausgerollt wurde.

Entscheidung zwischen gemeinsamem Pool und Cloud-Mac

Die Wahl sollte nicht vom Namen des Agenten abhängen, sondern von den Anforderungen jedes Auftrags. Für einen ersten Piloten verwenden wir eine einfache Zuordnung:

  • Allgemeiner elastischer Pool: Repository-Aufbau, Abhängigkeitsprüfung, statische Analyse, reproduzierbare Diensttests und plattformunabhängige Regression.
  • Isolierter Cloud-Mac-Pool: Xcode-Builds, Apple-SDK-Abhängigkeiten, Codesignatur, macOS-Verhalten und echte Apple-Auslieferungsartefakte.
  • Temporäre Einzelumgebung: privilegierte Werkzeuge, nicht teilbare Testdaten, inkompatible Toolchains oder ein Auftrag mit erhöhtem Wiederaufnahmebedarf.

Für die Kapazitätsplanung erfassen wir vier Werte aus den eigenen Läufen: Startverzögerung, belegte Laufzeit, Spitzenparallelität und Anteil der Apple-spezifischen Aufgaben. Ohne diese Messung bleibt jede Kauf- oder Mietentscheidung eine Vermutung. Offizielle Runner-Dokumentation beschreibt Unterschiede zwischen verwalteten und selbst betriebenen Ausführern, ersetzt aber keine Messung der eigenen Build- und Sicherheitsjobs; als technische Referenz dient die Dokumentation zu selbst betriebenen Runnern.

Wiederaufnahme, Löschung und erste Betriebswoche

Eine zerstörbare Umgebung ist nur dann brauchbar, wenn ein unterbrochener Auftrag sicher wiederaufgenommen werden kann. Wir speichern deshalb den letzten bestätigten Zustand außerhalb des Runners: Commit, Patch-Artefakt, Abhängigkeitsauflösung, Konfigurationsversion, Testergebnisse, Genehmigungen und die Ursache des Abbruchs.

Für die erste Betriebswoche planen wir drei Übungen:

  1. Einen fehlgeschlagenen Testlauf erneut starten, ohne das Ergebnis der ersten Umgebung zu überschreiben.
  2. Einen unterbrochenen Auftrag aus dem zuletzt gespeicherten Zustand in einer neuen Umgebung aufbauen.
  3. Eine vollständige Löschung durchführen und anschließend prüfen, dass Identität, Arbeitsbereich, temporäre Schlüssel und externe Sitzungen widerrufen sind.

Nach dem Lauf widerrufen wir die temporäre Identität, sperren noch offene Sitzungen, entfernen den Arbeitsbereich und übertragen nur die notwendigen Nachweise in den Audit-Speicher. Logs sollten mindestens Ausführungs-ID, Zeitstempel, Code- und Template-Version, Berechtigungsentscheidungen, gestartete Tests, Exit-Status, externe Schreibversuche und Löschbestätigung enthalten. Geheimnisse, vollständige personenbezogene Testdaten und unnötige Quelltextkopien gehören nicht in diesen Bestand.

Stoppbedingung: Die Löschung oder Wiederaufnahme lässt sich nicht nachweisen.
Rückfall: Der Pool bleibt für neue Jobs gesperrt; das Team untersucht Identitäts-, Speicher- oder Scheduler-Zustand, bevor weitere Patches geprüft werden.

Abhakbare Abnahme vor dem Ausbau

  • [ ] Ein einzelnes Repository und eine klar begrenzte Befundklasse sind festgelegt.
  • [ ] Kandidat, reproduziert, Patch zur Prüfung, Reparatur bestätigt und Freigabeentscheidung sind getrennt modelliert.
  • [ ] Für jeden Status werden Code-Stand, Abhängigkeiten, Umgebung, Testergebnis und Genehmigungsnachweis gespeichert.
  • [ ] Steuerungsebene und Ausführungsebene besitzen getrennte Rollen und Netzwerkregeln.
  • [ ] Repository, Artefaktquelle und Ticketsystem verwenden jeweils minimale Berechtigungen.
  • [ ] Persönliche Langzeit-Token sind aus Images, Templates und Laufzeitprotokollen entfernt.
  • [ ] Der Baseline-Aufbau wird vor dem Import des Sicherheitsbefunds erfolgreich ausgeführt.
  • [ ] Unsichere oder nicht ausführbare Ergebnisse werden nicht automatisch zu bestätigten Schwachstellen hochgestuft.
  • [ ] Patch-Erstellung und unabhängige Nachprüfung laufen in getrennten Aufträgen und neuen Umgebungen.
  • [ ] Apple-spezifische Aufgaben werden anhand ihrer Toolchain-Anforderung an den Cloud-Mac-Pool verwiesen.
  • [ ] Zusammenführung, Bereitstellung und Prüfung nach der Bereitstellung besitzen eigene menschliche Schranken.
  • [ ] Unterbrechung, Wiederaufnahme und vollständige Löschung wurden mit echten Testläufen geprüft.
  • [ ] Startverzögerung, Laufzeit, Spitzenparallelität und Mac-Aufgabenanteil werden für die Kapazitätsplanung erfasst.

Aktueller Pool oder gemieteter Cloud-Mac?

Ein bestehender Entwickler-Mac wirkt zunächst bequem, ist für wiederholbare Sicherheitsprüfungen aber oft die schlechtere Langzeitlösung: Arbeitsbereiche enthalten lokale Zustände, persönliche Berechtigungen bleiben zu lange aktiv, und parallele Jobs konkurrieren um dieselbe Toolchain. Ein allgemeiner Serverpool löst dieses Problem ebenfalls nicht, sobald Xcode, Codesignatur oder macOS-Laufzeitverhalten geprüft werden müssen.

Für genau diese gemischten Szenarien kann die bedarfsgerechte Cloud-Mac-Nutzung von zekmac sinnvoller sein als der dauerhafte Ausbau eigener Apple-Hardware. Sie behalten den allgemeinen elastischen Pool für gewöhnliche Aufgaben, reservieren Mac-Ressourcen nur für die wirklich Apple-spezifischen Prüfschritte und können die Umgebung nach dem Nachweis wieder aus dem Betriebsbestand nehmen. Prüfen Sie vorab die benötigte Xcode- und macOS-Version, Identitätsdauer, Netzwerkfreigaben, Artefaktübergabe, Wiederaufnahme und Löschung; erst diese Anforderungen zeigen, ob Mieten, eigener Mac oder eine andere Ausführungsform zum Prozess passt.

zekmac M4 Remote-Knoten

Ihre Patch-Validierungsumgebung auf dem Mac mit zekmac

Mit zekmac erhalten Sie flexibel zugängliche Mac-Umgebungen für reproduzierbare Patch-Tests und technische Prüfungen.