Mac OS X 10.7 Lion: Solución al problema de seguridad con las contraseñas de usuario

Icono user hashDefenceindepth destapó hace un par de días un fallo de seguridad importante en Lion, nuevamente en el “talón de Aquiles” del sistema operativo: los permisos.

En versiones anteriores de OS X (10.6, 10.5, 10.4) el proceso para extraer la contraseña del usuario ha sido siempre la misma: obtener el identificador único de usuario generado por el sistema y utilizar ese identificador para extraer una función de la contraseña (hash) del archivo shadow de un usuario específico.

Respecto a Lion, la premisa general es la misma (aunque con algunas diferencias técnicas). Cada usuario tiene su propio archivo shadow, y cada archivo shadow está guardado en un archivo .plist ubicado en /var/db/dslocal/nodes/Default/users/.

El punto interesante en la implementación de Lion, sin embargo, son los privilegios. Como hemos dicho antes, todas las versiones de OS X utilizan archivos shadow. Para los poco familiarizados con el tema, un archivo shadow es aquel al que sólo puede accederse siendo un usuario con privilegios altos (normalmente root). Así que todas las plataformas modernas de OS X (Tiger, Leopard, Snow Leopard y Lion) cada usuario tiene su propio archivo shadow) (base de datos hash) cuyos datos son accesibles sólo por el usuario root… o al menos así debería ser.

Parece que con el rediseño del esquema de autenticación de OS X Lion, un paso crítico ha pasado desapercibido. Aunque los usuarios que no son root no pueden acceder a los archivos shadow directamente, Lion ofrece a los usuarios no root la capacidad de ver los datos hash de la contraseña. Esto se consigue extrayendo los datos directamente desde los Servicios de Directorio, y la herramienta dscl.

Si se invocan los servicios de directorio usando la función /Search/ podremos ver el atributo ShadowHashData, que contiene el mismo hash guardado en el archivo shadow .plist del usuario. Hay que destacar que para acceder a esto no han hecho falta privilegios root. Todos los usuarios del sistema, sin importar los privilegios que tengan, tienen la capacidad de acceder al atributo ShadowHashData desde el perfil de cualquier otro usuario.

Debido al poco tiempo que lleva Lion en el mercado, no existen crackers importantes que soporten los hashes de OS X Lion (SHA512 + sal de 4 bytes). Para crackear esos hashes se puede utilizar el script de Python que Defence in Depth ha creado.

Sin embargo, en realidad no hace falta “adivinar” la contraseña. Se puede cambiar directamente. Porque aparentemente los Servicios de Directorio en Lion no requiren autenticación cuando se solicita un cambio de contraseña en el usuario actual. Así que para cambiar la contraseña solo hay que borrar la contraseña (vía Terminal) y el sistema nos solicitará que introduzcamos una nueva contraseña, sin necesidad de autenticarnos.

¿Por qué es un problema que un usuario pueda cambiar su propia contraseña? ¿No tiene derecho a hacerlo? El problema viene de que la herramienta dscl no solicita la contraseña antigua para iniciar un cambio de contraseña, al contrario de la herramienta habitual, passwd, o el propio panel de preferencias de Usuario en Preferencias de Sistema, por lo que es posible que un troyano sin privilegios pueda cambiar la contraseña de un usuario, y dado que es administrador, escalar fácilmente a los privilegios de root.

Solucionando el problema (antes de que lo haga Apple)

Para solucionar este problema mientras Apple ofrece una actualización de seguridad específica, lo mejor que podemos hacer es proteger la ejecución de dscl del resto de usuarios asignándola exclusivamente al uso del Root del sistema.

Para ello, abre el Terminal, en Aplicaciones > Utilidades y añade este comando:

sudo chmod 100 /usr/bin/dscl

Con estos permisos, los usuarios no administrativos no podrán usar dscl sin disponer de una contraseña de administrador del sistema. SI te encuentras con algún problema posterior al respecto de este cambio, siempre puedes devolver los permisos originales a dscl que aparentemente eran 755.

Otra opción

Otra opción, mas interesante que los muy restricitivos permisos descritos arriba, es en vez de cambiar los permisos de uso de dscl solo para el Root, es permitir la lectura/escritura del archivo, pero solo la ejecución por parte del Root del sistema.

Para ello, abre el Terminal, en Aplicaciones > Utilidades y añade este comando:

sudo chmod go-x /usr/bin/dscl

Para revertirlo, usa:

sudo chmod go+x /usr/bin/dscl

0 0 votos
Article Rating
Subscribe
Notify of
0 Comments
Opiniones Inline
Ver todos los comentarios
0
Me encantaría saber tu opinión, por favor, deja un comentariox
()
x