Назад | Перейти на главную страницу

Как деобфускировать пароль sssd.conf?

Я унаследовал несколько экземпляров EC2 с Centos, которые аутентифицируют пользователей в AWS Directory Service через LDAP. Теперь мне нужно выполнить несколько запросов вручную с помощью ldapsearch использование той же учетной записи для устранения некоторых проблем с аутентификацией. Однако пароль зашифрован в конфигурации, например:

[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

Есть ли способ расшифровать / деобфускировать ldap_default_authtok? Я не хочу менять его в AD, потому что он используется на многих серверах.

Примерно год назад мне довелось написать небольшой скрипт, который расшифровывает эти пароли.

Интересно то, что SSS разработчики пошли на многое с алгоритмом обфускации, используя AES-256 например, но в конечном итоге его все еще легко расшифровать, потому что они объединяют случайно сгенерированные ключ шифрования в закодированной строке. Странно.

Я выложил это для вас на GitHub: https://github.com/mludvig/sss_deobfuscate

Использование простое:

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

Надеюсь, это поможет :)

Ответ @ MLu выполнит свою работу, но я добавлю комментарий.

Жаль, что разработчики назвали методы encrypt() и decrypt() поскольку они этого не делают.

Если вы посмотрите на исходный код модуля python (src/python/pysss.c) Eсть pysss.password.decrypt() метод, но он окружен #if 0..#endif. Если те (и соответствующие #if 0..#endif вокруг связи c-python) удаляются, а исходный код перекомпилируется decrypt() можно назвать. Например.:

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)