Come eseguire il sandbox delle applicazioni?


66

Voglio eseguire piccoli programmi non attendibili, ma impedire loro di accedere a tutti i file al di fuori della loro cartella, accesso alla rete e tutto ciò di cui non hanno davvero bisogno. Qual è il modo più semplice per raggiungere questo obiettivo?


Non l'ho mai usato, quindi non posso dare una risposta completa, ma AFAIK, AppArmor ( wiki.ubuntu.com/AppArmor ) dovrebbe essere in grado di farlo.
Javier Rivera,

Dai un'occhiata a Vagrant, un wrapper per VirtualBox. vagrantup.com e [su Wikipedia] ( en.wikipedia.org/wiki/Vagrant_(software%29) e su github
Janus Troelsen

@JavierRivera FWIW, SELinux pure. Non ho idea di quanto sarebbe facile funzionare su Ubuntu.
TC1

Apparmor è già installato di default in Ubuntu, quindi dovrebbe essere più semplice.
Javier Rivera,

1
Sembra che ci siano molteplici possibilità: virtualizzazione usando qualcosa come Virtualbox (come Vagrant), chroot, LXC, App Armor e SE Linux.
Flimm,

Risposte:


26

Se non sono veramente affidabili e vuoi essere sicuro, avresti impostato una casella separata. O davvero, o virtualmente.

Inoltre, non vuoi che quella scatola sia nella stessa rete delle tue cose importanti, se sei abbastanza paranoico. In tutte le soluzioni avresti impostato un utente separato senza diritti, quindi non aprire troppi strumenti al potenziale compromesso.

  • Quindi l'opzione più sicura sarebbe una scatola separata rimossa fisicamente dalla tua rete.
  • Potresti cedere un po 'aggiungendolo alla rete fisica, ma su una sottorete diversa: nessuna connessione "reale" all'interno
  • Una macchina virtuale sarebbe un'opzione, ma potrebbe dover rinunciare ad alcune prestazioni

Se sei obbligato a eseguirlo nella stessa casella, hai ad esempio questa opzione

  • chroot. Questa è un'opzione predefinita per farlo per molte persone e per minacce non specifiche potrebbe persino funzionare. Ma NON è un'opzione di sicurezza e può essere facilmente eliminata. Suggerirei di usarlo come previsto, cioè non per sicurezza.

Alla fine potrebbe essere necessario impostare un modello sandbox specifico senza la seccatura della virtualizzazione o caselle separate o la situazione ancora a rischio di chroot. Dubito che questo sia ciò che intendevi, ma guarda questo link per alcune informazioni più approfondite.


Quanto sarebbe sicuro per la sicurezza eseguire un'applicazione non attendibile su una macchina virtuale? Ho sentito parlare di exploit teorici che possono accedere al sistema operativo host attraverso l'hypervisor e infettarlo.
zuallauz,

Potrebbe essere, anche se al momento non sono a conoscenza di minacce reali del genere, certamente non mirate. Dovresti considerare che l'attaccante che sta scrivendo malware in un gioco non farebbe di tutto. Ora un attacco di lancia contro di te da solo potrebbe ovviamente insorgere, se conoscono il tuo layout, ma ancora non penso che sia la tua prima preoccupazione. Se sei sicuro che siano malleabili, dovresti comunque creare una scatola isolata, per quanto riguarda la rete.
Nanne,

14

Firejail è abbastanza nuovo e in costante sviluppo. Facile da usare.

Puoi semplicemente:

sudo apt-get install firejail
firejail app

Benvenuto in Ask Ubuntu! Sebbene ciò possa teoricamente rispondere alla domanda, sarebbe preferibile includere qui le parti essenziali della risposta e fornire il collegamento come riferimento.
Mark Kirby l'

12

Docker ti aiuterà a configurare i contenitori che puoi scappare dal tuo kernel corrente, mantenendo comunque contenuti dal resto del tuo sistema. Sembra piuttosto all'avanguardia ma c'è un focus su Ubuntu una buona documentazione.


4
Penso che questa sia una buona opzione per la maggior parte dei casi. Tuttavia, la parte "non attendibile" della domanda originale, mi preoccuperebbe un po '. Sono disponibili hack dimostrati che possono consentire a un'applicazione di "uscire" dal suo contenitore. E dato che i contenitori docker funzionano all'accesso root, questo potrebbe essere pericoloso, se il tuo obiettivo era quello di eseguire il sandbox reciproco delle applicazioni.
Cris Holdorph,

@CrisHoldorph è corretto, sebbene Docker stia migliorando e penso persino che al giorno d'oggi sia possibile eseguire un docker senza privilegi (non come root). Questo è certamente vero ora per LXC e LXD (il talvolta demone LXC) può semplificare notevolmente la creazione di tali contenitori. Quindi i moderni contenitori non privilegiati possono essere considerati un miglioramento in termini di sicurezza rispetto al chroot. Ma non sono una barriera impenetrabile!
Huygens,

Docker non è uno strumento di sicurezza!
Federico

10

Virtualizzazione / emulazione completa (VirtualBox)

Una possibile soluzione è il software di virtualizzazione come VirtualBox che puoi trovare nel centro software.

  • Installa la scatola virtuale
  • Crea una macchina virtuale con la rete abilitata
  • Installa Ubuntu o forse un desktop più leggero come Lubuntu
  • Aggiorna completamente il sistema operativo installato (all'interno della Virtual box)
  • Disabilita Networking sulla macchina virtuale
  • Scatta un'istantanea

Ora puoi installare il software di cui non ti fidi per vedere cosa fa. Non può sconvolgere il mondo esterno o ospitare il sistema operativo in quanto non ha accesso.

Tuttavia, potrebbe rovinare la tua macchina virtuale, ma in tal caso puoi semplicemente ripristinare dalla tua istantanea.

Potrebbero esserci altri metodi per limitare il potere distruttivo di software non attendibile, ma questo è il metodo più affidabile che mi venga in mente.

Virtualizzazione basata su container (Docker / LXC)

Un'altra opzione potrebbe essere LXC maggiori informazioni qui

LXC è il pacchetto di controllo dello spazio utente per Linux Containers, un meccanismo di sistema virtuale leggero a volte descritto come "chroot on steroids".

LXC si sviluppa da chroot per implementare sistemi virtuali completi, aggiungendo meccanismi di gestione delle risorse e di isolamento all'infrastruttura di gestione dei processi esistente di Linux.

È disponibile nel centro software. Non ho esperienza con comunque.


1
Questo è solo scomodo. Crea un'intera macchina virtuale solo per eseguire giochi !!? questa non è un'ottima soluzione. Non pensi che impostare GID e UID del processo sarebbe MODO più semplice di così?
Jack Mayerz,

In realtà penso che la creazione di una scatola virtuale sia sufficientemente semplice che probabilmente non mi preoccuperei di scattare un'istantanea. Se distrugge la mia macchina virtuale, posso scartarla.
emory

Downvote: ragionamento errato fattuale anche se la soluzione è rigida. I programmi non devono avere gli stessi privilegi dell'utente che li esegue. Linux e Ubuntu supportano MAC da anni. Ubuntu usa AppArmos per questo, e puoi contenere facilmente un programma in una directory.
Javier Rivera,

@JavierRivera "facilmente" non è la parola corretta, oppure un profilo AppArmor e una politica SELinux per Firefox verrebbero spediti di default con ogni distribuzione e non è così. Ubuntu fornisce tale profilo ma non è attivo di default in quanto interrompe alcune funzionalità "popolari" di Firefox. Non ci sono molti criteri SELinux per la maggior parte delle app GUI, tali app richiedono troppe autorizzazioni per essere chiamate sandbox. Se non sei d'accordo, pubblica qui i link alla sandbox Firefox in sicurezza usando AppArmor o SELinux! Se puoi, sarei davvero felice :-)
Huygens,

Probabilmente dovresti definire "sicuro" per una risposta significativa, ma la politica di Firefox predefinita in Ubuntu è abbastanza ragionevole per me. Ovviamente si rompe qualcosa in quanto non è facile da usare come non usare nulla, ma è ancora molto più facile da usare di una macchina virtuale completa (che rompe anche le popolari funzionalità di Firefox).
Javier Rivera,

9

mbox

Mbox è un meccanismo sandboxing leggero che qualsiasi utente può utilizzare senza privilegi speciali nei sistemi operativi di base.

L'ho usato per un paio di cose in modo affidabile.



1

Penso che una possibile soluzione sia quella di creare un utente separato a scopo di test e limitare i suoi privilegi. In questo modo non si perderanno le prestazioni, cosa accadrà sicuramente nella macchina virtuale, ma penso che sia meno sicuro, se non impostato molto correttamente, che non posso consigliare su come fare.


2
Questo non protegge il sistema da software dannoso che potrebbe ancora essere installato o eseguito, ma non è sandbox nel modo in cui questa domanda significa
Thomas Ward

1

DoSH - Docker SHell

Nel caso in cui desideri semplicemente eseguire il sandbox dell'attività degli utenti, puoi utilizzare "DoSH"

DoSH (che sta per Docker SHell) è uno sviluppo per creare contenitori Docker quando gli utenti accedono al sistema Linux ed eseguono una shell al loro interno, invece di creare semplicemente la shell.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.