Apa Itu SQL Injection ? Penjelasan SQL Injection dan Cara Mencegahnya
Pengertian SQL Injection
SQL injection adalah sebuah serangan injeksi SQL yang dapat menimbulkan ancaman keamanan yang serius ke Web Application, yang dimana SQL Injection mengizinkan penyerang untuk mendapatkan akses ke database yang dapat menyebabkan hilangnya kerahasiaan data terutama pada informasi yang sensitive. Dalam melakukan teknik SQL injection, para hacker akan memanfaatkan celah keamanan pada web atau aplikasi. Mereka akan memasukkan perintah-perintah SQL ke dalam database mesin server sehingga mereka dapat masuk ke dalam sistem tanpa harus memiliki username dan password administrator.
Sampai saat ini SQL Injection masih menjadi favorit hacker untuk melakukan serangan pada website. Apalagi sekarang ini hacking melalui jaringan internet sudah tidak semudah zaman dulu. SQL Injection dapat diterapkan pada banyak aplikasi database yang umum digunakan, berdasarkan pada Oracle, MySQL, Microsoft SQL Server dan Postgre SQL merupakan 4 (empat) aplikasi database yang paling banyak digunakan oleh khalayak umum, termasuk di Indonesia.
Penyebab dan Cara Kerja SQL Injection
SQL Injection adalah perhatian utama saat mengembangkan aplikasi Web. Ini terjadi ketika aplikasi menerima input pengguna yang berbahaya dan kemudian menggunakannya sebagai bagian dari pernyataan SQL untuk meminta database back end. SQL injection ini dapat terjadi karena beberapa hal seperti kurangnya penanganan terhadap metakarakter seperti tanda petik satu, karakter double minus, ataupun karakter lainnya yang biasa digunakan dalam sintaks SQL. Selain itu serangan SQL Injection juga dapat terjadi jika personil back end tidak mengimplementasikan atau tidak mengatur Web Application Firewall (WAF) atau Intrusion Prevention System (IPS) pada arsitektur jaringan dengan baik, sehingga database aplikasi dapat diakses langsung dari celah kerawanan yang ditemukan.
Hal tersebur mnyebabkan seorang penyerang dapat memasukkan karakter kontrol SQL dan kata kunci perintah (misalnya, tanda kutip tunggal (‘), tanda kutip ganda (“), sama (=), komentar (- -), dll.) untuk mengubah struktur kueri. Menggunakan karakter kontrol tersebut dengan perintah SQL umum (misalnya, SELECT, FROM, DELETE, dll.) memungkinkan akses atau pengambilan elemen data dari server database back end.
Serangan yang berhasil membutuhkan aplikasi web untuk memasukkan kode berbahaya dari penyerang dalam pernyataan SQL. Kode berbahaya biasanya berasal dari sumber yang tidak tepercaya.Dalam beberapa kasus, database sistem internal juga dapat menjadi sumber data berbahaya. Saat pernyataan SQL berbahaya dieksekusi terhadap database back end, penyerang dapat mengubah atau mengakses database. Ini tergantung bagaimana penyerang membuat data berbahaya.
Tujuan SQL Injection
SQL Injection yang dilakukan oleh hacker pasti memiliki tujuan, tidak mungkin hanya sebatas iseng saja. Berikut beberapa tujuan SQL Injection yang sering banyak ditemui:
- Bypass Otentikasi
Jika berhasil masuk kedalam sistem, hacker akan mudah melakukan bypass tanpa perlu menggunakan username dan password yang benar untuk bisa mendapatkan akses. Cukup dengan memasukan script SQL Injection pada form yang masih terbuka. - Pencurian Informasi
Hacker memungkinkan untuk mengambil semua informasi yang ada pada website terutama informasi yang bersifat sensitif seperti username dan password. - Delete Data
SQL Injection memungkinkan untuk hacker menghapus semua data yang tersimpan di database, jika sudah terjadi seperti ini dan tidak ada backup database maka akan sangat berbahaya. Jadi Anda perlu melakukan backup data secara berkala untuk tujuan keamanan data. - Modify Data
Selain menghapus data, hacker dengan mudah mengubah data yang tersimpan di database sehingga menyebabkan data tidak valid. Jadi Anda perlu memiliki backup data jika sewaktu-waktu data dirubah oleh orang yang tidak bertanggung jawab. - Command Execution
Pada beberapa database, Anda sebagai user bisa mengakses operating system menggunakan server database, kalau sudah seperti ini hacker bisa dengan mudah menyerang semua yang ada pada website Anda.
Jenis-Jenis SQL Injection
SQL Injection dapat diklasifikasikan menjadi tiga kategori utama
In-band SQL Injection (Classic SQL Injection)
In-band SQL Injection adalah serangan SQL Injection yang paling umum dan mudah dieksploitasi. In-band SQL Injection terjadi ketika penyerang dapat menggunakan saluran komunikasi yang sama untuk meluncurkan serangan dan mengumpulkan hasil. Sebagai contoh penyerang dapat menggunakan komunikasi HTTP menyebarkan serangan ke backend dan mendapatkan hasil di saluran yang sama.
Ada dua tipe utama In-band SQL Injection:
- Error-based SQL Injection
Error-based SQLI adalah teknik In-band SQL Injection yang mengandalkan pesan kesalahan yang dilemparkan oleh database server untuk mendapatkan informasi tentang struktur database. Dalam beberapa kasus, error-based SQL injection saja sudah cukup bagi penyerang untuk menghitung seluruh database. - Union-based SQLI
Union-based SQLI adalah teknik In-band SQL Injection yang memanfaatkan operator SQL UNION untuk menggabungkan hasil dari dua atau lebih pernyataan SELECT menjadi satu hasil yang kemudian dikembalikan sebagai bagian dari respons HTTP.
Inferential SQL Injection (Blind SQLI)
Inferential SQL Injection, tidak seperti in-band SQLI, mungkin memerlukan waktu lebih lama bagi penyerang untuk mengeksploitasi, namun, ini sama berbahayanya dengan bentuk SQL Injection lainnya. Dalam serangan inferential SQLI, tidak ada data yang benar-benar ditransfer melalui aplikasi web dan penyerang tidak akan dapat melihat hasil serangan in-band (itulah sebabnya serangan semacam itu biasanya disebut sebagai “serangan blind SQL Injection”).
Sebaliknya, penyerang dapat merekonstruksi struktur database dengan mengirimkan payload, mengamati respons aplikasi web dan perilaku yang dihasilkan dari database server. Ada dua jenis SQL Injection inferensial yaitu SQLI berbasis Blind-boolean dan SQLI berbasis Blind-time.
- Boolean-based (content-based) Blind SQL Injection
Boolean-based SQL Injection adalah teknik inferential SQL Injection yang mengandalkan pengiriman query SQL ke database yang memaksa aplikasi untuk mengembalikan hasil yang berbeda bergantung pada apakah kueri mengembalikan hasil TRUE atau FALSE. Bergantung pada hasilnya, konten dalam respons HTTP akan berubah, atau tetap sama. Hal ini memungkinkan penyerang untuk menyimpulkan apakah payload yang digunakan mengembalikan true atau false, meskipun tidak ada data dari database yang dikembalikan.
- Time-based Blind SQL Injection
Time-based SQL Injection adalah teknik inferential SQL Injection yang mengandalkan pengiriman query SQL ke database yang memaksa database untuk menunggu selama jumlah waktu tertentu (dalam detik) sebelum merespons. Waktu respons akan menunjukkan kepada penyerang apakah hasil query TRUE atau FALSE. tergantung pada hasilnya, respons HTTP akan dikembalikan dengan penundaan, atau segera dikembalikan. Hal ini memungkinkan penyerang untuk menyimpulkan apakah payload yang digunakan menampilkan true atau false, meskipun tidak ada data dari database yang dikembalikan. - Out-of-band SQL Injection
Out-of-band SQL Injection tidak terlalu umum, sebagian besar karena bergantung pada fitur yang diaktifkan pada server database yang digunakan oleh aplikasi web. Out-of-band SQL Injection terjadi ketika penyerang tidak dapat menggunakan saluran yang sama untuk meluncurkan serangan dan mengumpulkan hasil. Teknik out-of-band, menawarkan penyerang alternatif dari teknik inferential time-based, terutama jika respons server tidak terlalu stabil (membuat serangan inferential time-based tidak dapat diandalkan).
Seorang penyerang dapat memasukkan karakter kontrol SQL dan kata kunci perintah (misalnya, tanda kutip tunggal (‘), tanda kutip ganda (“), sama (=), komentar (- -), dll.) Untuk mengubah struktur kueri. Menggunakan karakter kontrol ini dengan perintah SQL umum (misalnya, SELECT, FROM, DELETE, dll.) Memungkinkan akses atau pengambilan elemen data dari server database backend.
Serangan yang berhasil membutuhkan aplikasi Web untuk memasukkan kode berbahaya dari penyerang dalam pernyataan SQL. Kode berbahaya biasanya berasal dari sumber yang tidak tepercaya. Dalam beberapa kasus, database sistem internal juga dapat menjadi sumber data berbahaya. Saat pernyataan SQL berbahaya dieksekusi terhadap database backend, penyerang dapat mengubah atau mengakses database. Ini tergantung bagaimana penyerang membuat data berbahaya.
Cara Mencegah SQL Injection
Untuk meminimalisir semua efek yang diakibatkan dari serangan SQL Injection, Anda bisa melakukan beberapa tindakan seperti berikut ini, yaitu:
- Sesuaikan input box
Jika form input box tujuannya untuk menuliskan nama, maka berikan khusus untuk karakter saja, jika untuk mengisikan nomor telepon maka isilah dengan numbering saja sehingga tindakan SQL Injection bisa dihindarkan. - Batasi input box
Untuk lebih amannya dalam setiap box dibatasi jumlah karakternya, contoh saja untuk nama paling tidak diberikan 30 karakter atau disesuaikan sesuai dengan kebutuhan, sehingga jika ada percobaan SQL Injection yang masuk akan terkendala oleh jumlah karakter yang tersedia. - Filter user
Melakukan filter kepada input-an setiap user, terutama yang menggunakan karakter kutip tunggal (Validation Input) karena ini menjadi salah satu trik yang dilakukan hacker untuk SQL Injection. - Mematikan error handling
Jika terjadi error, Anda perlu mematikan fitur notifikasi pesan error yang keluar dari SQL Server. Jika sampai ada, ini bisa menjadi celah bagi hacker untuk melakukan eksploitasi lebih dalam percobaan SQL Injection. - Nonaktifkan fitur standart SQL
Fitur-fitur standart yang ada di SQL seperti Stored Procedures dan Extend Stored Procedures lebih baik untuk dimatikan saja, karena rawan terkena SQL Injection. - Setting Privilege
Silahkan Anda rubah pada bagian ‘Stratup and run SQL Server’ dengan setting low privilege user pada menu SQL Server Security tab.