Qualcuno mi dice come bloccare alcune chiamate di sistema specifiche all'interno di un programma, per favore? Sto costruendo un sistema che prende un pezzo di codice sorgente C, lo compila con gcc e lo esegue. Per motivi di sicurezza, ho bisogno di impedire al programma compilato di chiamare alcune chiamate di sistema. C'è un modo per farlo, dal livello del codice sorgente (ad esempio, eliminando i file di intestazione di gcc, rilevando chiamate esterne dannose, ...) al livello eseguibile?GCC come bloccare le chiamate di sistema all'interno di un programma?
Modificato n. 1: Aggiungere dettagli sulle chiamate dannose.
Modificato # 2: Il mio sistema è GNU/Linux.
A cura # 3:
ho provato alcuni metodi nel giro di pochi giorni e qui ci sono le conclusioni che ho ottenuto finora:
- la scansione del codice sorgente di non risolve il principale problema dal momento che si può sempre nascondere il suo file sorgente C piuttosto bene.
- "Sostituire il simbolo C" funziona bene per le librerie, ma per le chiamate di sistema non ho ottenuto ciò che volevo. Questa idea non è morta, tuttavia, fare questo mi causerebbe sicuramente molto tempo di hacking (gcc e/o ld).
- La deiscalizzazione dei permessi funziona come un incantesimo. Potrei usare fakeroot o un utente "ospite" per farlo. Questo metodo è anche il più semplice da implementare.
L'altro è native client che non ho ancora provato ma sicuramente lo farei nel prossimo futuro a causa del comune tra il progetto e il mio lavoro.
Sembra una vera sfida. Dopotutto, quasi ogni programma C concepibile, in modo del tutto legittimo, effettua chiamate di sistema come: allocare memoria, leggere e scrivere file, usando stdin e stdout e così via. –
Che tipo di programma pensi che non faccia mai una chiamata di sistema? Per favore pubblica un esempio. –
@ High Performance Mark: Beh, voglio solo bloccare alcune chiamate di sistema specifiche dal momento che sono limitate, chiamate fork(), open(), ... @Neil Butterworth: Intendevo non tutte le chiamate di sistema ma malevoli chiamate di sistema, ad es execv() potrebbe essere usato per eseguire uno script BASH che cancella i miei dati sul disco. –