JURNAL TEKNIK POMITS Vol. 2, No. 1, (2013) ISSN: 2337-3539 (2301-9271 Print)
1
Perancangan Web Application Honeypot untuk Menggali Informasi Peretas Abdurrazak Baihaqi, Ary Mazharuddin Shiddiqi, S.Kom., M.Comp.Sc., dan Baskoro Adi Pratomo, S.Kom., M.Kom. Jurusan Teknik Informatika, Fakultas Teknologi Informasi, Institut Teknologi Sepuluh Nopember (ITS) Jl. Arief Rahman Hakim, Surabaya 60111 Indonesia e-mail:
[email protected]
Abstrak— Pertumbuhan internet yang pesat dan penggunaan aplikasi web yang semakin populer menyebabkan aplikasi web sering kali menjadi target utama serangan para peretas. Untuk mengamati perilaku dan serangan yang dilakukan oleh peretas, dibuatlah sebuah sistem yang disebut dengan Honeypot. Honeypot adalah sebuah sistem yang dibuat untuk menyimulasikan layanan yang berjalan di atas sebuah server dengan tujuan sebagai umpan untuk mengalihkan atau menarik perhatian peretas untuk menyerang sistem tersebut. Honeypot dapat digunakan untuk kepentingan riset seperti mengumpulkan data, maupun untuk kepentingan produksi karena honeypot dapat berfungsi sebagai umpan untuk melindungi sistem yang digunakan untuk kepentingan produksi. Pada tugas akhir ini akan dibangun sebuah low-interaction web application honeypot yang dapat menyimulasikan output untuk serangan SQL injection dan Cross-Site Scripting. Dari hasil uji coba, sistem ini dapat menyimulasikan output serangan reflected Cross-Site Scripting dan serangan SQL injection yang menggunakan teknik eksploitasi UNION-based untuk skenario ekstraksi data. Selain itu sistem ini dapat digunakan untuk mengumpulkan informasi mengenai peretas melalui eksekusi kode JavaScript pada web browser. Kata Kunci— Cross-Site Scripting, Low-interaction honeypot, SQL Injection.
I. PENDAHULUAN
P
ertumbuhan internet yang pesat dan penggunaan aplikasi web yang semakin populer menyebabkan aplikasi web sering kali menjadi target utama serangan para peretas. Survei yang dilakukan oleh OWASP [1] melansir beberapa serangan yang umum ditujukan pada aplikasi web. Beberapa serangan yang tercatat menduduki peringkat teratas antara lain XSS (Cross-Site Scripting) dan SQL injection yang dilakukan dengan memanfaatkan kelemahan aplikasi web yang tidak melakukan validasi dan sanitasi pada data masukan. Seranganserangan terhadap aplikasi web yang dilakukan oleh peretas membuat beberapa pihak menginisiasi pembuatan sebuah sistem yang dirancang khusus untuk mengamati perilaku dan serangan yang dilakukan oleh peretas. Sistem ini selanjutnya dikenal dengan nama honeypot. Honeypot adalah sebuah sistem yang dirancang sebagai umpan untuk menarik perhatian peretas agar melakukan serangan pada sistem tersebut. Data yang dikumpulkan oleh honeypot dapat digunakan untuk mengamati pola serangan yang dilakukan oleh peretas. Secara umum berdasarkan tingkat
interaksinya dengan peretas, honeypot dibagi menjadi dua jenis, yakni high-interaction honeypot dan low-interaction honeypot [2]. Low-interaction honeypot memiliki tingkat interaksi yang terbatas, karena hanya mengemulasikan layanan tertentu pada sebuah sistem. Sebaliknya, high-interaction honeypot memiliki tingkat interaksi yang tinggi karena menggunakan sistem dan layanan sebenarnya untuk diakses oleh peretas. Hal ini menyebabkan resiko jatuhnya high-interaction honeypot ke tangan peretas memiliki kemungkinan lebih besar jika dibandingkan dengan low-interaction honeypot. Karena honeypot dirancang sebagai umpan untuk menarik perhatian peretas, honeypot juga memiliki potensi untuk memberikan reaksi terhadap serangan yang dilakukan oleh peretas. Salah satunya adalah untuk mengumpulkan informasiinformasi tentang identitas peretas. Pada tugas akhir ini akan dibangun sebuah low-interaction web application honeypot yang dapat menyimulasikan output untuk serangan SQL injection dan Cross-Site Scripting, dengan fitur tambahan menggali informasi mengenai peretas dengan memanfaatkan eksekusi kode JavaScript pada web browser. II. URAIAN PENELITIAN A. Honeypot Honeypot adalah sebuah server atau sistem yang digunakan sebagai umpan untuk mengumpulkan informasi tentang penyerang atau penyusup yang masuk ke dalam sistem kita. Honeypot dapat dipasang di dalam atau di luar firewall DMZ (Demilitarized Zone), meskipun pada umumnya honeypot dipasang di dalam DMZ untuk kemudahan akses dan kontrol. Honeypot juga bisa disebut sebagai varian dari sebuah IDS (Intrusion Detection System) yang fungsinya lebih difokuskan untuk pengumpulan informasi dan umpan untuk menipu peretas [3]. Pada tugas akhir ini akan dibangun web application honeypot yang bersifat low-interaction. B. JavaScript JavaScript adalah bahasa scripting yang dikembangkan oleh Netscape. JavaScript adalah bahasa scripting dinamis yang mendukung pembangunan objek secara prototype based. JavaScript dapat digunakan untuk pemrograman yang bersifat prosedural maupun berorientasi obyek [4]. Karena JavaScript bersifat client-side, JavaScript dapat dimanfaatkan untuk menggali informasi mengenai client ketika
JURNAL TEKNIK POMITS Vol. 2, No. 1, (2013) ISSN: 2337-3539 (2301-9271 Print) kode JavaScript dieksekusi pada web browser client [5]. Pada tugas akhir ini, JavaScript akan disisipkan pada response yang dikirim oleh honeypot. C. Python WSGI WSGI (Web Server Gatway Interface) adalah sebuah spesifikasi yang mendeskripsikan bagaimana sebuah web server berkomunikasi dengan aplikasi web, dan bagaimana aplikasi web dapat digunakan secara berantai dan bersamaan untuk memproses sebuah request [6]. Interface WSGI memiliki dua sisi, yakni sisi server dan sisi aplikasi. Sisi server akan memanggil sebuah objek yang disediakan oleh sisi aplikasi. Bagaimana objek tersebut diproses menjadi tanggung jawab sisi server. Pada tugas akhir ini, sisi server digunakan untuk menangani penerimaan request dan pengiriman response kepada client, sedangkan sisi aplikasi digunakan untuk memproses request yang diterima melalui sisi server. D. SQL Injection SQL injection adalah sebuah serangan dengan cara memasukkan sebuah kode ke dalam sebuah string yang akan dieksekusi oleh aplikasi database server. Secara umum, proses injeksi sintaks SQL bekerja dengan cara menutup sebagian dari query SQL dan menambahkan perintah sintaks SQL yang baru [7]. SQL injection terjadi apabila: 1. Data yang digunakan sebagai parameter query SQL berasal dari sumber yang tidak terpercaya, misalnya user-input 2. Data tersebut dapat digunakan untuk membentuk query SQL secara dinamis Tugas akhir ini akan menyimulasikan output berupa ekstraksi data yang dihasilkan oleh serangan SQL injection yang mekanismenya berasal dari input pengguna dengan teknik eksploitasi UNION query-based. E. Cross-Site Scripting Cross-Site Scripting adalah sebuah serangan yang terjadi ketika peretas memanfaatkan aplikasi web untuk menjalankan kode tertentu, umumnya dalam bentuk browser side script untuk menyerang pengguna lainnya. Penyebab munculnya serangan ini ialah aplikasi web yang menampilkan input dari pengguna ke dalam output pada browser tanpa adanya proses validasi. Peretas dapat memanfaatkan kelemahan tersebut untuk menyisipkan sebuah kode program berbahaya yang ditujukan untuk korban. Kemudian browser korban akan mengeksekusi kode program yang disisipkan peretas tersebut [8]. Pada awal perkembangannya, terdapat dua tipe XSS, yakni Stored XSS dan Reflected XSS. Pada tahun 2005, mulai dikenal tipe XSS yang ketiga, yaitu DOM based XSS. Tugas akhir ini akan menyimulasikan output untuk serangan reflected XSS dengan memanfaatkan input dari peretas yang disertakan dalam halaman web yang ditampilkan. F. MaxMind GeoIP2 API MaxMind GeoIP2 API adalah API yang dibuat oleh MaxMind untuk mendeteksi lokasi geografis sebuah IP address [9]. Informasi yang dapat diakses memanfaatkan API ini antara lain informasi mengenai negara asal IP address, posisi lintang dan bujur secara geografis, dan informasi ISP dari IP address
2
Honeypot Klasifikasi HTTP Request
Deteksi SQL Injection & Cross-Site Scripting
Simulasi SQL Injection & Cross-Site Scripting
Pencatatan request HTTP Database
Web report HTTP request Report
Fingerprint report
Gambar 1 Arsitektur Umum Sistem
tersebut. Pada tugas akhir ini, MaxMind GeoIP2 API akan digunakan untuk melengkapi informasi yang telah dikumpulkan oleh eksekusi kode JavaScript pada web browser. III. DESAIN SISTEM A. Deskripsi Umum Pada Tugas Akhir ini akan dibangun sebuah web application honeypot yang menyimulasikan beberapa vulnerability pada aplikasi web, yang dapat dieksploitasi dengan serangan SQL injection dan Cross-Site Scripting. Aplikasi ini bekerja layaknya sebuah aplikasi web. Apabila honeypot menerima request HTTP yang terindikasi sebagai sebuah serangan, honeypot akan mengirimkan response kepada client sesuai dengan hasil identifikasi serangan yang dilakukan oleh client. B. Arsitektur Sistem Dalam tugas akhir ini akan dirancang dan diaplikasikan sebuah web application honeypot yang dapat menyimulasikan output bagi serangan SQL injection dan Cross-Site Scripting. Dimana secara garis besar memiliki rancangan arsitektur sistem yang dapat dilihat pada Gambar 1. Dari Gambar 1 di atas, dapat diketahui bahwa sistem berada memiliki dua buah bagian, yakni honeypot dan web report. Honeypot akan digunakan untuk mengumpulkan data dan menyimulasikan vulnerability yang dapat dieksploitasi dengan serangan SQL injection dan Cross-Site Scripting. Sedangkan web report digunakan untuk melihat laporan data yang berhasil dikumpulkan oleh honeypot. Terdapat dua fitur report yang dapat diakses, yakni request report dan fingerprint report. Request report adalah report mengenai request HTTP yang dikirim oleh peretas, sedangkan fingerprint report adalah report mengenai data-data yang berhasil dikumpulkan oleh eksekusi kode JavaScript pada web browser peretas. C. Alur Sistem Alur sistem untuk sistem dimulai ketika honeypot menerima request HTTP dari peretas. Kemudian request HTTP tersebut diklasifikasi berdasarkan jenis serangan yang dapat diidentifikasi. Setelah jenis serangan tersebut diidentifikasi, selanjutnya honeypot menyimulasikan output untuk serangan
JURNAL TEKNIK POMITS Vol. 2, No. 1, (2013) ISSN: 2337-3539 (2301-9271 Print)
3
Mulai
Peretas melakukan serangan menuju honeypot. Menerima HTTP request
Peretas
Klasifikasi request_path untuk SQL injection
Pengguna melihat data serangan yang dicatat oleh honeypot melalui web report.
Honeypot
Internet
request_path menuju halaman lain
request_path menuju halaman simulasi SQL injection
Klasifikasi request_path untuk XSS
Honeypot menerima serangan dan mengirimkan respon berupa hasil simulasi output serangan. Serangan dicatat dalam database. request_path menuju halaman lain
Gambar 3 Diagram blok alur sistem honeypot
request_path menuju halaman simulasi XSS
Identifikasi serangan SQL injection
Identifikasi serangan XSS
Serangan SQL injection dikenali
Serangan XSS dikenali
Serangan XSS tidak dikenali
Serangan SQL injection tidak dikenali
Simulasi output untuk serangan SQL injection
Simulasi output untuk serangan tidak dikenal
Pengguna
Buat response halaman tidak ditemukan
Simulasi output untuk serangan XSS
C. Implementasi Simulasi Output Serangan SQL injection Untuk menyimulasikan output yang sesuai dengan serangan SQL injection yang teridentifikasi, dilakukan pengambilan parameter dan klausa FROM dari QUERY_STRING. Parameter dan klausa tersebut akan dipasangkan dan digunakan sebagai key untuk mengakses value dictionary yang mendefinisikan output untuk parameter SQL injection tertentu.
Pencatatan HTTP request
Pengiriman HTTP response
Selesai
Gambar 2 Diagram Alir Pemrosesan HTTP Request
tersebut. Honeypot kemudian mencatat request HTTP dari peretas, dan mengirim output hasil simulasi sebagai response HTTP menuju peretas. Alur sistem untuk lebih jelasnya dapat dilihat pada Gambar 2. Gambaran lebih jelas dari alur jalannya sistem honeypot yang dibangun dapat dilihat pada Gambar 3. IV. IMPLEMENTASI A. Implementasi Klasifikasi Request Path dari HTTP Request Proses pertama dalam sistem ini adalah mengklasifikasi atribut REQUEST_PATH yang terdapat pada request HTTP. Implementasi dari proses ini, dimulai dari pengambilan atribut REQUEST_PATH dari request HTTP yang dikirim oleh client. Atribut REQUEST_PATH digunakan untuk menentukan halaman web yang akan ditampilkan pada web browser. Apabila pada atribut REQUEST_PATH tidak ditemukan nilai yang sesuai dengan halaman yang diminta, maka yang akan ditampilkan pada pengguna adalah halaman web “not found”. B. Implementasi Pengidentifikasian Serangan SQL injection Apabila atribut REQUEST_PATH ditujukan untuk mengakses konten dari halaman artikel, akan dilakukan pengecekan atribut QUERY_STRING untuk mengidentifikasi apakah terdapat serangan SQL injection yang dikenali oleh honeypot. Proses pengidentifikasian menggunakan sekumpulan string regular expression yang mendefinisikan SQL injection. Jika ditemukan adanya indikasi SQL injection yang dikenali, atribut QUERY_STRING yang sesuai dengan definisi regular expression akan digunakan sebagai input untuk menentukan output yang sesuai dengan query SQL yang dikenali.
D. Implementasi Pengidentifikasian dan Simulasi Output XSS Proses identifikasi dan simulasi output untuk XSS dilakukan dengan cara membandingkan nilai atribut QUERY_STRING dengan sekumpulan nilai yang telah didefinisikan sebagai nilai yang valid. Apabila pada atribut QUERY_STRING terdapat nilai yang tidak sesuai dengan nilai yang telah didefinisikan, maka nilai atribut QUERY_STRING akan kembali disisipkan ke dalam response yang akan dikirim kembali menuju browser peretas. E. Implementasi Pencatatan Request HTTP Pada proses ini, Request HTTP yang dikirim oleh peretas akan dicatat dalam database. Request HTTP yang dikirim oleh peretas akan dicatat dalam tabel request_log. Informasi request HTTP yang dicatat oleh honeypot antara lain alamat IP pengirim request, metode yang digunakan untuk mengirim request, atribut REQUEST_PATH, atribut QUERY_STRING, validitas request HTTP, dan waktu pencatatan request. Sebuah request HTTP dianggap valid apabila atribut REQUEST_PATH atau QUERY_STRING pada request tersebut sesuai dengan nilai atribut yang dianggap valid oleh honeypot. Untuk request HTTP yang berisi informasi yang didapatkan dari eksekusi kode JavaScript akan dicatat dalam tabel fingerprint. Sebelum dicatat, request HTTP tersebut akan melalui proses decoding untuk mendapatkan informasi yang akan dicatat. Informasi yang dicatat antara lain alamat IP peretas, jenis web browser dan jenis sistem operasi yang digunakan peretas, beserta lokasi geografis dari IP peretas. F. Implementasi Kode JavaScript untuk Menggali Informasi Pada proses ini kode JavaScript yang disisipkan pada response HTTP akan dieksekusi pada web browser peretas. Melalui eksekusi kode JavaScript tersebut, diperoleh data mengenai jenis sistem operasi dan web browser yang digunakan oleh peretas. Data-data tersebut selanjutnya akan dikirim dalam bentuk request HTTP.
JURNAL TEKNIK POMITS Vol. 2, No. 1, (2013) ISSN: 2337-3539 (2301-9271 Print)
4
Gambar 7 Tampilan Halaman Artikel
Gambar 4 Uji coba pengiriman request REQUEST_PATH menuju halaman utama
HTTP
dengan
atribut
Gambar 5 Tampilan Halaman Utama honeypot
Gambar 8 Uji Coba Pengiriman Request HTTP dengan REQUEST_PATH Menuju Halaman Kontributor
Gambar 9 Tampilan Halaman Kontributor
Gambar 6 Pengiriman request HTTP dengan atribut REQUEST_PATH menuju halaman artikel
V. UJI COBA DAN EVALUASI A. Uji Coba Klasifikasi Request HTTP Proses pertama yang dilakukan aplikasi ketika menerima kiriman HTTP request adalah melakukan klasifikasi terhadap request tersebut. Proses ini bertujuan untuk menentukan bagaimana request tersebut akan diproses oleh honeypot. Proses klasifikasi dilakukan oleh honeypot dengan cara memeriksa atribut REQUEST_PATH pada request HTTP yang dikirim oleh peretas. Proses klasifikasi dilakukan untuk menentukan halaman mana yang akan dikembalikan sebagai output. Pada Gambar 4 dapat dilihat proses pengiriman request HTTP dengan berbagai atribut REQUEST_PATH beserta tampilan output untuk masing-masing request HTTP.
Gambar 10 Pengiriman Request HTTP dengan Query SQL pada Atribut QUERY_STRING
B. Uji Coba Simulasi Output Serangan SQL Injection dan Cross-Site Scripting Untuk setiap request HTTP dengan atribut REQUEST_PATH menuju halaman artikel, maka atribut QUERY_STRING pada request HTTP akan diidentifikasi apakah menunjukkan adanya indikasi serangan SQL injection yang dikenali. Proses identifikasi dilakukan dengan memanfaatkan regular expression. Jika ditemukan adanya query SQL yang sesuai dengan regular expression yang telah didefinisikan, output untuk query SQL tersebut akan ditampilkan pada halaman web. Jika atribut QUERY_STRING tidak berhasil diidentifikasi, maka pesan error akan ditampilkan pada halaman web.
JURNAL TEKNIK POMITS Vol. 2, No. 1, (2013) ISSN: 2337-3539 (2301-9271 Print)
Gambar 11 Output query SQL yang disimulasikan pada tampilan halaman artikel
5
Gambar 15 Request HTTP Dicatat dalam Tabel Request_log
Gambar 16 Hasil Eksekusi Kode JavaScript dalam Bentuk Request HTTP Gambar 12 Request HTTP Menuju Halaman Kontributor dengan Nilai Atribut QUERY_STRING Abnormal Gambar 17 Informasi Hasil Eksekusi Kode JavaScript Dicatat dalam Tabel Fingerprint
Gambar 18 Kode JavaScript disisipkan pada halaman web
Gambar 13 Tampilan XSS Pada Pesan Error yang Ditampilkan Halaman Kontributor
Gambar 19 Hasil Eksekusi Kode JavaScript yang Dikirim dalam Bentuk Request HTTP
Gambar 14 Request HTTP Dikirim oleh Web Browser
Untuk setiap request HTTP dengan atribut REQUEST_PATH menuju halaman kontributor, maka parameter id pada atribut QUERY_STRING request HTTP akan diidentifikasi apakah parameter tersebut adalah parameter yang dikenali. Jika parameter id pada atribut QUERY_STRING tidak dikenali, maka nilai dari parameter tersebut akan ditampilkan kembali sebagai pesan error pada halaman web. C. Uji Coba Pencatatan Request HTTP Proses pencatatan request HTTP dapat dikelompokkan menjadi dua kategori. Kategori pertama adalah pencatatan request HTTP secara umum pada tabel request_log. Kategori kedua adalah pencatatan informasi hasil eksekusi kode JavaScript pada tabel fingerprint. Proses tersebut dapat dilihat pada Gambar 14.
D. Uji Coba Penggalian Informasi Menggunakan Kode JavaScript Setiap response HTTP yang dikirim oleh honeypot akan disisipkan kode JavaScript. Kode tersebut akan dieksekusi pada web browser peretas ketika halaman web di load oleh web browser. Pada Gambar 18 di atas, dapat dilihat bahwa kode JavaScript disisipkan pada halaman web yang sedang ditampilkan oleh web browser dengan nama booststrap.responsive.js untuk menghindari kecurigaan peretas. Kode JavaScript akan mengeksekusi perintah untuk mengambil beberapa property tertentu pada web browser. Property tersebut digunakan untuk mengetahui jenis web browser dan system operasi yang digunakan oleh peretas. Nilai dari property tersebut akan dikirim menuju honeypot dalam bentuk request HTTP.
JURNAL TEKNIK POMITS Vol. 2, No. 1, (2013) ISSN: 2337-3539 (2301-9271 Print) VI. 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 dapat disimpulkan bahwa honeypot yang dibangun telah memenuhi semua kebutuhan dan menjalankan perannya dengan baik dalam menyimulasikan output bagi serangan SQL injection yang menggunakan teknik ekploitasi UNION-based dengan skenario ekstraksi data dan Reflected Cross-Site Scripting. 2) Dari hasil uji coba dapat disimpulkan bahwa honeypot yang dibangun dapat digunakan sebagai sarana mengumpulkan informasi tentang peretas melalui eksekusi kode JavaScript pada web browser. UCAPAN TERIMA KASIH Penulis mengucapkan terima kasih kepada Tuhan Yang Maha Esa,kedua orangtua dan keluarga penulis, kedua dosen pembimbing, seluruh dosen dan kepala jurusan Teknik Informatika, teman-teman Teknik Informatika angkatan 2010, serta berbagai pihak yang telah membantu penulis dalam menyelesaikan Tugas Akhir ini. DAFTAR PUSTAKA [1] "OWASP Top 10 2013-Top 10," [Online]. Available: https://www.owasp.org/index.php/Top_10_2013-Top_10. [Accessed 23 June 2014]. [2] L. Spitzner, "tracking-hackers.com," [Online]. Available: http://www.tracking-hackers.com/papers/honeypots.html. [Accessed 23 June 2014]. [3] L. R. Even, "SANS Security Resources," [Online]. Available: http://www.sans.org/security-resources/idfaq/honeypot3.php. [Accessed 23 June 2014]. [4] "Mozilla Developer Network," [Online]. Available: https://developer.mozilla.org/enUS/docs/Web/JavaScript/About_JavaScript. [Accessed 24 June 2014]. [5] J. Grossman, "Whitehat Security Blog," [Online]. Available: http://blog.whitehatsec.com/introducing-the-i-know-series/. [Accessed 24 June 2014]. [6] P. J. Eby, "PEP 333 -- Python Web Server Gateway Interface v1.0," [Online]. Available: http://legacy.python.org/dev/peps/pep-0333/. [Accessed 24 June 2014]. [7] "Microsoft TechNet Library," [Online]. Available: http://technet.microsoft.com/enus/library/ms161953%28v=sql.105%29.aspx. [Accessed 24 June 2014]. [8] "OWASP," [Online]. Available: https://www.owasp.org/index.php/Cross-site_Scripting_%28XSS%29. [Accessed 24 June 2014]. [9] "Maxmind Developer Site," [Online]. Available: http://dev.maxmind.com/geoip/. [Accessed 22 March 2014].
6