Monday, December 19, 2016

Lebih dalam lagi dengan SQL Injection

Beberapa hari yang lalu, ada sebuah rapat yang menarik banget bagi saya. Rapat ini tentang keamanan informasi dari tim ID-SIRTII/CC (Indonesia Security Incident Response Team on Internet and Infrastructure/Coordination Centre).
sumber dari infografis ID-SIRTII/CC
Dari gambar diatas dapat diketahui bahwa berbagai hal, mulai negara yang menjadi target, asal negara serangan, serangan yang paling sering, dll. Tapi yang menjadi sangat penting adalah serangan sql dimana serangan ini sangat besar dampaknya.


Pengertian
Sql injection merupakan sebuah teknik hacking dimana seorang penyerang memasukkan kode-kode (query) perintah-perintah sql melalui url untuk dieksekusi oleh basis data. Hal ini dilakukan di aplikasi client dengan cara memodifikasi perintah sql yang ada di memori aplikasi client. Selain itu SQL injection hanya dapat dilakukan jika database digunakan untuk penyimpanan data.

Penyebab
Penyebab utama dari masalah ini adalah tidak adanya penanganan terhadap karakter – karakter tanda petik satu ’ dan juga karakter double minus -- yang menyebabkan suatu aplikasi dapat disisipi dengan perintah SQL. Sehingga seorang Hacker menyisipkan perintah SQL kedalam suatu parameter maupun suatu form.

Dampak / Efek
  1. Seseorang mampu untuk masuk ke dalam sistem tanpa memiliki akun resmi
  2. Selain itu orang tersebut mampu menambah, menghapus dan merubah data-data yang terdapat dalam basis data
  3. Jika sudah masuk maka mampu melakukan kontrol penuh terhadap basis data dengan mematikan sistem yang berjalan, sehinnga situs tidak mampu memberikan layanan
  4. Dampak terparah adalah ketika masuk sistem dan mampu memasukkan suatu perintah, maka si hacker mampu melakukan apa saja
Contoh
Seorang programmer lebih condong senang menaruh query basis data ke dalam sintaks pemrograman mereka apalagi menggunakan mesin MySQL. Hal ini sering dilakukan menurut pendapat temen saya itu lebih gampang, selain menurut saya query itu harusnya di buat dalam basis data. Saya kurang paham apakah hal ini bisa dilakukan di MySQL? Kita ambil contoh dengan sintaks sebagai  berikut:
$SQL = “select * from login where username =’$username’ and password = ‘$password’”; , {dari GET atau POST variable }
Kita isikan dalam password dengan dengan string ’ or ’’ = ’ dan hasilnya adalah
“select * from login where username = ’$username’ and password=’pass’ or ‘=′”;

dengan SQL ini hasil selection akan selalu TRUE maka kita bisa inject sintax SQL (dalam hal ini OR) kedalam SQL tersebut.
Selain itu kita bisa melakukan sintaks SQL string '-- setelah username, langsung dengan query database, atau sql injection melalui url. Untuk lebih detail silahkan cek di tautan ini

Cara Pencegahan
  1. Membatasi panjang input box, dengan cara membatasinya di kode program
  2. Filter input yang dimasukkan oleh user, terutama penggunaan tanda kutip tunggal
  3. Matikan atau sembunyikan pesan error yang keluar dari SQL server
  4. Matikan fasilitas-fasilitas standar seperti Stored Procedures, Extended Stored Procedures jika memungkinkan
  5. Ubah database SQL server dengan low privileges
  6. Tingkatkan keamanan web dengan menggunakan aplikasi mod security
  7. Ubahlah query string halaman web dengan tampilan yang lebih user friendly
Kesimpulan
Berbagai macam serangan timbul ketika membuka sebuah situs. Meskipun kita membatasi port yang diakses, tetapi serangan sekarang mengarah langsung lewat aplikasi. Penguatan sistem tidak selalu harus dari sisi network, tetapi sekarang pengamanan terhadap aplikasi layak diperhatikan lebih lanjut. Penguatan aplikasi lebih condong ke pembangunan aplikasi yang berbasis OOP sehingga akan sulit ditembus.

No comments:

Post a Comment