2011-01-18 10 views
6

Me gustaría hacer que el contenido de un archivo cargado en un servidor web no se pueda recuperar después de que se haya utilizado. Mis preocupaciones son:¿Cómo asegurar que el contenido del archivo cargado no pueda recuperarse después del uso?

  1. Cuando se carga el archivo, se lo almacena en un directorio temporal (por ejemplo, el directorio temporal de Windows) y cómo puedo borrar todos los rastros de allí?

  2. ¿Se puede escribir el contenido del archivo en la memoria virtual y cómo puedo asegurarme de que no lo esté o eliminar el contenido una vez escrito?

  3. Si encripto el archivo, ¿todavía tendría que preocuparme de que el contenido se guarde en el directorio Temp, en la memoria virtual o en otro lugar antes de cifrar el archivo?

  4. ¿Puedo realizar una eliminación segura en todos los aspectos relacionados con la ubicación (temperatura, memoria virtual, otros) y cómo puedo hacer esto?

  5. ¿Hay alguna duda que he echado de menos o una forma alternativa de lograr el objetivo establecido?

N.B. Esta es una aplicación web ASP.NET.

Editar: Gracias djeeg por señalar un enlace sobre cómo reubicar el directorio de carga temporal a algo más controlable.

¿Algún comentario sobre los otros puntos?

+0

+1 para una pregunta bien definida. djechelon answer hit on a aspect Deberías echar un vistazo más de cerca a "trust". Debes recordar que siempre habrá una superficie expuesta y debes confiar en alguien. Si te preocupa que necesites un servidor dedicado físicamente seguro y un interruptor de muerte (una forma de destruir físicamente los datos), entonces no tendrás que preocuparte demasiado por la mecánica interna. – Robert

+0

Nota: .Net es un tiempo de ejecución administrado y el almacenamiento temporal de datos es específico de la implementación y, como tal, cualquier intento de borrar datos de un sistema en ejecución será un desafío interminable ya que cualquier actualización podría cambiar la implementación real. – Robert

Respuesta

3

de seguridad de disco

Puede dejar toallita utilidad de hacer el trabajo para usted.

Si está ejecutando ASP.NET en Mono/Linux, puede usar el comando wipe a través de la clase Process (asegúrese de que el paquete de limpieza esté instalado).

Si ejecuta Windows, el enfoque es el mismo. Use una utilidad wipe.exe que realiza una limpieza exhaustiva cuando necesita deshacerse del archivo de manera segura.

I fond this sitio web que distribuye un wipe.exe gratuito, que no está incluido en la instalación estándar de Windows (muy mal).

La segunda forma es implementar el Guttman algorithm, pero creo que es más barato usar el código de otra persona.

Tenga en cuenta que la limpieza es muy intensiva en E/S, no espere a que se complete o puede ralentizar su aplicación drásticamente. Además, en sitios web muy cargados, es posible que experimente una ralentización significativa.

Seguridad de la memoria

La clase SecureString le ayuda a dejar ningún rastro de una cadena en la memoria. Pero cuando trabajas con archivos, realmente trabajas con transmisiones. No estoy seguro de preocuparme por el contenido de la memoria volátil (incluso si maneja documentos de Wikileaks).

Primero debe realizar un análisis de amenazas indicándole cuáles son las principales amenazas para la memoria. Aquí hay algunas preguntas:

  1. ¿Alguien puede acceder al servidor con una cuenta de administrador/raíz con la capacidad de realizar un volcado de memoria? (Los usuarios normales no pueden leer su memoria y .NET evita el desbordamiento del búfer debido a que los punteros no se utilizan)
  2. ¿Alguien puede acceder físicamente al servidor? ¿No confías lo suficiente en tu proveedor de hosting? ¿Ejecutas un servidor virtual en su lugar?

Si la respuesta no es sí usted no debe preocuparse por la seguridad de la memoria

seguridad El espacio de intercambio

Incluso si se ejecuta en Windows, déjame llamar "intercambio" el archivo de paginación, o archivo de memoria virtual, o lo que sea. Puede pensar en deshabilitarlo (asegúrese de tener abundantes RAM) o, de lo contrario, podría pensar en encriptarlo (pero obtendrá una disminución del rendimiento).

Pero, una vez más, para que alguien pueda escanear su archivo de intercambio en tiempo de ejecución, debe ser root o tener acceso físico al servidor apagado.

Si los datos son demasiado sensibles, me gustaría deshabilitar el intercambio.

[Añadir] Estoy seguro de que usted ya uso de SSL para cargar el archivo, en caso de haber perdido algunos principios ...

0

Asegúrese de que el archivo subido es encriptada. This debería hacer el truco. Es necesario algún tipo de algoritmo de intercambio de claves seguras también, no estoy seguro de que uno, tratar googlear

javascript secure key exchange 

Asegúrese de que usted no pasa los datos descifrados alrededor. Descifra y usa datos en la misma clase o método y asegúrate de borrar los datos antes de que la basura colectiva libere tu objeto. Asegure su intercambio (soy un tipo Linux, entonces no sé cómo hacer eso en Windows).

Finalmente, tenga en cuenta que este es un problema difícil de resolver de forma segura y que cualquier solución a medio cocer o elaborada en casa probablemente se raje en minutos si la rentabilidad esperada es lo suficientemente alta. La seguridad es una compensación. ¿Cuánto valen sus datos?

Cuestiones relacionadas