3 votos

¿Cómo desentañar la contraseña de sssd.conf?

He heredado varias instancias de EC2 con Centos que autentican a los usuarios contra el Servicio de directorio de AWS a través de LDAP. Ahora necesito ejecutar algunas consultas manuales con ldapsearch usando la misma cuenta para depurar algunos problemas de autenticación. Sin embargo, la contraseña está cifrada en la configuración, como esta:

 [sssd]
domains = LDAP
services = nss, pam

[domain/LDAP]
id_provider = ldap
cache_credentials = True

ldap_schema = AD
ldap_uri = ldaps://...
ldap_search_base = ...
ldap_default_bind_dn = ...
ldap_default_authtok = AAAQAB3QDeZ7+...cBSpT0ZABu4AAQID
ldap_default_authtok_type = obfuscated_password
 

¿Hay alguna forma de descifrar / desenfocar el ldap_default_authtok ? No quiero cambiarlo en AD porque se usa en muchos servidores.

8voto

MLu Puntos 439

Se me ocurrió escribir un pequeño script que descifra las contraseñas de hace un año.

Curiosamente el SSS desarrolladores fue a grandes longitudes con el algoritmo de ofuscación, mediante AES-256 por ejemplo, pero al final todavía es fácilmente descifrable debido a que el paquete de los generados al azar de la clave de cifrado en la cadena codificada. Raro.

Lo he puesto en GitHub para usted: https://github.com/mludvig/sss_deobfuscate

El uso es simple:

$ ./sss_deobfuscate AAAQABagVAjf9KgUyIxTw3A+HUfbig7N1+L0qtY4xAULt2GYHFc1B3CBWGAE9ArooklBkpxQtROiyCGDQH+VzLHYmiIAAQID
Decoded password: Passw0rd

Espero que ayude :)

3voto

Mark Wagner Puntos 11107

@MLu la respuesta va a hacer el trabajo, pero voy a añadir algunos comentarios.

Es una lástima que los desarrolladores se llama a los métodos encrypt() y decrypt() ya que no hay tal cosa.

Si usted mira en la fuente para el módulo de python (src/python/pysss.c) hay un pysss.password.decrypt() método, pero está rodeado por #if 0..#endif. Si esos (y el correspondiente #if 0..#endif alrededor de la c-python vinculación) se eliminan y la fuente se vuelve a compilar decrypt() puede ser llamado. E. g.:

import pysss

password = 'swordfish'
print(password)

obfobj = pysss.password()
obfpwd = obfobj.encrypt(password, obfobj.AES_256)
print(obfpwd)

decrypted_password = obfobj.decrypt(obfpwd)
print(decrypted_password)

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: