1
Pencari Celah Keamanan pada Aplikasi Web Muhammad Chandrika Kesuma, Ary Mazharuddin Shiddiqi, Baskoro Adi Pratomo Jurusan Teknik Informatika, Fakultas Teknologi Informasi, Institut Teknologi Sepuluh Nopember (ITS) Jl. Arief Rahman Hakim, Surabaya 60111 E-mail:
[email protected] Abstrak—Kejahatan di dunia teknologi dan informasi terutama pada aplikasi web semakin marak terjadi. Salah satu faktor yang menyebabkan kurangnya tingkat keamanan pada aplikasi web adalah kesalahan penulisan kode program. Kesalahan penulisan kode program dalam pembuatan aplikasi web adalah hal yang sering dimanfaatkan oleh para penyerang, hal ini mengakibatkan rata-rata aplikasi web bisa diserang dengan memanfaatkan kesalahan ini. Kelemahankelemahan yang sering dimanfaatkan oleh para penyerang diantaranya adalah kelemahan terhadap SQL Injection, XSS, Remote File Inclusion, dan Username Enumeration. Salah satu cara untuk mendeteksi adanya kelemahan-kelemahan pada aplikasi web adalah dengan menggunakan aplikasi pencari celah keamanan. Aplikasi pencari celah keamanan ini dimaksudkan untuk mendeteksi secara otomatis apakah suatu aplikasi web memiliki kerentanan terhadap suatu serangan. Aplikasi ini akan mencari celah keamanan suatu situs web terhadap 4 metode serangan, yaitu : SQL Injection, XSS (Cross-Site Scripting), RFI (Remote File Inclusion), dan Username Enumeration. Dari hasil uji coba, aplikasi ini bisa memberikan informasi tentang dimana letak celah keamanan yang terdapat pada suatu aplikasi web terhadap metode-metode serangan yang diujikan. Serangan SQL Injection, XSS, dan RFI dapat dihindari dengan cara melakukan sanitasi terhadap masukan dari pengguna. Kata Kunci : RFI, Enumeration, XSS
D
SQL
Injection,
Username
I. PENDAHULUAN
alam dunia pengembangan website, pengamanan terhadap sebuah website seringkali luput dari benak pengembang web. Pada kenyataanya, mencari suatu bug atau kelemahan keamanan dan melakukan audit terhadap suatu website cukup sulit untuk dilakukan. Melihat kenyataan tersebut, para pengembang ataupun praktisi keamanan web mengaplikasikan berbagai teknik keamanan. Setiap pengembang website harus memperbaiki pengamanan terhadap website yang dibangunnya. Pengamanan harus diterapkan sejak awal karena penerapannya akan sangat sulit jika telah terjadi masalah di kemudian hari. Akan tetapi, hal tersebut tidak menjamin website tersebut aman 100% karena selalu terdapat celah-celah yang harus diminimalisir jumlahnya. Salah satu faktor yang menyebabkan kurangnya tingkat keamanan pada aplikasi web adalah kesalahan penulisan
kode program. Kesalahan penulisan kode program dalam pembuatan aplikasi web adalah hal yang sering dimanfaatkan oleh para penyerang, hal ini mengakibatkan rata-rata aplikasi web bisa diserang dengan memanfaatkan kesalahan ini. Kelemahan-kelemahan penulisan kode yang sering dimanfaatkan aleh para penyerang untuk menyerang korbannya diantaranya adalah SQL Injection dan XSS. Seperti ditunjukan pada diagram yang dirilis oleh webappsec.org (diperbaharui terakhir Juli 2011) pada Gambar 1 bahwa SQL Injection (20%) dan XSS (9,9%) merupakan dua metode serangan yang sering digunakan [1].
Gambar 1. Diagram Serangan pada Aplikasi Web Selain 2 metode yang telah disebutkan, terdapat pula metode-metode lain yang bisa dilakukan untuk menyerang suatu aplikasi web, diantaranya adalah : Username Enumeration, dan Remote File Inclusion [2]. Apabila celahcelah keamanan ini tidak diatasi dengan baik dan benar, maka bisa menimbulkan dampak buruk pada aplikasi web. Salah satu cara untuk mempermudah pendeteksian adanya kelemahan-kelemahan pada aplikasi web/website adalah dengan menggunakan aplikasi pencari celah keamanan. Aplikasi pencari celah keamanan ini dimaksudkan untuk mendeteksi secara otomatis apakah suatu aplikasi web memiliki kerentanan terhadap suatu serangan. Dengan menggunakan aplikasi seperti ini maka baik administrator maupun pengembang aplikasi web dapat mengetahui dimana letak kerentanan pada aplikasi web mereka. Hal ini tentunya akan memudahkan dalam upaya meningkatkan keamanan aplikasi web. Tujuan tugas akhir ini adalah membangun aplikasi yang bisa mendeteksi kelemahan dari aplikasi web terhadap SQL Injection, Cross-Site Scripting (XSS), Remote File Inclusion, dan Username Enumeration.
2 II. KAJIAN PUSTAKA A. SQL Injection SQL Injection adalah jenis serangan yang memungkinkan penyerang untuk memanipulasi perintah SQL melalui URL atau isian form yang dikirimkan oleh aplikasi web ke server [3]. Salah satu bentuk serangan ini dilakukan dengan menyusun perintah SQL yang memungkinkan dilakukannya login tanpa memiliki akun yang valid. Dalam serangan SQL Injection, penyerang mencoba memasukkan query baik melalui field atau URL yang menyebabkan database server menghasilkan query SQL yang salah. Teknik SQL Injection merupakan teknik penyerangan yang sangat sederhana, namun justru hal inilah yang sering diabaikan oleh para pengembang aplikasi web. SQL Injection dapat disebabkan karena penanganan yang buruk terhadap karakter tanda ‘ (petik satu), karakter -(double minus), maupun karakter-karakter lain yang menyebabkan suatu aplikasi dapat disisipi dengan perintah SQL. Hal ini bisa mengakibatkan seorang penyerang menyisipkan perintah SQL kedalam suatu parameter maupun suatu form. B. XSS (Cross-Site Scripting) XSS merupakan salah satu jenis serangan injeksi kode (code injection attack) yang memungkinkan suatu website untuk menampilkan kode berbahaya yang kemudian dieksekusi pada web browser pengguna [4]. Penyerang melakukan serangan XSS dengan cara memasukkan kode HTML atau kode client script lainnya ke suatu website. Dengan menggunakan serangan ini penyerang bisa melakukan web deface yang dimaksudkan untuk mengelabui pengguna sehingga penyerang bisa mendapatkan informasi sensitif, ataupun menyimpan aplikasi berbahaya. Resiko yang mungkin diakibatkan dari kerentanan aplikasi web terhadap XSS diantaranya adalah pencurian akun pengguna. Hal ini sangat berbahaya karena penyerang bisa mendapatkan informasi sensitif milik pengguna. Serangan XSS dapat terjadi karena suatu aplikasi web yang membutuhkan masukan dari pengguna tidak tersanitasi dengan baik. C. RFI (Remote File Inclution) Remote File Inclusion (RFI) adalah teknik serangan yang digunakan untuk mengeksploitasi mekanisme include file secara dinamis pada aplikasi web. Ketika aplikasi web mengambil masukan pengguna (URL, nilai parameter, dll) dan mengirimnya ke command include, aplikasi web mungkin akan mengeksekusi file dari luar yang memiliki kode berbahaya di dalamnya [5]. D. Username Enumeration Username Enumeration adalah suatu metode untuk bisa masuk ke suatu situs web dengan menggunakan username dan password secara acak. Metode ini menggunakan daftar username dan password yang kemudian digunakan untuk mencoba masuk ke dalam halaman web. Proses ini dilakukan secara berulang-ulang sampai didapatkan username dan password yang benar [6]. Jika username dan password yang benar berhasil didapatkan, maka hal ini akan sangat berbahaya bagi pemilik
username dan password tersebut. Hal ini bisa mangakibatkan terjadinya penyalah gunaan username dan password oleh pihak yang tidak berhak menggunakannya. III. DESAIN SISTEM A. Deskripsi Umum Aplikasi yang akan dibuat dalam tugas akhir ini adalah aplikasi pencari celah keamanan pada aplikasi web. Aplikasi ini akan memberikan informasi tentang kerentanan suatu aplikasi web terhadap serangan-serangan yang akan dilakukan dengan menggunakan empat metode berbeda. Metode penyerangan yang akan digunakan dalam aplikasi ini adalah : SQL Injection, XSS (Cross-Site Scripting), RFI(Remote File Inclusion), dan Usename Enumeration. Aplikasi ini akan menghasilkan laporan yang berisikan informasi letak celah keamanan yang terdapat pada aplikasi web yang dijadikan bahan uji. B. Arsitektur Sistem Dalam tugas akhir ini akan dirancang dan diaplikasikan sebuah aplikasi pencari celah keamanan untuk aplikasi web dimana secara garis besar memiliki arsitektur seperti diperlihatkan pada Gambar 2.
Aplikasi Vulnerability Scanner
Script HTML
WEB WEB SERVER SERVER
Script Injection
Gambar 2. Arsitektur Sistem Sesuai dengan gambar 2, maka jalannya aplikasi adalah sebagai berikut: 1. Aplikasi Pencari Celah Keamanan melakukan request berupa URL ke server 2. Server memberikan respon berupa HTML 3. Aplikasi melakukan proses scan terhadap respon HTML dan menginjeksikan script injeksi. 4. Server memberikan respon berupa HTML. 5. Aplikasi melakukan proses scan terhadap respon HTML untuk mengecek hasil proses injeksi. 6. Aplikasi memberikan laporan hasil proses scan. C. Deskripsi Singkat Aplikasi Aplikasi pencari celah keamanan ini memiliki empat fitur utama yang dapat membantu untuk mencari celah keamanan yang mungkin terdapat pada suatu aplikasi web. Fitur-fitur yang terdapat pada aplikasi ini adalah sebagai berikut: Mencari Celah Keamanan terhadap XSS. Fungsi scanning XSS (Cross-Site Scripting) dimulai dengan pengguna memasukkan alamat sebuah situs web. Aplikasi akan memulai proses crawling situs web yang menjadi masukan, kemudian menginjeksikan script XSS. Aplikasi akan menentukan apakah terdapat celah keamanan yang rentan terhadap serangan XSS dalam situs web yang
3 menjadi masukan. Mencari Celah Keamanan terhadap SQL Injection. Fungsi scanning SQL Injection dimulai dengan pengguna memasukkan alamat sebuah situs web. Aplikasi akan memulai proses crawling situs web yang menjadi masukan, kemudian menginjeksikan script SQL Injection. Aplikasi akan menentukan apakah terdapat celah keamanan yang rentan terhadap serangan SQL Injection dalam situs web yang menjadi masukan. Mencari Celah Keamanan terhadap RFI. Fungsi scanning RFI (Remote File Inclusion) dimulai dengan pengguna memasukkan alamat sebuah situs web. Aplikasi akan memulai proses crawling situs web yang menjadi masukan, kemudian menginjeksikan script RFI. Aplikasi akan menentukan apakah terdapat celah keamanan yang rentan terhadap serangan RFI dalam situs web yang menjadi masukan.
Gambar 4. Diagram Alir SQL Injection Scanner
Username Enumeration. Fungsi Username Enumeration dimulai dengan pengguna memasukkan alamat sebuah situs web. Aplikasi akan mencari form login dari website yang menjadi masukan, lalu menginjeksikan username dan password yang diperoleh dari file teks yang telah disediakan. D. Diagram Alir Aplikasi Diagram alir dari aplikasi ini terbagi menjadi 4 buah diagram alir yang dapat dilihat pada Gambar 3, Gambar 4, Gambar 5, dan Gambar 6. Diagram alir tersebut masingmasing mewakili fitur-fitur yang terdapat pada aplikasi ini, yaitu : XSS Scanner, SQL Injection Scanner, RFI Scanner, dan Username Enumeration.
Gambar 5. Diagram Alir RFI Scanner
Gambar 3. Diagram Alir XSS Scanner
Gambar 6. Diagram Alir Username Enumeration
4 IV. IMPLEMENTASI A.
Implementasi Fitur Pencarian Celah Keamanan terhadap XSS Lapisan logika pada fitur ini diimplementasikan di dalam class EvaluatorXSS. Saat fitur ini dijalankan, aplikasi mengeksekusi fungsi cari_link pada dengan parameter sebuah URL untuk memulai proses crawling tahap pertama, dilanjutkan dengan fungsi isi_semua_link untuk melakukan crawling tahap kedua. Kemudian aplikasi akan menginjeksikan script XSS ke dalam link yang telah didapatkan dengan menggunakan fungsi replace_param_xss_rfi. Dilanjutkan dengan fungsi search_form dan search_post_form untuk mendapatkan dan menginjeksi form yang terdapat pada URL. Fungsi terakhir yang dijalankan adalah fungsi eval untuk menentukan apakah suatu URL memiliki celah keamanan terhadap XSS atau tidak. Implementasi Fitur Pencarian Celah Keamanan terhadap SQL Injection Lapisan logika pada fitur ini diimplementasikan di dalam class EvaluatorSQL. Saat fitur ini dijalankan, aplikasi mengeksekusi fungsi cari_link pada dengan parameter sebuah URL untuk memulai proses crawling tahap pertama, dilanjutkan dengan fungsi isi_semua_link untuk melakukan crawling tahap kedua. Kemudian aplikasi akan menginjeksikan script SQL Injection ke dalam link yang telah didapatkan dengan menggunakan fungsi replace_param_sql. Dilanjutkan dengan fungsi search_form dan search_post_form untuk mendapatkan dan menginjeksi form yang terdapat pada URL. Fungsi terakhir yang dijalankan adalah fungsi eval untuk menentukan apakah suatu URL memiliki celah keamanan terhadap SQL Injection atau tidak.
E.
Implementasi Fitur Pengaturan Proxy Lapisan logika pada fitur ini diimplementasikan pada class Proxy_Authenticator. Pada class ini terdapat fungsi connectToProxy yang akan dijalankan jika aplikasi membutuhkan akses ke proxy server. V. UJI COBA DAN EVALUASI A.
Uji Coba Pencarian Celah Keamanan terhadap XSS
B.
Implementasi Fitur Pencarian Celah Keamanan terhadap RFI Lapisan logika pada fitur ini diimplementasikan di dalam class EvaluatorRFI. Saat fitur ini dijalankan, aplikasi mengeksekusi fungsi cari_link pada dengan parameter sebuah URL untuk memulai proses crawling tahap pertama, dilanjutkan dengan fungsi isi_semua_link untuk melakukan crawling tahap kedua. Kemudian aplikasi akan menginjeksikan script RFI ke dalam link yang telah didapatkan dengan menggunakan fungsi replace_param_xss_rfi. Dilanjutkan dengan fungsi search_form dan search_post_form untuk mendapatkan dan menginjeksi form yang terdapat pada URL. Fungsi terakhir yang dijalankan adalah fungsi eval untuk menentukan apakah suatu URL memiliki celah keamanan terhadap RFI atau tidak.
Gambar 7. Proses Pencarian Celah Keamanan XSS Uji coba ini dilakukan dengan dengan cara memasukkan sebuah URL ke dalam textbox pada antarmuka aplikasi, kemudian menekan tombol scan. Aplikasi akan memulai proses pencarian celah keamanan terhadap XSS. Setelah proses selesai tekan tombol report untuk menampilkan hasil pencarian celah keamanan.
C.
D.
Implementasi Fitur Username Enumeration Lapisan logika pada fitur ini diimplementasikan pada class ModifyLink. Pada class ini terdapat fungsi username_enumeration yang digunakan untuk melakukan proses percobaan login secara berulang dengan menggunakan daftar username dan password yang dibaca dari file teks bernama username.txt.
Gambar 8. Pengujian Manual XSS Untuk membuktikan bahwa aplikasi telah berjalan sebagaimana mestinya, maka dilakukan pengecekan secara manual terhadap link yang dinyatakan memiliki celah keamanan oleh aplikasi. Parameter keberhasilan uji coba ini adalah pada saat dilakukan pengecekan secara manual, link yang dinyatakan vulnerable oleh aplikasi valid. Proses pencarian bisa dilihat pada Gambar 7, sementara hasil pengujian manual bisa dilihat pada Gambar 8. B.
Uji Coba Pencarian Celah Keamanan terhadap SQL Injection Uji coba ini dilakukan dengan dengan cara memasukkan sebuah URL ke dalam textbox pada antarmuka aplikasi, kemudian menekan tombol scan. Aplikasi akan memulai proses pencarian celah keamanan terhadap SQL Injection.
5 Setelah proses selesai tekan tombol report menampilkan hasil pencarian celah keamanan.
untuk
Gambar 12. Pengujian Manual RFI
Gambar 9. Proses Pencarian Celah Keamanan SQL Injection Untuk membuktikan bahwa aplikasi telah berjalan sebagaimana mestinya, maka dilakukan pengecekan secara manual terhadap link yang dinyatakan memiliki celah keamanan oleh aplikasi. Parameter keberhasilan uji coba ini adalah pada saat dilakukan pengecekan secara manual, link yang dinyatakan vulnerable oleh aplikasi valid. Proses pencarian bisa dilihat pada Gambar 9, sementara hasil pengujian manual bisa dilihat pada Gambar 10.
Untuk membuktikan bahwa aplikasi telah berjalan sebagaimana mestinya, maka dilakukan pengecekan secara manual terhadap link yang dinyatakan memiliki celah keamanan oleh aplikasi. Parameter keberhasilan uji coba ini adalah pada saat dilakukan pengecekan secara manual, link yang dinyatakan vulnerable oleh aplikasi valid. Proses pencarian bisa dilihat pada Gambar 11, sementara hasil pengujian manual bisa dilihat pada Gambar 12. D.
Uji Coba Username Enumeration Uji coba ini dilakukan dengan dengan cara memasukkan sebuah URL ke dalam textbox pada antarmuka aplikasi, kemudian menekan tombol scan.
Gambar 10. Pengujian Manual SQL Injection C.
Uji Coba Pencarian Celah Keamanan terhadap RFI Uji coba ini dilakukan dengan dengan cara memasukkan sebuah URL ke dalam textbox pada antarmuka aplikasi, kemudian menekan tombol scan. Aplikasi akan memulai proses pencarian celah keamanan terhadap RFI. Setelah proses selesai tekan tombol report untuk menampilkan hasil pencarian celah keamanan.
Gambar 13. Proses Username Enumeration
Gambar 14. Pengujian Manual Username Enumeration Gambar 11. Proses Pencarian Celah Keamanan RFI
Untuk membuktikan bahwa aplikasi telah berjalan sebagaimana mestinya, maka dilakukan pengecekan secara manual untuk melakukan login dengan menggunakan username dan password yang telah dinyatakan berhasil login
6 oleh aplikasi. Parameter keberhasilan uji coba ini adalah pada saat dilakukan pengecekan secara manual, login berhasil dilakukan. Proses pencarian bisa dilihat pada Gambar 13, sementara hasil pengujian manual bisa dilihat pada Gambar 14. E.
Uji Coba Pengaturan Proxy Pengaturan proxy dilakukan dengan menekan tombol proxy settings untuk menampilkan form pengaturan proxy. Pengguna harus mengisikan host, port, username, dan password untuk mengakses proxy di dalam textbox yang telah disediakan lalu menekan tombol oke.
b. Aplikasi bisa memilah data yang terdapat pada file HTML untuk keperluan proses scan dengan menggunakan library Jsoup. c. Aplikasi bisa melakukan injeksi script SQL Injection, XSS, dan RFI ke dalam file HTML dengan cara memodifikasi link dan form yang didapatkan dari proses crawling. d. Serangan SQL Injection, XSS, dan RFI dapat dihindari dengan cara melakukan sanitasi terhadap masukan dari pengguna. e. Waktu yang dibutuhkan untuk melakukan proses scan bergantung pada jumlah link yang terdapat pada website. UCAPAN TERIMA KASIH Penulis M.C.K. mengucapkan terima kasih kepada Tuhan Yang Maha Esa, kedua orangtua dan keluarga penulis, dosen pembimbing, dosen dan kepala jurusan Teknik Informatika, kerabat-kerabat dekat, serta berbagai pihak yang telah membantu penulis dalam menyelesaikan Tugas Akhir ini. DAFTAR PUSTAKA [1]
Barnett, R. Web Hacking Incident Database [Internet]. 2011 [diperbaharui pada April 2012; disitat pada 23 September 2011]. Bisa diakses pada : http://projects.webappsec.org/w/page/13246995 /Web-Hacking-Incident-Database#nbspTopAttackMethodsAllEntries.
[2]
Siddharth, S. Doshi, P. Five Common Web Application Vulnerabilities [Internet]. 2010 [diperbaharui pada 2 November 2010; disitat pada 23 September 2011]. Bisa diakses pada : http://www.symantec.com/connect/articles/five-common-webapplication-vulnerabilities.
[3]
Clarke, Justin. SQL Injection Attacks and Defense. United States of America : Syngress Publishing, Inc, 2009.
[4]
Grossman, Jeremiah., Hansen, Robert., D. Petkov, Petko., Rager, Anton. Cross Site Scripting Attacks: XSS Exploits and Defense. United States of America : Syngress Publishing, Inc, 2007.
[5]
Auger, R. Remote File Inclusion [Internet]. 2010 [diperbaharui pada Januari 2010; disitat pada 9 April 2012]. Bisa diakses pada : http://projects.webappsec.org/w/page/13246955/Remote%20File%20 Inclusion.
[6]
OWASP. Testing for User Enumeration [Internet]. 2009 [diperbaharui pada 3 Februari 2009; disitat pada 9 April 2012]. Bisa diakses pada : https://www.owasp.org/index.php/Testing_for_user _enumeration_(OWASP-AT-002).
Gambar 15. Pengaturan Proxy
Gambar 16. Proses Scan Menggunakan Proxy Parameter keberhasilan uji coba ini adalah berhasil melakukan koneksi melalui jaringan yang dibatasi proxy. Proses pengaturan proxy bisa dilihat pada Gambar 15, sementara proses scanning menggunakan proxy bisa dilihat pada Gambar 16. VI. KESIMPULAN Kesimpulan yang bisa ditarik dari Tugas Akhir ini adalah sebagai berikut: a. Proses crawling dilakukan dengan membaca link yang terdapat pada suatu halaman web, kemudian menyimpannya ke dalam daftar link. Proses pembacaan dilakukan sedalam 2 tingkat.