Compilatori e integratori online - non un unico grosso buco di sicurezza?

5

Ci sono un sacco di compilatori e servizi REPL sul web. Ad esempio: Fay ide .

Trovo che l'implementazione di tecnologie simili sarebbe molto interessante. Ma sembra una grossa falla nella sicurezza. Ho sbagliato a pensare che esporre un compilatore sarebbe rischioso? Un interprete sembra anche peggio.

aggiornamento: posso essere un po 'più specifico. Il gentile servizio che sto pensando di ospitare me stesso (un esperimento mentale a questo stadio) sarebbe un po 'vicino al caso dell'ide di Fay sopra. Prendi input da parte dell'utente, elaboralo e restituiscilo, potenzialmente come javascript eseguibile allo stesso o ad altri utenti. Diamo un'occhiata a quell'esempio in particolare.

La preoccupazione di sicurezza più ovvia che vedo per questo caso, dato che in realtà non valuto il lato del code server, sarebbe per gli utenti, dato che avrebbero eseguito codice creato da un autore "sconosciuto". Il fatto che siano autorizzati a leggere il codice prima di eseguirlo dovrebbe essere una salvaguardia significativa in questo senso.

Anche se mi chiedo anche se e quando la traduzione del codice costituisca una minaccia per il server? Che tipo di vettori di exploit potrebbero essere pensati in questo contesto?

Riepilogo:

  1. Oltre a ciò che puoi aspettarti da qualsiasi server web impostato, e al di là delle preoccupazioni più ovvie (o forse anche alcune di quelle ovvie preoccupazioni), come potrebbe un utente comprometterne un altro? -. In che modo l'applicazione server può essere rafforzata per garantire che non venga compromessa?
  2. Quali importanti domande ho trascurato? ;)
  3. Mi piacerebbe provare alcuni esperimenti, e ho in mente quasi il problema in qualità di ospite. Potrei immaginare che tale uso potrebbe essere vietato dalle loro condizioni d'uso? O forse posso fidarmi di loro per essere abbastanza sicuro che hanno il mio account in modalità sandbox abbastanza bene. Quali dovrebbero essere le mie salvaguardie "minime", per provare cose e quali protezioni sarebbero possibili con un ambiente di hosting così limitato?

update2: Credo che la compilazione in javascript per la valutazione lato client o la valutazione di edsls limitati possa coprire la maggior parte / tutti i casi di utilizzo che ho in mente. Suppongo che questo significhi che in realtà non metto il lato server a un rischio più evidente di solito . E non vedo come l'utente viene messo più a rischio rispetto rispetto ad andare a un collegamento casuale su jsFiddle.

    
posta worldsayshi 28.01.2013 - 17:43
fonte

1 risposta

7

Se tutto quello che stai facendo è compilare il codice (prendere il codice dell'utente e trasformarlo senza eseguirlo effettivamente), non è diverso rispetto alla sicurezza di qualsiasi altro programma online. Hai un programma (un compilatore) che prende input dell'utente potenzialmente non attendibile (il codice dell'utente) e fa qualcosa con esso, e devi assicurarti che non faccia nulla che non dovrebbe nemmeno quando viene fornito un input dannoso. Per un compilatore, molti dei rischi di sicurezza Web standard (SQL injection, CSRF) in realtà non si applicano, ma è necessario verificare i rischi come questi:

  • Per le funzionalità del linguaggio come C #include , fai sicuro di non permettere di includere file al di fuori dei file di libreria standard.
  • Alcune lingue possono impiegare CPU o memoria arbitrariamente grandi per la compilazione (grazie a funzioni come modelli completi di Turing ) di C ++, quindi devi proteggerti dalla negazione del servizio. Tuttavia, i sistemi operativi e i server Web hanno da tempo funzionalità per terminare processi che richiedono troppo tempo o diventano troppo grandi.

Se stai interpretando e eseguendo il codice dell'utente, la sicurezza richiede l'esecuzione del codice utente in una sandbox di qualche tipo. Ad esempio, se si disabilitano tutte le chiamate di libreria che coinvolgono file o I / O di rete e chiamate di sistema operativo simili e se si dispone dei limiti sopra citati su CPU e memoria, in teoria il codice utente non può fare nulla di male. In pratica, questo può essere molto difficile da ottenere. Ad esempio, Python consente di eseguire facilmente codice con globali limitati (in modo da limitare il modulo os ), ma le funzionalità di linguaggio incorporate e l'introspezione forniscono ancora abbastanza funzionalità per uscire dalla sandbox. (Vedi qui .)

Un altro approccio per proteggere un interprete o REPL online è eseguire tutto sul lato client (usando JavaScript e, possibilmente, strumenti come Emscripten Se il codice utente viene eseguito sulla macchina dell'utente, il codice utente malevolo non è in realtà il tuo problema.

Aggiornamento: come sottolinea @JimmyHoffa, un altro approccio consiste nell'utilizzare il sistema operativo o il software VM per fornire una sandbox più completa di quella progettata dal linguaggio di programmazione. Per alcuni esempi, vedi Sandbox di Chromium per Windows o varie opzioni di Linux .

    
risposta data 28.01.2013 - 18:29
fonte

Leggi altre domande sui tag