Zero Belief è emerso come una pietra miliare della moderna sicurezza aziendale. Viene applicato principalmente a reti, identità utente e endpoint della maggior parte delle organizzazioni. Tuttavia, il singolo strato sinistro è sottoscritto è la pipeline CI/CD. Questi sistemi orchestrano la convalida del codice per la distribuzione della produzione e lo fanno con credenziali persistenti e privilegi di sistema. Questa contraddizione è fondamentalmente incompatibile con il resto del modello zero-trust, in cui, per impostazione predefinita, non dovrebbe esserci fiducia in alcun servizio, identità o connessione.
Ma nel nostro ambiente, ci siamo resi conto che le nostre condutture erano state tranquillamente escluse dal controllo della sicurezza. I lavori avevano segreti di lunga durata e i contenitori di costruzione furono riutilizzati. La quantità di accesso ha raggiunto un livello oltre a ciò che dovrebbe essere previsto per ogni singolo lavoro. Abbiamo riconosciuto questi rischi e quindi ritenevamo che le nostre condutture dovessero essere trattate come non attendibili per impostazione predefinita. Questa decisione ha radicalmente modificato il modo in cui avremmo affrontato l’automazione e l’accesso.
Riconoscere la pipeline come vettore di attacco
Il rischio non esiste per le condutture. Gli aggressori hanno recentemente sfruttato sistemi di costruzione scarsamente protetti in diversi incidenti di alto profilo (Codecov, SolarWinds, Travisci e altri). Alcune di queste condutture avevano token persistenti, credenziali eccessivamente permissive o nessuna verifica dell’artefatto. La storia è semplice: se un sistema CI o CD è compromesso, l’attaccante otterrà un punto d’appoggio privilegiato in tutto il ciclo di vita dell’applicazione.
Nel nostro caso, abbiamo esaminato le autorizzazioni esistenti fornite ai corridori di costruzione. I lavori di take a look at avevano accesso a Ruoli iam Con i diritti di distribuzione, i segreti hanno persistito attraverso i posti di lavoro e un sottoinsieme di contenitori conteneva volumi di memorizzazione nella cache che conservavano le credenziali del tempo di costruzione. Nessuno di questi erano errori isolati; Erano sistemici. L’autonomia avrebbe dovuto conquistare tutto e c’period una cultura di presupposto che l’automazione fosse sicura.
Applicazione di zero fiducia all’esecuzione CI/CD
Innanzitutto, ci siamo avvicinati a tutto ciò che riguarda CI/CD-corridori, contenitori, segreti, dipendenze-supponendo che potesse essere compromesso. Non importava che la pipeline fosse interna; Non si fidava più. In contenitori completamente isolati, i posti di lavoro costruiti sono stati eseguiti su una base su richiesta con ruoli con ambito e nessuna eredità di stato. Ai corridori period proibito di effettuare chiamate in uscita a meno che non fossero autorizzati a farlo.
Ci siamo allontanati dall’uso di credenziali statiche o token condivisi e siamo passati a token di identità di breve durata emessi tramite OIDC. Poiché questi token sono stati espulsi a livello di lavoro e sono scaduti immediatamente dopo l’esecuzione, non sono stati impersonati da nessuno al di fuori del codice di impressione. È stato registrato con le opzioni rintracciabili al git sha e construct ID e, quindi, non riutilizzabile in nessun contesto. Una volta terminata la construct, i suoi privilegi erano finiti. La finestra di accesso disponibile per gli attori dannosi se iniettavano il codice in un lavoro period ridotta a pochi minuti e i loro privilegi erano ridotti al più piccolo possibile.
Limitare il privilegio senza compromettere lo spiegamento
Applicare Privilegio minimo In condutture è stata una delle cose più difficili da fare all’interno di condutture a zero belief senza rompere la consegna. Alla maggior parte dei nostri primi lavori sono state assegnate autorizzazioni globali, quindi abbiamo dovuto scomporle. Invece di fare in modo che un corridore faccia tutto, abbiamo separato la responsabilità di costruire, testare e distribuire in ruoli individuali con ambito. Ogni fase ha assunto solo ciò di cui aveva bisogno. Advert esempio, i lavori di costruzione potrebbero accedere ai negozi di artefatti, i lavori di take a look at potrebbero accedere agli ambienti di take a look at e distribuire posti di lavoro interagirebbero con la produzione solo con una rigorosa approvazione.
Questo non ci ha lasciato altra scelta che riprogettare parti della nostra toolchain. Pertanto, abbiamo usato caricamenti firmati nel nostro registro e verificato tali firme a valle. Advert esempio, invece di conservare artefatti in cache intermedie, li abbiamo concatenati prima di caricare nel nostro registro. In questo modo, la construct non è stata compromessa e i suoi binari modificati non potevano essere distribuiti nella pipeline. Non è stato un piccolo cambiamento. Il risultato fu un sistema segmentato in cui ogni azione poteva essere rintracciata, verificata e limitata.
Verificare identità e manufatti advert ogni passo
Il vero significato di zero fiducia si estende oltre l’autenticazione e richiede una verifica continua. Advert esempio, verificheremmo l’affidabilità degli enter e delle uscite in un contesto CI/CD. In tutti i rami protetti, abbiamo applicato commessi e tag firmati. Ogni richiesta di pull doveva essere collegata a un’identità nota e verificata. Cosign è stato utilizzato per firmare e costruire artefatti e convalidare da un’infrastruttura chiave pubblica prima della distribuzione.
Abbiamo registrato il monitoraggio di provenienza, tra cui i lavori hanno prodotto quali artefatti, con quale versione del codice e su quali condizioni ambientali. Questo è stato un totale tracciabilità del 100% dal commit di distribuzione. Nel caso in cui una vulnerabilità sia riportata nella produzione, potremmo monitorare l’origine della vulnerabilità attraverso i manufatti firmati e i registri di lavoro.
Ripensare la gestione dei segreti sotto zero fiducia
Un’ipotesi pericolosa nei sistemi CI/CD è che i segreti possono essere iniettati in modo sicuro nell’ambiente di costruzione. Nelle condotte tradizionali, i segreti vengono inviati su volumi montati o variabili di ambiente. Tuttavia, se la pipeline è compromessa, tali segreti possono essere esfiltrati. Per contrastare questo, abbiamo smesso di usare segreti statici.
Abbiamo eseguito segreti da Vault attraverso un’istanza di politica con segreti con ambito per identità e contesto lavorativo. Il corridore non memorizza alcun segreto. L’accesso a tutti i segreti è legato al tempo, registrato centralmente e limitato IP. E se un segreto viene eseguito al di fuori del suo lavoro previsto, viene revocato automaticamente. Costruire una migliore igiene del ciclo di vita sull’uso delle credenziali e, allo stesso tempo, mitigare il rischio period ciò che questo approccio ha fatto.
Osservabilità come requisito di fiducia zero core
IL Core di Zero Belief è visibilità nelle condutture, che embrace il monitoraggio di ogni azione, credenziale e lavoro intrapreso. I registri strutturati vengono emessi per ogni lavoro con un ID lavoro, repository, impronta digitale runner e hash di esecuzione. Questi registri vanno nel nostro principale stack di osservabilità, che è anche combinato con i registri di flusso di rete e i registri di accesso al cloud.
Advert esempio, abbiamo distribuito il rilevamento automatico delle anomalie quando un lavoro di take a look at ha cercato di parlare con gli endpoint di produzione o quando una construct ha cercato di accedere alle risorse che non aveva mai visto prima. Questa telemetria non si è fermata al tempo di risposta; In realtà è migliorato. Di per sé, ci ha aiutato a sintonizzare in modo proattivo le nostre politiche e identificare modelli di comportamento rischioso.
Progettazione per il fallimento: contenimento e recupero
Sono un grande sostenitore dell’applicazione di zero fiducia a CI/CD. Uno dei maggiori benefici è stato il miglioramento del contenimento del raggio di esplosione. Con il modello precedente, un corridore compromesso potrebbe, in linea di principio, anche tirare i segreti, accedere alla produzione o modificare in altro modo artefatti a valle. Ogni lavoro è ora effimero, isolato e non può intensificare.
Questo modello è stato quindi convalidato simulando il compromesso del corridore. Il payload iniettato aveva accesso solo al ruolo ampliato, nessun segreto e non poteva passare advert altri posti o servizi all’interno del cluster. I registri hanno catturato ogni azione. Non ha causato ulteriori danni e ha fallito con il lavoro. Ciò ha dimostrato che il nostro sistema, sebbene sicuro su carta, period anche robusto sul campo.
Conclusione
Trattamento Pipeline CI/CD Poiché l’automazione affidabile rappresenta un rischio per la sicurezza. Questi sistemi hanno accesso alla maggior parte delle risorse segrete in un ciclo di vita del software program. Con l’aggiunta di principi di belief zero-isolato, meno privilegi, credenziali dinamiche e verifica end-to-end-passano dalla responsabilità a una linea di difesa.
Per raggiungere questo obiettivo, abbiamo dovuto riprogettare non solo gli strumenti, ma anche i presupposti dietro di esso. Abbiamo optato per passare dalla convenienza al controllo. Il costo period una pipeline che poteva essere colpita, ma il resto della nostra infrastruttura poteva resistere.