Karya tulis sebagai salah satu syarat
untuk kelengkapan nilai Mata Kuliah Sistem Keamanan Lanjut
SETYORINI
NIM : 23203018
Program Studi Teknik Elektro
EVOLUSI CROSS SITE
SCRIPTING (XSS) : OVERVIEW
Penggunaan cookie dalam
aplikasi web dinamis telah banyak dijumpai, diantaranya untuk menyimpan
asosiasi unik dari account pengguna. Selain Yahoo, Nestcape, beberapa situs
perdagangan eletronik juga menggunakan cookie
untuk menempatkan identitas unik pengguna bagi keperluan autentifikasi maupun
autorisasi - pada situs yang menggunakan skenario log on, biasanya digunakan dua token autentifikasi, yaitu nama
pengguna dan kata sandi (password),
kedua token ini kemudian disimpan dalam cookie
untuk memudahkan identifikasi atas banyaknya pengguna, juga untuk keperluan
pelakuan batas sesi koneksi ke situs tersebut.
Mungkin penggunaan teknik Cross
Site Scripting (XSS), merupakan teknik yang banyak digunakan bagi keperluan
mendapatkan cookie ini. Begitu cookie didapatkan, si penyerang ini akan
dapat memuat nilai cookie curian
tersebut, lalu mengarahkan browsernya ke situs aplikasi yang menggunakan cookie tersebut, dan mengakses account korban, tanpa perlu menghabiskan
waktu untuk memecahkan sandi dan enkripsi atas kombinasi pengguna dan kata
sandi. Memang ada beberapa teknik lain seperti teknik DNS poisoning cache, memanfaatkan kelemahan browser di klien dan
rekayasa sosial untuk mengelabui pengguna agar menginstal trojan horse,
hanya teknik tersebut kurang begitu popular dibandingkan dengan XSS.
Tulisan ini akan membahas
tentang Cross Site Scripting meliputi pengertian dari XSS, anatomi serangan
XSS, dan metode serangan XSS, dan beberapa saran yang berhubungan dengan
pengamanan atas serangan XSS ini.
EVOLUSI CROSS SITE
SCRIPTING (XSS) : OVERVIEW
Setyorini
NIM : 23203018
Institut Teknologi Bandung
Dosen yang
bersangkutan
Budi Rahardjo
(...............................)
Banyak aplikasi-aplikasi berbasis web sekarang ini yang menggunakan cookies pada hal yang berkaitan dengan account unik milik seorang pengguna.
Beberapa aplikasi e-mail berbasis web popular seperti :Hotmail, Yahoo dan
Nescape termasuk di dalamnya, dimana sekitar 250 juta orang di dunia
menggunakan aplikasi tersebut melalui Internet. Pada sisi lain seperti
situs-situs perdagangan, perbankan dan pelelangan, cookies digunakan untuk keperluan autentifkasi dan otorisasi.
Pada sebuah skenario log in
aplikasi berbasis web yang umum, dua token autentifikasi dpertukarkan : username & password yang tersimpan dalam sebuah cookies yang kemudian digunakan sebagai token autentifikasi. Mudah
dipahami dalam hal ini jika sebuah sesi user sangat rawan terhadap serangan
jika seseorang dapat menangkap cookies yang
dipakai.
Skema popular dalam hal pencurian cookies pada jaringan Internet menjadi
bagian dalam kerawanan serangan XSS (Cross-Site
Scripting). Sekali cookie didapatkan,
penyerang aktif dapat mencuri isi dalam cookie,
mengarahkan browser pada aplikasi-aplikasi berbasis web (e-mail) dan dapat mengakses account
tanpa perlu menghabiskan waktu untuk melakukan cracking untuk mencari kombinasi username & password yang
cocok. Hal ini membawa implikasi yang buruk tergantung dengan aplikasi yang
sedang dibuka :penyerang dapat membaca surat-surat korbannya, mengakses account di bank dan menulis check untuk
melakukan pembayaran secara online atau membeli barang menggunakan cached retail credit information pada
situs seperti : Amazon & eBay. Untuk dapat melakukan hal ini, seorang
penyerang harus mendapatkan sesi pengguna yang masih dalam kondisi aktif. Untuk
itu seorang penyerang yang potensial akan memerlukan lubang otorisasi akses
pada XSS dan CGI pada web server
Berdasarkan paparan di atas diperlukan suatu setidaknya pengetahuan
umum mengenai kemungkinan penyerangan dengan melakukan pencurian cookies di
Internet, metode-metode yang digunakan, deteksi kerawanan sistem dan pencegahan
dari serangan.
Tujuan dari karya tulis ini adalah memberikan penjelasan
mengenai pengertian XSS, anatomi serangan, metode-metode yang mungkin, cara
untuk mencari titik rawan dalam suatu aplikasi dan cara untuk mencegah adanya
serangan.
Karya tulis ini memberikan gambaran terhadap
hal-hal umum yang terjadi bukan kasus-per kasus.
Metodologi yang digunakan adalah :
Studi literatur, sebagai acuan dalam membuat
gambaran sngkat mengenai serangan XSS. Bahan literatur yang diperlukan berupa sumber
dari Internet
Dunia internet saat ini mengenal banyak
jenis serangan yang dilakukan dan sering merugikan. Jenis-jenis serangan
terjadi selama ini dapat dikategorikan dalam empat kategori berdasarkan
kriteria target serangan yaitu :
•
Interruption: serangan atas ketersediaan informasi. Penyerang mengganggu dengan
melakukan penghentian aliran informasi kepada klien.
•
Interception: serangan atas confidentiality. Mengakses informasi yang bukan
menjadi haknya adalah tujuan dari serangan ini. Informasi dapat digunakan untuk
hal-hal yang merugikan pihak lain.
•
Modification: serangan atas integrasi suatu informasi. Mengakses informasi dan
dapat juga mengubah isi informasi
menjadi sasaran serangan ini.
•
Fabrication: serangan terhadap proses autentifikasi. Membangkitkan objek palsu
yang dikenal sebagai bagian dari sistem merupakan tujuan dari serangan jenis.
Gambar
II.1 Jenis-jenis serangan
Dari sisi motif tindakan, serangan
yang terjadi dapat dikategorikan
berdasarkan jenis tindakan yang dilakukan, dapat dikelompokkan sebagai berikut
:
-
Ancaman Pasif
Serangan yang dilakukan lebih bersifat mengamati perilaku sasaran, pada
tahap ini penyerang berusaha mengenali setiap bagian sasaran. Tindakan yang
dilakukan antara lain :
o
Melepaskan serangkaian pesan ke target untuk mengetahui respon target,
dan mendapatkan informasi awal tentang target. Deteksi port merupakan salah
satu contohnya.
o
Analisa traffik, dilakukan untuk mengetahui pola trafik data pada target.
-
Ancaman aktif
Serangan yang dilakukan
telah ditujukan untuk berdampak langsung pada target. Beberapa tindakan
serangan yang banyak dikenal merugikan merupakan contoh dari tindakan ini.
Berikut beberapa diantaranya :
o Masquerade, penyerangan dikenali sebagai bagian dari alias identitas
yang berwenang.
o Reply
o Modifikasi isi pesan (Mengubah pesan layanan yang diberikan oleh
sistem)
o Denial of service(Menghilangkan kemampuan sistem untuk memberikan
layanan)
Mekanisme Keamanan adalah mekanisme yang
dirancang untuk mendeteksi, mencegah atau menanggulangi suatu serangan. Tujuan
dari mekanisme ini adalah untuk melindungi sistem atas tiga aspek yaitu
confidentiality, integrity, availiability. Mekanisme keamanan ini antara lain
adalah :
- enkripsi data, dilakukan untuk mencegah data dari pembacaan
oleh pihak yang tidak berwenang. Dalam enkripsi data, data diacak dengan
mekanisme tertentu dan disusun kembali untuk dapat diakses dengan kunci
tertentu.
- Pengendalian akses, dilakukan untuk membagi tingkat kewenangan
dalam aksesbilitas sistem, penggunaan mekanisme log in merupakan salah
satu contoh.
- Deteksi penyusupan, dilakukan dengan memberikan kepandaian pada
sistem untuk mengenali pola-pola serangan kepada sistem.
- Pemulihan gangguan (disaster recovery), dilakukan dengan
memberikan kemungkinan pada sistem untuk tetap dapat beroperasi dan
melakukan layanan penting yang menjadi fungsi sistem setelah terjadi
serangan pada sistem.
XSS
merupakan serangan yang memanfaatkan kemampuan protocol di web, untuk itu perlu
pengenalan terhadap protokol yang digunakan pada aplikasi web. Aplikasi-aplikasi
berbasis web, umumnya menggunakan
protokol : HTTP (Hyper Text Transfer
Protocol ) atau HTTPS (HTTP over Socket Secure Layer), dengan
common port yang biasa dipakai adalah port
no 80 (HTTP) dan 443 (HTTPS
).
Setiap browser web dan server harus berkomunikasi
melalui protokol ini,. Ada tiga versi protocol HTTP ini, dimana ketiganya
memiliki kesamaan struktur dasar. HTTP merupakan protocol yang berkerja dengan
metode request dan respon, yang dapat digambarkan di bawah ini.
Gambar II.2 Metode Request & Respon HTTP
Untuk
lebih mengenal lebih mendalam, terdapat beberapa metode yang dapat dilakukan
sebagai request dalam protocol HTTP. Metode tersebut antara lain ; connect,
delete, get, head, option, post, put, dan trace. Metode di atas difasilitasi
oleh protocol HTTP 1.1. Untuk lebih jelas dapat dilihat dalam table
berikut
Tabel II.1 Metode Request dalam
HTTP /1.1
|
Metode
|
Penjelasan
|
CONNECT
|
Fasilitas baru
dalam HTTP/1.1
Digunakan pada
proxy untuk dapat berganti secara
dinamis ke mode tunnel.
|
DELETE
|
Fasilitas baru dalam HTTP/1.1
Permintaan pada server
asal untuk menghapus sumber yang dinyatakan sebelumnya. Biasanya metode ini
tidak tersedia pada server baru. Tetapi jika tersedia akan memberikan respon
200 OK, jika respon yang diterima 202, berarti permintaan telah diterima
namun belum dieksekusi, jika respon yang dterima 204, artinya bahwa sumber
yang dimaksud tidak ditemukan..
|
GET
|
Menerima informasi yang
diminta dari berkas sistem, jika yang diterima merupakan berkas HTML statis,
maka akan langsung ditampilkan pada browser web, Bila merupakan berkas HTML
dinamis seperti ASP atau PHP, server akan mengeksekusi perintah, dan
mengirimkan keluaran dari perintah tersebut pada browser yang meminta.
|
HEAD
|
HEAD mirip seperti
metode GET, dengan satu perbedaan yaitu tidak merespon dengan data yang
diminta tetapi dalam informasi meta seperti kode respon server, atau tanggal, ini juga dapat digunakan
untuk mengetahui sebuah server web menggunakan perangkat lunak web apa.
|
OPTIONS
|
Permintaan
infomasi tentang opsi komunikasi tersedia pada sumber daya yang diminta. Jika
digunakan tanda “*”, sumber daya dianggap sifatnya umum dan karena itu respon
hanya diberikan bagi metode yang umum. Sebagai contoh penggunaan “*” hanya
memungkinkan empat metode dari opsi komunikasi yaitu GET, HEAD, OPTONS, dan
TRACE.:
OPTIONS * HTTP/1.1
Host: www.example.com
HTTP/1.1 200 OK
Date: Mon, 15 Apr 2002 00:08:32 GMT
Server: WebSTAR/4.2 (Unix) mod_ssl/2.8.6 OpenSSL/0.9.6c
Content-Length: 0
Allow: GET, HEAD, OPTIONS, TRACE
Berikut contoh yang tidak menggunakn tanda “*” :
OPTIONS / HTTP/1.1
Host: www.example.com
HTTP/1.1 200 OK
Date: Mon, 15 Apr 2002 00:07:17 GMT
Server: WebSTAR/4.2 (Unix) mod_ssl/2.8.6 OpenSSL/0.9.6c
Content-Length: 0
Allow: GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS,
PATCH, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK,
UNLOCK, TRACE
Metode-metode
ini dapat cukup berguna kadang kala bagi para hacker untuk mengetahui satu persatu fungsionalitas pada sebuah
situs web.
|
POST
|
Metode post
meminta server untuk menerima informasi yang disertakan dan beraksi
berdasarkan hal tersebut. Metode POST biasanya banyak digunakan ketika CGI
ataupun server side scripting
dilakukan. Dalam metode POST ini juga, sebuah header sah yang berisikan besar
panjang data (Content-length)
dibutuhkan pada tiap permintaan POST.
|
PUT
|
Permintaan yang
disertakan dalam payload disimpan dalam sumber tambahan. Contohnya, Dalam
baris berikut, rangkaian perintah ini akan membuat sebuah berkas yang dikenal
sebagai EXAMPLE dan meletakkan payload
dari permintaan dalam berkas tersebut.
PUT /EXAMPLE HTTP/1.1
Host: 192.168.0.5
Content-Length: 5
Hello there
|
TRACE
|
Mengirimkan
sebuah permintaan untuk pesan balikkembali (loopback). Meski pesan dikirimkan ke
server yang dituju, proxy kadang
kala merespon balik. Karakteristk ini memungkinkan penyerang untuk mengetahui
perihal proxy yang terhubung ke
server tujuan.
|
2.2.1.1 Respon HTTP
Sebuah permintaan HTTP dari sebuah klien ditangani
oleh server dan direspon oleh server
tersebut. Untuk merespon, server akan mengirimkan kembali serangkaian komponen
pesan yang dapat dikategorikan sebagai berikut :
- Kode
respon— Angka yang bertalian pada sebuah tipe asosiasi respon .
- Lokasi awal (Header fields)—informasi tambahan tentang respon.
- Data—Isi
dari respon.
Melalui tiga komponen tersebut, sebuah browser
klien daat memahami respon dari server dan berinteraksi dengan server tersebut.
Web server mengirimkan konten dinamis ke klien melalui internet sebagai
bagian komponen terintegrasi dari layanan online suatu organisasi. Kemampuan
untuk menyediakan kontent serta memberikan respon kepada setiap permintaan
individu merepresentasikan keberhasilan fungsional dari suatu situs. Namun demikian pembangunan kode aplikasi dan
sistem pemrosesan data yang buruk, menimbulkan kerawanan terhadap serangan yang
berpusat pada metode dibangkitkannya konten dari situs tersebut dan
diintepretasikan oleh browser pada sisi klien. Penyerang dapat menyisipkan
konten berbasis HTML di dalam web request. Penyerang juga dapat menyisipkan script respon kontent tanpa perlu tahu
situs pengunjungnya.
Jenis
serangan ini bergantung pada fungsionalitas browser klien. Dalam HTML untuk
membedakan displayable text dari intepreted markup language, dapat
digunakan karakter-karakter tertentu untuk mendefinisikan elemen dalam HTML.
Sebagian
besar browser memiliki kemampuan standar dalam menterjemahkan script yang menempel dalam konten HTML,
sehingga jika seorang penyerang berhasil memasukkan isi script, maka script
tersebut akan dapat dieksekusi oleh klien.
Kebanyakkan script yang digunakan adalah script yang dapat diterjemahkan
oleh klien, seperti <SCRIPT>, <OBJECT>, <APPLET>, atau
<EMBED>.
Tabel
berikut ini memberikan catatan penting mengenai element script yang mungkin
digunakan dan dapat diterjemahkan oleh web browser :
Tabel III.1 HTML Tag
HTML Tag
|
Keterangan
|
<SCRIPT>
|
Menambahan
script yang digunakan dalam dokumen.
Atributnya:
- type = Menyatakan bahasa program yang
digunakan dalam script. Atribut ini dibutuhkan dalam spesifikasi HTML
4.0 dan diganti oleh atribut “language”.
- language = Mengidentifikasi bahasa progam dari
script, seperti JavaScript or VBScript.
- src = menyatakan URL diluar file yang
digunakan dalam script untuk dijalankan bersama dokumen. (hanya pada
netxcape).
Didukung oleh: Netscape, IE 3+, HTML 4,
Opera 3+
|
<OBJECT>
|
Digunakan
untuk menempelkan obyek pada dokumen. Tag ini biasanya berisi informasi bagi
kendali AcriveX dalam IE untuk
menampilkan obyek tersebut. Atributnya:
- classid = class identifier milik obyek.
- codebase = penanda URL dari basis code obyek.
- codetype = Menetepakan tipe media seperti
audio, text, atau imej.
- data = Menyatakan URL dari data yang digunakan obyek.
- name = Menyatakan nama obyek yang diacu
oleh script.
- standby = Menyatakan pesan yang ditampilkan
ketika obyek ditampilkan.
- type = Menyatakan tipe media dari data.
- usemap = Menyatakan imagemap URL yang
digunakan obyek.
|
<APPLET>
|
Digunakan
untuk menyertakan Java Applet pada dokumen.
Atributnya:
- code = Menyatakan nama class dari code
yang akan dieksekusi.
- codebase = Menyatakan URL dimana code
ditemu-kembali.
- name = Pengenal applet yang dijadikan
rujukan .
|
<EMBED>
|
Digunakan
untuk menempelkan obyek yang membutuhkan plug-in agar dapat ditampilkan dalam
browser.
Atributnya:
- hidden = Menyatakan
status penyembunyian player plug-in. .
- name = Menyatakan pengenal obyek.
- pluginspage = Menyatakan URL halaman bagi
instalasi plug-in.
- src = Menyatakan URL sumber yang
ditempelkan.
- code = Menyatakan code yang digunakan
untuk mengeksekusi.
- codebase = Menyatakan basis URL untuk
aplikasi.
- pluginurl = Menyatakan sumber bagi installer
plug in.
- type = Menyatakan tipe MIME yang
dibutuhkan oleh plug-in.
|
<FORM>
|
Menyatakan awal dan akhir sebuah bentuk
formulir.
Atributnya antara lain action, enctype, method, target.
|
Kerawanan terhadap serangan XSS disebabkan oleh buruknya mekanisme
validasi input user sebelum diserahkan kepada sistem klien. Cross-Site mengacu
pada daerah aman dimana user menyimpan data ( seperti cookies, atribut konten
dinamis, dsb) yang berhubungan dengan situs web.
Dalam Cross Site Scripting, aplikasi web target
diinfeksi dengan menambahkan link baru yang tidak disadari oleh pengembang
aplikasi. Dalam link baru tersebut, terdapat rangkaian script program yang digunakan untuk mengakses informasi yang
berkaitan dengan web tersebut.
Semua serangan XSS tidak akan mengambil akses root
ataupun system dalam server web, serangan ini hanya berusaha
mendapatkan informasi yang berkaitan dengan aplikasi web yang digunakan.
Sebagai contoh sederhana dari XSS, dapat
digambarkan adanya sebuah buku tamu tempat banyak orang dapat berdiskusi
tentang tanggapan mereka terhadap sebuah situs. Pada situs tertentu juga menyediakan
akses penggunaan tag HTML. Dengan HTML, sebuah script bahasa program dan browser
yang merupakan interpreter untuk scrip tersebut, komentar pada buku tamu dapat disisipi
script program tentang apapun, tanpa disadari oleh pengguna lainnya.
XSS hadir karena pembangunan sebuah situs web yang kurang baik.
Keindahan desain dan isi dari situs web mengabaikan faktor keamanan dari situs
tersebut. Validasi atas broken link
atau input yang diberikan oleh user, seperti pada buku tamu di atas menjadi hal
yang paling sering dilupakan, dan memberikan kesempatan adanya penyisipkan kode
curang dari sang penyerang.
Jadi secara singkat dapat dijelaskan proses
penyerangan XSS sebagai berikut :
1) Penyerang melakukan investigasi pada
situs-situs dimana diperlukan hak akses tertentu, dan mencuri hak akses suatu
user melalui cookies atau ID sessions.
2) Penyerang menemukan titik rawan pada
halaman suatu situs.
3) Penyerang menciptakan link khusus ke suatu
situs dan menempelkannya dalam suatu email HTML yang dikirimkan ke korban
potensial.
4) Link khusus tersebut juga berisi kode yang
didesain khusus untuk mengirimkan salinan cookie korban ke penyerang
5) Tanpa sepengtahuan korban, penyerang
mendapatkan informasi (cookie) milik pengunjung situs target.
6) Dengan memanfaatkan informasi tersebut,
penyerang mengeksploitasi situs target.
Sebuah serangan cross site scripting dilakukan dengan menyediakan alamat khusus
yang dikemas oleh penyerang untuk calon korbannya.
Dalam konteks XSS, penyerang mengundang korbannya untuk mengeksekusi alamat URL
yang diberikan dan membiarkan korban mengikuti link tersebut dengan menjalankan script yang sebelumnya beraksi di komputer klien untuk mendapatkan
informasi yang diinginkannya.
Terdapat tiga
hal yang berkait dan dapat disusun sebagai sebuah anatomi serangan XSS yaitu
penemuan, serangan, dan eksploitasi.
Serangan XSS berdampak pada ketidaksempurnaan
aplikasi berbasis web dan bermuasal pada validasi masukan pengguna (user) yang
tidak begitu baik. Hal ini dapat memungkinkan penyerang menyisipkan kode HTML
tambahan dimana mereka dapat mengendalikan eksekusi pada halaman tersebut
dibawah izin yang diberikan oleh situs itu sendiri. Sebuah contoh sederhana dari halaman yang
dapat digunakan untuk cross site scripting
seperti dibawah ini :
<?php echo "Hello,
{$HTTP_GET_VARS['name']}!"; ?>
Sekali halaman tersebut dapat terakses, variabel
tersebut dikirim melalui metode GET langsung menuju halaman yang dituju. Dimana
masukan tidak ditandai sebagai variabel masukan, pengguna dapat memasukkan
beberapa karakter yang diinterpretasikan sebagai perintah meta karakter, cukup
mirip dengan injeksi SQL.
Dengan memasukkan HTML metacharacter memungkinkan
keluaran yang tidak diinginkan: Dimana masukan tidak divalidasi terlebih dahulu
sebelum keluaran dikirimkan ke browser klien. Hal di atas memberikan pengguna
untuk mengendalikan HTML dengan menyisipkan script ke halaman tersebut.
Beberapa titik dimana biasanya XSS terjadi adalah
pada halaman konfirmasi (seperti mesin pencari dimana memberikan keluaran dari
masukan pengguna dalam aktvitas pencarian) dan halaman kesalahan (error page)
yang membantu pengguna dengan mengisi bagian form untuk memperbaiki kesalahan.
Sekali masukan rawan teridentifikasi pada metode
HTTP - yang bergantung pada fasilitas protokol HTTP, maka aktivitas serangan
dapat dilakukan baik dengan metode GET, POST dan metode lainnya.
Penyisipan dengan metode GET merupakan cara
termudah juga sering dijumpai. Karena pengguna cukup banyak mengerti akan adanya
pengarahan ulang (redirection) atau adanya pemanggilan alamat lain yang tampak
pada tabulasi alamat (address bar). Metode cukup dilihat pada URI dan biasanya
tercatat di server HTTP. Contoh serangan
dengan metode ini dapat dilihat seperti berikut:
v
http://www.microsoft.com/education/?ID=MCTN&target=http://www.microsoft.com/education/?ID=MCTN&target="><script>alert(document.cookie)</script>
v
http://hotwired.lycos.com/webmonkey/00/18/index3a_page2.html?tw=<script>alert(‘Test’);</script>
v
http://www.shopnbc.com/listing.asp?qu=<script>alert(document.cookie)</script>&frompage=4&page=1&ct=VVTV&mh=0&sh=0&RN=1
v
http://www.oracle.co.jp/mts_sem_owa/MTS_SEM/im_search_exe?search_text=%22%3E%3Cscript%3Ealert%28document.cookie%29%3C%2Fscript%3E
Karena karakter dari XSS, penyerang tidak dapat
secara langsung memanfaatkan kerawanan untuk keuntungan sendiri. Korban mesti
melihat kode yang disisipkan agar dapat dieksekusi. Dan begitu korban melihat
kode tersebut, dan mengeksekusi, informasi
tentang si korban dapat diketahui oleh si penyerang.
Dibanding serangan dengan metode GET, dengan
metode POST sedikit lebih rumit, dimana variabel POST dikirim secara mandiri
dari permintaan URI, sehingga butuh halaman transisi untuk memaksa korban
mengeksekusi permintaan POST (POST request) yang berisi kode XSS.
Baru-baru ini metode serangan XSS telah
menggunakan metode TRACE, serangan ini memanfatkan activeX, dimana informasi
tentang user dikirimkan melalui TRACE request melalui browser klien, informasi
ini juga dapat diubah ke dalam bentuk XML, sehingga klien dan situs web
tersebut tidak menyadarinya. Metode ini mampu melewati keamanan HTTP Only.
Setelah melakukan serangan, penyerang dapat melakukan eksploitasi atas
situs web yang menjadi target. Umumnya dilakukan dengan membajak sesi koneksi
dari korban dan melakukan aksi seperti layaknya si korban mengakses situs web
target. Kerugian yang muncul dapat merugikan situs web itu sendiri ataupun
korban. Setelah eksploitasi ini, sesi serangan XSS dapat dikatakan telah sempurna.
Serangan XSS dapat dikategorikan dua cara, secara
manual dan otomasi, jika secara manual dapat diilustrasikan dibawah ini :
Gambar IV.1 Serangan
XSS dengan cara manual
- Pengguna
aplikasi web mengakses aplikasi web yang menjadi target serangan.
- Penyerang
menyebarkan serangan XSS dengan memanfaatkan e-mail ataupun web.
- Pengguna
aplikasi web memakan umpan serangan XSS.
- Informasi
dari pengguna diinjeksi ke server lain untuk diolah.
- Penyerang
membajak sesi koneksi pengguna ke aplikasi web dan mengekploitasi aplikasi
web
Mekanisme di atas merupakan metode serangan
tradisional, saat ini serangan XSS telah diotomatisasi dan dintegrasikan dengan
aplikasi serangan web .Dan jika serangan telah diotomasi, dapat diilustrasikan
berikut :
Gambar IV.2 Serangan
XSS dengan Otomatisasi
Metode serangan mengalami perubahan sesuai dengan
perubahan pada protokol HTTP. Saat HTTP
1.0 banyak digunakan, serangan banyak dilakukan dengan memanfaatkan metode GET dan POST, dan ketika mulai digunakan protokol HTTP
1.1, metode serangan mulai dilakukan dengan memanfaatkan metode GET, POST dan TRACE.
Dari jenis bahasa pemrograman yang sering
digunakan untuk melakukan serangan juga mengalami pergeseran, di awal
populernya serangan XSS, banyak digunakan bahasa script JAVAscript, kemudian mulai berkembang dengan memanfaatkan
PERL dan ASP, saat ini banyak dilakukan dengan memanfaatkan PHP. Akan tetapi serangan XSS tidak terbatas hanya
dengan bahasa di atas, juga dapat menggunakan bahasa pemrograman apapun yang
mendukung aplikasi dinamis pada situs web, termasuk FLASH script.
Serangan XSS dengan memanfaatkan fasilitas GET di
protokol HTTP, merupakan metode yang paling sering dilakukan. Dalam
penggunaannya, metode ini digunakan untuk dua hal, yaitu : Menangkat URL dan
menangkap cookies.
Umumnya kesalahan yang terjadi disebabkan oleh
tidak dilakukannya validasi pada masukan dari pengguna di web.
Metode ini memerlukan tingkatan keahlian lebih
lanjut, karena variabel POST dikirimkan terpisah dari URL website target,
karenanya penyerangan secara langsung menjadi tidak mungkin. Untuk itu
dibutuhkan halaman antara yang akan memaksa browser di klien untuk melakukan
permintaan POST ke server target. Umumnya kesalahan yang terjadi disebabkan
oleh tidak bersihnya aplikasi browser web klien yang tidak memperhatikan HTML
tag yang disisipkan dalam browser tersebut.
Seiring dengan semakin banyaknya kehadiran web
dinamis, yang memungkinkan pengguna berinteraksi dengan sistem. Salah satunya
kemudahan yang diberikan pada pengguna untuk memanfaatkan aplikasi flash
disisipkan pada sistem.
Di sisi lain kehadiran XSS telah mulai
diantisipasi sehingga keamanan dengan menapis HTML mark up ataupun code yang
memungkinkan XSS terjadi. Akan tetapi, dengan memanfaatkan aplikasi flash,
dimana pada beberapa server yang digunakan komunitas, dimungkinkan untuk
mengupload aplikasi flash ini dan menyimpan sementara di server tersebut.
Kondisi ini memicu variansi lain dalam menerapkan
XSS dengan memanfaatkan kemudahan dalam aplikasi flash. Diketahui bahwa dalam
aplikasi flash juga dikenal scripting. Dengan memanfaatkan active scripting
pada aplikasi flash, XSS dapat disisipkan pada bagian signature dari aplikasi
tersebut, script contohnya sebagai berikut :
<embed
src="http://exploitsite.com/download/example.swf"
pluginspage=”http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash”
type="application/x-shockwave-flash" width="0"
height="0" > </embed>
|
Dimana scipt diatas akan diinterpretasikan oleh
flash player sebagai :
<object
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width=200
height=200> <paramname=movie
value=http://exploitsite.comt/download/example.swf> <param name=play
value=true> <param name=loop value=true> <param name=quality
value=high> <embed src=http://exploitsite.com/download/example.swf
width=200 height=200 play=true loop=true quality=high> </embed>
</object>
Tentu
saja setiap kali ada yang mengakses halaman dimana aplikasi flash yang telah
disisipi tadi akan mengalami kerawanan XSS. Untuk mengatasi kerawanan tersebut,
pihak macromedia telah memberikan plug in tambahan untuk melakukan validasi
aplikasi flash.
Mendeteksi
apakah suatu aplikasi rawan terhadap adanya penyisipan kode adalah persoalan
yang tidak sulit. Deteksi ini dapat dilakukan untuk menemukan titik rawan
serangan pada aplikasi yang akan di-upload ke server. Kuncinya terletak pada analisis terhadap
konten HTML dinamis pada sisi klien.
Untuk bisa mendeteksi titik rawan tersebut, dibuat suatu skenario
melalui proses-proses berikut ini :
1.)
Untuk setiap field input yang
terlihat ( yang mungkin terletak dalam suatu form HTML atau direpresentasikan
dalam URL sebagai variabel), gunakan format script berikut ini :
<script>alert('CSS
Vulnerable')</script>
<img csstest=javascript:alert('CSS Vulnerable')>
&{alert('CSS Vulnerable')};
2.)
Jika cek script di atas
menyebabkan HTML menampilkan halaman yang tidak benar, komponen aplikasi masih
dalam kondisi rawan.
3.)
Untuk setiap variabel yang
terlihat, kirim atau ganti string berikut ini :
'';!--"<CSS_Check>=&{()}
(Note that the string begins with two single-quotes)
pada halaman hasil, cari string “<CSS_Check>“. Jika
anda menemukan “<CSS_Check>“,
masih ada kemungkinan komponen aplikasi dalam kondisi rawan. Namun demikian,
jika kata CSS_Check tidak lagi diapit dengan %ltCSS_Check%gt, berarti sudah
tidak rawan lagi. Jika input
ditanmpilkan pada sembarang posisi dalam suatu dokumen, input akan dapat
digunakan untuk mengalihkan aliran eksekusi ke penyerang.
4.)
Setelah mendapatkan lokasi word
CSS_Check, verifikasi apakah (jika ada) karakter lain yang ditambahkan atau
difilter dari string asal “'';!--"<CSS_Check>=
&{()}”.
Berdasarkan karakter yang terfilter, komponen aplikasi
masih dikatakan rawan.
5.)
Melihat lebih detail hasil kode
HTML, identikasikan string khusus yang diperlukan oleh penyerang untuk
memisahkan tag HTML atau urutan kode. Jika ditemukan karakter yang dimaksud,
tanpa mengaktifkan filter, diamati respon terhadap test string seperti pada
point 3), sehingga dapat dikatakan komponen aplikasi yang ada masih dalam
kondisi rawan.
6.)
Mengulangi proses-proses di
atas untuk semua field-field yang tidak dapat diedit secara normal di sisi
klien. Server Proxy memberikan fasilitas untuk editing request HTTP setelah
request tersebut meninggalkan aplikasi pada klien sebelum akhirnya dikirim ke
aplikasi server.
7.)
Pada banyak kasus, data akan
dikirimkan melalui HTTP GET request. Melalui suatu investigasi, perlu juga
dicari kerawanan pada komponen aplikasi yang memerlukan perintah HTTP POST
untuk mengirim data.
Untuk user solusi termudah adalah mematikan semua bahasa script yang
ada pada komputernya. Tentu saja hal ini juga menyebabkan beberapa
fungsionalitas pada site yang sedang dikunjungi menjadi tidak berjalan.
Alternatif lain adalah berhati-hati dalam mengunjungi suatu situs, terutama
pada source URL nya.
Sebab tidak ada dua aplikasi yang identik, pengembang aplikasi perlu
menyelaraskan antisipasi pengamanannya sebagaimana ditetapkan oleh kebutuhan
bisnis. Kunci dalam mencegah aplikasi yang rawan terhadap injeksi kode dan
serangan tipikal CSS ialah dengan memastikan bahwa halaman yang membangkitkan
konten secara dinamis tidak mengandung tag yang tidak diinginkan.
Sumber-sumber yang
umumnya dijadikan titik masuk antara lain :
- Query string
- URL’s dan bagian universal locator
- Data yang dikirimkan
- Cookies
- Data persisten yang dipasok oleh
user dan ditemu-kembali saat waktu setelahnya.
Solusi untuk
pencegahan adanya serangan ini secara garis besar dapat disediakan pada sisi
klien dan pada sisi server
Antisipasi atas
interaksi dengan sisi klien, solusi yang ditawarkan dapat berupa :
a.
Filtering
Menapis masukan dari klien browser dengan mewaspadai
karakter-karakter khusus. Karakter-karakter khusus yang harus diwaspadai
(menurut CERT) :