Come mitigare il rischio di una violazione della sicurezza del servizio di integrazione continua?

8

Stiamo utilizzando un servizio di integrazione continua per eseguire automaticamente la nostra suite di test sui prodotti. Ogni volta che inseriamo il codice nel nostro ramo di produzione del repository Git centrale, i servizi CI vengono notificati e recuperano il codice per eseguire la suite di test.

Il servizio CI ci consente di scrivere uno script di post build che può automaticamente inviare il codice al nostro server di produzione Heroku quando i test passano.

Tuttavia temiamo che se un utente malintenzionato si intromette nel servizio CI, può quindi inviare qualsiasi modifica di codice che desidera al nostro server di produzione.

Abbiamo in programma di modificare questa architettura per fare in modo che il servizio CI esegua il ping di uno specifico server "deploy" quando i test vengono superati. Questo server 'deploy' recuperava l'ultimo codice di produzione dal nostro repository Git centrale e il push al nostro server di produzione Heroku.

In questo modo, se il servizio CI viene compromesso, un utente malintenzionato non può inviare dal servizio CI alcun codice che desidera al nostro server di produzione. Dovrebbe entrare nel nostro server 'deploy'.

L'obiettivo di questa nuova architettura è spostare il rischio dai SaaS CI a un nostro server. Le credenziali di Heroku necessarie per la distribuzione non sono più ospitate su SaaS CI ma su un nostro server.

Ha senso? Oppure esiste un'alternativa più semplice quando si utilizza un servizio CI (a parte l'impostazione e la protezione del proprio server CI)?

    
posta Florent2 13.09.2012 - 23:42
fonte

2 risposte

3

Hai 2 punti che possono essere compromessi: accesso al repository git e al servizio CI. Stai usando CI SaaS, perché qual è la differenza se il tuo deploy server o la tua macchina della CI viene compromessa? Possono entrambi spingere il codice.

Se si dispone di un servizio CI remoto, è possibile anche creare un server di distribuzione e inviare tale build effettiva al servizio CI. E quando passa quella build, spingerlo alla produzione. In questo modo sai che hai testato la versione esatta che viene distribuita.

Condizioni di gara: CI passa il codice. Qualcuno controlla il nuovo codice in git. La distribuzione della macchina viene segnalata dall'elemento della configurazione e crea con il codice non testato e la spinge alla produzione.

    
risposta data 14.09.2012 - 06:08
fonte
4

Sembra che tu stia principalmente spostando il problema. Il server CI utilizzato per avere le credenziali per inviare nuove installazioni al server Heroku, ora è il server di distribuzione.

Quindi la grande domanda da parte mia è: qual è la differenza di sicurezza tra il servizio CI e il server di distribuzione? Uno è ospitato esternamente? C'è un motivo per cui ti fidi di uno più dell'altro. Sono le credenziali che danno accesso al server Heroku che danno maggior rischio.

Nel NUOVO framework, vorrei fare queste domande:

  • Qual è la probabilità che il codice possa essere manomesso sul server Git?

  • Esiste la possibilità che un "ping" illegittimo sul server di distribuzione causi problemi? La condizione di gara @roxOr menziona è un caso. C'è anche il pensiero che se un server CI viene manomesso, potrebbe essere attivato per inviare un ping che induca il server di distribuzione a inserire codice non funzionante sul server Heroku. O ... qual è il livello di autenticazione richiesto su questo ping? Può essere inviato da qualsiasi luogo da chiunque? Quindi l'attaccante non ha bisogno di attaccare il server CI per attivare una distribuzione errata.

  • esiste la possibilità che il server di implementazione possa essere violato? questo è ora il tuo grande vantaggio: può ottenere la tua proprietà intellettuale (il codice) e distribuire qualsiasi malware desideri. Quindi ha bisogno della protezione più severa.

  • Esiste un modo per un agente esterno di ottenere le credenziali utilizzate per accedere a Heroku e accedervi direttamente? Nel qual caso non importa come si distribuisce il codice, l'hacker può spingere il codice come preferisce.

  • C'è una possibilità che il networking possa essere manomesso - un buon attacco potrebbe essere quello di forzare il reindirizzamento del server di deploy dal sito hub git legittimo a una fonte scelta dall'attaccante. Quindi, quando viene ricevuto un ping legittimo dal server CI, il server di distribuzione distribuisce il codice creato dall'utente malintenzionato anziché il codice testato.

Nessun sistema è mai "perfetto", quindi la grande domanda di solito si riduce a quale tipo di attacco ti aspetti e quale pensi che potrebbe essere il loro motivo. Dipendenti scontenti, spionaggio aziendale, punk casuali e criminali informatici che cercano di utilizzare il tuo sito come host di malware avranno ciascuno i propri obiettivi e ognuno avrà capacità diverse. Aiuta a riflettere su cosa vuoi proteggere prima di aggiornare la tua architettura.

    
risposta data 14.09.2012 - 15:35
fonte