Test di Algoritmo C ++ su un server

5

Sto facendo un server di test C ++ e voglio fare i programmi compilati:

  • non ha accesso per leggere o scrivere file.
  • non ha accesso per aprire o connettersi tramite i socket.
  • non essere in grado di lavorare con QUALSIASI librerie C ++ (ad esempio di sistema) non standard
  • ha pieno accesso alla CPU (nessuna o pochissima perdita di prestazioni).
  • ha una memoria RAM limitata.
  • ha un tempo di esecuzione limitato.

Spero di non aver dimenticato nulla, ma quello che voglio fare è creare un normale sistema di test senza possibilità di essere hackerato attraverso il programma compilato.

Qualche consiglio, link o altro? Qualche opzione del compilatore?

Ecco quale sarà il sistema attuale:

Sistema operativo: Ubuntu

Compilatore: GCC

Modificato:

Sai se è possibile disabilitare TUTTE le librerie di sistema nel compilatore? Ciò aiuterebbe molto:)

Modificato (di nuovo):

Ecco cosa mi è venuto in mente: creo un programma che si auto-incolla e il processo genitore tiene traccia del testee per i timelimits (mentre è ancora possibile usare qualche comando di sistema anche per quello) e il processo figlio limita se stesso (risorse, seccomp) ed esegue il software non attendibile.

    
posta Pijusn 08.01.2012 - 13:56
fonte

5 risposte

3

Potresti essere interessato a seccomp . Questa è una funzionalità con cui Linux esegue un processo con solo un insieme molto limitato di chiamate di sistema disponibili; il kernel uccide il processo in ogni tentativo di eseguire qualsiasi altra chiamata. Questo è concettualmente il modo giusto per fare questo tipo di isolamento: utilizzare una (piccola) lista bianca di chiamate di sistema consentite, invece di una lista nera di chiamate non consentite. Seccomp può essere utilizzato da cromo (il lato opensource di Google Chrome) quindi ci sono buone probabilità che rimanga supportato per il momento.

La pagina di Wikipedia ha pochi link, tra cui seccomp-nurse , che potrebbe essere il software che stai cercando per.

Per il consumo di tempo e di memoria della CPU, il kernel di Linux può imporre limiti rigidi su una base per processo; vedi setrlimit .

    
risposta data 08.01.2012 - 16:24
fonte
2

Ciò che descrivi sembra molto simile a NaCl di Google. Google ha progettato questo come un modo sicuro per eseguire codice x86 nativo nel browser Web, ma hanno un campione che viene eseguito autonomamente senza browser. Includono un compilatore GCC che emette NaCl-x86 piuttosto che standard x86.

    
risposta data 08.01.2012 - 22:06
fonte
1

Probabilmente dovresti eseguire il programma all'interno di una macchina virtuale, probabilmente creato usando Xen se non vuoi paga per VMWare.

    
risposta data 08.01.2012 - 15:11
fonte
1

Ecco un'altra opzione che ho scoperto. Il comando terminale gksu ha un'opzione per eseguire il comando come un altro utente:

--user < user >, -u < user >

Call as the specified user.

Penso che questo potrebbe creare una sorta di sandbox.

P.S. Ha fatto di questo una nuova risposta in quanto è una delle possibili soluzioni e merita di essere commentata separatamente.

    
risposta data 08.01.2012 - 17:37
fonte
1

Hai mai pensato di usare chroot? link

È più libero, ma funzionerà. Seccomp si occupa di syscalls, la semplice rimozione delle librerie di sistema non funzionerà in quanto le persone possono semplicemente aggiungere le loro syscalls. Ma chroot è un altro livello per assicurarsi che non scoppino e un altro livello di sicurezza. Puoi creare dinamicamente una prigione di chroot, quindi compilare abbastanza facilmente e far funzionare ogni processo al suo interno senza preoccuparti dell'interazione di due persone,

    
risposta data 11.01.2012 - 21:22
fonte

Leggi altre domande sui tag