JURNAL TEKNIK POMITS Vol. 2, No. 1, (2013) ISSN: 2337-3539 (2301-9271 Print)
1
Sistem Pendeteksi dan Pencegah Serangan SQL Injection dengan Penghapusan Nilai Atribut Query SQL dan Honeypot Satrio Gita Nugraha, Supeno Djanali, dan Baskoro Adi Pratomo Jurusan Teknik Informatika, Fakultas Teknologi Informasi, Institut Teknologi Sepuluh Nopember (ITS) Jl. Arief Rahman Hakim, Surabaya 60111 Indonesia e-mail:
[email protected] Abstrak—Dengan banyaknya layanan bisnis berbasis web seperti perbankan dan toko online serta aplikasi web yang berperan penting dalam proses bisnis suatu institusi, maka keamanan data yang tersimpan perlu dijaga dengan baik. Sifat aplikasi web yang dapat diakses dengan mudah oleh siapapun, di manapun, dan kapanpun dapat memberi masalah tersendiri karena aplikasi tersebut rawan akan percobaan serangan keamanan setiap saat. Salah satu bentuk serangan keamanan pada aplikasi web adalah SQL injection, yaitu serangan dalam bentuk memasukkan kode-kode untuk menyerang basis data.
Banyak penelitian dan metode pengamanan yang dapat digunakan untuk mencegah serangan SQL injection. Salah satu cara yang dapat digunakan adalah dengan memanfaatkan sebuah honeypot, yaitu suatu sistem yang ditujukan sebagai jebakan dalam keamanan jaringan. Honeypot memiliki kemampuan untuk memberikan balasan interaksi kepada penyerang, sehingga seolah-olah penyerang berhasil melakukan serangan terhadap sistem yang diinginkan. Hal ini berguna untuk mengamankan, menyembunyikan sistem yang sebenarnya, dan melakukan pencatatan serangan-serangan yang dilakukan untuk digunakan sebagai dasar dalam pengamanan sistem sebenarnya. Artikel ini mengajukan metode pengamanan sistem aplikasi web dari serangan SQL injection dengan menggunakan metode penghapusan nilai atribut pada query SQL untuk pendeteksian serangan dan honeypot untuk mengamankan sistem utama dari serangan. Kata Kunci—Honeypot, SQL Injection, SQL Query.
D
I. PENDAHULUAN
engan pesatnya perkembangan teknologi jaringan komputer dan internet, banyak institusi yang mulai menyediakan pelayanan bisnisnya menggunakan aplikasi web. Sharma [1] menunjukkan sebuah revolusi dalam dunia bisnis melalui strategi pemasaran berbasis web. Layanan web memiliki kelebihan dapat menyediakan akses di manapun dan kapanpun. Namun, seiring dengan meningkatnya popularitas internet, jumlah serangan terhadap layanan berbasis web juga semakin tinggi. Sebagian besar serangan ditargetkan untuk mengeksploitasi kelemahan aplikasi web [2]. Berbeda dari sebagian besar serangan yang bertujuan untuk menghabiskan sumber daya sistem, serangan SQL injection
ditujukan untuk pengambilalihan sistem melalui basis data. Banyak hal yang dapat dicapai penyerang dengan memanfaatkan SQL injection, di antaranya untuk memotong proses autentikasi pada aplikasi berbasis web, sehingga penyerang dapat masuk ke dalam sistem tanpa melalui proses autentikasi sebagaimana seharusnya. Selain itu, penyerang dapat menggunakan SQL injection untuk memasukkan perintah-perintah berbahaya pada DBMS. Serangan-serangan SQL injection tersebut tentu berbahaya apabila layanan web yang diserang bersifat sangat penting. Contoh, pada sistem perbankan apabila penyerang berhasil melakukan perubahan pada basis data sistem seperti menghapus atau menambahkan data fiktif, tentu sangat berbahaya bagi proses bisnis bank tersebut. Oleh karena itu, diperlukan suatu sistem yang dapat membantu mengamankan layanan web dengan cara mencegah kemungkinan terjadinya serangan SQL injection pada sistem. II. KAJIAN PUSTAKA A. SQL Injection Serangan SQL injection memanfaatkan kelemahan di antara database layer dan CGI layer [3]. Gambar 1 memperlihatkan aliran data di antara ketiga layer baik pada query normal maupun pada serangan SQL injection. Saat seorang pengguna memasukkan ID dan password, presentation layer menggunakan method GET dan POST untuk mengambil data dan mengirimnya ke CGI layer. SQL query pada CGI layer, kemudian melakukan koneksi ke basis data dan memproses prosedur autentikasi. Serangan pada Gambar 1 merupakan salah satu contoh serangan SQL injection yang disebut tautologi dan dilancarkan pada proses autentikasi pengguna. Ketika penyerang memasukkan "1’or‘1=1’--" sebagai ID, query pada CGI layer menjadi berisi "SELECT * FROM user WHERE id=‘1’or‘1=1’--‘ AND password=‘1111’". Dari query tersebut, berarti semua string dibelakang ’--‘ menjadi sebuah comment sehingga tidak diperiksa dan ‘1=1’ selalu bernilai TRUE, oleh karena itu proses autentikasi dapat dilewati. Serangan SQL injection adalah serangan yang merubah query normal pada aplikasi menjadi query berbahaya yang
JURNAL TEKNIK POMITS Vol. 2, No. 1, (2013) ISSN: 2337-3539 (2301-9271 Print)
2
dengan query normal yang seharusnya dimasukkan oleh pengguna (FFQ). Apabila hasil operasi XOR query tersebut ternyata bernilai FALSE berarti query yang dimasukkan oleh pengguna adalah query normal yang selanjutnya diteruskan ke database server untuk diberikan hasil query yang diinginkan. Sebaliknya, apabila hasil operasi XOR menghasilkan nilai TRUE maka query yang dimasukkan pengguna diduga merupakan serangan SQL injection.
Gambar 1 Aliran Data SQL Normal dan Serangan SQL Injection.
memungkinkan pengaksesan dan pemrosesan basis data secara tidak normal. Beberapa contoh serangan SQL injection lainnya diantaranya adalah: Illegal/Logically Incorrect Query Serangan semacam ini bertujuan untuk mendapatkan struktur dan informasi dari CGI dengan cara mencari pesan error dari CGI. Contoh serangannya: SELECT * FROM user WHERE id=‘1111’ AND password=‘1234’ AND CONVERT(char, no)-- ’; Union Query Serangan ini menggunakan “union” untuk menggabungkan dua atau lebih query. Contoh serangannya: SELECT * FROM user WHERE id=‘111’ UNION SELECT * FROM member WHERE id=‘admin’--’ AND password=‘1234’; Piggy-backed Query Serangan ini menambahkan query berbahaya pada query normal. Hal ini mungkin terjadi karena banyak query dapat diproses apabila ditambahkan karakter ‘;’ di setiap akhir query. Contoh serangannya: SELECT * FROM user WHERE id=‘admin’ AND password=‘1234’; DROP TABLE user; --’; Lee [4] mengajukan metode pendeteksian SQL injection dengan menghapus nilai atribut dari query yang dikirimkan pengguna. Algoritma ini membutuhkan dua buah input data yaitu Fixed Query (FQ) dan Dynamic Query (DQ). FQ merupakan query normal yang dijalankan oleh sistem dengan nilai atribut standar. Query ini dibentuk oleh pengembang aplikasi web ketika membutuhkan akses ke basis data. DQ merupakan query yang dihasilkan berdasarkan data input dari pengguna. Secara garis besar dapat digambarkan FQ merupakan template query sedangkan DQ merupakan query yang dihasilkan setelah merubah nilai atribut dari FQ dengan memasukkan nilai atribut dari pengguna. Algoritma ini bekerja dengan menghapus nilai atribut query dari FQ dan DQ melalui fungsi f() sehingga menghasilkan FFQ dan FDQ. Query yang dihasilkan setelah dilakukan proses penghapusan (FDQ) kemudian dilakukan operasi XOR
B. Honeypot Honeypot adalah sebuah sumber sistem informasi yang ditujukan untuk penggunaan secara tanpa ijin [5]. Honeypot bekerja selayaknya umpan elektronik yang berpura-pura sebagai sebuah sistem normal namun sesungguhnya menunggu diserang untuk tujuan pelacakan penyerang. Honeypot dilengkapi dengan perangkat lunak khusus yang bertujuan untuk memudahkan mempelajari detil serangan yang berhasil. Bentuk paling sederhana dari sebuah honeypot adalah sistem nyata yang rentan terhadap serangan dan dilengkapi dengan metode pengawasan. Sistem ini disebut high interaction honeypot dikarenakan kemampuannya untuk berinteraksi secara penuh dengan penyerang selayaknya sistem sebenarnya. Honeypot dipersiapkan untuk menjadi mangsa yang lebih mudah ditembus oleh penyerang dibanding sistem utama yang sebenarnya dengan modifikasi, sehingga setiap aktivitas penyerangan dapat dicatat dan ditelusuri. Umumnya penyerang yang berhasil memasuki suatu sistem akan melancarkan serangan-serangan berikutnya, setiap serangan-serangan ini dapat dipelajari untuk kebutuhan pengembangan keamanan sistem kedepannya, sehingga perlu dilakukan pencatatan. Yang harus diperhatikan adalah sistem honeypot harus berperilaku semirip mungkin dengan sistem sebenarnya agar penyerang terus melakukan serangan-serangan yang dapat dicatat dan tidak memutus koneksi. Dua tujuan utama dalam implementasi honeypot adalah, karena semua aktivitas penyerang tercatat maka memungkinkan untuk mempelajari metodologi serangan yang digunakan untuk meningkatkan kualitas keamanan sistem utama. Selain itu, honeypot juga dimanfaatkan untuk mengumpulkan informasi forensik yang dibutuhkan untuk menuntut penyerang secara hukum. Saat ini ada banyak honeypot yang digunakan dan dikembangkan. Setiap honeypot memiliki tujuannya tersendiri. Biasanya sebuah honeypot memiliki spesialisasi tertentu, baik dari jenis layanan, bahasa yang digunakan, maupun jenis serangan tertentu. High Interaction Honeypot Analysis Toolkit (HIHAT) adalah sebuah perangkat lunak yang mampu merubah aplikasi PHP menjadi sebuah high interaction honeypot [6]. HIHAT bekerja dengan cara menambahkan baris kode ke semua halaman script PHP, dengan tujuan untuk menyimpan detil dari semua request ke basis data. Honeypot ini tidak melakukan perubahan terhadap fungsi utama aplikasi sehingga diperlukan pengawasan secara rutin untuk menjaga sistem. HIHAT menyediakan web interface sederhana untuk
JURNAL TEKNIK POMITS Vol. 2, No. 1, (2013) ISSN: 2337-3539 (2301-9271 Print)
3
Tabel 1 Rancangan Proses Deteksi SQL Injection Web Server (AYODHYA)
Private Network Switch
Proses
Honeypot (ALENGKA)
1 2 3 4 5
SQL Injection Proxy (KOSALA)
6 7 8
Public Network
9
Client
Client
Client
Gambar 2 Diagram Alir Sistem
membaca catatan pengaksesan. Output dari HIHAT ditujukan untuk kebutuhan analisis secara manual. III. DESAIN SISTEM A. Deskripsi Umum Sebagaimana yang telah diuraikan pada bab sebelumnya, maka pada artikel ini akan didesain sebuah sistem untuk mendeteksi serangan SQL injection. Sistem ini akan bekerja selayaknya sebuah proxy yang berada di antara client dan web server. Sistem akan berperilaku seolah-olah sistem adalah web server yang menyediakan layanan, sehingga client akan mengirimkan request ke sistem. Selanjutnya request dari client akan diperiksa oleh sistem. Apabila request method yang dikirim client adalah selain dari POST, maka request akan langsung diteruskan ke web server. Sebaliknya apabila request method yang dikirimkan client adalah POST, maka sistem akan terlebih dahulu mengambil data yang dikirimkan pada parameter POST. Data tersebut akan diseleksi menggunakan metode penghapusan atribut query SQL. Apabila parameter yang dikirimkan lolos seleksi dan bersifat aman, maka request akan diteruskan ke web server. Apabila parameter yang dikirimkan tidak lolos seleksi, maka disinyalir ada serangan SQL injection yang disisipkan pada parameter data. Setiap request yang terdeteksi sebagai serangan akan diteruskan ke honeypot untuk dilakukan pencatatan serangan. Sistem juga bertugas untuk meneruskan balasan request dari web server dan honeypot ke client. B. Arsitektur Sistem Arsitektur sistem ini ditunjukkan pada Gambar 2. Sistem ini terdiri dari sebuah web server yang berfungsi menyediakan konten layanan web yang sesungguhnya, sebuah honeypot server yang berfungsi untuk menerima request dari client yang
Deteksi Serangan SQL Injection Pengambilan HTTP request dari client Pengecekan request method yang digunakan Pengambilan data pada parameter POST Pengambilan FQ dari kumpulan FQ Pembuatan DQ berdasarkan data parameter POST Pembuatan FFQ dan FDQ dengan menggunakan FQ dan DQ sebagai parameter pada fungsi f() Pengoperasian XOR antara FFQ dan FDQ Penerusan HTTP request kepada Honeypot atau Web Server Pengambilan HTTP response dari Honeypot atau Web Server dan penerusannya kepada client
terdeteksi sebagai serangan SQL injection dan memberikan respon kembali, dan sebuah proxy server yang bertugas menerima request dari client, menyeleksinya, meneruskan request tersebut ke web server atau honeypot, kemudian mengirimkan respon dari server kembali ke client. Server proxy akan berperilaku seperti web server dengan membuka port 80 untuk menerima request dari client. Dengan demikian maka client akan mengira semua layanan web disediakan oleh proxy server. Jaringan yang menghubungkan ketiga server juga bersifat private untuk lebih mengamankan sistem. Dengan jaringan private, maka client tidak dapat mengakses web server secara langsung. C. Perancangan Alur Sistem Pada sistem terdapat beberapa tahap pemrosesan. Dimulai dari pemrosesan data yang diterima dari client melalui socket dijadikan sebuah string. Data yang telah berupa string kemudian diproses untuk mendapatkan request method yang digunakan. Apabila request method yang dikirimkan berupa sebuah request POST, maka parameter yang ikut dikirim akan diambil untuk diproses menjadi sebuah Dynamic Query (DQ) yang digunakan dalam proses pendeteksian serangan SQL injection. Tabel 1 menunjukkan secara garis besar keseluruhan proses yang dijalankan oleh sistem untuk setiap HTTP request. Fungsi f() merupakan fungsi yang mengimplementasikan algoritma penghapusan nilai atribut query SQL sebagaimana diajukan oleh Lee [4]. Proses pendeteksian SQL injection pada sistem bergantung dari hasil yang dikeluarkan oleh fungsi f() karena penentuan sebuah request merupakan serangan SQL injection berdasarkan operasi XOR antara FFQ dan FDQ yang merupakan keluaran dari fungsi f(FQ) dan f(DQ). IV. IMPLEMENTASI A. Implementasi Penanganan HTTP Request Salah satu fungsi utama yang diperlukan untuk memenuhi
JURNAL TEKNIK POMITS Vol. 2, No. 1, (2013) ISSN: 2337-3539 (2301-9271 Print)
Create server socket on port 80 For every connection Get connecting socket Read request from input stream Check for sql injection Create socket to real server Send request using output stream
Forward response from server to client Gambar 3 Pseudocode penanganan HTTP request
kebutuhan fungsional sistem adalah kemampuan untuk menangani HTTP request. Mulai dari awal proses membuka port 80, pembuatan thread untuk menangani request, hingga mengirimkan HTTP response. Gambar 3 menunjukkan pseudocode dari proses ini. B. Implementasi Deteksi SQL Injection Pendeteksian SQL injection dilakukan pada setiap HTTP request yang masuk ke sistem. HTTP request yang diterima akan diolah untuk mendapatkan nilai atribut query yang dikirimkan. Setelah itu dibuat dua buah query, yaitu fixed query (FQ) yang merupakan query normal dan dynamic query (DQ) yang merupakan query dengan nilai atribut berdasarkan masukkan dari pengguna. Langkah selanjutnya adalah dilakukan operasi penghapusan nilai atribut pada kedua query untuk mendapatkan FFQ dan FDQ. Gambar 4 menunjukkan pseudocode proses penghapusan atribut. Setelah di dapatkan FFQ dan FDQ maka langkah terakhir adalah melakukan operasi XOR antara FFQ dan FDQ. Apabila hasil operasi menghasilkan nilai 0 maka tidak terdeteksi adanya serangan SQL injection dan request akan dikirim ke web server. Sebaliknya apabila menghasilkan nilai 1 maka terdeteksi adanya serangan SQL injection dan request akan dikirim ke honeypot. V. UJI COBA DAN EVALUASI A. Uji Coba Fungsionalitas Tahap uji coba fungsionalitas bertujuan untuk mengetahui kemampuan sistem menjalankan kebutuhan dasar. Uji coba ini meliputi kemampuan sistem menerima HTTP request, mendeteksi SQL injection, serta meneruskan HTTP response dari server ke client. Dari hasil uji coba, sistem mampu menampilkan dengan baik isi HTTP request dari client, hasil pendeteksian serangan SQL injection, dan isi HTTP response dari server. Hal ini berarti sistem sudah mampu berjalan dengan baik dan berhasil menjalankan fungsi-fungsi dasarnya. B. Uji coba Kasus Uji coba kasus dijalankan dengan menggunakan perangkat lunak sqlmap. Sqlmap adalah perangkat lunak untuk melakukan serangan SQL injection secara otomatis. Tahap ini bertujuan untuk mengetahui kemampuan sistem dalam mendeteksi serangan SQL injection yang lebih kompleks dan dalam jumlah yang banyak.
4
Status = 0 For every character in query string If status is 0 Add character to output If character is ‘ and status is 0 Status = 1 Else if character is ’ and status is 1 Add character to output Status = 0
Gambar 4 Pseudocode penghapusan nilai atribut
Hasil uji coba menunjukkan sistem mampu mendeteksi dan membelokkan request ke honeypot sebanyak 6264 request dari total 9777 request yang dikirimkan sqlmap. Hal ini menunjukkan sistem telah berjalan dengan baik karena mampu mendeteksi 64% request sqlmap sebagai serangan. Selain itu hasil informasi basis data yang diterima oleh sqlmap adalah basis data milik honeypot. Hal ini menunjukkan sqlmap telah berhasil terjebak ke dalam honeypot. C. Uji Coba Performa Uji coba performa dijalankan untuk mengetahui kehandalan sistem dalam menangani request dan mendeteksi SQL injection. Hasil uji coba menunjukkan sistem mebutuhkan waktu rata-rata sekitar 5012 milisecond untuk menangani setiap request yang masuk. Proses pendeteksian SQL injection sendiri membutuhkan waktu rata-rata 2 millisecond untuk setiap request. VI. KESIMPULAN DAN SARAN A. Kesimpulan Dari hasil pengamatan selama perancangan, implementasi, dan proses uji coba perangkat lunak yang dilakukan, penulis mengambil kesimpulan sebagai berikut: 1. Dari hasil uji coba fungsionalitas pada sistem pendeteksi dan pencegah serangan SQL injection, semua fungsionalitas sistem sudah berjalan dengan cukup baik sehingga sistem dapat berperan selayaknya sebuah web server sesungguhnya. 2. Dari hasil uji coba dapat disimpulkan sistem telah memenuhi semua kebutuhan dan menjalankan perannya dengan baik dalam mendeteksi serangan SQL injection yang dikirimkan melalui POST method. 3. Dari hasil uji coba didapatkan waktu yang dibutuhkan sistem dalam proses pendeteksian hanya membutuhkan waktu rata-rata 2 millisecond. Hal ini menunjukkan algoritma sudah berjalan dengan baik dan tidak memberatkan sistem secara keseluruhan. B. Saran Adapun saran-saran yang dapat diberikan untuk pengembangan sistem ini berikutnya adalah: 1. Untuk meningkatkan performa sistem, perlu digunakan library yang mampu menangani socket dan stream secara lebih baik dan optimal.
JURNAL TEKNIK POMITS Vol. 2, No. 1, (2013) ISSN: 2337-3539 (2301-9271 Print) 2. Untuk memudahkan pemasangan sistem pada lingkungan baru serta kehandalan sistem, perlu digunakan bahasa pemrograman yang lebih ringan dan mampu menangani socket dengan lebih baik. 3. Perlu dilakukan modifikasi terhadap sistem dan metode pendeteksian agar juga mampu menangani SQL injection yang menggunakan GET method. DAFTAR PUSTAKA [1] A. Sharma and J. N. Sheth, "Web-based marketing: The coming
revolution in marketing thought and strategy," Journal of Business Research, vol. 57, no. 7, pp. 696-702, 2004.
[2] S. P. Oriyano and R. Shimonski, "Web Application Attacks," in ClientSide Attacks and Defense, Boston, Elsevier Inc., 2012, pp. 195-221.
[3] J. Clarke, "Chapter 2 - Testing for SQL Injection," in SQL Injection Attacks and Defense, Boston, Elsevier Inc., 2009, pp. 29-93.
[4] I. Lee, S. Jeong, S. Yeo and J. Moon, "A novel method for SQL injection attack detection based on removing SQL query attribute values," Mathematical and Computer Modelling, vol. 55, no. 1, pp. 56-68, 2012.
[5] The Honeynet Project, Know Your Enemy: Learning About Security Threats, London: Addison-Wesley Longman, 2004.
[6] M. Muter, F. Freiling, T. Holz and J. Matthews, "A Generic Toolkit for Converting Web Applications Into High-Interaction Honeypots," Clarkson University, New York, 2007.
5