Jika ada satu hal yang disukai penjahat dunia maya, itu adalah data. Data yang dicuri sangat berharga di pasar gelap, dan akses ke basis data pribadi bisa menjadi cara yang bagus bagi pelaku jahat untuk mendapat untung dari usaha mereka. Salah satu cara untuk mengakses data pribadi adalah melalui injeksi SQL. Tapi apa sebenarnya injeksi SQL itu, bagaimana cara kerjanya, dan bisakah serangan seperti itu dicegah?
Apa itu Injeksi SQL?
Program perangkat lunak mengandalkan kode untuk berfungsi. Kode juga merupakan bahasa yang digunakan mesin untuk melakukan operasi, dan dapat hadir dalam berbagai bentuk (Python, JavaScript, C++, dll.). Seringkali melalui kode penjahat dunia maya dapat menyerang korban, dan suntikan SQL (atau SQLis) tidak berbeda. Ini memungkinkan aktor jahat untuk "menyuntikkan" kode berbahaya ke dalam pernyataan SQL.
Pertama-tama mari kita membahas apa arti SQL.
SQL adalah singkatan dari Structured Query Language. Ini adalah jenis lain dari bahasa pemrograman khusus digunakan ketika berhadapan dengan database. Dikembangkan pada tahun 1970-an oleh IBM, SQL dapat memanipulasi, menyimpan, dan mengambil informasi basis data. Banyak sistem komunikasi basis data di seluruh dunia menggunakan SQL, jadi tidak mengherankan jika pelaku ancaman telah menemukan cara untuk menyalahgunakannya untuk menargetkan basis data.
Pernyataan SQL membentuk bagian penting dari komunikasi basis data. Pernyataan SQL adalah perintah yang datang dalam berbagai bentuk. Beberapa mengubah data, beberapa mengambil atau menghapusnya, dan beberapa dapat mengubah struktur database itu sendiri. Saat injeksi SQL terjadi, kode berbahaya disuntikkan ke dalam pernyataan SQL.
Tentu saja, situs web atau aplikasi harus menggunakan bahasa pemrograman SQL agar injeksi SQL dapat dilakukan. Tapi bagaimana cara kerja vektor serangan ini?
Katakanlah Anda memiliki baris kode biasa yang digunakan oleh suatu aplikasi. Saat penjahat dunia maya menyisipkan injeksi SQL berbahaya, sebaris kode ditambahkan yang dapat mengganggu kueri yang dikirim oleh aplikasi itu sendiri ke basis datanya. Dengan melakukan ini, basis data dapat dieksploitasi dengan cara yang memungkinkan pelaku ancaman untuk melihat data yang tidak dapat mereka akses.
Dari sini, penjahat dunia maya dapat mencuri data untuk mengeksploitasinya secara langsung atau menjualnya di web gelap atau di tempat lain. Mereka juga dapat mengubah, menambah, atau menghapus data dari database yang ditargetkan. Bergantung pada tingkat serangan injeksi SQL, banyak kerusakan yang bisa terjadi. Jika detail pembayaran, nomor jaminan sosial, atau jenis data pribadi lainnya diakses, banyak orang berisiko dieksploitasi.
Di sisi lain, jika penyerang berhasil mengubah database secara signifikan, sebagian besar data dapat hilang secara permanen. Secara keseluruhan, injeksi SQL dapat menghancurkan seluruh database hanya melalui satu serangan. Meskipun sudah ada sejak tahun 1998, mereka masih relevan dan berbahaya di zaman kita sekarang.
Seperti yang ditemukan oleh Buka Proyek Keamanan Aplikasi Web (OWASP), 274.000 contoh injeksi SQL diidentifikasi saat menguji aplikasi untuk mengetahui adanya serangan semacam itu pada tahun 2021.
Jenis-Jenis Injeksi SQL
Ada beberapa jenis injeksi SQL, dengan tiga yang utama adalah injeksi buta, in-band, dan out-of-band.
Injeksi SQL buta (atau inferensial) terjadi ketika aplikasi atau situs diserang oleh injeksi, tetapi respons HTTP (Hypertext Transfer Protocol) yang diberikan tidak berisi hasil dari kueri SQL. Dengan kata lain, tidak ada data dari database yang diserang diberikan kepada penjahat dunia maya. Jadi, apa gunanya ini?
Menggunakan injeksi SQL buta, penyerang mengirim data ke server target dan kemudian dapat membedakan hal-hal tertentu tentang database melalui sifat respons HTTP itu sendiri. Selain itu, faktor yang terkait dengan respons HTTP dapat membantu penyerang membuat injeksi SQL lain yang lebih efektif untuk mengakses database.
Ada dua jenis kunci injeksi SQL buta, yang dikenal sebagai berbasis waktu dan boolean. Kedua varian ini sangat mirip sifatnya. Baik injeksi SQL boolean dan berbasis waktu mengirimkan serangkaian pertanyaan jawaban ya atau tidak, meskipun yang terakhir akan membutuhkan database untuk menunggu beberapa saat sebelum menanggapi kueri.
Selanjutnya, ada injeksi SQL in-band. Injeksi SQL in-band memungkinkan operator untuk melakukan serangan dan mendapatkan hasil yang diinginkan menggunakan saluran yang sama. In-band SQL injection adalah yang paling umum digunakan, hanya karena paling mudah dilakukan karena hanya membutuhkan satu saluran.
Terakhir, Anda mendapatkan injeksi SQL out-of-band. Ini pada dasarnya adalah versi alternatif dari injeksi SQL in-band, di mana penyerang tidak dapat melakukan serangan secara total menggunakan satu saluran tunggal. Alternatifnya, serangan mungkin perlu menggunakan injeksi SQL out-of-band jika server target tidak cukup cepat untuk memberikan hasil.
Faktor-faktor ini membuat prosesnya sedikit lebih sulit, artinya harus bergantung pada fitur tertentu agar aktif di database target agar berhasil. Misalnya, platform yang diserang harus memiliki sanitasi input yang kurang. Karena itu, injeksi SQL in-band jauh lebih umum daripada injeksi SQL out-of-band. Tapi itu masih terjadi.
Bisakah Injeksi SQL Dihindari?
Suntikan SQL lebih menjadi perhatian bagi bisnis dan organisasi daripada individu biasa. Tetapi ada hal-hal yang dapat dilakukan target potensial ini untuk menurunkan kemungkinan terkena serangan semacam itu.
Sanitasi input adalah praktik umum utama untuk menghindari injeksi SQL. Ini adalah proses penyaringan yang memindai dan membersihkan input dari karakter berbahaya. Jika kode SQL diproses sebelum dibersihkan, kemungkinan injeksi SQL akan meningkat secara alami.
Selain itu, kueri berparameter dapat membantu Anda menghindari injeksi SQL. Ini adalah kueri yang memerlukan setidaknya satu parameter untuk dieksekusi. Menerapkan parameter mempersulit penjahat dunia maya untuk berhasil melakukan serangan injeksi SQL.
Tapi tidak ada cara pasti untuk mencegah injeksi SQL. Seperti halnya dengan banyak serangan siber, sangat tidak mungkin untuk menjaga perangkat dan sistem Anda benar-benar kedap udara. Dalam hal injeksi SQL, hal terbaik yang dapat Anda lakukan adalah membersihkan semua input dan membuat kueri berparameter.
Suntikan SQL Sudah Berumur, Tapi Tetap Menjadi Ancaman
Sementara suntikan SQL telah ada selama lebih dari 20 tahun, mereka masih menimbulkan risiko bagi banyak situs web dan aplikasi. Jadi merupakan ide yang bagus untuk mengingat bentuk serangan ini dan mengambil langkah-langkah yang diperlukan untuk mencoba dan mencegahnya, karena ini dapat menimbulkan ancaman bagi database Anda di masa mendatang.