Sto provando a modellare & implementare una soluzione di crittografia trasparente per processo basata su file per Linux. Voglio che ogni processo abbia i propri file crittografati. Voglio bloccare firefox leggendo la mia chiave privata gpg ad esempio (diciamo che la mia chiave privata non è crittografata per impostazione predefinita)
Attualmente è il seguente:
- Aggancia i wrapper syscall (attraverso una libreria iniettata con
LD_PRELOAD
a livello globale) per l'accesso ai file (aperto, aperto, letto, scrivi, creat, chiudi) e controlla se il percorso per accedere è coperto dalla crittografia (ad esempio ~ / .mozilla). se il percorso non viene chiamato, viene chiamata la funzione normale. - Chiedi al gestore delle chiavi (un demone privilegiato) le chiavi tramite un socket unix
- Encrypt (su write / aggiungi / crea) o decrypt (on read) i dati
Le mie domande sono:
- Sto usando recvmsg / sendmsg per trovare il pid che ha richiesto una chiave. Un avversario può manometterlo?
- Sto usando
/proc/*something*/exe
per trovare il percorso dell'eseguibile del pid. è sicuro (può un processo fingere?) - Il gestore delle chiavi fornisce la stessa chiave ai processi con lo stesso percorso exec e uid. c'è un modo migliore per modellarlo?