Cuando busco en Google esta pregunta, solo obtengo todo tipo de información sobre cómo proteger datos confidenciales, cómo cifrar el intercambio y cuán "peligroso" podría ser mantener un intercambio "normal" en un sistema Linux.
Pero no pude encontrar ningún software, método o "cómo" para realmente obtener (leer) cualquier dato de una partición de intercambio.
Entonces, mi pregunta es, como ciudadano "normal" que vive en Europa occidental, ¿es realmente necesario borrar o cifrar el intercambio en mi computadora? Y antes de que alguien responda "sí", ¿puedo tener un ejemplo de cómo podría probar y filtrar mi propio intercambio, de modo que pueda ver qué tipo de datos no están protegidos a pesar de mi hogar encriptado?
encryption
swap
Beto
fuente
fuente
Respuestas:
Es un juicio personal, uno que depende de cuánto valora la privacidad de sus datos y cuánto desea proteger sus datos para que no se expongan en caso de que caiga en manos de un atacante. Supongamos que tiene una computadora portátil y un día se la roban: ¿qué posibilidades hay de que un ladrón intente extraer contraseñas o claves de cifrado o datos privados, y le importa? A mucha gente no le importa, pero a algunos sí. Es cierto que la mayoría de los ladrones simplemente venderían la computadora portátil para obtener una ganancia financiera inmediata, pero hay casos en los que un atacante podría estar motivado para ir más allá al intentar acceder a los datos en sí.
La memoria de cualquier proceso podría potencialmente intercambiarse al espacio de intercambio. La pérdida de memoria puede ser peligrosa, el ejemplo obvio es Heartbleed. Vea cómo usé Heartbleed para robar la clave criptográfica privada de un sitio . La memoria expuesta por Heartbleed solo pertenece a un solo proceso, mientras que la memoria potencialmente expuesta por su espacio de intercambio pertenece a cada proceso. Imagine que se intercambia un proceso que contiene una clave privada o una lista de contraseñas (por ejemplo, navegador web): esos elementos aparecerán, en texto plano, en el espacio de intercambio. Extraerlos es una cuestión de tamizar a través de la memoria patrones particulares de datos; podrían ser datos ASCII de texto sin formato visibles a través de
strings
, o podría estar más involucrado, como en Heartbleed (donde la prueba es que algunos bytes consecutivos son un divisor de la clave criptográfica pública). Si tiene una partición encriptada / doméstica, lo que debe buscar es un bloque de datos que forma la clave de encriptación que desbloqueará los datos del usuario.Un ejemplo de trabajo:
hacer
bash -c 'echo SECRET=PASSWORD > /dev/null; sleep 1000'
para crear un proceso bash con algunos datos secretos en su pilahacer
sysctl vm.swappiness=100
para aumentar el intercambio (no es necesario, pero puede facilitar el ejemplo)ejecutar
top -c
, presione f, active la columna SWAP, presione q para volver a la vista superior del proceso, desplácese hacia abajo hasta que vea elbash -c
procesoen otro terminal, guarde el programa Chimnay Kanchi de Linux: ¿Cómo cargar la memoria del sistema? a
usemem.c
, compilarlogcc -o usemem usemem.c
y ejecutarlousemem &
repetidamente en un terminal. Esto usará hasta 512 MB de bloques de memoria a la vez. (No importa qué causa que la memoria se intercambie, podría ser el uso normal del sistema, un proceso de fuga o un ataque deliberado, el resultado final es el mismo)mire la parte superior, espere
bash -c
a que lo intercambien (valor de columna SWAP> 0)ahora corre
strings /dev/sdaX | grep SECRET
donde X es tu parcela de intercambioFelicitaciones: acaba de extraer datos "secretos" de la partición de intercambio. verá múltiples copias del texto SECRETO seguido de la "contraseña", las copias que incluyen la línea de comando completa filtrada del proceso bash principal, el proceso superior y el proceso 'bash -c'. Las líneas que no incluyen la línea de comando completa se han filtrado del proceso 'bash -c'.
Para probar que los secretos se escapan de la memoria del proceso, y no solo de la línea de comando, agregue la línea
unsigned char secret[] = "SECRET=XXXX";
a usemem.c (justo debajo de launsigned long mem;
línea). Vuelva a compilar y ejecuteusemem &
repetidamente, ystrings /dev/sdaX | grep SECRET
nuevamente. Esta vez verás el secreto 'XXXX' siendo filtrado.fuente
Esta pregunta nos lleva a una discusión de problemas entre el desarrollo de software, como el software que mantiene los datos confidenciales en la memoria y el cifrado de datos.
Entonces, para comenzar, debe leer algunos artículos de desarrollo práctico de software y cifrado de datos.
Comience a leer este artículo: http://www.ibm.com/developerworks/library/s-data.html?ns-311
Espero eso ayude.
fuente