Pertama kali ditemukan pada tahun 1998, SQL injection (SQLi) masih merupakan teknik serangan yang sangat efektif dan tetap menjadi prioritas keamanan basis data teratas.
SQL, atau Structured Query Language, adalah bahasa command-and-control untuk database relasional seperti Microsoft SQL Server, Oracle, IBM DB2 dan MySQL. Dalam pengembangan web modern, database relasional adalah sumber daya penting di bagian belakang aplikasi web dan sistem manajemen konten yang ditulis dalam PHP, .NET, Java EE, Hibernate, SQLite, atau bahasa skrip lainnya.
Mengingat sebagian besar situs web dibangun di atas data di server basis data, injeksi SQL berbahaya bisa mematikan. Penyerang dapat mengakses informasi sensitif, memodifikasi konten web, dan dalam kasus bencana, menghapus data Anda.
Artikel ini membahas bagaimana organisasi Anda dapat mendeteksi kerentanan dan langkah-langkah yang dapat Anda ambil untuk mencegah serangan injeksi SQL.
Jenis-Jenis Serangan SQL Injection
SQLi adalah strategi serangan yang umum dan terdokumentasi dengan baik yang keberhasilannya memiliki konsekuensi bisnis yang luas seperti melihat kredensial yang tidak sah dan mendapatkan akses administratif ke database aplikasi. Serangan SQLi dikategorikan berdasarkan metode berikut yang digunakan untuk mendapatkan akses database:
In-band SQL injection
Penyerang mengumpulkan hasil mereka menggunakan saluran komunikasi yang sama yang mereka gunakan untuk meluncurkan serangan. Teknik injeksi kode ini umum karena menawarkan cara yang sederhana dan efisien untuk mengakses server database. Ada beberapa jenis SQLi in-band, antara lain:
1. Error-based SQL injection
Penyerang bergantung pada pesan kesalahan yang disampaikan oleh server database untuk mempelajari tentang struktur database. Terkadang pesan kesalahan dapat memberikan data yang cukup untuk menghitung seluruh basis data.
2. Union-based SQL injection
Dalam hal ini, muatan berbahaya menggunakan operator SQLs UNION untuk menggabungkan hasil dari beberapa pernyataan SELECT menjadi satu keluaran, yang dikembalikan bersama dengan respons HTTP.
Inferensial SQL injection (Blind SQL injection)
Dalam teknik injeksi Blind SQL, peretas mengirimkan muatan data berbahaya, kemudian merekonstruksi struktur server basis data menggunakan respons aplikasi web.
Pada Blind SQLi, data sebenarnya tidak diambil oleh aplikasi web, sehingga penyerang tidak dapat melihat hasil serangan menggunakan saluran komunikasi yang sama yang mereka gunakan untuk meluncurkan jenis serangan ini. Blind SQL Injection, juga sering disebut sebagai metode Inferensial, terdiri dari beberapa jenis:
1. Content-based SQL injection
Serangan SQLi berbasis konten/Boolean memaksa aplikasi web untuk mengembalikan hasil yang berbeda tergantung pada apakah kueri SQL berbahaya mengembalikan hasil TRUE atau FALSE.
Hasil kueri menentukan apakah konten dalam respons HTTP tetap sama atau berubah. Akibatnya, penyerang dapat menentukan apakah muatan berbahaya mengembalikan hasil yang benar atau salah meskipun kueri tidak mengembalikan data dari database.
2. Time-based SQL injection
Penyerang mengirimkan kueri yang memaksa aplikasi untuk menunggu selama durasi tertentu sebelum mengembalikan respons. Penyerang menggunakan waktu respons untuk menentukan apakah hasil kueri adalah TRUE atau FALSE.
Out-of-band SQL injection
Penyerang menggunakan saluran yang sama untuk meluncurkan serangan dan mengumpulkan hasil. Meskipun serangan ini jarang terjadi karena mengandalkan fitur server database tertentu yang diaktifkan, serangan ini menawarkan alternatif untuk mengatur serangan injeksi jika respons server tidak stabil.
Menguji Potensi atau Kerentanan SQL injection
Ada beberapa alat penetrasi gratis atau komersial untuk organisasi Anda untuk menentukan posisi kerentanan injeksi SQL Anda.
Biasanya, alat ini mulai dengan memeriksa situs Anda untuk menentukan jenis database yang digunakan. Dengan pengetahuan tersebut, program dapat membangun query untuk memeriksa karakteristik database. Dengan sedikit keahlian SQL yang diperlukan dari pengguna akhir, alat pendeteksi berpotensi mengekstrak bidang, tabel, dan terkadang bahkan dump data penuh dari target.
Mungkin yang paling penting, banyak alat yang ditawarkan menyertakan fitur perbaikan kesalahan yang dapat membantu menghapus beberapa kerentanan yang ditemukan. Karena banyak alat injeksi SQL yang kuat tersedia sumber terbuka, organisasi Anda harus menguji aplikasi Anda sebelum orang asing melakukannya.
Beberapa vendor keamanan siber dan pengembang open source menawarkan alat injeksi SQL otomatis untuk mengidentifikasi potensi kerentanan. Untuk alat deteksi sumber terbuka, SQLMap dan jSQL terus menjadi dua yang paling populer, dengan yang lain termasuk: BBQSQL, Blind-SQL-Bitshifting, Blisqy, Damn Small SQLi Scanner, Explo, Leviathan, NoSQLMap, Tyrant-SQL, Whitewidow, dan lain-lain.
Cara Mencegah Serangan SQL injection
Mencegah serangan SQLi adalah proses yang kompleks dan ketat karena teknik pencegahan bervariasi sesuai dengan bahasa pemrograman yang digunakan, mesin database SQL, dan subtipe SQLi yang ditangani.
Beberapa prinsip dan praktik strategis untuk menjaga keamanan aplikasi web dari serangan SQLi meliputi:
Pemindaian (Scanning) Reguler
Penyerang menyuntikkan input berbahaya melalui kerentanan yang mereka temukan dalam kode sistem. Oleh karena itu, tim keamanan harus melakukan pemindai injeksi SQL. Menggunakan alat yang tepat sangat relevan untuk menemukan kemungkinan kerentanan SQLi sebelum penyerang dapat memanfaatkannya.
Pelatihan & Kesadaran
Setiap orang yang terlibat dalam pengembangan dan pengelolaan aplikasi harus memahami risiko dan dampak injeksi SQL. Pelatihan juga harus diperluas kepada pengguna untuk memahami mengapa penting hanya memasukkan input yang valid saat diminta.
Filter User Input
Seorang administrator database tidak boleh mempercayai input pengguna. Input pengguna internal dan publik semuanya harus disaring dan divalidasi sebelum diekspos ke server database.
Gunakan Whitelist-based filter
Penyerang akan selalu mengembangkan metode cerdas untuk menghindari daftar hitam. Daftar putih (whitelist) mencegah serangan menggunakan daftar yang hanya mengizinkan pengguna tertentu untuk mengakses sistem yang dilindungi. Selain itu, muatan berbahaya yang disebarkan oleh injeksi SQLi tidak dapat dijalankan jika tidak ada dalam daftar putih.
Gunakan Teknologi Web yang Diperbarui
Pembaruan perangkat lunak sering kali menyertakan tambalan untuk kerentanan yang ditemukan. Peretas biasanya mengandalkan kerentanan ini untuk menyebarkan muatan berbahaya. Menggunakan versi terbaru dari lingkungan pengembangan dan kerangka kerja akan memenuhi standar kepatuhan dan menjaga aplikasi web aman dari eksploitasi karena sebagian besar organisasi perangkat lunak mencoba untuk tetap berada di depan peretas.
Sama seperti semangat keamanan tanpa kepercayaan, mengurangi serangan injeksi SQL berarti bersandar pada ketakutan bahwa semua data yang dikirimkan pengguna bisa berbahaya. Alih-alih memberikan serangan apa pun pengaruh atas kerentanan SQL, kami mendorong Anda untuk mempertimbangkan rekomendasi kami dan membuat rencana untuk meninjau postur keamanan SQL Anda.
Sementara langkah-langkah keamanan database pertama seperti validasi input, sanitasi, pernyataan yang disiapkan, dan prosedur tersimpan sangat penting, itu adalah dasarnya. Untuk memaksimalkan perlindungan terhadap serangan SQLi, organisasi juga perlu mempertimbangkan solusi seperti: Privileged Access Management (PAM), Penetration Testing, Next-Generation Firewall (NGFW), Network Access Control (NAC) dan User and Entity Behavior Analytics (UEBA).
Terlepas dari upaya ekstensif untuk memperbaiki masalah, kerentanan SQLi masih populer. Diperkirakan 8% situs web dan aplikasi web memiliki setidaknya satu kerentanan. Selain itu, penyerang memanfaatkan kerentanan SQLi dalam banyak cara untuk mengkompromikan aplikasi web melalui akses database yang tidak sah.
Untuk itu, seperti yang telah dijelaskan di atas, keamanan terhadap SQL injection harus dilakukan secara berkala dan terstruktur.
Baca Juga: Arsitektur Microservices dan Monolit: Pilihan Mana yang Paling Tepat?