2015-08-27 20 views
7

Ho visto un sacco di inchiostro rovesciato ormai su come Docker non è sufficientemente isolato per consentire l'esecuzione di contenitori arbitrari in un ambiente multi-tenant, e questo ha senso. "Se è root in Docker, consideralo come root nel computer host." Che dire di non-root però?Quali sono i potenziali problemi di sicurezza che eseguono codice non affidabile in un contenitore Docker come utente non root?

Se si desidera prendere un codice non affidabile ed eseguirlo in un contenitore, può essere eseguito in modo sicuro fino a quando il contenitore è in esecuzione come utente non sudo non root? Quali sono le potenziali insidie ​​della sicurezza nel fare qualcosa del genere?

Sono abbastanza sicuro che ci siano applicazioni di produzione che lo fanno oggi (sistemi CI, paste in esecuzione), ma sono semplicemente fortunati a non aver avuto un attaccante determinato o è una cosa ragionevole da fare in un sistema di produzione?

+0

+1 Davvero interessato alle risposte a questo. Potrei offrirmi volontariamente che eseguendo come root ti dia accesso in scrittura ai file di sistema che fanno parte dell'immagine Docker. Immagino che un pezzo di malware fantasioso possa usarlo per sfruttare una vulnerabilità che potrebbe esistere all'interno del kernel dell'host Docker. –

+3

Sto votando per chiudere questa domanda come off-topic (anche se è interessante). Sarà meglio rispondere a security.stackexchange.com – oleksii

+0

È ok per inviare domande di amministrazione Docker su SO. È stato discusso più volte: http://meta.stackexchange.com/search?q=docker –

risposta

1

Come di Docker v1.12, se si corre un contenitore come utente non root con spazi dei nomi utente abilitati, ci sono due livelli di escalation di privilegi un attore malintenzionato deve eseguire per diventare root su host:

  1. Escalate da non root all'utente root all'interno del contenitore
  2. Escalate a root nel contenitore di radicare utente sull'host

Quindi, nel caso di codice non attendibile viene eseguito all'interno di un contenitore Docker come non-root utente, sarà leggermente più difficile per un atta cker per diventare root sull'host, poiché aggiungiamo un ulteriore passaggio per diventare root all'interno del contenitore. Questo è l'unico vantaggio in termini di sicurezza rispetto all'esecuzione di container con privilegi di root.

In caso di escalation dei privilegi attraverso entrambi gli strati di sicurezza, in seguito dovrebbe contribuire a limitare la superficie di attacco:

  1. carichi di lavoro (più precisamente finestra mobile contenitori, in questo contesto) con diversi livelli di attendibilità devono essere isolati gli uni dagli altri mediante l'uso di reti sovrapposte che seguono il principio dei privilegi minimi.
  2. Abilitazione disponibile modulo di sicurezza di Linux in modalità di applicazione (ad esempio SELinux, AppArmor)

Riferimenti:

0

Tutti i contenitori condividono lo stesso kernel. Nel caso in cui il codice non affidabile riesca a eseguire un exploit del kernel, può fare tutto ciò che vuole sull'host e/o su qualsiasi altro contenitore in esecuzione.