2012-04-01 8 views
26

¿Cómo se pueden evitar las contraseñas y otros datos confidenciales enviados y recibidos desde páginas web ASP.NET en archivos de volcado IIS/ASP.NET?¿Cómo se puede evitar que las contraseñas y otra información confidencial aparezcan en un volcado de ASP.NET?

Pasos para reproducir

  1. mediante Visual Studio 2010, cree una aplicación de 3 intranet ASP.NET MVC.
  2. Configúrelo para usar IIS 7.5.
  3. fuego para arriba y para registrar una cuenta (dicen bob123 como el usuario y Pa $$ w0rd como la contraseña. Asumo que se crea la base de datos SQL Express y el sitio es totalmente funcional.
  4. Usando el administrador de tareas, clic derecho en el proceso de w3wp y crear un vertedero.
  5. Abrir el vertedero en un editor capaz de mostrar su contenido como hexagonal, como SlickEdit.
  6. Búsqueda de "Pa $$ 0RD" y "Pa% 24% 24w0Rd "en el volcado hexadecimal. Debería poder encontrar varias copias almacenadas como ASCII, Unicode o codificadas.

Tenga en cuenta que no importa si usa HTTPS porque solo encripta la comunicación. ASP.NET almacena esos datos en forma clara en la memoria o el disco.

El problema

La sabiduría popular lo tiene para encriptar los datos sensibles y no para almacenarlo en la clara. Sin embargo, un empleado puede recibir un volcado de una aplicación IIS/ASP.NET y descubrir contraseñas y otros datos confidenciales de los usuarios porque esta información no está encriptada, ni ASP.NET borra la memoria después del uso.

Esto los pone en riesgo simplemente porque tienen acceso a él. Dump a veces se comparte con socios (como Microsoft) para ayudarlos a diagnosticar problemas en su código. Es una parte necesaria para diagnosticar algunos problemas realmente complejos en la aplicación.

cosas miré al

  1. Uso SecureString para las contraseñas y otros datos sensibles. Sin embargo, el proveedor de Membresía ASP.NET, junto con otros marcos como WCF, a menudo acepta contraseñas como System.String, lo que significa que esas copias aún estarán en el volcado.
  2. Miró para ver si hay algo en el marco para borrar una copia de System.String cuando ya no se usa. No pude encontrar nada.
  3. Se investigó si se puede poner a cero la memoria utilizada para solicitudes y respuestas una vez que IIS finaliza, pero no pude encontrar nada.
  4. Investigué si se pueden encriptar los archivos que IIS recibe (como HttpPostFile) para que no se almacenen en el claro. Podemos recibir documentos que son extremadamente confidenciales y cada paso se realiza para encriptarlos y protegerlos en el servidor. Sin embargo, alguien puede extraerlos claramente de un volcado de IIS.

Lo que esperaba es decirle a IIS/ASP.NET que una solicitud/respuesta específica contiene datos confidenciales y que IIS/ASP.NET borrará la memoria cuando haya terminado de usarla.

+0

+1 Pregunta muy interesante. No estaba al tanto de esto hasta ahora. Una pregunta que quería hacerte es: ¿Has hashing las contraseñas cuando utilizas membresías o las guardas en texto plano? – Seany84

+0

Hashing con dos sales. Pero eso no importa porque la contraseña es visible en texto claro en la solicitud a ASP.NET y, por lo tanto, en el volcado. Además, esa copia que el proveedor de membresía recibe es visible a la vista. Y luego también hay una copia de su contraseña hash. – bloudraak

+1

Si no es un administrador, no puede obtener un volcado en el paso 4. Si no tiene volcado, ¿cómo puede realizar los siguientes pasos? Si no puede realizar los siguientes pasos, ¿de dónde proviene su preocupación? –

Respuesta

0

Sé que esto no responde la pregunta directamente, pero ¿por qué no mira este problema de manera diferente?

Puede armar fácilmente algunos javascript para hacer el lado del cliente hash. Combinaría la contraseña con algo aleatorio, como un guid que el servidor envía y solo es válido para un solo uso. El intercambio de datos ya no contendría la contraseña y el hash podría ser fácilmente comparado con el lado del servidor. Solo sería válido para la sesión, de modo que alguien que mirara los datos de volcado no pudiera usar el hash para "autenticarse" en el futuro.

En el lado del archivo, ¿cómo se cargan estos archivos? directamente desde una página web? Hay bastantes bibliotecas de JavaScript que hacen encriptación (blowfish) y definitivamente usaría esta opción cuando envíe un archivo confidencial. Tiene una penalización de velocidad, pero puede estar seguro de que la información es segura.

+0

Sin duda, es algo a considerar. Sin embargo, también tengo un par de servicios web basados ​​en REST y la información confidencial aceptada y enviada por el servicio puede estar contenida en el basurero. – bloudraak

+0

Puede hacer lo mismo y cifrar esos datos con las bibliotecas de cifrado de JavaScript. Sin embargo, está lejos de ser ideal, porque agrega mucha sobrecarga tanto en el cliente como en el servidor. Es una locura para mí que IIS mantenga los datos SSL en texto plano dentro del proceso. – Graymatter

+0

Lamentablemente, mis servicios web están siendo utilizados por todo tipo de clientes, por lo que será poco práctico. – bloudraak

1

Un archivo de volcado por definición volcados todos la memoria que la aplicación utiliza en el momento en que se tira, Si creara un filtro para excluir ciertas cosas, nunca podría estar seguro de que tenía suficientes datos para concentrarse en un problema

¿Te sentirías cómodo cediendo tus bases de datos/configuraciones a un tercero? si no, entonces probablemente tampoco deberías estar entregando archivos dump. (imho)

+0

Sin embargo, un volcado puede indicar exactamente dónde se colgó una aplicación sin requerir la base de datos o la configuración. Es de gran valor para diagnosticar y solucionar dichos problemas.Sin él, es posible que nunca puedan resolver el problema. Es una lástima que las solicitudes recientes de ASP.NET que ya se han procesado, incluidas las solicitudes de autenticación, estén visibles en el volcado. – bloudraak

+0

En mi experiencia (8 años de desarrollo de asp.net), en realidad nunca tuve que "tomar un basurero" por así decirlo. Siempre registro de forma personalizada todas las excepciones no controladas a través de algún registrador (log4net/nlog) o uso algo como Elmah para detectar de dónde provienen los errores. un archivo de volcado debería ser su último recurso, no el primero ... – AndreasKnudsen

+0

Andreas, tiene toda la razón. Sin embargo, en mi experiencia de nuevo donde mezclamos código nativo con código administrado, los volcados son a menudo todo lo que teníamos cuando las aplicaciones se estancaban o terminaban inesperadamente. Este último es raro en un entorno administrado puro. La tala solo va tan lejos. – bloudraak

Cuestiones relacionadas