Password atau dikenal juga dalam istilah lain passphrase, PIN, kata sandi, merupakan metode otentikasi berbasis teks yang paling tua dan paling banyak dipakai. Karena sederhana dan mudah dipakai, otentikasi berbasis password, sering kali menjadi target utama dan titik masuk dalam insiden peretasan.
Bagaimana Otentikasi berbasis Password Bekerja
Password digunakan sebagai bukti identitas, seperti halnya paspor, KTP atau SIM dalam dunia fisik. Namun password dalam tulisan ini adalah password yang tidak ada bentuk fisiknya, hanya berupa teks digital.
Apa yang sebenarnya terjadi dalam sistem ketika password diketikkan ke dalam layar login di website atau di sistem operasi?
- Sistem menerima pasangan username dan password. Username menunjukkan identitas yang akan diklaim, sedangkan password adalah bukti dari klaim identitas tersebut.
- Sistem akan mencari dalam basis data, informasi mengenai username tersebut. Dalam tahap ini sistem akan menolak bila user tersebut tidak ada dalam basis data.
- Sistem mendapatkan informasi mengenai user tersebut, termasuk informasi mengenai password yang benar untuk user tersebut (analoginya seperti kunci jawaban sebuah soal). Password yang benar ini disimpan dalam berbagai format, ada yang tersimpan dalam format apa adanya (plaintext), dalam format hash (md5, sha256, hmac dsb.) atau ada juga yang dalam format tersandikan (encrypted).
- Sistem akan mengonversi password yang dimasukkan user, ke dalam format yang sama dengan yang tersimpan dalam database. Sebagai contoh, bila dalam database menggunakan format sha256, maka masukan password akan diubah ke dalam format sha256 juga.
- Setelah password dari masukan user dalam format yang sama dengan password yang tersimpan dalam basis data, maka keduanya bisa dibandingkan secara tekstual. Bila keduanya identik, jawaban dan kunci jawaban yang tersimpan dalam basis data adalah sama, maka bukti identitas dianggap valid dan benar.
Kategori Peretasan Password
Secara umum jurus meretas password dibagi dalam dua kategori besar:
- Peretasan secara luring (offline)
- Peretasan secara daring (online)
Peretasan Luring (offline)
Peretasan secara luring hanya bisa dilakukan bila peretas telah berhasil mendapatkan akses ke dalam basis data yang menyimpan informasi pengguna. Umumnya ini adalah tahap pasca-eksploitasi, setelah basis data sistem berhasil dikuasai (salah satunya dengan SQL injection atau teknik lain, di luar cakupan tulisan ini), peretas ingin mendapatkan password dari semua user yang ada dalam sistem dengan harapan dapat menguasai sistem-sistem lain.
Ada banyak sekali contoh kasus peretasan di banyak perusahaan dengan jutaaan pengguna, haveibeenpwned.com/PwnedWebsites, memuat daftar panjang situs-situs yang diretas lengkap dengan daftar password yang bisa diunduh bebas.
Apa yang dilakukan peretas untuk mendapatkan password tergantung dari format password yang tersimpan dalam database user:
Peretasan Password Plaintext
Password disimpan dalam bentuk aslinya apa adanya, maka selesai sudah, tidak perlu ada peretasan apa-apa lagi,, semua password sudah tersaji dalam piring siap santap.
Peretasan Password Tersandi (Dua Arah)
Format ini adalah format dua arah, artinya teks bisa diubah ke dalam bentuk lain (tersandikan), dan bisa dikembalikan lagi ke bentuk asalnya. Password yang tersimpan dalam format ini adalah hasil dari fungsi enkripsi yang bisa dikembalikan ke bentuk aslinya melalui fungsi dekripsi.
Dalam hal ini, peretas harus mendapatkan kunci untuk melakukan dekripsi password. Kunci ini bisa simetris atau asimetris dan bisa tersimpan di sistem yang sama atau di sistem yang berbeda.
Setelah kunci didapatkan, maka peretas dapat dengan sangat cepat dan mudah, mendapatkan semua password dalam database dengan melakukan fungsi dekripsi. Tanpa kunci, peretas yang mendapatkan akses ke tabel user, tidak bisa mendapatkan password yang benar.
Peretasan Password Hash (Satu Arah)
Hash adalah format satu arah, maksudnya adalah, teks yang telah diubah menjadi bentuk hash, tidak bisa dikembalikan lagi ke dalam bentuk aslinya.
Lalu bagaimana cara mendapatkan password bila satu arah? Peretas hanya bisa mencoba-coba banyak kandidat password dan melihat apakah ada di antara kandidat password tersebut, yang memiliki hash yang sama dengan yang tersimpan dalam database.
Contoh, bila peretas ingin mengetahui apa password dibalik md5 hash ini 098f6bcd4621d373cade4e832627b4f6, maka peretas harus mencoba melakukan hashing banyak kandidat password seperti “a”, “aa”, “bb”, dan seterusnya, sampai akhirnya peretas yang beruntung akan menemukan bahwa kandidat “test” memiliki md5 hash yang sama persis, sehingga peretas mengetahui password dibalik md5 hash tersebut adalah “test”.
Tentu saja, peretas tidak akan secara naif mencoba semua kemungkinan teks secara acak atau terurut karena password di dunia nyata jarang yang benar-benar acak, jadi peretas akan memfokuskan waktu dan biaya untuk mencoba kandidat yang berpeluang besar untuk menjadi password yang benar. Sebagai contoh, peluang kandidat “password” atau “12345” lebih besar dari pada kandidat acak seperti “xMc2u48#M”.
Ada banyak tools dengan teknik statistik dan machine learning yang canggih dengan dibantu hardware khusus seperti GPU dan kapasitas penyimpanan yang besar, untuk membantu mempercepat proses peretasan password. Teknik-teknik dan tools tersebut di luar cakupan tulisan ini.
Database pemetaan dari teks ke hash dari banyak kasus peretasan, tersedia bebas di internet sehingga peretas bisa dengan mudah memasukkan sebuah hash dan dengan cepat akan mendapatkan teks di balik hash tersebut bila hash tersebut sudah pernah diretas sebelumnya.
Peretasan Daring (online)
Berbeda dengan peretasan luring yang bisa dilakukan tanpa koneksi ke sistem yang ditarget, peretasan daring dilakukan secara “live” dengan mencoba banyak kandidat password langsung ke layar login sistem yang ditarget.
Teknik ini jauh lebih lambat karena banyaknya kombinasi username dan password yang bisa dicoba secara live tergantung dari kecepatan jaringan dan kemungkinan adanya pembatasan sistem (contohnya mengunci user bila gagal login lebih dari N kali).
Sedangkan peretasan luring, peretas bisa mencoba milyaran kombinasi per detik tanpa terpengaruh dengan kecepatan internet dan tanpa menyentuh sistem target sama sekali.
Namun kelebihan teknik ini adalah, teknik ini bisa dicoba tanpa harus mendapatkan akses ke database terlebih dahulu. Bila peretas memiliki koneksi internet yang cepat, dan sistem tidak menerapkan pembatasan percobaan, maka teknik ini akan sangat efektif.
Sekali lagi, peretas tidak akan naif mencoba semua kemungkinan password secara acak, peretas harus lebih bijak memilih kandidat yang akan dicoba dibandingkan peretasan luring (offline) karena biaya mencoba satu kandidat secara live jauh lebih mahal dan lama.