Proteksi Terhadap Kerentanan SQL Injection 2019 v.1.3.1 Sign
Proteksi Terhadap Kerentanan SQL Injection 2019 v.1.3.1 Sign
Proteksi Terhadap Kerentanan SQL Injection 2019 v.1.3.1 Sign
2019
APA ITU SQL INJECTION?
SQL Injection merupakan salah satu risiko aplikasi/situs web yang paling sering
ditemukan. Berdasarkan laporan keamanan aplikasi yang dikeluarkan oleh Veracode,
32% dari aplikasi web paling tidak memiliki satu kerentanan SQL Injection.
Berdasarkan Open Web Application Security Project (OWASP), injection juga
merupakan merupakan ancaman nomor satu terhadap keamanan aplikasi web.
Sebagai tambahan, berdasarkan laporan kerentanan dari komunitas yang diperoleh Badan
Siber dan Sandi Negara (BSSN) melalui Voluntary Vulnerability Disclosure Program
(VVDP), dari bulan Januari s.d. April 2019, 73% dari laporan kerentanan yang
diterima merupakan kerentanan SQL Injection. Berdasarkan statistik di atas,
meskipun termasuk ke dalam kerentanan yang mudah untuk dicegah, saat ini SQL
Injection tetap menjadi risiko pada aplikasi web yang paling sering ditemukan dan banyak
organisasi memiliki kerentanan terhadap potensi kebocoran data akibat serangan SQL
Injection.
Gambar 1 - Data Rekapitilasi VVDP BSSN Januari s.d Mei 2019 [1]
Serangan SQL injection atau Injeksi SQL merupakan teknik serangan injeksi kode
yang memanfaatkan celah keamanan yang terjadi pada layer basis data dari sebuah
aplikasi. Hal ini terjadi sebagai akibat dari data yang diinputkan oleh pengguna tidak
dilakukan validasi dan dimuat di dalam baris perintah query SQL. Dengan demikian
Versi 1.3 1
menjadikan sebagian data yang diinputkan pengguna tersebut diperlakukan sebagai
bagian dari kode SQL.
Versi 1.3 2
database yang diubah merupakan database perbankan, penyerang
mungkin saja dapat melakukan pengubahan terhadap transaksi
nasabah, atau memindahkan isi rekening nasabah ke rekening yang
dikendalikan olehnya sehingga menimbulkan dampak finansial bagi
korban
Versi 1.3 3
} Tujuan utama dari serangan jenis Tautology-based attack adalah
untuk menginjeksi kode pada satu atau lebih baris perintah SQL
dengan kondisi bersyarat sehingga baris perintah tersebut akan selalu
dieksekusi dengan nilai “True”.
} Penyerang mengeksploitasi parameter yang dapat diinjeksi yang
digunakan di dalam baris perintah query dengan sintaks kondisional
bersyarat WHERE.
} Tujuan Serangan:
Melakukan bypass terhadap mekanisme otentikasi, mengidentifikasi
parameter yang dapat diinjeksi, melakukan ekstrasi data.
Union Query
Versi 1.3 4
} Serangan jenis ini, penyerang melakukan eksploitasi terhadap
parameter yang rentan untuk mengubah data set yang dikembalikan
dari perintah query yang dijalankan.
} Tujuan Serangan:
Melakukan bypass otentikasi, melakukan ekstraksi data.
Piggy-Backed Query
} Pada serangan jenis ini, penyerangan berupaya untuk menginjeksi
tambahan perintah query ke dalam perintah query yang asli.
Kerentanan terhadap serangan jenis ini umumnya bergantung pada
konfigurasi basis data yang mengizinkan beberapa perintah query
SQL di dalam satu string tunggal.
} Tujuan Serangan:
Melakukan ekstraksi data, menambahkan atau memodifikasi data,
melakukan serangan DoS (Denial of Services), mengeksekusi
perintah jarak jauh (remote commands execution).
Stored-Procedures
} Serangan jenis ini penyerang berusaha untuk mengeksekusi “stored
procedures”.
} Tujuan Serangan:
Melakukan privilege escalation, melakukan serangan Denial of Service
(DoS), melakukan eksekusi perintah jarak jauh (remote command
execution).
Versi 1.3 5
Inference
} Pada teknik serangan ini, penyerang melakukan modifikasi terhadap
query untuk menyusun kembali ke dalam bentuk aksi yang dieksekusi
berdasarkan jawaban atas pertanyaan benar/salah mengenai nilai
data yang tersimpan di dalam database
} Penyerang umumnya menggunakan teknik ini untuk menyerang situs
yang memiliki tingkat keamanan yang sudah cukup baik sehingga
pada saat injeksi berhasil dilakukan, tidak ada informasi berguna
yang diperoleh penyerang dari pesan error melalui basis data.
} Tujuan Serangan:
Mengidentifikasi parameter yang dapat diinjeksi, melakukan ekstraksi
data serta menentukan skema basis data dari sistem target.
Alternate Encodings
} Teknik serangan ini dilakukan dengan memodifikasi teks yang
diinjeksi dengan tujuan untuk menghindari deteksi oleh mekanisme
defensif dari teknik pemrograman dan juga beberapa mekanisme
penegahan otomatis terhadap serangan SQL Injection.
} Tujuan Serangan:
Menghindari/mengelabui deteksi perimeter keamanan.
Versi 1.3 6
Secara umum serangan SQL Injection dapat diklasifikasikan ke dalam 3
(tiga) kategori utama , yakni:
1. In-band SQL Injection
Merupakan tipe serangan SQL Injection yang paling umum dan
mudah untuk dieksploitasi. In-band SQL Injection terjadi ketika
penyerang dapat menggunakan kanal komunikasi yang sama baik
untuk melancarkan serangan maupun memperoleh hasil dari
serangan. Terdapat dua tipe yang paling umum dari in-band SQL
Injection, yaitu
a. Error-based SQL Injection. Teknik serangan ini sangat
bergantung pada pesan kesalahan yang dihasilkan oleh server
database untuk memperoleh informasi mengenai struktur dari
database. Pada beberapa kasus, teknik ini sendiri cukup bagi
penyerang untuk melakukan enumerasi terhadap keseluruhan
database.
b. Union-Based SQL Injection. Teknik serangan ini memanfaatkan
operator SQL UNION untuk mengkombinasikan hasil dari dua atau
lebih perintah SELECT ke dalam satu hasil yang kemudian
dikembalikan sebagai bagian dari HTTP response.
Versi 1.3 7
melakukan observasi terhadap respon dari aplikasi web, dan perilaku
yang ditunjukkan oleh server database. Terdapat dua tipe inferential
SQL Injection, yaitu
a. Blind-boolean-based SQL Injection. Teknik ini merupakan salah
satu teknik yang bergantung pada pengiriman query SQL ke
database yang memaksa aplikasi untuk mengirimkan nilai balikan
yang berbeda bergantung pada apakah query balikan yang
diberikan TRUE atau FALSE. Teknik serangan ini umumnya sangat
lambat (khususnya pada database dengan skala yang besar)
karena penyerang akan melakukan enumersi terhadap database,
karakter per karakter.
b. Blind-time-based SQL Injection. Teknik in merupakan teknik
inferensia yang bergantung pada pengiriman query SQL ke
database yang memaksa database untuk menunggu dalam rentang
waktu tertentu (dalam detik) sebelum melakukan response. Waktu
response tersebut akan mengindikasikan kepada penyerang hasil
query yang dilakukan TRUE atau FALSE. Bergantung pada nilai
balikan yang dihasilkan, response HTTP akan dikembalikan dengan
jeda atau dikembalikan dengan segera. Hal ini memungkinkan
penyerang untuk menyimpulkan jika payload yang digunakan
menghasilkan nilai balikan TRUE atau FALSE meskipun tidak ada
data yang diperoleh dari nilai balikan dari database. Teknik
serangan ini umumnya sangat lambat (khususnya pada database
dengan skala yang besar) karena penyerang akan melakukan
enumersi terhadap database, karakter per karakter.
Versi 1.3 8
penyerang tidak dapat menggunakan kanal komunikasi yang sama
untuk melancarkan serangan dan memperoleh hasil serangannya.
Tipe serangan SQL Injection ini menjadi alternatif teknik inferential
time-based bagi penyerang, terutama jika respon dari server tidak
stabil. Tipe Out-of-band SQL Injection bergantung kepada
kemampuan server database untuk membuat request DNS atau HTTP
untuk mengirimkan data kepada penyerang.
Berikut ini merupakan ilustrasi singkat mengenai bagaimana serangan SQL Injection
bekerja.
Versi 1.3 9
Gambar 3 – Ilustrasi Serangan SQL Injection [2]
Serangan SQL Injection terjadi karena aplikasi web yang tidak melakukan validasi
terhadap nilai yang diterima dari formulir isian pada web, cookie, parameter input, dan
lainnya sebelum melewatkan nilai tersebut ke query SQL yang akan dieksekusi pada server
database. Dengan demikian, hal ini memungkinkan penyerang untuk memanipulasi input
sehingga data yang dikirimkan dapat diinterpretasikan sebagai kode/perintah SQL
ketimbang sebagai data.
Berikut merupakan contoh sederhana dari teknik serangan SQL Injection. SQL statement
dinamis umumnya dikonstruksi pada saat eksekusi dilakukan, misalkan contoh berikut
ditulis dalam bahasa pemrograman .NET dimana parameter input harus diisikan oleh
pengguna
Versi 1.3 10
Query = "SELECT * FROM users WHERE username = ' "
+request.getParameter("input")+ " ' " ;
Maka baris kode tersebut akan menjalankan perintah query SQL sebagai berikut:
Salah satu teknik yang umum dilakukan oleh penyerang adalah dengan melakukan
manipulasi terhadap SQL statement, dimana penyerang berupaya memodifikasi SQL query
statements dan menyisipkan “exploited statements” ke dalam database.
Lalu apa yang akan terjadi jika pengguna memasukan nilai berikut:
$user = ‘ OR ‘1’ = ‘1
$password = ‘ OR ‘1’= ‘1
Karena nilai 1=1 memiliki arti selalu menghasilkan nilai benar atau TRUE, maka query
tersebut akan berhasil dieksekusi meskipun tidak ada username dan password yang valid
yang dimasukan, dengan demikian penyerang berhasil mem-bypass mekanisme
otentikasi. Versi lainnya dari serangan ini adalan dengan menyisipkan dua karakter dash
secara berurutan (--) atau karakter # yang oleh database MySQL dianggap sebagai
penanda bagian komentar sehingga baris perintah setelahnya akan diabaikan.
SELECT *
FROM Users
WHERE loginName = ‘ John ‘ - -
AND Password = anything
SELECT *
FROM Customers
WHERE AccNumber = 1 OR 1 = 1 #
AND Pin = anything
Versi 1.3 11
Dengan demikian penyerang dapat mem-bypass mekanisme otentikasi, karena perintah
setelah (--) atau # yakni AND Pin = anything akan dianggap sebagai baris komentar
oleh database.
Versi 1.3 12
Kebocoran data yang pada insiden Panama
Papers ini bermula dari hacker yang
memanfaatkan sebuah kerentanan SQL
Injection yang terdapat pada Content
Management System (CMS) Drupal yang
digunakan pada portal web firma hukum
tersebut.
Versi 1.3 13
WORLD ANTI-DOPING AGENCY [5]
Pada September 2016, World Anti-Doping Agency (WADA) menkonfirmasi sebuah insiden
siber yang dilakukan oleh grup espionase siber asal Rusia yang dikenal sebagai Tsar Team
atau APT28. Grup ini diketahui memperoleh ilegal akses ke dalam database Sistem
Manajemen dan Administrasi Anti-Doping (ADAMS) milik WADA menggunakan akun yang
dibuat oleh International Olympic Committee (IOC) untuk Olimpiade Rio 2016.
Versi 1.3 14
Dampak dari serangan siber yang
ditujukan ke sistem ADAMS milik
WADA ini adalah sejumlah
informasi rekam medis pribadi
milik atlet bocor dan dipublikasi
kepada publik. Hal ini menjadi
sebuah kontroversi karena
terdapat sejumlah atlet yang
diberikan kompensasi berupa ijin
untuk menggunakan obat-obatan
yang tergolong sebagai doping
pada saat bertanding karena
alasan kesehatan atlet tersebut.
Gambar 9 - Artikel yang menyebutkan kebocoran akun dan
password pada server WADA akibat SQL Injection
Pada bulan Maret 2016, grup hacker yang menamakan dirinya sebagai “Anonymous
Philippines” meretas masuk ke dalam situs web dari Komisi Pemilihan Umum Filipina
(COMELEC) dan melakukan deface terhadap situs web tersebut. Pada hari yang sama,
Versi 1.3 15
grup hacker “LulzSec Pilipinas” mempublikasikan sebuah link online yang diklaim berisikan
keseluruhan database COMELEC yang berisi 55 juta informasi pribadi pemilih terdaftar
sebesar 340 GB.
Versi 1.3 16
QATAR NATIONAL BANK [8]
Pada bulan Juli 2015, kelompok hacker diketahui mulai menyerang Qatar National Bank
(QNB) hingga menyebabkan kebocoran informasi sebesar 1,4 GB. Informasi yang
dibocorkan diketahui dipublikasi secara online oleh penyerang dan berisi informasi pribadi
dari nasabah QNB, termasuk di dalamnya nasabah yang merupakan pemerintah kerajaan
Qatar dan pejabat pemerintahan. Informasi yang dibocorkan juga berisi detail riwayat
transaksi perbankan dari nasabah, termasuk transaksi luar negeri.
Versi 1.3 17
insiden yang dialami oleh QNB diperkirakan tidak ditujukan untuk memperoleh
keuntungan finansial, melainkan untuk menurunkan reputasi dan membuat malu QNB dan
sejumlah orang-orang penting yang informasi pribadi dan transaksi perbankan miliknya
dipublikasikan oleh pelaku serangan.
Versi 1.3 18
LAKUKAN PENGECEKAN POLA (PATTERN CHECK) : VALIDASI INPUT DATA
#2 DENGAN MENGGUNAKAN REGULAR EXPRESSION
Secara umum terdapat dua hal yang dapat dilakukan untuk melakukan
validasi input, yakni
a. Melakukan Whitelist. Hanya menerima input data yang memang
benar-benar diketahui baik. Beberapa hal yang perlu menjadi
pertimbangan melalui cara ini antara lain nilai yang diizinkan, tipe data,
ukuran data, data range, konten dari data.
b. Melakukan Blacklisting. Hanya menolak input data yang memang
benar-benar diketahui tidak baik. Hal yang dapat dilakukan pada teknik
ini yakni menolak input yang mengandung konten berbahaya. Misalkan
seperti contoh berikut:
Versi 1.3 19
MENONAKTIFKAN INFORMASI PESAN KESALAHAN APLIKASI (ERROR)
#4 Salah satu kebiasaan yang kerap kali dilakukan oleh pengembang aplikasi
pada saat masa pengembangan adalah mengaktifkan mode debug guna
memudahkan pengembang dalam menemukan kesalahan dalam aplikasi
yang dikembangkannya. Namun kerap kali pengembang lupa untuk menon
aktifkan mode debug pada saat aplikasi memasuki masa penggunaan
(production). Sehingga hal ini kerap kali menjadi keuntungan bagi
penyerang dengan teknik SQL injection untuk mengetahui parameter URL
mana yang rentan terhadap serangan ini. Sehingga untuk menghindari hal
ini, cukup non-aktifkan mode debug pada aplikasi untuk mencegah pesan
error yang ditampilkan dimanfaatkan oleh pihak penyerang.
Versi 1.3 20
LAKUKAN PENGUJIAN KEAMANAN APLIKASI SECARA BERKALA
#6 Hal ini bertujuan agar celah keamanan terkait aplikasi yang digunakan
dapat diketahui secara dini, dengan demikian langkah preventif ataupun
perbaikan terhadap celah keamanan tersebut dapat segera dilakukan.
Demikian beberapa cara pencegahan yang bisa Anda lakukan agar terhindar dari serangan
SQL injection. Selain itu, pastikan juga bahwa aplikasi web yang Anda bangun telah lulus
SQL injection vulnerability test.
Semoga artikel diatas bermanfaat bagi dan dapat membantu Anda untuk lebih
meningkatkan keamanan aplikasi anda dari serangan SQL Injection.
REFERENSI
Versi 1.3 21
https://www.theguardian.com/world/2018/mar/14/mossack-fonseca-shut-
down-panama-papers. [Accessed 05 2019].
[5] J. Leyden, "SQL injection vuln found at Panama Papers firm Mossack Fonseca,"
The Register, 11 April 2016. [Online]. Available:
https://www.theregister.co.uk/2016/04/11/hackers_pwn_mossack_fonseca/.
[Accessed May 2019].
[6] W. A. D. Agency, "WADA Confirms Attack by Russian Cyber Espionage Group,"
World Anti Doping Agency, 13 September 2016. [Online]. Available:
https://www.wada-ama.org/en/media/news/2016-09/wada-confirms-attack-by-
russian-cyber-espionage-group. [Accessed May 2019].
[7] S. Panela, "Inside Comelec’s Hacked Website," stack.com, 18 July 2016. [Online].
Available: http://www.stack.com.ph/comelec-hacked-website/. [Accessed May
2019].
[8] T. Micro, "Data Protection Mishap Leaves 55M Philippine Voters at Risk," Trend
Micro, 6 April 2016. [Online]. Available: https://blog.trendmicro.com/trendlabs-
security-intelligence/55m-registered-voters-risk-philippine-commission-elections-
hacked/. [Accessed May 2019].
[9] P. Muncaster, "Qatar Bank Hackers Got in Via SQLi – Expert," Infosecurity
Magazine, 28 April 2016. [Online]. Available: https://www.infosecurity-
magazine.com/news/qatar-bank-hackers-got-in-via-sqli/. [Accessed May 2019].
[10] S. Edwards, "Qatar Bank Breach Lifts the Veil on Targeted Attack Strategies,"
Trend Micro, 27 April 2016. [Online]. Available:
http://blog.trendmicro.co.uk/qatar-bank-breach-lifts-the-veil-on-targeted-attack-
strategies/. [Accessed May 2019].
[11] D. Holmes, "Profile of a Hacker: The Real Sabu, Part 1 of 2," F5, 18 April 2017.
[Online]. Available: https://www.f5.com/labs/articles/threat-intelligence/profile-
of-a-hacker-the-real-sabu-part-1-of-2-26146. [Accessed May 2019].
[12] J. Zorabedian, "SQL Injection Attacks and How to Prevent Them [INFOGRAPHIC],"
Veracode, 22 November 2016. [Online]. Available:
Versi 1.3 22
https://www.veracode.com/blog/intro-appsec/sql-injection-attacks-and-how-
prevent-them-infographic. [Accessed May 2019].
[13] Acunetix, "What is SQL Injection (SQLi) and How to Prevent It," Acunetix, [Online].
Available: https://www.acunetix.com/websitesecurity/sql-injection/. [Accessed
May 2019].
[14] Oracle, "Tutorial on Defending Against SQL Injection Attacks!," Oracle, 2009.
[Online]. Available:
https://download.oracle.com/oll/tutorials/SQLInjection/index.htm. [Accessed
May 2019].
[15] B. Tables, "Bobby Tables: A guide to preventing SQL injection," [Online].
Available: https://bobby-tables.com/. [Accessed May 2019].
Versi 1.3 23