Sunday, September 23, 2007

journal: Tentukan kuncimu (password-mu)

Sudah kita semua ketahui bahwa tidak perduli sekuat apapun sistem keamanan suatu rumah, apakah dilengkapi dengan pagar beraliran listrik, alarm, kamera pengintai dsb, tetapi apabila masih menggunakan metode kunci "konvensional" maka akan tetap saja rentan dan relatif menjadi lebih mudah bagi penyusup untuk menaklukkannya, kenapa ? karena semua peralatan tersebut terlihat dan tidak memiliki pengamanan lainnya, gembok (rumah kunci) tertinggal di tempat dan terbuka untuk di eksplorasi, menginggat hal ini penulis jadi teringat bahasan yang di jelaskan dan di demokan oleh deviant dan kawan-kawan dari lockpicking vilage tentang "conventional locking",hanya perlu beberapa detik saja untuk membukanya. Alarm dan kamera pengintai juga merupakan sasaran empuk untuk di eksplorasi.

Tetapi, kali ini penulis bukan akan membahas hal-hal tersebut, karena penulis menyadari bukan sebagai ahli dibidang hal tersebut, walau pernah mencoba dan berhasil (di lockpicking vilage pada event HITB2007), tetapi sekarang penulis akan mengajak kita beralih pembahasan dan men-transform kunci tersebut ke apa yang kita kenal dengan password di dunia digital. Topik kita batasi hanya pada metode pengamanan untuk otentikasi dan otorisasi menggunakan password, jadi lupakan dan jangan berharap di artikel ini di bahas tentang key escrow pada public key, mekasnisme sertifikat pada ssh, atau sampai pada penggunaan password biometric.

Baiklah sebelum ngelantur jauh lagi, kita kembali ke topik bahasan kita :). Seperti yang di jelaskan di atas sekuat apapun sistem keamanan komputer/server/jaringan anda entah berapa firewall/IDS/IPS yang digunakan, maka apabila password yang anda gunakan sangat lemah maka investasi ratusan juta anda pada perangkat keamanan tersebut menjadi percuma, dan yakinlah bahwa cara untuk mendapatkannya pun tidak sesulit yang anda bayangkan :). Jim geovedi bahkan pernah bertanya "berapa standar untuk panjang password minimal saat ini?", pada salah satu sesi kuis di ulang tahun echo (memperebutkan buku gratis dari jasakom) dan tidak terbayangkan berapa banyak jawaban yang terbang kala itu, jadi apakah standar yang kurang "ngetop" dibanding lagu "ketahuan", atau karena tidak ada hukum yang menjerat apabila user menggunakan password yang tidak sesuai dengan standar :).

Jangan tanya pada saya bagaimana password yang baik?, karena itu hanya membuktikan bahwa anda orang yang malas membaca (sudah lebih dari 3 tahun artikel tersebut saya tulis di sini, bahkan sudah sedikit out-of-date) !.

Alangkah sangat disayangkan apabila setiap user yang sudah "aware" terhadap hal ini dan mencoba mengaplikasikannya tetapi tidak di dukung oleh pihak pemberi layanan (semisal web), mungkin dengan alih-alih mencegah kemungkinan "fault injection attack" yang dilakukan user, maka mereka dengan semena-mena menetapkan bahwa karakter yang di gunakan pada password hanyalah AlphaNumeric (abcdefghijklmnopqrstuvwxyz012345689) dan lebih buruk lagi pembatasan jumlah karakter!. Jangan kaget!, hal ini sering saya temui di berbagai situs yang ada, bahkan dibeberapa situs keamanan dan situs dengan pengikut yang jutaaan (situs sejuta umat), seharusnya pihak penyedia layanan juga menyadari bahwa keamanan user berada di tangan mereka, belum lagi untuk user yang memegang 1/2 prinsip three musketers "one for all" (satu password untuk semua).

Seharusnya pihak penyedia layanan dapat mengkoding dan melakukan "filtering" inputan sebelum di proses, semisal menggunakan base64, atau md5 sebelum di masukkan ke database, karena output yang di hasilkan juga alphanumerik. Atau malah spekulasi mengerikan yang di buat oleh mereka adalah memasukkan password user secara "plaintext" dan karena itu mereka tidak menerima karakter spesial ? (dont ask me :P). Kemungkinan penggunakan Content management system jugalah yang mengakibatkan hal ini, banyak penyedia layanan yang tidak mau repot dan tinggal menggunakan CMS yang ada tanpa melakukan pemeriksaan dan modifikasi.

Sekarang kita masuk kebagian yang sedikit teknis (mudah-mudahan tidak mengantuk),
Saya akan memberi gambaran kepada kita semua bahwa tidak membutuhkan waktu yang lama untuk
melakukan cracking terhadap password anda (lupakan incremental bruteforcing, lupakan dictionary attack, gunakan "table" ), perhatian ini hanya untuk password anda yang di
"hash" dengan md5 saja, untuk yang disimpan dengan plaintext, maka "attacker" cukup
melakukan mysql>select * from users;

Sekarang saya akan membuat 3 buah password dengan panjang 6 karakter, karena saya hanya
memiliki tabel mix-alpha-numeric-all-space#1-6 yang di peruntukkan hanya sepanjang 6 karakter, dan ingat panjang karakter bukan hal sulit jika anda memiliki tabel yang beragam)
ammar@localhost ~ $ echo -n tesaja | md5sum | cut -d ' ' -f 1 > pass.txt
ammar@localhost ~ $ echo -n tesAJA | md5sum | cut -d ' ' -f 1 >> pass.txt
ammar@localhost ~ $ echo -n t3s4J4 | md5sum | cut -d ' ' -f 1 >> pass.txt


kita lihat isi file tersebut
ammar@localhost ~ $ cat pass.txt
e9826a10941f1a3d13e5af6db63dd8c4
221d6b05364c76d57d0c390d5522441c
cbcf5cf4acdd085e597f4984cc5bdb01

kemudian 3 file ini akan coba saya crack dengan rainbowcrack
U:\rainbowcrack\md5_mixalpha-numeric-all-space_1-6>rcrack.exe *.rt -l pass.txt
md5_mixalpha-numeric-all-space#1-6_0_10000x11025403_distrrtgen_4.rt:
176406448 bytes read, disk access time: 0.53 s
verifying the file...
searching for 3 hashes...
plaintext of cbcf5cf4acdd085e597f4984cc5bdb01 is t3s4J4
cryptanalysis time: 223.56 s

md5_mixalpha-numeric-all-space#1-6_0_10000x33554432_distrrtgen_0.rt:
536870912 bytes read, disk access time: 47.41 s
verifying the file...
searching for 2 hashes...
cryptanalysis time: 17.23 s

md5_mixalpha-numeric-all-space#1-6_0_10000x33554432_distrrtgen_1.rt:
536870912 bytes read, disk access time: 46.86 s
verifying the file...
searching for 2 hashes...
plaintext of e9826a10941f1a3d13e5af6db63dd8c4 is tesaja
cryptanalysis time: 16.83 s

md5_mixalpha-numeric-all-space#1-6_0_10000x33554432_distrrtgen_2.rt:
536870912 bytes read, disk access time: 46.06 s
verifying the file...
searching for 1 hash...
cryptanalysis time: 8.22 s

md5_mixalpha-numeric-all-space#1-6_0_10000x33554432_distrrtgen_3.rt:
536870912 bytes read, disk access time: 46.22 s
verifying the file...
searching for 1 hash...
plaintext of 221d6b05364c76d57d0c390d5522441c is tesAJA
cryptanalysis time: 1.03 s

statistics
-------------------------------------------------------
plaintext found: 3 of 3 (100.00%)
total disk access time: 187.08 s
total cryptanalysis time: 266.88 s
total chain walk step: 142524927
total false alarm: 8820
total chain walk step due to false alarm: 34533018

result
-------------------------------------------------------
e9826a10941f1a3d13e5af6db63dd8c4 tesaja hex:746573616a61
221d6b05364c76d57d0c390d5522441c tesAJA hex:746573414a41
cbcf5cf4acdd085e597f4984cc5bdb01 t3s4J4 hex:743373344a34

U:\rainbowcrack\md5_mixalpha-numeric-all-space_1-6>
Dan dalam waktu yang singkat ketiga buah password itu telah di temukan, saya pernah melakukan cracking secara masal terhadap 146 password hash (tidak perlu saya sebutkan darimana saya mendapatkannya) dan hanya dibutuhkan waktu kurang lebih 30 menit untuk mengcrack semuanya menggunakan tabel ini dengan tingkat keberhasilan (25,34%). Dalam artian dari 146 password tersebut, terdapat 37 password dengan panjang 1-6 karakter dan berhasil di crack :). Dan banyak lagi jenis pengalaman yang akan membuat anda menemukan trik-trik lainnya :)

Sekarang, semuanya saya kembalikan kepada anda, dan masih banyak lagi hal menarik untuk di bahas semisal "Bermain-main dengan fitur password reminder" (apakah password yang diberikan itu bisa di tebak ? apakah bisa menjadi celah bagi attacker), hahaha.. coba anda temukan sendiri. Enjoy(tm)

source e-rdc.org

8 comments:

  1. Bang, sorry mo nanya.
    Kalo crack pass pdf di linux pake paan ya?
    Sorry kalo pertanyaannya telalu noob. :)
    tengkyu.

    ReplyDelete
  2. Brainstorming dikit mar,

    gw pernah baca artikel thomas ptacek dari matasano chargen, link nya di sini .

    Satu hal yang gw tangkap dan realize, sebenarnya letak kesalahan broken password tidak sepenuh nya pada user, dalam arti klo kita lihat dari sudut pandang yang berbeda plus dengan memahami arti dari hash itu sendiri...kesalahan bisa ditimpakan pada developer aplikasi itu sendiri.

    Contoh nya developer web, slm ini hanya menggunakan fungsi md5 bawaan dari php, dan itu hanya satu kali hash, akibat nya jika hash nya bisa dibaca maka dengan menggunakan tools semacam rainbow table akan sangat mudah di crack. Alasan nya jelas, krn rainbow crack utk md5 menggunakan algoritma yang sama persis dengan yg digunakan oleh md5 bawaan php.

    Coba misal kan, ada seorang developer web yang membuat fungsi hash nya sendiri dengan 'memanfaatkan' md5 utk enkripsi password user, misal contoh bodoh nya: abcdefg, akan di-enkripsi dengan menggunakan skema 2 kali md5, dan hasil nya di simpan dlm database -> e04706dfeba8cf67ff587fff1cd27b7b.

    apabila user memasukan password, maka tentu pengecekan akan menggunakan fungsi yang sama kan?dan hasil nya dibandingkan dengan yg di store pada database.

    Dengan logika seperti ini, maka letak kesalahan penggunaan password jelas bukan dari user, dengan menggunakan 5 karakter aja mungkin sudah cukup, dan tentu saja tidak bisa di-crack dengan rainbow table yg biasa nya akan menyimpan index table 5 karakter menggunakan hash md5 satu kali.

    What do you think?

    ReplyDelete
  3. siwawan: pake linux pdf password cracker kali ye, hahahhaha... kidding, belun pernah pake :)

    ReplyDelete
  4. cyberheb: betul juga h3b, tetapi kan selanjutnya tinggal me"reverse" algoritmanya, lalu dari algoritma tsb tinggal di generate tablenya :),- btw algoritma private itu emang lebih "tertutup" (karena tidak di publish) tetapi tidak berarti lebih kuat logh :)

    contoh password hash yang dibuat oracle dan password untuk windows sendiri (Disamping leak md5 dan sha1) .. hehehe...

    ReplyDelete
  5. bang...bis minta tolong untuk username n password di site www.jams.or.jp/notice/scmjol/7-27.html
    perlu banget untuk tesis saya.
    mailku artmath@live.com
    salam kenal untuk semua..
    education for allll....

    ReplyDelete
  6. bang...bis minta tolong untuk username n password di site www.jams.or.jp/notice/scmjol/7.html
    perlu banget untuk tesis saya.
    mailku artmath@live.com
    salam kenal untuk semua..
    education for allll....
    tolong bagi pembaca lain yang bisa mail ke saya ya...ada fee nya dech...penting banget soalnya ni....

    ReplyDelete
  7. penjelasan yg membingungkan....bingung mau mulai dr mana...ga d jelasin step2nya...

    ReplyDelete
  8. @Je t'aime: mulai dari menggunakan password yang relatif lebih aman :)

    ReplyDelete