Apa itu SQL Injection dan Bagaimana Cara Kerjanya
Apa itu SQL Injection dan Bagaimana Cara Kerjanya
Apa Itu SQL Injection
SQL Injection, juga dikenal sebagai SQLI, adalah vektor serangan umum yang menggunakan kode SQL berbahaya untuk manipulasi basis data backend guna mengakses informasi yang tidak dimaksudkan untuk ditampilkan. Informasi ini dapat mencakup sejumlah item, termasuk data sensitif perusahaan, daftar pengguna, atau detail pribadi pelanggan.
Dampak SQL Injection pada bisnis sangat luas. Serangan yang berhasil dapat mengakibatkan tampilan daftar pengguna yang tidak sah, penghapusan seluruh tabel dan, dalam kasus tertentu, penyerang mendapatkan hak administratif ke database, yang sangat merugikan bisnis.
Saat menghitung potensi biaya SQLi, penting untuk mempertimbangkan hilangnya kepercayaan pelanggan jika informasi pribadi seperti nomor telepon, alamat, dan detail kartu kredit dicuri.
Meskipun vektor ini dapat digunakan untuk menyerang basis data SQL apapun, situs web adalah target yang paling sering.
Apa Itu Kueri SQLÂ
SQL adalah bahasa standar yang digunakan untuk mengakses dan memanipulasi database untuk membangun tampilan data yang dapat disesuaikan untuk setiap pengguna. Kueri SQL digunakan untuk menjalankan perintah, seperti pengambilan data, pembaharuan, dan penghapusan rekaman. Elemen SQL yang berbeda mengimplementasikan tugas ini, misalnya, kueri menggunakan pernyataan SELECT untuk mengambil data, berdasarkan parameter yang disediakan pengguna.
Kueri database SQL khas eStore mungkin terlihat seperti berikut:
SELECT ItemName, ItemDescription FROM Item WHERE ItemNumber = ItemNumber
Dari sini, aplikasi web membuat kueri string yang dikirim ke database sebagai pernyataan SQL tunggal:
sql_query= "
SELECT ItemName, ItemDescription
FROM Item
WHERE ItemNumber = " & Request.QueryString("ItemID")
Masukan yang diberikan pengguna http://www.estore.com/items/items.asp?itemid=999 kemudian dapat menghasilkan kueri SQL berikut:
SELECT ItemName, ItemDescription FROM Item WHERE ItemNumber = 999
Seperti yang dapat kamu kumpulkan dari sintaks, kueri ini memberikan nama dan deskripsi untuk nomor item 999.
Jenis SQL InjectionÂ
SQL Injection biasanya berada di bawah tiga kategori: In-band SQLi (Classic), Inferensial SQLi (Blind) dan SQLi Out-of-band. Kamu dapat mengklasifikasikan jenis SQL Injection berdasarkan metode yang mereka gunakan untuk mengakses data backend dan potensi kerusakannya.
- SQLi In-band
Penyerang menggunakan saluran komunikasi yang sama untuk melakukan serangan dan mengumpulkan hasilnya. Kesederhanaan dan efisiensi SQLi in-band menjadikannya salah satu jenis serangan SQLi yang paling umum. Ada dua sub-variasi metode ini:
- SQLi berbasis kesalahan—penyerang melakukan tindakan yang menyebabkan database menghasilkan pesan kesalahan. Penyerang ini berpotensi menggunakan data yang disediakan oleh pesan kesalahan untuk mengumpulkan informasi tentang struktur database.
- SQLi berbasis serikat—teknik ini memanfaatkan operator SQL UNION, yang menggabungkan beberapa pernyataan pilihan yang dihasilkan oleh database untuk mendapatkan satu respons HTTP. Respons ini mungkin berisi data yang dapat dimanfaatkan oleh penyerang.
- Inferensial (Blind) SQLi
Penyerang mengirimkan muatan data ke server dan mengamati respons dan perilaku server untuk mempelajari lebih lanjut tentang strukturnya. Metode ini disebut blind SQLi karena data tidak ditransfer dari database situs web ke penyerang, sehingga penyerang tidak dapat melihat informasi tentang serangan secara in-band.
Suntikan SQL Blind bergantung pada respons dan pola perilaku server sehingga biasanya lebih lambat untuk dieksekusi tetapi mungkin sama berbahayanya. SQL Injection Blind dapat diklasifikasikan sebagai berikut:
- Boolean—penyerang mengirimkan kueri SQL ke database yang meminta aplikasi untuk mengembalikan hasil. Hasilnya akan bervariasi tergantung pada apakah kueri itu benar atau salah. Berdasarkan hasil, informasi dalam respons HTTP akan berubah atau tetap. Penyerang kemudian dapat mengetahui apakah pesan tersebut menghasilkan hasil yang benar atau salah.
- Berbasis waktu—penyerang mengirim kueri SQL ke database, yang membuat database menunggu (selama beberapa detik) sebelum dapat bereaksi. Penyerang dapat melihat dari waktu yang dibutuhkan database untuk merespons, apakah suatu kueri benar atau salah. Berdasarkan hasilnya, respons HTTP akan dibuat secara instan atau setelah masa tunggu. Dengan demikian penyerang dapat mengetahui apakah pesan yang mereka gunakan mengembalikan benar atau salah, tanpa bergantung pada data dari database.
- SQLi Out-of-band
Penyerang hanya dapat melakukan dalam bentuk serangan ketika fitur tertentu diaktifkan pada server database yang digunakan oleh aplikasi web. Bentuk serangan ini digunakan sebagai alternatif dari teknik SQLi in-band dan inferensial.
SQLi out-of-band dilakukan ketika penyerang tidak dapat menggunakan saluran yang sama untuk meluncurkan serangan dan mengumpulkan informasi, atau ketika server terlalu lambat atau tidak stabil untuk melakukan tindakan ini. Teknik ini mengandalkan kapasitas server untuk membuat permintaan DNS atau HTTP untuk mentransfer data ke penyerang.
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 vektor serangan ini dapat dieksekusi, beberapa di antaranya akan ditampilkan untuk memberikan gambaran umum tentang cara kerja SQLI.
Misalnya, input yang disebutkan di atas, yang menarik informasi untuk produk tertentu, dapat diubah untuk membaca http://www.estore.com/items/items.asp?itemid=999 atau 1=1.
Akibatnya, kueri SQL yang sesuai 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 Kamu akses.
Penyerang juga dapat memanfaatkan karakter yang salah disaring untuk mengubah perintah SQL, termasuk menggunakan titik koma untuk memisahkan dua bidang.
Misalnya, masukan ini http://www.estore.com/items/iteams.asp?itemid=999; DROP TABLE Pengguna akan membuat kueri SQL berikut:
SELECT ItemName, ItemDescription FROM Items WHERE ItemNumber = 999; DROP TABLE USERS
Akibatnya, seluruh database pengguna bisa dihapus.
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, masukan http://www.estore.com/items/items.asp?itemid=999 UNION SELECT nama pengguna, kata sandi FROM PENGGUNA 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 dan deskripsi item 999 dengan yang lain yang menarik nama dan kata sandi untuk setiap pengguna dalam database.
SQL Injection dikombinasikan dengan Eksekusi Perintah OS: Accellion Attack
Accellion, pembuat File Transfer Appliance (FTA), perangkat jaringan yang digunakan secara luas oleh organisasi di seluruh dunia, dan digunakan untuk memindahkan file besar dan sensitif. Produk ini berusia lebih dari 20 tahun dan sekarang berada di akhir masa pakainya.
FTA adalah subjek serangan yang unik dan sangat canggih yang menggabungkan SQL Injection dengan eksekusi perintah sistem operasi. Para ahli berspekulasi bahwa serangan Accellion dilakukan oleh peretas yang memiliki koneksi ke kelompok kejahatan keuangan FIN11, dan kelompok ransomware Clop.
Serangan tersebut menunjukkan bahwa SQL Injection bukan hanya serangan yang memengaruhi aplikasi web atau layanan web, tetapi juga dapat digunakan untuk mengkompromikan sistem back-end dan mengekstrak data.
Siapa yang terkena dampak serangan itu?
Eksploitasi Accellion adalah serangan rantai pasokan, yang memengaruhi banyak organisasi yang telah menyebarkan perangkat FTA. Ini termasuk Reserve Bank of New Zealand, Negara Bagian Washington, Komisi Sekuritas dan Investasi Australia, raksasa telekomunikasi Singtel, dan pembuat perangkat lunak keamanan Qualys, serta banyak lainnya.
Alur Serangan Accellion
Menurut laporan yang dibuat oleh Accellion, kombinasi SQLi dan serangan eksekusi perintah bekerja sebagai berikut:
- Penyerang melakukan SQL Injection untuk mendapatkan akses ke document_root.html, dan mengambil kunci enkripsi dari database Accellion FTA.
- Penyerang menggunakan kunci untuk menghasilkan token yang valid, dan menggunakan token ini untuk mendapatkan akses ke file tambahan
- Penyerang mengeksploitasi kelemahan eksekusi perintah sistem operasi di file sftp_account_edit.php, memungkinkan mereka untuk menjalankan perintah mereka sendiri
- Penyerang membuat shell web di jalur server /home/seos/courier/oauth.api
- Menggunakan web shell ini, mereka mengupload web shell berfitur lengkap ke disk, yang menyertakan alat yang sangat disesuaikan untuk eksfiltrasi data dari sistem Accellion. Para peneliti menamai cangkang ini DEWMODE.
- Dengan menggunakan DEWMODE, penyerang mengekstrak daftar file yang tersedia dari database MySQL pada sistem Accellion FTA, dan mencantumkan file dan meta datanya pada halaman HTML.Â
- Penyerang melakukan permintaan unduhan file, yang berisi permintaan ke komponen DEWMODE, dengan dienkripsi dan dikodekan parameter URL.
- DEWMODE dapat menerima permintaan ini dan kemudian menghapus permintaan unduhan dari log web FTA.
Ini meningkatkan profil serangan SQL Injection, menunjukkan bagaimana mereka dapat digunakan sebagai pintu gerbang untuk serangan yang jauh lebih merusak pada infrastruktur perusahaan yang penting.
Pencegahan dan mitigasi SQLI
Ada beberapa cara efektif untuk mencegah serangan SQLI terjadi, serta melindunginya, jika terjadi.
Langkah pertama adalah validasi input (alias sanitasi), yaitu praktik penulisan kode yang dapat mengidentifikasi input pengguna yang tidak sah.
Meskipun validasi input harus selalu dianggap sebagai praktik terbaik, ini jarang menjadi solusi yang sangat mudah. Kenyataannya adalah, dalam banyak kasus, tidak mungkin memetakan semua masukan legal dan ilegal—setidaknya tanpa menyebabkan sejumlah besar kesalahan positif, yang mengganggu pengalaman pengguna dan fungsionalitas aplikasi.
Untuk alasan ini, firewall aplikasi web (WAF) biasanya digunakan untuk menyaring SQLI, serta ancaman online lainnya. Untuk melakukannya, WAF biasanya tergantung pada daftar tanda tangan yang besar, dan terus diperbarui, yang dibuat dengan cermat yang memungkinkannya untuk menyingkirkan kueri SQL berbahaya secara operasi. Biasanya, daftar tersebut menyimpan tanda tangan untuk mengatasi vektor serangan tertentu dan secara teratur ditambal untuk memperkenalkan aturan pemblokiran untuk kerentanan yang baru ditemukan.
Firewall aplikasi web modern juga sering terintegrasi dengan solusi keamanan lainnya. Dari sini, WAF dapat menerima informasi tambahan yang semakin meningkatkan kemampuan keamanannya.
Misalnya, firewall aplikasi web yang menemukan masukan yang mencurigakan, tetapi tidak langsung berbahaya, dapat melakukan verifikasi silang dengan data IP sebelum memutuskan untuk memblokir permintaan tersebut. Itu hanya memblokir input jika IP itu sendiri memiliki riwayat reputasi yang buruk.
WAF berbasis cloud Imperva menggunakan pengenalan tanda tangan, reputasi IP, dan metodologi keamanan lainnya untuk mengidentifikasi dan memblokir SQL Injection, dengan sedikit kesalahan positif. Kemampuan WAF ditambah dengan IncapRules—mesin aturan keamanan khusus yang memungkinkan kustomisasi granular dari pengaturan keamanan default dan pembuatan kebijakan keamanan khusus kasus tambahan.
WAF kami juga menggunakan teknik crowdsourcing yang memastikan bahwa ancaman baru yang menargetkan pengguna mana pun segera disebarkan ke seluruh basis pengguna. Hal ini memungkinkan respons cepat terhadap kerentanan yang baru diungkapkan dan ancaman zero-day.