SQL Injection

Definisi SQL Injection

SQL Injection merupakan teknik eksploitasi dengan cara memodifikasi perintah sql pada form input aplikasi yang memungkinkan penyerang untuk dapat mengirimkan sintaks ke database aplikasi. SQL Injection juga dapat didefinisikan sebagai teknik eksploitasi celah keamanan pada layer database untuk mendapatkan query data pada sebuah aplikasi.

SQL Injection dapat diterapkan pada banyak aplikasi database yang umum digunakan, berdasarkan pada https://www.statista.com Oracle, MySQL, Microsoft SQL Server dan Postgre sql merupakan 4 (empat) aplikasi database yang paling banyak digunakan oleh khalayak umum, termasuk di Indonesia. Gambar 1. dibawah menunjukkan tabel sebaran penggunaan aplikasi database.

Gambar 1. Sebaran Penggunaan Aplikasi Database.

SQL Injection dapat digolongkan kedalam. 5 (lima) risk severity, yaitu sistem penilaian risiko yang dihitung dengan menggunakan kalkulator OWASP berdasarkan hasil analisis faktor kemungkinan terjadi (likelihood) dan faktor dampak (impact) pada kerentanan yang berhasil diidentifikasikan.Tabel 1. dibawah menunjukkan risk severity.

Tabel 1. Risk Severity.

Apa Penyebab SQL Injection

SQL Injection umumnya terjadi karena programmer (pengembang aplikasi) tidak mengimplementasikan filter terhadap metakarakter (&, ;, `, ‘, \, “, |, *, ?, ~, <, >, ^, (, ), [, ], {, }, $, \n, dan \r) yang digunakan dalam sintaks sql pada form input aplikasi, sehingga penyerang dapat menginputkan metakarakter tersebut menjadi instruksi pada aplikasi untuk mengakses database. Selain itu serangan SQL Injection juga dapat terjadi, jika personil back end tidak mengimplementasikan atau tidak mensetting Web Application Firewall (WAF) atau Intrusion Prevention System (IPS) pada arsitektur jaringan dengan baik, sehingga database aplikasi dapat diakses langsung dari celah kerawanan yang ditemukan.

SQL Injection Dalam Statistik

Berdasarkan hasil kegiatan Information Technology Security Assessment (ITSA) pada instansi pemerintah pusat maupun daerah tahun 2018 sampai dengan bulan Juli tahun 2019, terdapat 87 (delapan puluh tujuh) hasil temuan mengenai kerentanan SQL Injection. Temuan tersebut merupakan temuan ketiga paling banyak (top 3 vulnerabilities) pada aplikasi pemerintah pusat dan daerah. Gambar 2. dibawah menujukkan temuan kerentanan SQL Injection pada stakeholder pemertintah berdasarkan risk severity.

Gambar 2. Temuan Kerentanan SQL Injection pada Stakeholder Pemerintah Berdasarkan Risk Severity. (Sumber : Hasil ITSA Periode 2018 – Juli 2019)

Sedangkan gambar 3. dibawah menunjukkan jenis aplikasi yang memiliki kerentanan SQL Injection terbanyak.

Gambar 3. Jenis Aplikasi yang Memiliki Kerentanan SQL Injection Terbanyak. (Sumber : Hasil ITSA Periode 2018 – Juli 2019)

Hasil Serangan Berdasarkan Kerentanan SQL Injection 

Keberhasilan serangan SQL Injection memungkinkan penyerang untuk dapat mengakses seluruh database, tabel dan query pada aplikasi, dimana seperti yang diketahui database merupakan inti data pada aplikasi, apabila informasi mengenai pengguna (misal : nama, tanggal lahir, NIP, jabatan, email, nomor telpon dan lain sebagainya) diketahui, maka penyerang dapat melakukan serangan lanjutan terhadap aplikasi.

Akses dan aksi illegal terhadap database pada aplikasi juga dapat menimbulkan kebocoran integritas data (data integrity compromise), yaitu adanya perubahan terhadap data, kebocoran ketersediaan data (data availiability compromised), yaitu adanya penghapusan terhadap data, bahkan yang paling ekstrim penyerang dapat melakukan pengambilalihan aplikasi.

Perbaikan Terhadap Kerentanan SQL Injection

Terdapat beberapa cara untuk mengatasi serangan SQL Injection, antara lain :

  1. Mengimplementasikan filter terhadap metakarakter (&, ;, `, ‘, \, “, |, *, ?, ~, <, >, ^, (, ), [, ], {, }, $, \n, dan \r), sehingga dapat mencegah input pada form isian pengguna yang dapat dimanfaatkan untuk melakukan serangan SQL Injection;
  2. Memisahkan database username dan password, sehingga dibutuhkan usaha dan percobaan lebih bagi penyerang untuk memahami struktur database aplikasi, hal ini juga dapat mengantisipasi apabila 1 (satu) database telah terekspose, maka belum tentu dengan database lainnya;
  3. Mengimplementasikan algoritma kriptografi untuk melindungi username dan password pengguna, sehingga dapat mempersulit penyerang untuk mengetahui value username dan password pengguna pada database yang telah ditemukan;
  4. Mengimplementasikan WAF atau IPS pada arsitektur jaringan, sehingga dapat mencegah penetrasi penyerang kedalam database aplikasi.

Penutup

Hasil pada serangan SQL Injection memiliki dampak yang sangat signifikan terhadap keberlangsungan dan keamanan sebuah aplikasi, dimana yang paling berbahaya adalah jika penyerang berhasil mendapatkan username dan password administrator dari database, sehingga memungkinkan penyerang untuk mengambilalih aplikasi (mulai dari menambahkan, mengedit, menghapus data, sampai dengan mengacak isi konten pada aplikasi).

Pada dasarnya SQL Injection merupakan jenis serangan klasik namun sampai saat ini masih sering dijumpai pada beberapa aplikasi yang telah dikembangkan baik oleh instansi pemerintahan daerah maupun oleh instansi pemerintahan pusat, hal tersebut dikarenakan sebuah aplikasi tidak akan pernah terlepas dari penggunaan database, pengembangan aplikasi yang dilakukan dengan tidak mempertimbangkan teknik secure programming akan memudahkan penyerang untuk melakukan penetrasi kedalam database aplikasi. Oleh karena itu perlu dilakukannya pengamanan pada data yang disimpan didalam database, penerapan secure programming dan implementasi firewall dalam melakukan rancang bangun sebuah aplikasi.