Parametro del compilatore per isolare un programma C ++

0

Esiste un insieme di parametri del compilatore che possono essere utilizzati per impedire a un programma C ++ di accedere alla maggior parte delle funzioni di sistema, lasciandolo accesso a read / write a stdin / stdout, ma altrimenti non può danneggiare il sistema.

Questo mi sembra utile per sistemi come un server di invio dei compiti a casa o un server "tryit" online.

    
posta Stack Tracer 30.04.2018 - 01:18
fonte

1 risposta

1

Fornire tali restrizioni di solito non è considerato il compito di un compilatore e sarebbe molto difficile farlo comunque. Anche se solo un set limitato di librerie sarebbe disponibile per il collegamento, è ancora possibile chiamare direttamente in syscalls, cioè non è necessaria alcuna libreria.

Per il caso d'uso che si prevede (invio di compiti a casa) si dovrebbe invece eseguire il programma generato all'interno di un ambiente ristretto, cioè sandboxing all'interno di una macchina virtuale, contenitori o simili. Nel caso più semplice potresti eseguire il codice come utente diverso e limitato, ma dovresti essere davvero sicuro che il tuo sistema non sia sfruttato da un utente con privilegi bassi.

Ma c'è un altro caso d'uso interessante in cui lo sviluppatore vuole limitare le capacità del programma al fine di ridurre l'impatto di possibili bug nel programma. Qui tecnologie come pegno , seccomp o simili consentono al programma di rinunciare esplicitamente alla possibilità di effettuare chiamate di sistema specifiche (che non possono mai essere acquisite di nuovo) in modo che un errore nel programma non possa essere utilizzato per causare molto danno.

Utilizzando l'ultima idea in cui il programma si limita a se stesso potrebbe essere usato anche nel tuo caso d'uso per abilitare tali restrizioni prima che venga chiamata main . Si potrebbe fare questo per avere un runtime del compilatore diverso o avere altri modi per eseguire codice prima del principale . Personalmente avrei molto meno fiducia in una soluzione del genere dal momento che molto più può andare storto rispetto a correre dentro una vera e propria sandbox.

Vedi anche queste domande su Unix & Linux dove l'OP tenta di risolvere un problema simile e dove una soluzione che utilizza seccomp è descritta in dettaglio.

    
risposta data 30.04.2018 - 06:08
fonte

Leggi altre domande sui tag