Actualmente estoy usando thunderbird con gnupg para leer correos electrónicos cifrados. Si entiendo el comportamiento de intercambio correctamente, las páginas de memoria que contienen los correos electrónicos descifrados podrían intercambiarse y dejar rastros en el disco duro que en teoría podrían recuperarse más adelante de manera forense.
Si bien es posible usar un archivo de intercambio encriptado o deshabilitar el intercambio globalmente durante el uso de archivos confidenciales, afecta el rendimiento, puede olvidarse y requiere privilegios de root.
¿Es posible marcar ciertos archivos o programas para que no se intercambien? Incluso sin acceso de root? ¿Se podría escribir una aplicación que se pueda distribuir a usuarios técnicamente ingenuos y cuyos contenidos de memoria nunca se cambien al disco?
fuente
cgexec
thunderbird en él. Todavía necesita acceso de root, pero esa es la resolución de nivel de administrador. Si está desarrollando su propia aplicación, usaría mlock .mlock
, debe verificar.Respuestas:
En los comentarios, le sugerí que creara un cgroup, lo pusiera
memory.swappiness
a cero (para minimizar el intercambio) y ejecute su aplicación dentro de eso. Si hiciera eso, su aplicación probablemente no se intercambiaría a menos que estuviera ejecutando una memoria física tan increíblemente baja que el intercambio de páginas por programas en ese cgroup era la única forma de tener suficiente memoria física disponible.Para hacer esto en RHEL 6.5:
Asegúrese de que el
libcgroup
paquete esté instalado. Esto le da acceso a herramientas de espacio de usuario comocgcreate
ycgexec
.Inicie y habilite el
cgconfig
servicio para que los cambios en la configuración de cgroup sean persistentes entre reinicios. En RHEL, este servicio también debe montar los sistemas de archivos necesarios debajo del/cgroup
árbol.Crea el cgroup con
cgcreate -g memory:thunderbird
Establezca swappiness en cero en este grupo con
cgset -r memory.swappiness=0 thunderbird
Utilícelo
cgsnapshot -s > /etc/cgconfig.conf
para guardar una configuración persistente actualizada para elcgconfig
servicio (todos los cambios hasta ahora han sido cambios en tiempo de ejecución. Probablemente quiera guardar el archivo de configuración predeterminado en alguna parte y darle una revisión antes de convertirlo en la configuración persistente.Ahora puede usar
cgexec
para iniciar las aplicaciones deseadas dentro del grupothunderbird
c:[root @ xxx601 ~] # cgexec -g memoria: thunderbird ls
anaconda-ks.cfg a.out foreman.log index.html install.log install.log.syslog node.pp sleep sleep.c ssl-build stack test
[raíz @ xxx601 ~] #
En realidad no lo he
thunderbird
instalado, de lo contrario lo habría hecho. No estoy seguro de por qué el formato de lo anterior está en mal estado.Una alternativa
cgexec
sería iniciar thunderbird y agregar el PID altasks
archivo de la aplicación. Por ejemplo:[root @ xxx601 ~] # cat / cgroup / memory / thunderbird / tareas
[root @ xxx601 ~] # pidof httpd
25926 10227 10226 10225 10163 10162 10161 10160 10159 10157 10156 10155 10152 10109
[root @ xxx601 ~] # echo 25926> / cgroup / memory / thunderbird / tareas
[root @ xxx601 ~] # cat / cgroup / memory / thunderbird / tareas
25926
Una vez más, hay que mencionar que esto técnicamente no evita el intercambio, pero a menos que se modifique la aplicación en sí, probablemente sea su mejor opción. Acabo de encontrar
memory.memsw.limit_in_bytes
que parece que podría ser un control más directo para forzar que no haya intercambio, pero no he jugado lo suficiente como para sentirme cómodo diciendo que soluciona el problema por completo. Dicho esto, podría ser algo a tener en cuenta después de esto.La respuesta real sería tener la
mlock
información confidencial de la aplicación para evitar este tipo de preocupación. Sin embargo, estoy dispuesto a apostar que una aplicación como Thunderbird lo hace, pero no sé lo suficiente sobre los aspectos internos para comentar sobre eso.fuente
chroot
un espacio de nombres en ununshare
d--mount
, creo. Haga eso y estoy dispuesto a apostar que el efecto de rendimiento final sería mejor que un intercambio cifrado.memory.swappiness=0
crees? No lo sabría, pero tengo curiosidad.MADV_DONTDUMP
. Sin embargo, la mayoría de las veces, las personas que están preocupadas por el intercambio de información sensible están preocupadas por el robo de las computadoras portátiles y el peinado del área de intercambio. En el momento en que inician los volcados del núcleo, el sistema ya se ha visto completamente comprometido.Las aplicaciones pueden bloquear su memoria para que no se puedan intercambiar.
Sin embargo, no conozco una forma de influir en esto desde afuera. La aplicación tendría que estar escrita para usar esto por sí misma. Con los correos probablemente sea particularmente difícil ya que generalmente también involucra programas externos para ver archivos adjuntos y demás.
Además, incluso con memlock existe la posibilidad de que termine en su partición de intercambio, cuando utiliza suspender en el disco que escribe toda la memoria en el disco, independientemente de las preferencias que no sean de intercambio.
Es más fácil simplemente ir a la encriptación completa del disco en primer lugar.
fuente
Sí, una aplicación puede evitar que se intercambie parte de su memoria con la
mlock
llamada al sistema. Sin embargo, esto no es realmente útil en su caso.Los datos confidenciales no se encuentran solo en la memoria de la aplicación. Se termina en los archivos temporales en diversos lugares (
/tmp
,/var/spool
, etc.). Thunderbird está mostrando el correo electrónico descifrado, por lo que también deberías bloquearlo en la RAM.Si desea asegurarse de que su disco no contenga rastros de archivos confidenciales, debe cifrar su intercambio, así como todas las ubicaciones potenciales de archivos temporales (en particular,
/tmp
si no es tmpfs, y la mayoría/var
, además a su directorio de inicio, por supuesto).El impacto del intercambio cifrado en el rendimiento es pequeño o nulo. El cifrado es mucho más rápido que la E / S de disco.
fuente
chroot
contenedor de espacio de nombres conswapoff
sería una mejor alternativa al intercambio cifrado. Muy buena respuesta: ninguna otra respuesta menciona otros efectos del sistema de archivos. Yo mismo, simplemente no tengo unswap
- No tengo ninguna computadora con menos de 4GB de RAM, y no puedo ver ningún beneficio al usarla. Su uso solo es práctico para cualquiera de esas máquinas en lo que respecta a la suspensión, y eso es fácil de escribir.Solo estoy pensando si sería mejor comenzar cambiando la prioridad del proceso de solicitud, por ejemplo, con un script de inicio comenzando con una alta prioridad usando
nice
yrenice
y con la prioridad de E / S cambiar eso conionice
y luego ver qué sucedePuede 'ajustar' la aplicación al nivel de prioridad más alto, por ejemplo, de
-20
esa manera aún deja que el sistema operativo haga lo que hace mejor al tomar la decisión sobre cuándo intercambiar los procesos de la aplicación.Pero otros han sugerido que si desea más control y granularidad, debe comenzar a mirar
cgroups
y configurarmemory.swappiness
fuente