Sebelumnya saya sudah menulis Instalasi OpenLDAP dan Integrasi dengan Zimbra, mungkin rekan-rekan menyadari bahwa secara default, OpenLDAP versi terbaru sekalipun masih menggunakan algoritma SSHA/SHA-1 untuk masking password user atau bahkan masih plain text. Padahal, email server seperti Zimbra sudah menggunakan SSHA512 yang lebih strong. Algoritma SSHA (SHA-1) bisa dibilang sudah obsolete karena hash-nya hanya 160-bit. Dengan SSHA512 (SHA-2), hash-nya 512-bit yang secara teknis lebih tahan dari serangan brute-force. Selain itu, jika kita mengintegrasikan OpenLDAP dengan Zimbra, menggunakan format yang sama akan memudahkan audit serta menjaga keamanan data.
Jika kita ingin membangun LDAP terpusat yang aman, berarti wajib menyesuaikan standard password hash yang digunakan menjadi SSHA512 supaya passwordnya sangat sulit untuk di decrypt bahkan oleh admin sekalipun. Kali ini saya akan sharing cara supaya default password user langsung menggunakan SSHA512.
Decrypt Password (Sebelum Enable SSHA512)
Sebelum kita aktifkan SSHA512, kita coba testing dulu lihat salah satu password user menggunakan ldapsearch dengan perintah berikut:
# ldapsearch -LLL -x -D "cn=admin,dc=excellent,dc=co,dc=id" -W -b "ou=users,dc=excellent,dc=co,dc=id" "(uid=raihan)" userPassword Enter LDAP Password: (Masukkan password admin LDAP) dn: uid=raihan,ou=users,dc=excellent,dc=co,dc=id userPassword:: bVJvbzVWIUZoOW1NcUpDbzJqNVcmTjNz
Sekarang kita coba decrypt userPassword yang muncul dari hasil query dengan perintah berikut
# echo "bVJvbzVWIUZoOW1NcUpDbzJqNVcmTjNz" | base64 --decode&&echo PasswordStrong123!
Nah dari hasil query ldapsearch tersebut saya sebagai admin bisa mengetahui password plain user karena hashnya bisa di decrypt hanya dengan 1 perintah tersebut, ini mengapa kita perlu meggunakan password hash SSHA512.
Enable Password Hash SSHA512
Sebenarnya package OpenLDAP terbaru sudah include dengan SSHA512, namun secara default biasanya modul SSHA512 ini belum aktif, jadi kita perlu aktifkan dulu supaya OpenLDAP bisa membaca password user yang menggunakan hash SSHA512. Berikut adalah langkah-langkah untuk mengaktifkan modul SSHA512 di OpenLDAP:
- Buat file baru dengan nama
/srv/import-ssha512.ldifdengan isi sebagai berikut:dn: cn=module{0},cn=config changetype: modify add: olcModuleLoad olcModuleLoad: pw-sha2.so - Enable modul dengan perintah berikut:
# ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f /srv/import-ssha512.ldif modifying entry "cn=module{0},cn=config" - Memastikan modul sudah berhasil diaktifkan dengan perintah berikut:
# ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=module{0},cn=config dn: cn=module{0},cn=config objectClass: olcModuleList cn: module{0} olcModulePath: /usr/lib/ldap olcModuleLoad: {0}back_mdb olcModuleLoad: {1}pw-sha2.so
Default Password Hash: SSHA512
Walaupun modul sudah diaktifkan proses reset password user perlu dilakukan secara manual dengan tahapan berikut (Bagian tidak perlu dilakukan, silakan dibaca saja):
- Generate password yang sudah di encrypt dengan hash SSHA512. Berikut contoh perintahnya:
# slappasswd -o module-load=/usr/lib/ldap/pw-sha2.so -h {SSHA512} -s "PasswordStrong123!" {SSHA512}fSfyOorPF/+B7xn2027CTmmUTTo8/njSfIM/DSbEr2p0pFX0O0m0URlWeMyKfcuTuODdFAgIP0bjLsA/J2tJuJ/L0aiOf9x2 - Create file LDIF untuk menyesuaikan password user. Berikut contoh isi file LDIF-nya:
dn: uid=raihan,ou=users,dc=excellent,dc=co,dc=id changetype: modify replace: userPassword userPassword: {SSHA512}fSfyOorPF/+B7xn2027CTmmUTTo8/njSfIM/DSbEr2p0pFX0O0m0URlWeMyKfcuTuODdFAgIP0bjLsA/J2tJuJ/L0aiOf9x2 - Import LDIF untuk menyesuaikan password dengan perintah berikut:
# ldapmodify -x -D "cn=admin,dc=excellent,dc=co,dc=id" -W -f /srv/reset-pass-raihan.ldif Enter LDAP Password: (Masukkan password admin LDAP) modifying entry "uid=raihan,ou=users,dc=excellent,dc=co,dc=id"
Nah supaya kita bisa langsung reset password user menggunakan 1 baris perintah slappasswd, kita perlu menyesuaikan supaya password hash yang digunakan otomatis langsung SSHA512. Berikut adalah langkah-langkah menyesuaikan default password hash yang akan digunakan OpenLDAP (Bagian ini perlu dilakukan):
- Buat file baru dengan nama
/srv/set-default-hash.ldifdengan isi sebagai berikut:dn: olcDatabase={-1}frontend,cn=config changetype: modify add: olcPasswordHash olcPasswordHash: {SSHA512} - Aktifkan default password hash dengan perintah berikut:
# ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f /srv/set-default-hash.ldif modifying entry "olcDatabase={-1}frontend,cn=config" - Memastikan default password hash sudah menggunakan SSHA512 dengan perintah berikut:
# ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b olcDatabase={-1}frontend,cn=config olcPasswordHash dn: olcDatabase={-1}frontend,cn=config olcPasswordHash: {SSHA512}
Reset Password User
Proses enable modul SSHA512 seperti diatas bisa dibilang relatif mudah, namun bagian selanjutnya yang lumayan merepotkan dan mungkin membutuhkan waktu lama karena kita perlu melakukan reset password semua user karena passwordnya masih plain text atau SHA-1. Berikut adalah perintah untuk melakukan reset password user dari server OpenLDAP:
# ldappasswd -x -D "cn=admin,dc=excellent,dc=co,dc=id" -W -S "uid=raihan,ou=users,dc=excellent,dc=co,dc=id" New password: (Masukkan password baru) Re-enter new password: (Masukkan password baru) Enter LDAP Password: (Masukkan password admin LDAP)
Cek atribut userPassword user tersebut setelah dilakukan reset password dengan perintah berikut:
# ldapsearch -LLL -x -D "cn=admin,dc=excellent,dc=co,dc=id" -W -b "ou=users,dc=excellent,dc=co,dc=id" "(uid=raihan)" userPassword
Enter LDAP Password: (Masukkan password admin LDAP)
dn: uid=raihan,ou=users,dc=excellent,dc=co,dc=id
userPassword:: e1NTSEE1MTJ9MHM3UlJQTUNNR3ZNVGsxNkNWVGZPQTk1OExCYzhab1djdTdTSk03M2Z5Tk5ycjlDZS9jZkZRY0s3a082K2pIV0ZxMFBWZ09RUEVNUWFzZGhMaElMd01TNlNYZGNrMElU
# echo "e1NTSEE1MTJ9MHM3UlJQTUNNR3ZNVGsxNkNWVGZPQTk1OExCYzhab1djdTdTSk03M2Z5Tk5ycjlDZS9jZkZRY0s3a082K2pIV0ZxMFBWZ09RUEVNUWFzZGhMaElMd01TNlNYZGNrMElU" | base64 --decode&&echo
{SSHA512}0s7RRPMCMGvMTk16CVTfOA958LBc8ZoWcu7SJM73fyNNrr9Ce/cfFQcK7kO6+jHWFq0PVgOQPEMQasdhLhILwMS6SXdck0IT
Testing password baru untuk user tersebut dengan perintah berikut:
# ldapwhoami -x -D "uid=raihan,ou=users,dc=excellent,dc=co,dc=id" -W Enter LDAP Password: (Masukkan password yang baru) dn:uid=raihan,ou=users,dc=excellent,dc=co,dc=id # ldapwhoami -x -D "uid=raihan,ou=users,dc=excellent,dc=co,dc=id" -W Enter LDAP Password: (Masukkan password yang salah untuk testing) ldap_bind: Invalid credentials (49)
Pastikan tidak muncul invalid credential saat memasukan password yang baru. Selanjutkan, silakan lakukan reset password untuk semua user supaya menggunakan password hash SSHA512
Reset Password User (Bulk)
Saat saya melakukan uji coba, proses reset password semua user yang saya lakukan relatif cepat karena baru ada 4 user saja di OpenLDAP yang saya gunakan, lalu bagaimana kalau data user yang mau kita reset passwordnya lebih dari 10, bahkan mungkin ratusan, bahkan ribuan? Nah, supaya prosesnya tidak terlalu memakan waktu, saya sudah buatkan script bash yang simpel untuk melakukan bulk reset. Script ini akan mengambil semua user di DN domain yang kita mau, men-generate password baru, melakukan hashing password ke SSHA512, lalu menghasilkan file LDIF untuk di import dan file CSV sebagai arsip password random baru sudah sudah di generate untuk semua user (Catatan: Mohon berhati-hati karena file LDIF yang dihasilkan oleh script akan melakukan reset password semua akun menjadi random). Berikut adalah langkah-langkah untuk melakukan reset password user di OpenLDAP secara bulk:
- Silakan download script https://colamen.id/ldap/generate-ldif-reset-pass-ssha512. generate file LDIF:
# cd /srv # wget -c https://colamen.id/ldap/generate-ldif-reset-pass-ssha512 # chmod u+x generate-ldif-reset-pass-ssha512
- Generate file LDIF dengan script tersebut:
# /srv/generate-ldif-reset-pass-ssha512 ========================================================== OPENLDAP FULL PASSWORD RESET TO SSHA512 PERINGATAN: Script ini akan mereset SEMUA password user! ========================================================== Masukkan Base DN (contoh: ou=users,dc=excellent,dc=co,dc=id): ou=users,dc=excellent,dc=co,dc=id Yakin ingin mereset SEMUA user di ou=users,dc=excellent,dc=co,dc=id? (y/n): y [*] Mengambil daftar semua user dari LDAP... [*] Memproses hashing SSHA512... [+] Reseting user: arif [+] Reseting user: admin [+] Reseting user: ahmad [+] Reseting user: afatyo [+] Reseting user: raihan BERHASIL: File /tmp/full_reset_ssha512.ldif dan /tmp/arsip_password_baru.csv telah dibuat. CATATAN PENTING: 1. Jalankan: ldapmodify -x -D 'cn=admin,dc=excellent,dc=co,dc=id' -W -f /tmp/full_reset_ssha512.ldif 2. SEMUA USER (termasuk uid=admin) password-nya telah diubah. 3. Password lama user sudah tidak berlaku lagi setelah LDIF di-import. 4. Pastikan file /tmp/arsip_password_baru.csv disimpan di tempat aman karena berisi password PLAIN.
- Sebelum kita import file LDIF-nya, kita pastikan dulu file LDIF & CSV ada isinya dengan perintah berikut:
# head /tmp/full_reset_ssha512.ldif dn: uid=arif,ou=users,dc=excellent,dc=co,dc=id changetype: modify replace: userPassword userPassword: {SSHA512}HgEpBAAT+UylDZMgjeMW5tNclh1EVz5II1otQ8S8EAlpvQrK4JTWqqI++8MDRIXcHssomXrL/YLmCErVBNU6s63Jywnc/o2d dn: uid=admin,ou=users,dc=excellent,dc=co,dc=id changetype: modify replace: userPassword userPassword: {SSHA512}XVhV1CWKLboRPdGGolXinPX631p1zHBGQuAUzc5OddEirpBflANN3DVhHVJ3Ajzrrpl9At7/8kdPcNJmSdnMR8Sc3tIZKG8z # head /tmp/arsip_password_baru.csv UID;DN;Password_Plain arif;uid=arif,ou=users,dc=excellent,dc=co,dc=id;gaeebmo3SElfcv8u9Yhvyvry admin;uid=admin,ou=users,dc=excellent,dc=co,dc=id;6jVNraggoCvjm09l0le5zlmM ahmad;uid=ahmad,ou=users,dc=excellent,dc=co,dc=id;83GJch00fMfcPC0cISO1WD9A afatyo;uid=afatyo,ou=users,dc=excellent,dc=co,dc=id;PJhqYU8yZjFWRieohkmBR7a2 raihan;uid=raihan,ou=users,dc=excellent,dc=co,dc=id;2WdwBOANbCQntn3Js9mBsWNs - Import file LDIF:
# ldapmodify -x -D 'cn=admin,dc=excellent,dc=co,dc=id' -W -f /tmp/full_reset_ssha512.ldif Enter LDAP Password: (Masukkan password admin LDAP) modifying entry "uid=arif,ou=users,dc=excellent,dc=co,dc=id" modifying entry "uid=admin,ou=users,dc=excellent,dc=co,dc=id" modifying entry "uid=ahmad,ou=users,dc=excellent,dc=co,dc=id" modifying entry "uid=afatyo,ou=users,dc=excellent,dc=co,dc=id" modifying entry "uid=raihan,ou=users,dc=excellent,dc=co,dc=id"
- Sampling atribut userPassword beberapa user setelah dilakukan reset password secara bulk dengan perintah berikut:
# ldapsearch -LLL -x -D "cn=admin,dc=excellent,dc=co,dc=id" -W -b "ou=users,dc=excellent,dc=co,dc=id" "(uid=*)" userPassword | head Enter LDAP Password: dn: uid=arif,ou=users,dc=excellent,dc=co,dc=id userPassword:: e1NTSEE1MTJ9SGdFcEJBQVQrVXlsRFpNZ2plTVc1dE5jbGgxRVZ6NUlJMW90UTh TOEVBbHB2UXJLNEpUV3FxSSsrOE1EUklYY0hzc29tWHJML1lMbUNFclZCTlU2czYzSnl3bmMvbzJk dn: uid=admin,ou=users,dc=excellent,dc=co,dc=id userPassword:: e1NTSEE1MTJ9WFZoVjFDV0tMYm9SUGRHR29sWGluUFg2MzFwMXpIQkdRdUFVemM 1T2RkRWlycEJmbEFOTjNEVmhIVkozQWp6cnJwbDlBdDcvOGtkUGNOSm1TZG5NUjhTYzN0SVpLRzh6 dn: uid=ahmad,ou=users,dc=excellent,dc=co,dc=id userPassword:: e1NTSEE1MTJ9NDd5TW1zUTFJbHRHRUcxbVlaMFBvdnp6ZXFkY0RLU2x5MEtVYlZ
Create User Baru (Setelah Enable SSHA512)
Satu fakta penting yang saya temukan saat melakukan uji coba, yaitu OpenLDAP tetap menyimpan password sebagai plain text jika kita melakukan ldapadd menggunakan file LDIF dengan password polos (Tanpa {SSHA512}), meskipun olcPasswordHash sudah di-set ke SSHA512. Oleh karena itu, langkah yang benar saat menambah user manual adalah:
- Generate hash password dengan
slappasswd:# slappasswd -o module-load=/usr/lib/ldap/pw-sha2.so -h {SSHA512} -s "PasswordStrong123!" {SSHA512}v0Pl3PEeLL+2Sz8n/NCJCT53UkdE/qBUrq+kkwGdYhgLTOWIOOo2kA9xMBs8pALVhCrlkNWDRi1nryFnm2IBVN3O6TGvuNDL - Masukkan hash tersebut ke file LDIF:
dn: uid=admin,ou=users,dc=excellent,dc=co,dc=id objectClass: inetOrgPerson givenName: Admin Email sn: Server cn: Admin Email Server uid: admin mail: admin@excellent.co.id mail: admin@aktiva.co.id userPassword: {SSHA512}v0Pl3PEeLL+2Sz8n/NCJCT53UkdE/qBUrq+kkwGdYhgLTOWIOOo2kA9xMBs8pALVhCrlkNWDRi1nryFnm2IBVN3O6TGvuNDL - Baru eksekusi
ldapadd:ldapadd -x -D cn=admin,dc=excellent,dc=co,dc=id -W -f file.ldif
Dengan proses ini, server OpenLDAP kita sudah cukup secure karena sudah menggunakan enkripsi 512-bit. Apabila rekan-rekan mengalami kesulitan atau ada kebutuhan konfigurasi LDAP, Excellent menyediakan layanan implementasi LDAP dan sudah mencakup integrasi external authentication diatas. Bagi rekan-rekan yang berminat untuk jasa layanan tersebut bisa langsung kontak & tanya-tanya ke email sales@excellent.co.id.