Independientemente; ¿Podría un programa malicioso robar teóricamente datos de la memoria primaria (RAM)?
Con permisos suficientes, absolutamente. La forma en que las computadoras modernas administran la memoria es un poco compleja, pero su idea es fácil de entender. Una computadora x86 usa dos "anillos" de privilegios, llamados anillo 0 y anillo 3 (tiene más, pero no están siendo utilizados por ningún sistema operativo popular). El anillo 0 es altamente privilegiado y puede hacer casi cualquier cosa. El anillo 3 tiene menos privilegios y debe pedirle al código que se ejecuta en el anillo 0 (el kernel) que haga cualquier cosa privilegiada en su nombre (esto se denomina una llamada del sistema). En todos los procesadores x86 modernos, hay una protección adicional, llamada Unidad de administración de memoria, o MMU. Permite que cada proceso tenga su propio espacio de direcciones virtuales, y si intenta acceder a cualquier otra memoria, se bloqueará.
Esto parece que todos los procesos están aislados, ¿verdad? Desafortunadamente no es tan simple. El kernel, que se ejecuta en el anillo 0, proporciona una interfaz para que los procesos se comuniquen entre sí e incluso accedan a la memoria del otro indirectamente, mediante una llamada del sistema. Si la llamada al sistema está permitida o no, depende de los permisos del proceso. Un proceso malintencionado con altos permisos puede simplemente pedirle al núcleo que le dé acceso a la memoria de otro proceso, y el núcleo estará encantado de hacerlo. Los procesos maliciosos sin permisos no pueden hacer eso. Sin embargo, es importante tener en cuenta que en muchos sistemas, simplemente ejecutarse como el mismo usuario que otro proceso se considera un permiso suficiente. Dos procesos que se ejecutan como el mismo usuario pueden leer y escribir en la memoria del otro en algunos sistemas.
La primera respuesta explica cómo funciona esto en Windows. En Linux, las formas equivalentes de leer las memorias de otro proceso son las llamadas al sistema ptrace()
, process_vm_readv()
y el archivo /proc/<pid>/mem
. Las dos primeras comprobaciones aseguran que el proceso de llamada se esté ejecutando como el mismo usuario que el objetivo o que tenga permisos de reemplazo específicos (excepto en algunos sistemas con funciones de seguridad adicionales). El último archivo solo puede ser leído por el programa que lo posee.
Aunque el archivo passwords.txt solo se 'almacena' en la memoria secundaria permanente del USB, aparecerá brevemente en la RAM de la computadora que utilizo para montar el USB, descifrar los datos y abrir el archivo. Es aquí donde sospecho que una debilidad reside en mí.
En realidad, la clave está en la memoria constantemente, no solo brevemente. Permanecerá en la memoria mientras el dispositivo esté montado. Esto es fundamentalmente necesario para que el cifrado / descifrado funcione. Tenga en cuenta que probablemente será un derivado de la contraseña, no la contraseña en sí, pero aún es suficiente para descifrar la unidad. Sin embargo, está presente en el kernel que, al ser el anillo 0, no puede accederse mediante procesos normales.
(Pregunta paralela): Aparte de la solución antivirus evidente para mitigar un programa malicioso, ¿cómo puede protegerse la RAM?
Suponiendo que no hay errores explotables, dos procesos se ejecutan ya que diferentes usuarios no podrán acceder a la memoria del otro. Ejecutar un usuario como otro proceso proporciona un mejor aislamiento. Tenga en cuenta que, en Windows y la mayoría de Linux, si dos procesos gráficos de diferentes usuarios se ejecutan simultáneamente, aún pueden comunicarse a través de API de gráficos. Windows intenta bloquear esto, pero se ha omitido repetidamente. Además, si el núcleo está comprometido (lo que requiere una explotación avanzada), todas las apuestas están desactivadas, ya que el código del anillo 0 puede acceder a cualquier memoria en circunstancias normales.
El antivirus no ayuda mucho, ya que solo tiende a proteger de malware antiguo, mal escrito o ya descubierto y producido en masa. Los programas maliciosos especializados, incluso si son bastante aficionados, aún evitarán el antivirus con alta probabilidad.