Blind SQL Injection Merupakan salah satu teknik serangan web yang pupuler saat ini. Teknik ini bisa saya katakan sebagai varian dari teknik yang hampir serupa yaitu SQL Injection. Sama – sama memanfaatkan query database untuk melakukan hal – hal ilegal ke dalam website korban. Tujuan utama dari teknik ini adalah untuk mendapatkan username dan password user administrator yang mengelola website. Dengan demikian, akan dengan memudah melakukan segala sesuatu terhadap website korban.Mengubah tampilan depan (deface), mengganti ID Adsense (kalo memang ada), dst..
Saya tidak akan membahas bagaimana cara melakukan teknik ini. Silahkan anda buka disana, disitu, dst. Saya akan membahas bagaimana caranya bertahan.
Saya iseng-iseng ikut kegiatan yang diadakan oleh yogyafree.net yang membahas tentang sql injection. lebih tepatnya, Blind SQL Injection. Untuk mempelajari teknik ini. Setelah saya pelajari dan mencoba beberapa kali, akhirnya saya berani membuat kesimpulan bahwa serangan ini mungkin dilakukan benar2 murni kesalahan web developernyah.
Memang benar, bahwa serangan ini akan lebih mudah atau lebih tepatnya, lebih mungkin dilakukan pada website yang menggunakan PHP script dan menggunakan mysql database versi 5 ke atas. Saya kurang setuju dengan saran narasumber yang mengatakan jika ingin aman dari serangan ini, gunakan database versi 4 ke bawah. Sebenarnya tidak ada yang salah dengan database mysql versi 5 ke atas. Di versi 5, mysql mulai membuat semacam dictionary object. Semua informasi tentang object di dalam database, disimpan dalam sebuah database dengan nama information_schema. Database inilah yang sering di manfaatkan oleh penyerang untuk menggali informasi tentang table dan kolom yang ada dalam database. Gaya ini sepertinya akan meniru database oracle yang sudah sejak dahulu kala menggunakan Dictionary Table untuk menyimpan semua informasi tentang object-object di dalam database. Belum lagi fitur – fitur stored procedure seperti function, procedure, trigger, view dst., yang terlalu sayang untuk dimubazirkan.
String Single Quote (petik satu) . Awal dari bencana itu
Penyerang akan melakukan percobaan apakan website target bisa diinject atau tidak dengan melakukan test terlebih dahulu. Biasanya dengan menambahkan tanda petik satu (‘) di akhir URL. Contoh
[You must be registered and logged in to see this link.] . Ada tanda petik satu di akhir URL. Seperti itulah cara penyerang mengetest sebuah web. Apakan bisa diserang atau tidak. Jika muncul error pada halaman web, artinya, web tersebut bisa diserang.
PENCEGAHAN
- Konfigurasi PHP yang baik dan benar
Serangan ini diakibatkan oleh tanda petik satu yang diloloskan ke dalam query database sehingga mengakibatkan database akan memproses tanda petik satu sebagai bagian dari query yang nantinya akan menghasilkan error. Untuk mengatasinya, pada konfigurasi php.ini pastikan tag
magic_quote_gpc = on .
Biasanya, instalasi php standard di beberapa sistem operasi linux, tag
magic_quote_gpc = off
adalah sebagai default. Untuk itu harus dirubah menjadi on. Dengan demikian, tanda petik akan diberikan escape caracter di depannya.
- Sembunyikan Error
Pesan error diibaratkan peta menuju tempat harta karun bagi penyerang. Pesan error perlu untuk ditampilkan hanya pada saat development saja. Sedangkan ketika akan go live, Pesan error sama sekali tidak boleh ditampilkan. Untuk menghilangkan pesan error, dapat dilakukkan dengan mengganti tag
display_errors = On
pada file php.ini menjadi
display_errors = Off
atau dapat juga di script php kita dengan menambahkan function
error_reporting(0);
- GUNAKAN FRAMEWORK UNTUK STANDARISASI KODE
Teman saya seorang dosen mengatakan bahwa, “sudah tidak jamannya lagi mengetikkan kode sendiri. Gunanakan framework”. Pendapat beliau saya rasa ada benarnya juga mengingat dengan menggunakan framework kode kita akan lebih rapi dan securitynya juga sudah standar. Penggunaan framework juga akan diikuti dengan keharusan mengaktifkan module mod_rewrite pada apache webserver dan juga mengaktifkan module curl pada php yang akan membuat serangan SQL Injection tidak akan mempan lagi. Contohnya bisa anda lihat di detik.com , kompas.com, inilah.com, dst.
-BUAT PASSWORD ADMIN YANG KOMPLEX
Serangan blind SQL Injection intinya adalah berusaha melihat isi table dimana informasi username dan password admin disimpan. Dengan demikian, penyerang akan login sebagai admin ke halaman administrasi. Katakanlah cara2 di atas tidak mempan untuk mencegah serangan, kita mempunyai pertahanan terakhir yaitu pada level password. Password haruslah disimpan dalam bentuk sudah terenkripsi. Sehingga seandainya penyerang bisa melihat isi username dan password, mereka tetap tidak bisa login, karena passwordnya terenkripsi. Kita bisa menggunakan algoritma MD5 yang merupakan metode enkripsi satu arah. dimana bisa di encript tapi tidak bisa di decrypt. Meskipun demikian, password yang kita gunakan juga haruslah tidak mudah ditebak karena, di internet juga ada banyak web yang menyediakan layanan decrypt MD5. Tapi sebenarnya, cara kerjanya tidaklah mendecrypt tetapi mencari kecocokan dengan yang ada di database mereka.
Berikut ini adalah contoh password yang baik :
p4$$w0rd, 53cR3T, L0v3@d#151ght, dst…