"El sistema operativo más seguro de Microsoft, Windows NT, salva la palabra de paso en texto llano". Esta frase alarmante ha sido la desencadenante, durante el último mes de 1998, de acaloradas discusiones en listas de seguridad informática de toda Internet. Profundizando un poco más, podemos observar que para que la información sea completa se deben incorporar importantes matices.
Una vez introducimos nuestro nombre de usuario y contraseña en el inicio de sesión de NT, en teoría, la contraseña no debe exponerse ni almacenarse en ningún proceso posterior. Al igual que los sistemas Unix, NT utiliza un método de encriptación de vía única. En el fichero "winnt\system32\config\sam" se almacena en forma de base de datos los valores ya encriptados, de manera que cuando un usuario se quiere autentificar, una vez introducida la contraseña ésta se encripta y se compara con la base de datos de contraseñas ya encriptadas de los usuarios.
Microsoft ha querido utilizar un método de encriptación que no fuera reversible, ni siquiera, por su propio sistema operativo. De este modo evita que alguien pueda escribir un programa "troyano" para leer las contraseñas utilizando las propias APIs. Ahora un nuevo descubrimiento revela que en realidad tanto el nombre de usuario como la contraseña son almacenados en texto llano en la memoria del sistema.
Se ha podido comprobar que en el espacio de memoria asociado con la aplicación WINLOGON.EXE contiene los valores "lMprNotifyUserName=xxxx" and "lMprNotifyPassword=yyyy", donde "xxxx" es el nombre de usuario y "yyyy" la contraseña introducida. Aunque este espacio de memoria está restringido a los Administradores y al propio sistema, la idea de un "troyano" que haciendo uso de este descubrimiento robara las contraseñas se convierte en algo totalmente factible.
Para poder llevar a cabo el ataque se debe en primer lugar localizar el id del proceso correspondiente a WINLOGON.EXE, abrir ese proceso interrogando por PROCESS_QUERY_INFORMATION y PROCESS_VM_READ, por último realizar un ReadProcessMemory de una página en la dirección 0x00010000 y buscar las cadenas "lMprNotifyPassword" y "lMprNotifyUserName", con lo que nos encontraremos con la contraseña y el nombre de usuario.
El problema del almacenamiento de las contraseñas es ya antiguo. En ocasiones se hace mucho hincapié en utilizar sistemas de encriptación locales ó protocolos de comunicaciones seguros para manejar nuestra información. Sin embargo, aun siendo éstos bastantes eficientes, el sistema es vulnerado continuamente por una mala política en el uso y administración de las contraseñas.
Bernardo Quintero
No hay comentarios:
Publicar un comentario