Asegúrese de que los datos no permanezcan después de ser eliminados

12

Estoy tratando de hacer un servicio que mantenga la menor cantidad de datos posible sobre sus usuarios. Con ese fin, quiero asegurarme de que alguien que use herramientas forenses no obtenga más información que la que obtendría al ver mi base de datos o sistema de archivos. En otras palabras, no deberías poder revisar mi disco duro con un editor hexadecimal y encontrar un mensaje que un usuario eliminó ayer.

Medidas que ya he tomado:

Borro los archivos de registro con información de identificación dentro de los 30 minutos. He desactivado el intercambio. Tengo /tmp , /home , /root y /var/log montado en un disco RAM. He eliminado rm y he puesto un enlace físico a srm en su lugar.

Tengo un disco duro que no reasigna bloques, a menos que haya un sector defectuoso.

Problemas con mi sistema actualmente:

  1. Si se modifica un archivo confidencial y se hace más pequeño, eso (AFAIK) desasignará un sector, que no se destruirá, incluso si se llama a srm en el archivo.
  2. El cambio de rm no hace nada para los programas que llaman a desvincular directamente.
  3. Tengo filas en MySQL que contienen datos confidenciales. Borro esas filas, pero me preocupa que MySQL las mantenga de alguna manera.
    Edición: parece que SQLite tiene una configuración de configuración llamada secure_delete . Usaré SQLite en su lugar.

Posibles mejoras:

  • Establezca el atributo chattr s (eliminación segura) No tengo este conjunto ahora porque el manual de chattr dice que ext2 / 3/4 ignora esta bandera. Encontré información contradictoria acerca de si ext4 lo soporta. ¿Qué sistemas de archivos lo respetan?
  • Limpie el espacio libre. Parece una especie de enfoque de martillo, pero no puedo encontrar una manera de resolver el # 1 de lo contrario. Además, las formas que he visto para hacer esto implican hacer un archivo realmente grande y luego borrarlo. Me preocupa que pueda hacer que un programa se bloquee cuando este sistema está casi sin espacio.
  • Podría hacer copias de seguridad de texto de la base de datos MySQL (que definitivamente no contienen las filas eliminadas) eliminar los originales y luego restaurarlos.
  • ¿Cambiar a un demonio SQL diferente?
  • Reinicia para borrar el disco RAM. Sin embargo, no quiero tiempo de inactividad frecuente. Además, no haría nada para eliminar los datos persistentes en el disco duro.

¿Cuál es la mejor manera de solucionar estos dos problemas de three ? Actualmente estoy usando Arch Linux con ext3 y MySQL SQLite. Estoy dispuesto a cambiar cualquiera de esos.

Gracias por su atención!

    
pregunta Nick ODell 12.10.2013 - 09:33
fuente

2 respuestas

5

Destruir datos correctamente sin dañar físicamente los medios es una tarea bastante difícil, especialmente porque los discos duros han comenzado a venir con reasignaciones de bloque. Esto es órdenes de magnitud más difíciles (si no imposibles) con los SSD, ya que allí el firmware hace literalmente magia con lo que realmente se almacena en la memoria flash. Como mi comentario que solicita información más detallada sobre su configuración se realizó sin una respuesta, supongamos que se trata de un SSD.

Ya que no puedes realmente destruir los datos, lo siguiente es hacerlos inaccesibles . Que es en lo que el cifrado es generalmente bueno (cuando se hace correctamente). Por lo tanto, su solución genérica es cifrar todos los datos que desea poder olvidar fácilmente y desechar la clave una vez que llegue ese momento.

La implementación de varios servicios puede diferir mucho y puede (o no) requerir cambios sustanciales en su infraestructura. En todos los casos, sin embargo, se aplicarán dos reglas:

  1. use un buen algoritmo de cifrado y configuración (modo de operación, generación IV)

  2. asegúrate de que puedas descartar la clave (¡en realidad, datos confidenciales de texto sin formato para esa cuestión!) realmente correctamente: esto básicamente obliga a almacenarla físicamente en la memoria RAM y recordar sobrescribirla con otra cosa cuando no sea necesario. más 1 .

Un ejemplo simple (en Linux) relacionado con los directorios personales de los usuarios

  • Cree un archivo normal: su tamaño determinará el tamaño de la casa del usuario, lo llenará con (pseudo) datos aleatorios (una forma de hacerlo es escribir ceros en un dispositivo dm-crypt respaldado por ese archivo)

  • Cree un dispositivo dm-crypt respaldado por el archivo, mantenga la contraseña almacenada solo en la RAM (consulte 1 ). Si usó un dispositivo dm-crypt para "aleatorizar" el archivo de respaldo en el paso anterior, use una contraseña diferente ahora.

  • Cree un sistema de archivos en el dispositivo criptográfico;

  • Monte en la casa del usuario;

  • Cuando decida eliminar el hogar, desmóntelo, deseche la llave, elimine el archivo (posiblemente llénelo nuevamente con datos aleatorios, pero recuerde que esto no tiene mucho sentido para los SSD).

1 La parte bastante complicada y su millaje pueden variar (como siempre con la seguridad). El punto es que, incluso para un servidor, hay casos en que esa clave (u otros datos confidenciales) pueden estar presentes en la memoria cuando no debería . En su caso, esto puede ocurrir, por ejemplo, cuando un servicio (base de datos ...) falla (o simplemente se detiene por mantenimiento) o, como se sugiere en un comentario, en el caso de un apagado, especialmente uno forzado, es decir, el El atacante elimina físicamente el servidor de su lugar para su análisis.

El primer caso podría ser resuelto por kernel limpiando cualquier página de memoria que tenga que ver en el caso de una persona. / a> (incluyendo así cualquier forma de detención de la aplicación).

El segundo es aún más complicado. Puede preguntar por qué debería molestarse con la RAM después de un apagado y no sería el primero. Lea en la remanencia de datos , Ataques de arranque en frío y verifique, por ejemplo, ¿Hay chips de memoria volátiles que ¿No retiene datos después de apagar? . Respuesta general: no hay mucho que pueda hacer sin un hardware especialmente diseñado que borre la memoria RAM durante el apagado. E incluso entonces, ¿puede excluir la posibilidad de que un atacante se conecte a una máquina en ejecución en el nivel de hardware?

Si bien esto suena paranoico, es solo una sugerencia sobre lo que querrá considerar al implementar un servicio de este tipo. Debe decidir qué tiene sentido, en qué amenazas no quiere gastar los recursos y qué compensaciones son aceptables. Por ejemplo, si desea poder reiniciar la máquina desatendida, no tiene suerte, ya que eso requiere que tenga acceso a al menos algunos datos confidenciales no cifrados (digamos la clave de cifrado), que a su vez se rompe Toda la cadena de privacidad.

Otro problema es que debes asegurarte de que no se intercambie, al menos no de un almacenamiento de intercambio sin cifrar .

Para resumir: la pregunta no es si puede hacer imposible que un atacante obtenga los datos, es la dificultad de hacerlo. Debe especificar la parte de cuánto para ver qué tiene sentido.

    
respondido por el peterph 13.10.2013 - 13:52
fuente
1

La mejor solución es realmente la más simple.

En primer lugar, no guardes la información que no quieres que termine en manos de otra persona. ¿No desea que sus registros sean recuperables después de la eliminación? No iniciar sesión ¿No quieres que tus cookies se utilicen para rastrearte? No utilice cookies. ¿No quieres que los mensajes eliminados sean recuperables más tarde? Bueno, eso es difícil, porque el mensaje tenía que guardarse antes de que se eliminara, así que no puedo ayudarte.

Este es el método que utilizan los navegadores web con un "modo de privacidad". Sus huellas no son recuperables porque nunca las dejaron en primer lugar. No se utiliza el caché, no se guarda el historial, no se recuerdan las contraseñas. Por supuesto, también le advierten que los datos que envíe pueden seguir siendo interceptados una vez que salen de su computadora, por lo que siempre hay un tercero cuyas acciones no puede controlar.

    
respondido por el Ernie 10.09.2014 - 20:02
fuente

Lea otras preguntas en las etiquetas