Post on 29-Jun-2015
Rainbow Table pada
Cracking Hash Password Time-Memory Trade Off
Oleh :
Kelompok 11
IF 31-G4
Hartanto Prabowo (113070253)
Medy Ramadian (113070257)
Mitha Budianti (113070360)
FAKULTAS INFORMATIKA
INSTITUT TEKNOLOGI TELKOM
BANDUNG
2010
2
Overview Rainbow Table
Rainbow table adalah lookup table yang digunakan untuk mendapatkan plain text dari
password yang telah dirubah menggunakan fungsi hash. Rainbow table berawal dari ide
Martin Edward Hellman pada tahun 1982. Setelah itu dikembangkan oleh Philippe Oechslin
dengan metode Faster Time Memory Trade Off pada tahun 2003. Pada penelitian yang
dilakukan Philippe Oechslin, penggunaan rainbow table dapat mempersingkat waktu
penyerangan terhadap Microsoft's LAN Manager passwords sampai 99,9%, yaitu dari 101
detik hanya menjadi 13,6 detik saja.
Cracking password menggunakan rainbow table tidak sesulit cracking dengan cara
brute force. Rainbow table membuat sebuah pre-generated dataset dari kode hash. Salah satu
kelebihan rainbow table ini adalah apabila kita sudah men-generate sebuah rainbow table,
kita bisa menggunakannya berulang kali.
Untuk memahami mengenai rainbow table, kita terlebih dahulu memahami fungsi
reduksi hash. Fungsi hash merubah plaintext menjadi hash, sedangkan fungsi reduksi
merubah hash menjadi plain text. Tetapi, perlu diingat bahwa fungsi reduksi bukan
merupakan kebalikan dari fungsi hash. Fungsi hash dan fungsi reduksi bersifat irreversible.
Jadi, apabila kita merubah sebuah hash dengan menggunakan fungsi reduksi, maka plain text
yang didapat bukanlah plain text aslinya, melainkan plain text lain.
Rainbow table dibentuk oleh fungsi hash dan fungsi reduksi. Maksudnya, rainbow
table akan menghubungkan antara sebuah plain text awal, lalu hash-nya, setelah itu direduksi
menjadi plain text berbeda, kemudian hash dari plain text tersebut, dan begitu seterusnya.
Dengan demikian, kita bisa melihat hubungan antara plain text awal dengan hash akhir
sehingga kita dapat memecahkan hash yang ada. Detail dari cara kerja rainbow table akan
dijelaskan bagian selanjutnya.
3
Konsep Kerja Rainbow Table
Menurut jenis hash yang diretas, rainbow table memiliki beberapa macam seperti LM,
NTLM, MD5, MD4, MD2, SHA1, Cisco PIX Firewall, dan Cisco IOS. Tiap tipe memiliki
karakteristik masing-masing, misalnya untuk tipe LM dibutuhkan 16 GB sebagai
penyimpanan tabel dengan maksimal panjang pasword 14 karakter, sementara untuk tipe
NTLM memerlukan penyimpanan lebih sedikit, yakni 10 GB akan tetapi hanya untuk
maksimal panjang password 6 karakter.
Pada kesempatan kali ini, penulis hanya akan mengulas konsep kerja dari rainbow
table untuk MD5, yakni rainbow table yang khusus untuk meretas hash code dari tipe MD5.
1. Konsep dasar pembangunan rainbow table
Gambar 1 Gambar 2
Gambar 3
Keterangan:
Gambar 1
Diawali dengan pembentukan hash code dari suatu plain text dengan menggunakan
suatu fungsi hash, misal MD5. Jika berbeda algoritma hash yang dipakai, maka akan
berbeda pula teknik rainbow table yang dipakai.
Gambar 2
Fungsi hash sendiri merupakan fungsi satu arah. Jadi ketika suatu plain text sudah di-
generate hash code-nya, maka tidak bisa dikembalikan menjadi plain text dengan fungsi
yang sama. Adapun pada gambar, yang dimaksud reduce ialah suatu fungsi yang akan
4
mereduksi hash code menurut algoritma tertentu, fungsi reduksi ini bukan merupakan
kebalikan dari fungsi hash.
Gambar 3
Pada pemrosesan pembangunan rainbow table yang terjadi adalah proses hashing dan
reducing berulang. Nantinya yang disimpan di dalam rainbow table hanya berupa start
plain text sampel dan hash code terakhir yang di-generate-nya.
2. Algoritma peretasan dengan rainbow table
Setelah rainbow table berhasil di-generate, langkah selanjutnya melakukan peretasan
terhadap suatu hash code yang ingin diketahui plain text-nya. Algoritmanya sebagai
berikut :
i. Cari padanan hash code yang ingin diretas dengan daftar hash code yang ada dalam
rainbow table. Jika ditemukan, keluar dari perulangan, menuju langkah [iv.]
ii. Jika belum ditemukan, lakukan fungsi reduksi terhadap hash code yang ingin diretas
tersebut menjadi suatu plain text, lalu lakukan fungsi hash terhadap plain text
tersebut hingga didapatkan suatu hash code baru.
iii. Lakukan pengecekan hash code baru yang dihasilkan melalui langkah [ii.] dengan
daftar hash code yang ada dalam rainbow table lagi.
iv. Jika ditemukan, berarti diantara hash code dan start plain text sampel pada baris yang
bersangkutan mengandung plain text dari hash code yang ingin diretas tersebut.
v. Untuk mendapatkan plain text yang dimaksud, ambil start plain text sampel pada
baris tersebut, lalu lakukan fungsi hashing dan reducing melalui start plain text
sampel tersebut hingga didapat hash yang sama dengan hash code yang dicari,
yang juga berarti plain text sebelum hash itu merupakan plain text yang dicari.
3. Contoh
/* ingin dicari plain text dari suatu hash code */
Diketahui suatu hash code : 222f00dc4b7f9131c89cff641d1a8c50
/* pembangunan rainbow table */
Ambil start sampel plain text hash dengan MD5 :
MD5(“iaisudhiu”) “222f00dc4b7f9131c89cff641d1a8c50”
5
Lakukan fungsi reduksi (R) terhadap hash (misal R = fungsi ambil 6 angka pertama) :
R(“222f00dc4b7f9131c89cff641d1a8c50”) “222004”
Hingga looping yang diinginkan, ulangi kembali langkah :
MD5(“2220044”) “c7500ed4d33229ca4c858226fd4da632”
R(“c7500ed4d33229ca4c858226fd4da632”) “750043”
[...] “4259cc34599c530b1e4a8f225d665802”
Baris-baris rainbow table hanya menyimpan kumpulan start sampel plain text dan hash
terakhirnya yang di-generate, misal didapat :
iaisudhiu -> 4259cc34599c530b1e4a8f225d665802
9da8dasf -> 3cd696a8571a843cda453a229d741843
[...]
sodifo8sf -> 7ad7d6fa6bb4fd28ab98b3dd33261e8f
/* Proses peretasan hash code yang dicari */
Untuk proses peretasan : cari padanan hash code yang ingin dicari dengan daftar yang
ada dalam rainbow table.
Jika belum ketemu, ulangi terus : MD5 (R(hash code tersebut))
Lalu cek lagi, apakah sudah bisa ditemukan padanannya.
Jika ditemukan, diantara final hash dengan start sampel-nya terdapat “rantai
tersembunyi” yang di dalamnya terdapat plain text dari hash code yang dicari.
Untuk mendapatkannya, lakukan fungsi hashing dan reducing terhadap start plain text
sampel baris tersebut hingga didapat hash code seperti yang dicari, yang berarti plain
text sebelum hash tersebut di-generate dengan fungsi reduce merupakan plain text
yang dicari.
6
Demo Aplikasi Rainbow Table
Pada kesempatan kali ini, penulis akan mengulas sebuah aplikasi cracking rainbow
table dengan konfigurasi sebagai berikut:
1. Generate Table Rainbow
Untuk membuat rainbow table dengan aplikasi rainbowcrack-1.41-win caranya
terdiri dari dua langkah, yakni:
i. Generate setiap rainbow table dengan menjalankan program rtgen.exe melalui
command prompt, seperti gambar dibawah ini :
Setelah proses generating (memakan waktu lebih dari 12 jam) selesai, akan didapat
5 buah rainbow tabel berupa file .rt yang masing-masing berukuran 125 MB,
sebagai berikut :
Software : rainbowcrack-1.41-win
Algoritma hash : MD5
Jumlah tabel : 5
Ukuran total tabel : 625 MB
Jumlah rantai / baris : 8 juta
Panjang per-rantai : 2100
Range Plain Text : 1 s.d. 7 karakter
alpha-numeric = [ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789], atau
loweralpha-numeric = [abcdefghijklmnopqrstuvwxyz0123456789]
7
ii. Akan tetapi, agar proses lookup table pada saat crack nanti lebih mudah, rainbow
table yang ada tersebut perlu di-sorting. Prosesnya hanya memakan waktu
beberapa menit. Caranya dengan jalankan program rtsort.exe melalui command
prompt seperti di bawah ini:
2. Password Cracking
Selanjutnya pada kesempatan kali ini, penulis akan mendemokan cracking dengan
rainbow table melalui fasilitas program rcrack_gui.exe yang disediakan aplikasi
rainbowcrack-1.41-win. Yaitu sebagai berikut :
i. Misalkan kita mempunyai suatu hash code yang ingin dicari tahu bentuk text aslinya :
5d41402abc4b2a76b9719d911017c592
ii. Masukkan hash code yang ingin di crack
8
iii. Pilih rainbow table yang akan digunakan untuk proses cracking
iv. Proses cracking pun akan langsung berjalan, setelah selesai, akan tampak seperti
gambar berikut (didapat plain text dari hash code yang dicari adalah “hello”)
9
Rainbow Table : Time – Memory Trade Off
Untuk memperjelas mengapa rainbow table dikatakan time – memory trade off,
perhatikan cuplikan gambar yang diambil dari aplikasi Winrtgen (rainbow table generator
untuk operating sistem Windows) yang dijalankan pada PC 1 GHz dan RAM 512 MB
dibawah ini :
Gambar diatas merupakan antarmuka dari aplikasi Winrtgen untuk menunjukkan
bagaimana hubungan jumlah baris dan banyak tabel dengan success rate serta waktu
komputasinya. Dari beberapa skenario simulasi dengan aplikasi tersebut didapatkan data
sebagai berikut (sumber: The Ethical Hacker Network - Tutorial Rainbow Tables and
RainbowCrack) :
10
NO
Banyak
Tabel
(N* of tables)
Jumlah
Baris
(chain count)
Panjang Rantai
per Baris
(chain len)
Success
Probability
Total
Precomputation
Time
1 1 40 juta 2.400 97,8 % 2,23 hari
2 1 40 juta 4.000 99,11 % 3,67 hari
3 5 8 juta 2.100 99,90 % 2,01 hari
4 64 67.108.864 15.200 99,98 % 4,6 tahun
Dari tabel diatas, dapat dilihat bahwa untuk membangun rainbow table memang
diperlukan trade off terutama dari segi memori dan waktu komputasional pen-generate-
annya. Jumlah baris yang banyak, table yang banyak, ataupun rantai yang makin panjang,
tidak selalu berarti akan menghasilkan solusi optimal. Sebab, dengan kondisi seperti itu,
waktu komputasinya belum tentu lebih cepat, sekalipun kita mendapatkan rainbow table
dengan tingkat kemungkinan sukses (hash code terpecahkan dengan benar) hingga mendekati
100 %.
11
Kelebihan dan Kekurangan
Adapun beberapa kelebihan dan kekurangan yang dimiliki rainbow table ini, antara
lain :
+) Setelah didapat tabel daftar kombinasi (rainbow table), waktu retas password hanya
memakan waktu kurang dari 25% dengan akurasi hingga 90% s.d. 95%. Misalnya seperti
yang ditunjukkan pada bagian demo aplikasi, untuk meretas suatu hash dibutuhkan waktu
hanya beberapa detik.
-) Butuh komputasi dan resource besar. Gambar di bawah ini menunjukkan ukuran rainbow
table yang dibutuhkan untuk memecahkan kode dengan himpunan karakter seperti yang ada
di sebelah kanan :
-) Ada kemungkinan terjadi looping (rantai tidak berujung / kembali ke start plain text lagi)
-) kemungkinan terdapat dua atau beberapa chain berujung sama.
12
Kesimpulan
Dari hasil kajian dan studi literatur, dapat disimpulkan beberapa hal sebagai berikut :
Makin tinggi success rate untuk rainbow table[s], makin cepat proses cracking password,
TETAPI waktu dan memori pen-generate-annya makin besar.
Sebab, rainbow table dengan jumlah baris / panjang rantai yang besar membuka
kemungkinan untuk mendapatkan kombinasi jawaban dari hash code yang ingin di crack
semakin terbuka lebar. Hanya saja itu berarti untuk membangun banyak baris dan rantai
yang panjang tersebut akan membutuhkan waktu dan memori lebih besar.
Untuk itu, pilihan solusi yang dapat ditawarkan yakni :
“ buat beberapa table dengan sejumlah row dan panjang chain bisa lebih kecil”
Hal tersebut yang disebut melakukan time – memory trade off.
Adapun proteksi yang bisa dilakukan untuk menghindari serangan rainbow table :
Maksudnya, password yang kita miliki sebelum di-hash, ditambahkan kata kunci lain.
Sehingga ketika hash code password kita tercuri, si pencuri akan sulit mendapatkan hash
yang tepat, kecuali dia mengetahui kata kunci tambahan kita. Kata kunci tambahan ini
sendiri biasa disebut salt, sehingga hash hasil penambahan ini disebut Saltedhash.
13
Daftar Pustaka
http://www.codinghorror.com/blog/2007/09/rainbow-hash-cracking.html
(25 Agustus 2010)
http://kestas.kuliukas.com/RainbowTables/
(25 Agustus 2010)
http://logsmylife.wordpress.com/2009/09/11/password-cracking-with-rainbowcrack/
(25 Agustus 2010)
http://project-rainbowcrack.com/tutorial.htm
(25 Agustus 2010)
http://www.md5decrypter.co.uk/
(22 Oktober 2010)
http://www.ethicalhacker.net/content/view/94/24/
(22 Oktober 2010)
http://rainbowtables.net/faq.php
(23 Oktober 2010)