Ho pensato a uno scenario in cui si consente agli utenti (può essere chiunque, possibilmente con cattive intenzioni) di inviare il codice che viene eseguito su un PC Linux (chiamiamolo nodo di riferimento). L'obiettivo è creare una sorta di ambiente di benchmark automatico per le routine a thread singolo. Diciamo che un sito web pubblica del codice su un proxy. Questo proxy passa questo codice al nodo di riferimento e il nodo di riferimento ha solo una connessione Ethernet al proxy, non a Internet stesso.Che danno può fare un programma C/asm su Linux quando viene eseguito da un utente non privilegiato?
Se si consente a qualsiasi utente di inviare un codice C/asm sul nodo di riferimento, quali saranno le sfide di sicurezza? I seguenti ipotesi:
- Il programma viene eseguito come utente senza privilegi
- Il proxy avrà la possibilità di uccidere il processo sul nodo di riferimento (prendere lo scenario di un ciclo infinito per esempio)
- la delega è in grado di riavviare il nodo di riferimento (se le risposte ...)
Quindi, è in pratica possibile che questo programma spaziale utente può effettuare l'arresto del sistema operativo, o di rendere la macchina disponibile al proxy ? Con assembly il programmatore può fare praticamente quello che vuole (manipolare il puntatore dello stack per esempio), e mi chiedo quanto Linux restrittivo/robusto sia in questo senso. So anche della possibilità che i processi richiedano aree di memoria condivisa con altri processi (shm), che potrebbero anche avere un ruolo in questo caso?
Qualsiasi letteratura o articoli su questo argomento sono i benvenuti.
Le soluzioni sandbox potrebbero anche essere interessanti, ma è importante che la CPU esegua il 100% di ciò che è in grado di fare durante il benchmark (almeno sul core del benchmark in esecuzione).
correlati: http://stackoverflow.com/questions/792764/secure-way-to-run-other-people-code-sandbox-on-my-server –