Rileva se un altro processo legge la memoria del mio programma

1

Scenario ipotetico: ho scritto un programma che gira sulla mia macchina. Un utente malintenzionato vuole leggere (non scrivere) informazioni critiche sulla sicurezza dalla memoria del mio programma. Per raggiungere questo obiettivo, ha hackerato la mia macchina, installato un programma in sinergia più un driver del kernel per nascondere il processo e l'attività dei suoi programmi.

È possibile modificare il mio programma nel modo in cui rileva (solo) questo tentativo? Per contrassegnare le chiavi o qualsiasi altra cosa come possibilmente compromessa? Non sto chiedendo dettagli di programmazione.

    
posta Martin Tausch 21.09.2016 - 14:17
fonte

3 risposte

2

Risposta semplice: No.

Ma perché? Non conosco alcun sistema operativo comune che separa i processi abbastanza da prevenire o rilevare in modo affidabile la memoria di lettura. In Windows, si è particolarmente persi, a meno che non si esegua la modalità amministratore, nel qual caso i processi non privilegiati dovrebbero essere in grado di ottenere solo alcune informazioni limitate su di te (a meno che non vengano eseguite anche in modalità privilegiata). Posso anche semplicemente bloccare la tua applicazione "estremamente sicura", leggere tutti i suoi dati e poi semplicemente ucciderla.

Quando un attaccante ha un driver al suo fianco, sei particolarmente perso, dato che ora l'autore dell'attacco è su ring0 e può essenzialmente fare qualsiasi cosa sul tuo sistema.

Sarebbe utile un'altra applicazione? No. Niente ti aiuterà, perché essenzialmente è il gioco di "I detect X" "quindi mi muovo in Y, X non ti aiuterò". Se l'attaccante sa come funziona la tua applicazione (e questo vale per qualsiasi programma che rilasci), allora può pensare a un altro metodo per ignorare tutta la sua sicurezza. Questo è essenzialmente ciò che accade nel gioco online, nello sviluppo dei virus e nel cracking del software per anni. E anche aziende multimilionarie non sono state in grado di risolvere questo problema.

Solo l'aiuto dovrebbe essere di livello inferiore a quello dell'attaccante. Nel tuo caso è hardware.

    
risposta data 22.09.2016 - 01:31
fonte
1

Non credo che questo sia possibile su piattaforme standard attuali.

Penso che avresti bisogno almeno di un'applicazione di monitoraggio indipendente.

UPDATE: " Ma una seconda applicazione sarebbe sicuramente in grado di rilevare questo? " - difficile essere definitivo lì, ho paura di non essere abbastanza informato sulla programmazione del sistema Windows. È possibile che non sarebbe possibile senza hardware speciale. Ma se è possibile, mi aspetterei che sarebbe il caso solo utilizzando librerie di sistema di basso livello.

    
risposta data 21.09.2016 - 14:22
fonte
0

Ipoteticamente parlando (dal momento che non stai chiedendo dettagli specifici), è possibile. Tuttavia non è affidabile al 100% e ci sono sempre soluzioni alternative.

Innanzitutto, se i tuoi dati protetti sono 1-8 byte e corri su x86, puoi impostare un punto di interruzione hardware che verrà attivato quando si accede a questi dati. Vedere. ad esempio, link

Se è necessario proteggere più di 32 byte (ci sono 4 registri di breakpoint hardware), è possibile utilizzare VirtualProtect con PAGE_GUARD, o rendere la pagina illeggibile (PAGE_NOACCESS).

Quando devi accedere personalmente ai dati, rimuovi il flag / breakpoint, accedi ai dati e ripristinalo. Questo ovviamente crea la condizione di gara, ma la finestra di opportunità è breve.

Naturalmente se qualcuno ha un'applicazione con un driver del kernel, possono rimuovere i punti di interruzione dell'hardware o modificare i flag delle pagine dell'applicazione tramite il driver del kernel, quindi non funzionerà. Tuttavia, se usano solo il driver per nascondere l'applicazione, questo dovrebbe funzionare.

    
risposta data 22.09.2016 - 00:15
fonte

Leggi altre domande sui tag