Fornire solo le autorizzazioni di esecuzione a un binario Linux (impedire l'ispezione)?

2

Sto scrivendo un incarico per un corso sulla sicurezza, e sto cercando di creare un eseguibile con cui gli studenti possano interagire (ad esempio, eseguire), ma non ispezionare. In particolare quello che mi piacerebbe fosse che fossero in grado di eseguire il binario ma non essere in grado di controllarne il contenuto in alcun modo - leggendo il file, allegando un debugger, ecc.

Da tentativi ed errori, sembra che dare il permesso di "altro" solo esecuzione, i non proprietari del file sono in grado di eseguire ma non di leggere o collegare un debugger (incluso collegandosi ad esso dopo che è in esecuzione - in realtà è ptrace che dà l'errore, quindi sono convinto che non è solo gdb che non riesce a leggere il file binario associato). La mia domanda è: ho ragione su questo? Dare agli studenti solo autorizzazioni di esecuzione sufficienti? Per essere concreti, viene chiesto loro di decifrare la crittografia e la chiave è memorizzata nel binario, quindi se possono ispezionare il binario in qualsiasi capacità (inclusa la memoria del processo), saranno in grado di eludere la sfida del assegnazione.

    
posta joshlf 11.11.2015 - 06:10
fonte

1 risposta

1

Questa è una risposta parziale in quanto ho poco tempo ...

Il tuo approccio impedirebbe una semplice lettura del file, ma gli studenti potrebbero ancora imbrogliare, ad es. di LD_PRELOAD ing e modifica di qualsiasi funzione interna per stampare letteralmente lo stack / heap sullo schermo. Devi anche evitare modifiche all'ambiente (puoi annullare LD_PRELOAD come prima cosa nella tua main() ).

Gli studenti potrebbero anche strace del tuo programma, e questo potrebbe o meno rivelare stringhe interne a seconda delle chiamate di sistema effettuate con loro. Tuttavia, secondo commento di Gilles su questa domanda , strace non onorerà suid / sgid bit durante l'esecuzione.

Per impedire sia gdb / ptrace che attacca che strace , puoi rendere il programma suid / sgid a un'identità specifica che ha accesso a un file chmod ed a 400. Ciò significa che l'eseguibile deve essere eseguito con quell'identità suid per accedere al segreto. Infatti, se ricordo bene, LD_PRELOAD dovrebbe anche essere ignorato da suid binari.

Puoi facilmente verificarlo creando un programma che stampi i risultati di geteuid() e getuid() ed eseguilo, chown ed a root e con setuid bit, sia normalmente che con strace .

    
risposta data 11.11.2015 - 13:08
fonte

Leggi altre domande sui tag