2009-02-08 8 views
5

Implementazione di un ambiente "sandbox" in Python utilizzato per il modulo rexec (http://docs.python.org/library/rexec.html). Sfortunatamente, è stato deprecato/rimosso a causa di alcune vulnerabilità di sicurezza. C'è un'alternativa?Esiste un'alternativa a rexec per sandboxing Python?

Il mio obiettivo è far eseguire al codice Python script Python semi-attendibili. In un mondo perfetto, le chiamate a qualsiasi funzione al di fuori di un insieme predefinito genererebbero eccezioni. Da quello che ho letto sulla deprecazione di rexec, questo potrebbe non essere possibile. Quindi mi accontento di quanto posso ottenere. Posso generare un processo separato per eseguire gli script, il che aiuta molto. Ma potrebbero comunque abusare dell'I/O o del processore/risorse di memoria.

+0

Per quello che sembra, sembra che finchè si limita la creazione del pid, rexec è sicuro. – user2284570

risposta

4

Si potrebbe voler fornire il proprio __import__ per impedire l'inclusione di tutti i moduli che si ritiene "utilizzi l'I/O o il processore/risorse di memoria".

Si potrebbe voler iniziare con pypy e creare il proprio interprete con limitazioni e vincoli sull'utilizzo delle risorse.

+0

Fornire il proprio __import__ è un'ottima idea ed è molto meglio di qualsiasi altra soluzione mai realizzata per il sandboxing! – kylebrooks

+0

@kylebrooks: "molto meglio di qualsiasi altra soluzione" è una stringa di bit. Permette di inserire nella whitelist (e nella lista nera) i moduli, ma non impedisce o nemmeno rileva un processo che tenta di "abusare di I/O o risorse di processore/memoria". –

+0

Puoi solo autorizzare o aggiungere in blacklist quei moduli se non hai accesso agli oggetti che contengono riferimenti (o un'estensione c che ignora completamente i moduli a livello di python). La mancanza di incapsulamento in Python sembra essere la più grande sfida per la sicurezza. – DylanYoung

2

in CPython "sandboxing" per motivi di sicurezza è una: "non farlo a portata di bambini azienda" -thing.

prova:

  • jython con Java "sandboxing"
  • PyPy -> vedi risposta S. Lott
  • forse IronPython ha una soluzione?

vedere Warning:

Attenzione

In Python 2.3 questi moduli sono stati disabilitati a causa di vari fori noto e non di sicurezza facilmente risolvibile. I moduli sono ancora documentati qui per aiutare a leggere il vecchio codice che utilizza i moduli rexec e Bastion.

+0

Sembra che tutti questi buchi di sicurezza richiedano la creazione di thread o processi. Quindi rexec è sicuro se la creazione del pid è ulimit. – user2284570

0

La soluzione migliore per la sicurezza in cPython è l'utilizzo di meccanismi di sandbox a livello di sistema operativo e l'esecuzione di codice non affidabile in un processo separato limitato dal sistema operativo.

Questo è equivalente all'utilizzo di "jython con java" sandboxing "", come da the answer above, ma probabilmente un po 'più difficile da configurare.

Problemi correlati