Data merupakan salah satu komponen terpenting dari sistem informasi. Aplikasi web yang didukung database digunakan oleh organisasi untuk mendapatkan data dari pelanggan. SQL adalah singkatan dari Structured Query Language. Ini digunakan untuk mengambil dan memanipulasi data dalam database. Namun karena hal itu juga peratas menemukan jenis serangan baru dan salah satu jenis serangannya adalah SQL Injection.
Kalian mungkin tidak tahu apa itu SQL Injection (SQLI) atau cara kerjanya, tetapi kalian pasti tahu tentang korbannya. Target, Yahoo, Zappos, Equifax, Epic Games, TalkTalk, LinkedIn, dan Sony Pictures. Semua perusahaan ini diretas oleh penjahat dunia maya menggunakan SQL Injection.
Seperti yang dikatan OWASP, SQL Injection telah menjadi masalah umum dengan situs web berbasis database. Cacat ini mudah dideteksi, dan dengan mudah dieksploitasi.
Baca Juga: Apa Itu Serangan XSS (Cross-Site Scripting)?
DAFTAR ISI
Apa Itu SQL Injection
SQL Injection (SQLI) adalah jenis serangan yang digunakan penjahat siber untuk mengeksploitasi kerentanan software dalam aplikasi web. Ini memungkinkan penyerang untuk melihat data yang biasanya tidak dapat mereka ambil. Termasuk data milik pengguna lain, atau data lain yang dapat diakses aplikasi itu sendiri. Dalam banyak kasus, penyerang dapat mengubah atau menghapus data ini, menyebabkan perubahan terus-menerus pada konten atau perilaku aplikasi.
Dalam beberapa situasi, penyerang dapat meningkatkan serangan SQL Injection untuk mengganggu server yang mendasarinya atau infrastruktur back-end lainnya, atau melakukan serangan denial-of-service.
Baca Juga: Apa Itu DDOS Attack Dan Bagaimana Cara Menghindarinya
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 backend.
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.
Contoh SQL Injection
Penyerang yang ingin mengeksekusi SQL Injection memanipulasi kueri SQL standar untuk mengeksploitasi kerentanan input yang tidak divalidasi dalam database. Ada banyak cara agar serangan ini dapat dieksekusi.
Misalnya, masukan yang disebutkan di atas, yang menarik informasi untuk produk tertentu, dapat diubah menjadi http://www.eniaga.com/items/items.asp?itemid=999 atau 1 = 1 .
Hasilnya, kueri SQL terkait terlihat seperti ini:
SELECT ItemName, ItemDescription FROM Items WHERE ItemNumber = 999 OR 1=1
Dan karena pernyataan 1 = 1 selalu benar, kueri mengembalikan semua nama dan deskripsi produk dalam database, bahkan yang mungkin tidak memenuhi syarat untuk kalian akses.
Penyerang juga dapat memanfaatkan karakter yang disaring secara tidak tepat untuk mengubah perintah SQL, termasuk menggunakan titik koma untuk memisahkan dua bidang.
Misalnya, masukan ini http://www.eniaga.com/items/iteams.asp?itemid=999; DROP TABLE USERS akan membuat kueri SQL berikut:
SELECT ItemName, ItemDescription FROM Items WHERE ItemNumber = 999; DROP TABLE USERS
Akibatnya, seluruh database pengguna bisa terhapus.
Cara lain query SQL dapat dimanipulasi adalah dengan pernyataan UNION SELECT. Ini menggabungkan dua kueri SELECT yang tidak terkait untuk mengambil data dari tabel database yang berbeda.
Misalnya, input http://www.eniaga.com/items/items.asp?itemid=999 UNION SELECT user-name, password FROM USERS, menghasilkan kueri SQL berikut:
SELECT ItemName, ItemDescription FROM Items WHERE ItemID = '999' UNION SELECT Username, Password FROM Users;
Menggunakan pernyataan UNION SELECT, kueri ini menggabungkan permintaan untuk nama item 999 dan deskripsi dengan yang lain yang menarik nama dan kata sandi untuk setiap pengguna dalam database.
Jenis Jenis SQL Injection
SQL Injection dapat diklasifikasikan menjadi tiga kategori utama
- In-band SQL Injection
- Inferential SQL Injection
- Out-of-band SQL Injection
1. In-band SQLI (Classic SQLI)
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 SQLI: 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.
2. Inferential SQLI (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 “seranganblind 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 SQLI: Boolean-based SQL Injection adalah teknik inferential SQL Injection yang mengandalkan pengiriman kueri 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 SQLI: Time-based SQL Injection adalah teknik inferential SQL Injection yang mengandalkan pengiriman kueri SQL ke database yang memaksa database untuk menunggu selama jumlah waktu tertentu (dalam detik) sebelum merespons. Waktu respons akan menunjukkan kepada penyerang apakah hasil kueri 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.
3. Out-of-band SQLI
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).
Bagaimana Mencegah Serangan SQL Injection?
Gunakan beberapa tips berikut dibawah ini, untuk membantu mencegah serangan SQL Injection pada aplikasi web kalian.
- Batasi Hak Istimewa Aplikasi: Batasi kredensial pengguna sehingga hanya hak-hak yang dibutuhkan aplikasi untuk berfungsi yang digunakan. Setiap serangan SQL Injection yang berhasil akan berjalan dalam konteks kredensial pengguna. Meskipun membatasi hak istimewa tidak akan mencegah serangan SQL Injection secara langsung, itu akan membuatnya jauh lebih sulit untuk diterapkan.
- Kebijakan Kata Sandi SA yang Kuat: Seringkali, penyerang memerlukan fungsionalitas akun administrator untuk menggunakan perintah SQL tertentu. Jauh lebih mudah untuk “memaksa” sandi SA (System Administrator) jika lemah, dan akan meningkatkan kemungkinan serangan SQL Injection yang berhasil. Pilihan lainnya adalah tidak menggunakan akun SA sama sekali, dan sebaliknya membuat akun khusus untuk tujuan tertentu.
- Skema Pesan Kesalahan yang Konsisten: Pastikan kalian memberikan informasi sesedikit mungkin kepada pengguna ketika terjadi kesalahan database. Jangan ungkapkan seluruh pesan kesalahan. Pesan kesalahan perlu ditangani di web dan server aplikasi. Saat server web mengalami kesalahan pemrosesan, server web seharusnya merespons dengan laman web umum, atau mengarahkan pengguna ke lokasi standar. Informasi debug, atau detail lain yang dapat berguna bagi calon penyerang, tidak boleh diungkapkan. Server aplikasi, seperti WebSphere, sering kali diinstal dengan pesan kesalahan atau setelan debug diaktifkan secara default. Lihat dokumentasi server aplikasi kalian untuk informasi tentang menyembunyikan pesan kesalahan tersebut.
Kesimpulan
Jadi apa itu SQL Injection? Sederhananya SQL Injection adalah serangan terhadap aplikasi web, bukan server web atau sistem operasi itu sendiri. Sesuai namanya, SQL Injection adalah tindakan menambahkan perintah SQL yang tidak diharapkan ke kueri, sehingga memanipulasi database dengan cara yang tidak diinginkan oleh administrator atau pengembang database. Jika berhasil, data dapat diekstrak, dimodifikasi, disisipkan atau dihapus dari server database yang digunakan oleh aplikasi web yang rentan. Dalam keadaan tertentu, SQL Injection dapat digunakan untuk mengambil kendali penuh atas suatu sistem.
Sekian artikel Apa Itu SQL Injection: Cara Kerja, Contoh, Dan Jenis-Jenis. Nantikan artikel menarik lainnya dan jangan lupa share artikel ini ke teman-teman kalian. Terimakasih…