2012-11-03 27 views
7

Sto lavorando su un sistema di tipo Ideone in cui il codice utente non attendibile deve essere eseguito in modalità sandbox.Come impedire che una chiamata di sistema venga eseguita con ptrace

Per questo ho cercato le possibilità di ptrace per un primo livello di protezione. Tuttavia, dopo alcuni esperimenti sembra che:

  • Posso intercettare una chiamata di sistema prima che venga chiamata e modificare gli argomenti di input.
  • Posso intercettare una chiamata di sistema dopo che è stata chiamata e modificare il valore di ritorno.
  • Tuttavia, non sembra esserci alcun modo per evitare che la chiamata si interrompa del tutto (tranne che per uccidere l'intera applicazione).

Desidero intercettare determinate chiamate di sistema e restituire un codice risultato falso senza che la chiamata si verifichi effettivamente. C'è un modo per implementare questo?

+0

PTRACE_SYSEMU? Secondo la manpage: "Questa chiamata è usata dalla modalità utente come Linux che vuole emulare tutte le chiamate di sistema del bambino" – Krumelur

risposta

2

Si prega di tenere presente che il vostro sandbox può solo essere sicuro se il codice che esegue non è multi-thread. Dovrai anche fare molta attenzione per evitare che il codice sandbox venga estratto dal biforcarsi.

Si veda, ad esempio, la seguente discussione di un elaborato sui problemi di Robert Watson:

Exploiting races in system call wrappers

La carta è legata al detto articolo, ma io offro il link qui direttamente come bene:

"Exploiting Concurrency Vulnerabilities in System Call Wrappers"

l'approccio migliore sembra essere ancora, come è raccomandato da Watson: integrare il quadro di sicurezza del tutto nel kernel e prendersi cura nel suo utilizzo per evitare Concu problemi di competenza. Linux e NetBSD e Mac OS X e altri sistemi orientati alla sicurezza forniscono già tali framework e quindi tutto ciò che è necessario se si utilizzano tali sistemi è quello di implementare le policy all'interno di tali framework esistenti. Cioè non tentare nemmeno di implementare i criteri di sicurezza in involucri di chiamata di sistema o altri meccanismi di interposizione di chiamata di sistema.

+0

Oppure, dal momento che si prevede di impedire all'applicazione di chiamare determinate chiamate di sistema in primo luogo, è possibile impedirle di biforcarsi o creare discussioni. Ciò ridurrebbe notevolmente le capacità del programma. – petersohn

Problemi correlati