MENGENAL SQL INJECTION DAN CARA …...ditemukan. Berdasarkan laporan keamanan aplikasi yang...

24
2019 MENGENAL SQL INJECTION DAN CARA MENCEGAHNYA BADAN SIBER DAN SANDI NEGARA DIREKTORAT PROTEKSI IIKN

Transcript of MENGENAL SQL INJECTION DAN CARA …...ditemukan. Berdasarkan laporan keamanan aplikasi yang...

2019

MENGENAL SQL INJECTION DAN CARA MENCEGAHNYA

BADAN SIBER DAN SANDI NEGARA DIREKTORAT PROTEKSI IIKN

1

Versi 1.3

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

2

Versi 1.3

menjadikan sebagian data yang diinputkan pengguna tersebut diperlakukan sebagai

bagian dari kode SQL.

Gambar 2 - Penjelasan singkat Pengertian SQL Injection

DAMPAK SERANGAN SQL INJECTION Dampak dari teknik serangan SQL Injection cukup beragam, beberapa diantaranya yaitu

sebagai berikut:

Melakukan Bypass terhadap Mekanisme Otentikasi

Teknik serangan ini memungkinkan penyerang untuk masuk ke

dalam aplikasi dengan hak akses administratif, tanpa

menggunakan username dan password yang valid.

Melakukan Modifikasi Data (Compromised Integritas Data)

Melalui teknik serangan ini penyerang juga dapat melakukan

perubahan terhadap konten data yang tersimpan di dalam basis

data, atau memanfaatkan celah keamanan ini untuk memasukan

konten yang berbahaya ke dalam halaman web. Dalam kasus

3

Versi 1.3

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

Melakukan Compromised terhadap Ketersediaan Data

Dengan melakukan penghapusan terhadap seluruh data yang

tersimpan di dalam basis data, Teknik serangan ini juga berpotensi

terhadap aspek ketersediaan (availability) dari sistem tersebut.

Melakukan Pencurian Informasi

Serangan ini juga dapat dimanfaatkan oleh penyerangan untuk

melakukan pencurian informasi sensitive yang tersimpan di dalam

basis data.

Eksekusi Perintah Jarak Jauh (Remote Command Execution)

Melalui teknik serangan ini penyerang juga dapat melakukan

perintah eksekusi melalui database yang memungkinkan penyerang

untuk mengambil alih host atau target.

Melakukan Impersonasi Pengguna

Penyerang juga dapat memanfaatkan serangan ini untuk melakukan

impersonasi dengan menanfaatkan akun pengguna yang aktif di

dalam basis data.

JENIS SERANGAN SQL INJECTION Secara umum, terdapat beberapa jenis serangan SQL Injection, yaitu:

Tautology Based Attack

4

Versi 1.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.

Query Ilegal / Query yang Secara Logik Salah (Illegal/Logically

Incorrect Queries)

} Serangan ini memungkinkan penyerang untuk memperoleh informasi

mengenai tipe dan struktur dari back-end basis data dari sebuah

aplikasi berbasis web.

} Tujuan Serangan:

Mengidentifikasi parameter yang dapat diinjeksi, melakukan database

finger-printing, dan melakukan ekstraksi data.

Union Query

SELECT akun FROM nasabah WHERE login=’’ AND pass=’’ AND pin= convert (int,(select top 1 name from sysobjects where xtype=’u’))

SELECT accounts FROM users WHERE login=’’ or 1=1 -- AND pass=’’ AND pin=

5

Versi 1.3

} 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).

SELECT akun FROM nasabah WHERE login=’doe’ AND pass=’’; drop table nasabah -- ’ AND pin=123

SELECT akun FROM nasabah WHERE login=’’ UNION SELECT noKartu from KartuKredit where noAkun=1077 -- AND pass=’’ AND pin=

6

Versi 1.3

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.

SELECT accounts FROM users WHERE login=’legalUser’; exec(char(0x73687574646f776e)) -- AND pass=’’ AND pin=’’

SELECT accounts FROM users WHERE login=’legalUser’ and ASCII(SUBSTRING((select top 1 name from sysobjects),1,1)) > X WAITFOR 5 -- ’ AND pass=’’ AND pin=0

7

Versi 1.3

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.

2. Inferential SQL Injection (Blind SQL Injection)

Tidak seperti in-band SQL Injection, serangan tipe Inferential SQL

Injection membutuhkan waktu yang lebih lama bagi penyerang untuk

melakukan eksploitasi. Pada serangan tipe ini, tidak ada data yang

ditransfer melalui aplikasi web dan penyerang tidak dapat mengetahui

hasil dari serangan melalui kanal komunikasi yang digunakannya. Hal

ini lah yang menyebabkan tipe SQL Injection ini juga dikenal sebagai

“Blind SQL Injection”.

Dalam melancarkan serangan SQL Injection tipe ini, penyerang dapat

merekonstruksi struktur database dengan cara mengirimkan payload,

8

Versi 1.3

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.

3. Out-of-band SQL Injection

Tipe SQL Injection ini termasuk jarang ditemukan karena bergantung

pada fitur yang diaktifkan oleh server database yang digunakan oleh

aplikasi web. Out-of-band SQL Injection terjadi saat seorang

9

Versi 1.3

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.

BAGAIMANA CARA SERANGAN SQL INJECTION BEKERJA Secara umum untuk melakukan serangan dengan teknik SQL Injection umumnya

penyerang menjalankan dua tahapan proses yaitu [1]:

1. Tahapan Riset. Penyerang umumnya melakukan riset dengan mengirimkan berbagai

macam nilai yang tidak diharapkan sebagai argumen input, kemudian dia mempelajari

respon dari aplikasi, kemudian dia menentukan apakah target URL rentan atau tidak

terhadap SQL Injection.

2. Tahap Serangan. Setelah melakukan riset mengenai kerentanan pada aplikasi, maka

pada tahapan ini penyerang membuat payload tertentu sebagai nilai input dari

argumen sehingga payload tersebut akan diinterpretasikan sebagai bagian dari

perintah SQL ketimbang hanya data. Kemudian database melakukan eksekusi terhadap

perintah yang telah dibuat oleh penyerang.

Berikut ini merupakan ilustrasi singkat mengenai bagaimana serangan SQL Injection

bekerja.

10

Versi 1.3

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

11

Versi 1.3

Query = "SELECT * FROM users WHERE username = ' " +request.getParameter("input")+ " ' " ;

Maka baris kode tersebut akan menjalankan perintah query SQL sebagai berikut:

SELECT * FROM users WHERE username = ‘input’

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 = '$user' AND loginPassword = '$password'

SELECT * FROM Users WHERE loginName = ‘ John ‘ - - AND Password = anything SELECT * FROM Customers WHERE AccNumber = 1 OR 1 = 1 # AND Pin = anything

12

Versi 1.3

Dengan demikian penyerang dapat mem-bypass mekanisme otentikasi, karena perintah

setelah (--) atau # yakni AND Pin = anything akan dianggap sebagai baris komentar

oleh database.

INSIDEN SIBER TERKAIT SQL INJECTION

MOSSACK FONSECA (PANAMA PAPERS) [3] [4]

Gambar 3 - Insiden Mossack Fonseca (Panama Papers)

Pada tahun 2016, Mossack Fonseca yang merupakan sebuah firma hukum asal Panama

mengalami insiden kebocoran data (data breach) yang menyebabkan 11,5 juta dokumen

rahasia sebesar 2,6 TB milik firma tersebut terekspos ke publik.

13

Versi 1.3

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.

Dokumen rahasia yang bocor dalam insiden

ini dikenal sebagai “Panama Papers” dan

berisi bagaimana pengguna jasa Mossack

Fonseca yang banyak diantaranya

merupakan tokoh-tokoh penting di dunia

menghindari pajak. Insiden yang terjadi pada

Mossack Fonseca ini menyebabkan runtuhnya

reputasi Mossack Fonseca dan dampak

finansial bagi firma hukum tersebut sehingga

akhirnya pada 14 Maret 2018 Mossack

Fonseca mengumumkan berhenti beroperasi.

Gambar 4 - Pemberitaan mengenai Panama Papers

Gambar 6 - SQL Injection disebutkan sebagai penyebab insiden “Panama Paper”

Gambar 5 - Pemberitaan mengenai penghentian operasi Mossack Fonseca

14

Versi 1.3

WORLD ANTI-DOPING AGENCY [5]

Gambar 7 - Insiden siber pada WADA

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.

Insiden siber yang terjadi pada

WADA ini diketahui dilakukan

dalam dua tahapan serangan.

Pada tahapan pertama,

penyerang menggunakan SQL

Injection untuk mencuri alamat

email dan password dari server

yang dimiliki oleh WADA.

Informasi mengenai alamat

email dan password ini kemudian digunakan untuk melakukan serangan spearphishing

kepada personil WADA dengan tujuan untuk mencuri kredensial untuk masuk ke dalam

sistem yang menyimpan rekam medis pribadi milik atlet.

Gambar 8 - Pengumuman insiden siber pada halaman web WADA

15

Versi 1.3

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.

PHILIPPINES COMMISION ON ELECTIONS (COMELEC) [6] [7]

Gambar 10 - Insiden pada COMELEC

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,

Gambar 9 - Artikel yang menyebutkan kebocoran akun dan password pada server WADA akibat SQL Injection

16

Versi 1.3

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.

Insiden siber yang menyebabkan

kebocoran data pemilih Filipina ini

diketahui berkaitan dengan

kerentanan SQL Injection yang

terdapat pada sistem yang

menyimpan jutaan data pribadi

pemilih terdaftar. Akibat dari insiden

ini adalah 55 juta informasi pribadi,

seperti informasi biometrik dan

nomor paspor pemillih terdaftar yang

merupakan warga Filipina diketahui

oleh pihak yang tidak berhak.

Informasi pribadi yang bocor ini

berpotensi disalahgunakan oleh

pihak yang tidak bertanggung jawab

misalnya untuk tujuan pemalsuan

identitas maupun pemerasan atau

penipuan.

Gambar 12 - Insiden data breach COMELEC

Gambar 11 - Tweet kelompok yang membocorkan data pemilih dari server COMELEC

17

Versi 1.3

QATAR NATIONAL BANK [8]

Gambar 13 - Insiden Qatar National Bank

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.

Jika melihat pengaturan file dari

informasi yang dibocorkan, dimana

file-file disusun ke dalam tiga high-

level folder, yaitu ‘Backup’, ‘Files’,

dan ‘Folders’, maka insiden siber

pada QNB ini dapat disimpulkan

diperoleh melalui serangan SQL

Injection menggunakan tools SQL

Injection berbasis open source.

Meskipun terdapat ribuan akun

nasaban QNB yang dibocorkan,

Gambar 14 - Pemberitaan mengenai insiden yang terjadi di QNB

18

Versi 1.3

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.

PENCEGAHAN TERHADAP SERANGAN SQL INJECTION Berikut merupakan beberapa langkah pencegahan yang dapat dilakukan untuk mengatasi

serangan SQL Injection, yaitu:

MENGGUNAKAN PARAMETERIZED SQL QUERY Menggunakan parameterized query atau prepared statement merupakan

salah satu teknik sederhana dan dapat dikatakan mudah untuk dilakukan.

Penggunaan parameterized query ditujukan agar database dapat

membedakan mana yang merupakan SQL statement dan mana yang

merupakan data yang diinputkan oleh pengguna. Melalui cara ini,

penyerang tidak bisa mengubah isi query, walaupun telah memasukkan

kode SQL saat melakukan input. Berikut merupakan contoh penggunaan

prepare statement pada bahasa pemrograman PHP.

Melalui mekanisme ini, data yang dikirimkan oleh pengguna akan

menggantikan parameter yang berada di dalam tanda kurung “(?)”, sebagai

parameter data yang diinputkan oleh pengguna.

#1

19

Versi 1.3

LAKUKAN PENGECEKAN POLA (PATTERN CHECK) : VALIDASI INPUT DATA

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:

Memberikan batasan hak akses untuk membatasi kerusakan yang terjadi

akibat SQL injection. Jangan sesekali Anda login ke database menggunakan

akses admin sebagai root. Namun, Anda dapat menggunakan akses

istimewa yang telah ditentukan untuk membatasi ruang lingkup sistem.

TAMBAHKAN ESCAPE KARAKTER Tambahkan escape karaketer yang memiliki makna khusus di SQL. Misalkan

karakter yang memiliki memiliki makna khusus di SQL yakni single quote

(‘) di dalam paramater dapat diinterpretasikan sebagai dua single quotes

(‘’). Maka untuk menghindari kesalahan eksekusi dalam database,

tambahkan karakter escape seperti back slash, misal (\’). Sehingga

karakter single quote akan tetap diartikan sebagai single quote oleh

database.

#2

#3

20

Versi 1.3

MENONAKTIFKAN INFORMASI PESAN KESALAHAN APLIKASI (ERROR)

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.

AMANKAN DATABASE YANG DIGUNAKAN Beberapa cara yang dapat digunakan untuk mengamankan database yang

digunakan antara lain:

a. Definisikan dengan baik hak akses dari pengguna yang mengakses

database serta berikan hak akses terhadap pengguna sesuai dengan hak

akses yang diperlukannya (least privileged).

b. Gunakan teknik enkripsi untuk mengamankan data anda yang tersimpan

di dalam database. Hal ini bertujuan agar ketika data anda berhasil dicuri

oleh penyerang, maka penyerang tidak mendapatkan informasi apapun

mengenai data yang tersimpan.

c. Non aktifkan akses dari publik untuk mengakses database anda.

d. Lakukan penggantian password secara berkala untuk akun yang

digunakan untuk mengakses database.

#4

#5

21

Versi 1.3

LAKUKAN PENGUJIAN KEAMANAN APLIKASI SECARA BERKALA 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.

GUNAKAN PERANGKAT KEAMANAN WEB APPLICATION FIREWALL Hal ini bertujuan untuk mendeteksi dan meblok serangan SQL Injection

berjalan sukses pada aplikasi anda.

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

[1] D. P. IIKN, "Laporan Voluntary Vulnerability Disclosure Program (VVDP)," BSSN, Jakarta, 2018.

[2] Veracode, "SQL Injection: Vulnerabilities & How To Prevent SQL Injection Attacks," NA NA NA. [Online]. Available: https://www.veracode.com/security/sql-injection.

[3] R. H. Randy Connolly, "Working with Databases," in Fundamentals of Web Developments , Pearson, 2015.

[4] N. Slawson, "Mossack Fonseca law firm to shut down after Panama Papers tax scandal," The Guardian, 14 March 2018. [Online]. Available:

#6

#7

22

Versi 1.3

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:

23

Versi 1.3

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].