Sì, puoi leggere la memoria dei processi che possiedi.
Su Windows è necessario aprire un handle per il processo con PROCESS_VM_READ
rights, e puoi usare ReadProcessMemory
per leggere la memoria di quel processo (non sorprendentemente). È necessario essere in esecuzione in un contesto con il token di sicurezza appropriato per far corrispondere una regola nel DACL (elenco di controllo di accesso) del processo o ottenere un privilegio che consenta l'accesso al processo globale (ad esempio SeDebugPrivilege).
Su Linux puoi leggere /proc/$pid/mem
se sei il proprietario di quel processo o root.
Questo è interamente dal design. I processi esistono sotto il tuo contesto di sicurezza, quindi puoi accedervi. Se esegui codice dannoso sotto lo stesso contesto di sicurezza, ha accesso a tutto ciò che fai.
C'è comunque un vantaggio da uno scenario simile in un moderno sistema Windows - livelli di integrità . I processi possono essere suddivisi in diversi livelli di integrità che descrivono la loro affidabilità . Un processo di bassa integrità è limitato da molte operazioni, compreso l'accesso interprocesso a processi ad alta integrità. Il confine tra bassa integrità e alta integrità viene spesso gestito tramite prompt di elevazione UAC (User Access Control) e desktop sicuro. Ad esempio, KeePass utilizza questo in modo che un browser che sfrutta l'esecuzione di codice in un processo a bassa integrità non possa ottenere l'accesso diretto al processo KeePass. Sebbene UAC stesso non sia considerato un limite di sicurezza, i livelli di integrità sono.
Molti gestori di password tentano anche di rendere difficile la decodifica della chiave principale e della password dai dump della memoria. Su Windows è possibile utilizzare la API CryptProtectMemory per crittografare i dati in memoria utilizzando una chiave memorizzato nel sottosistema dell'autorità di sicurezza locale (LSASS) che è protetto dal sistema operativo, richiedendo quindi privilegi amministrativi (SYSTEM, infatti) per scoprire la chiave.
Linux con le patch grsecurity ha alcune restrizioni sull'accesso a /proc
che può anche fornire alcuni vantaggi in termini di sicurezza in questi tipi di scenari, anche se non sono abbastanza esperto nelle opzioni grsec o internals Linux per sapere esattamente come funzionano e cosa esattamente impediscono.