Kelemahan AJAX Dan RIA Dalam Web 2.0
-
Upload
herwin-anggeriana -
Category
Documents
-
view
201 -
download
7
description
Transcript of Kelemahan AJAX Dan RIA Dalam Web 2.0
1 Created By : Herwin Anggeriana -- http://www.facebook.com/ITlinks.co.id
Kelemahan AJAX dan RIA dalam Web 2.0
Abstrak
Aplikasi Web 2.0 sangat tergantung pada pengelolaan serta manipulasi document object model
( DOM ) dalam proses rendering JSON atau streaming XML di sisi browser. Dalam pemrosesan
data elemen DOM memiliki mekanisme melibatkan object XMLHTTPRequest ( XHR ) pada sisi
client side logic yang dibangun ( developed ) dalam bahasa pemograman Javascript atau
teknologi pemograman lain sejenisnya, seperti Flash atau Sliverlight. Pengendalian DOM
terhadap elemen Cross Site Scripting ( XSS ) menciptakan celah kelemahan keamanan aplikasi
pada sisi user ( end user ). Celah kelemahan keamanan ini menjadi sumber malapetaka yang
akhirnya berdampak menciptakan peluang celah keamanan lainnya yang dapat dilakukan oleh
si penyerang misalnya melalui Cross Widget Sniffing, RSS Feed Reader Exploitation, XHR
Response Stealing, Mashup Hacking, Malicious Code Injection, dan Worm Spreading. Untuk
mengatasi beberapa ancaman kelemahan keamanan tersebut memerlukan usaha ekstra
inovatif dan usaha cukup melelahkan dalam pencarian ( scanning ) kelemahan source code
aplikasi dan kelemahan dari masing – masing elemen teknologi yang diterapkan ketika
membangun ( develop ) web 2.0. Kita telah sering melihat dan membaca dalam berbagai artikel
yang tersebar secara online ( internet ) kelemahan pengendalian DOM terhadap elemen XSS
tetapi ancaman yang sangat significan dan memberikan dampak kerusakan ( loss / high impact )
cukup besar adalah penyerangan yang terintegrasi secara simultan dengan berbagai teknik
penyerangan ( Cross Domain Bypass dan Cross Site Request Forgery ) secara bersamaan.
Penyerangan ini dikenal dengan terminology deadly cocktail.
Batasan Penulisan Dalam Artikel
Artikel penulisan ini memiliki batasan pembahasan yaitu :
Arsitektur Web 2.0 dan proses manipulasi DOM
Teknik penyerangan Cross Domain Bypass
Teknik penyerangan DOM untuk pengendalian elemen Widget dan Mashup
Kelemahan routines AJAX dalam feed readers
Mencari dan mendeteksi elemen DOM pengendali elemen XSS di Web 2.0
Arsitektur Web 2.0 dan Proses Manipulasi DOM
Aplikasi berbasis Web 2.0 secara fungsional memiliki kemampuan men-distribusikan konten
secara luas. Aplikasi berbasis Web 2.0 memiliki karakteristik struktur elemen yang saling
2 Created By : Herwin Anggeriana -- http://www.facebook.com/ITlinks.co.id
terintegrasi, kompleks dan saling tergantung antar elemen aplikasi. Yang pada akhirnya
menciptakan cukup peluang bagi si penyerang ( hacker ) untuk meng-eksplore dan menemukan
celah keamanan dalam arsitektur aplikasi. Pada gambar 1.0 merupakan arsitektur dari aplikasi
berbasis Web 2.0 :
Gambar 1.0 : Arsitektur dari aplikasi berbasis Web 2.0
Pada gambar 1.0, aplikasi berbasis Web 2.0 seperti layaknya aplikasi yang terbentuk dari
banyak aplikasi yang saling terhubung dan terintegrasi baik berbeda lokasi data servernya
maupun yang di dalam lingkungannya. Jika kita harus memisahkan inti source code dari aplikasi
itu sendiri, mungkin saja aplikasi tersebut memiliki database yang terbatas dan modul
authentication sedangkan sisa data maupun modul lainnya berasal dari luar lingkungan system (
come from outside application boundary ).
Semua elemen komponen saling mengirimkan informasi melalui browser tentunya dengan
mekanisme proses kerja dari struktur masing – masingnya yang saling berbeda. Pada gambar 2
merupakan masing – masing struktur dari elemen komponen Web 2.0 yang memiliki
kemampuan untuk saling bertukar informasi melalui web browser.
3 Created By : Herwin Anggeriana -- http://www.facebook.com/ITlinks.co.id
Gambar 2.0 : Perbedaan masing – masing struktur dari elemen komponen Web 2.0 yang
memiliki kemampuan masing – masing saling bertukar informasi melalui web browser.
Berdasarkan struktur dari gambar 2.0, secara keseluruhan dapat terlihat bahwa masing –
masing elemen komponen Web 2.0 memiliki perbedaan struktur yang jelas berbeda tetapi
memiliki karakteristik yang sama yaitu mekanisme proses kerja pertukaran data melalui web
browser melalui protocol HTTPS bahkan beberapa protocol terkadang dilibatkan untuk
mendukung kelancaran pertukaran data seperti protocol SOAP, dan XML-RPC.
Konsep dari model arsitektur seperti inilah yang menyebabkan arsitektur dari aplikasi Web 2.0
menjadi sederhana tetapi komplek dalam mempertahankan keamanan aplikasi web 2.0 karena
melibatkan perbedaan struktur aliran data ( stream structure ), protocol yang cukup banyak dan
masing – masing kelemahan dari elemen client side memungkinkan penyerangan terhadap
aplikasi.
Peningkatan penggunaan elemen DOM yang berasal dari browser pada era dekade ini cukup
significan sehingga ini menjadi bagian cukup penting ( critical part ) bagi improvisasi aplikasi
berbasis Web 2.0 khususnya di sisi keamanan. Salah satu fitur yang cukup significan dapat
dirasakan dari aplikasi Web 2.0 adalah fitur minimumnya mekanisme reload atau refresh pada
halaman web untuk mendapatkan data terbaru.
Berikut ini adalah table 1.0 yang merupakan contoh source code dari penggunaan DOM pada
Web 2.0 :
4 Created By : Herwin Anggeriana -- http://www.facebook.com/ITlinks.co.id
Tabel 1.0 : Contoh source code DOM pada halaman Web 2.0
Function getProfile() { var http; If (window.XMLHttpRequest) { http = new XMLHttpRequest(); } else if (window.ActiveXObject) { http = new ActiveXObject(“Msxml2.XMLHTTP”); if(!http) { http = new ActiveXObejct(“Microsoft.XMLHTTP”); } } http.open(“GET”,”./profile/”,true); http.onreadystatechange = function() { If(http.readyState == 4) { Response = http.responseText; Document.getElementById(‘main’).innerHTML = response; } } http.send(null); }
Dalam function document.getElementById , function class ini dipanggil dengan menggunakan
fungsi XHR dan konten terbaru diubah dengan menggunakan fungsi “innerHTML”. Terdapat
banyak variasi untuk melakukan injeksi terhadap konten terbaru / data terbaru dimasukkan ke
dalam DOM. Salah satu cara paling umum dijumpai dengan menulis ulang elemen DOM yang
akan digunakan seperti contoh pada table 2.0 di bawah ini.
Tabel 2.0 : Teknik menulis ulang elemen DOM ketika terdapat konten terbaru / data terbaru
If(http.readyState == 4) { Var response = http.responseText; Var p eval(“(“+response+”)”); Document.open(); Document.write(p.firstName+”<br>”); Document.write(p.lastName+”<br>”); Document.write(p.phoneNumber[0]); Document.close();
Dalam table 2.0, konten terbaru atau data terbaru di-injeksikan menggunakan fungsional dari
class eval dan document.write yang dipanggil ke dalam elemen DOM. Banyaknya variable
5 Created By : Herwin Anggeriana -- http://www.facebook.com/ITlinks.co.id
maupun class yang diperlukan di dalam DOM diciptakan untuk tujuan optimasi pada sisi client
side.
Pada sisi lain DOM dapat digunakan pada RIA ( Rich in Application ) dalam pemograman Flash
atau Silverlight. Pada Tabel 3.0 merupakan contoh sepotong source code DOM yang digunakan
dalam RIA.
Tabel 3.0 : DOM dalam RIA seperti program Flash
_root.htmlText = true; Mekanisme parameter untuk melakukan passing data dalam fungsional ‘getURL’
getURL(_root.input); Mekanisme parameter ini untuk mengakses dari konten HTML dari Flash dan memanipulasi ke dalam elemen DOM secara berurutan ( subsequently ).
Jika mekanisme proses kerja elemen RIA dalam Web 2.0 tidak diimplementasikan dengan aman
( securely ) maka memberikan peluang bagi penyerang untuk melakukan teknik DOM injeksi
dan remote script execution.
Pada gambar 3.0 merupakan arsitektur penyerangan DOM berbasis XSS secara umum.
Gambar 3.0 : arsitektur penyerangan DOM berbasis XSS
6 Created By : Herwin Anggeriana -- http://www.facebook.com/ITlinks.co.id
Teknik Penyerangan Cross Domain ByPass
Model keamanan dari web browser dan function XHR tidak akan mengijinkan melakukan
passing secara SOP ( Same Origin Policy ). Tidak tertutup kemungkinan penggunaan function
XHR dalam suatu web domain sample.com berasal dari web domain lain abc.com.
Aplikasi – aplikasi web 2.0 pada umumnya didesain memiliki metode atau mekanisme yang
memungkinkan pemanggilan function lain serta passing secara bersamaan dalam lokasi yang
berbeda sehigga hal inilah yang menyebabkan terciptanya mekanisme callback.
Pada gambar 4.0 merupakan arsitektur penyerangan Cross Domain ByPass secara umum.
Gambar 4.0 : Arsitektur Penyerangan Cross Domain ByPass melalui Proxy
Ketika user ( client ) mengklik / membuat request untuk konten yang berasal dari web domain
yang berbeda, maka data dari konten tersebut terkirim melalui proxy dan terjadilah aliran data
yang kita kenal dengan streaming. Pada gambar 5.0 merupakan stream data berbasis JSON.
7 Created By : Herwin Anggeriana -- http://www.facebook.com/ITlinks.co.id
Gambar 5.0 : Stream data berbasis JSON.
Pada sisi lain untuk melakukan teknik penyerangan Cross Domain ByPass yang melalui proxy,
maka lakukan secara langsung pada URL melalui syntax javascript ( directly pushing content into
javascript function by wrapping the right call back function name ).
Pada gambar 6.0 merupakan mekanisme teknik penyerangan dari function class profileCallback.
Gambar 6.0 : Teknik penyerangan dari fungsional profileCallback
Dalam gambar 6.0, bagian yang diblok biru yaitu script tag menjadi target URL dalam
melakukan teknik penyerangan cross domain dan prosesnya menghasilkan pemanggilan
elemen JSON ( incoming JSON ) atau stream JS lainnya secara otomatis.
8 Created By : Herwin Anggeriana -- http://www.facebook.com/ITlinks.co.id
Aplikasi – aplikasi AJAX menggunakan single elemen DOM sepanjang siklus proses bekerja dari
aplikasi tersebut ( life cycle of the application). Langkah awal dari siklus proses bekerja aplikasi
dimulai dari elemen DOM diproses (loaded) setelah itu nilai dari DOM di-injeksikan secara
dinamis ( dynamic DOM ) dengan variasi stream yang berbeda – beda.
Elemen dynamic DOM ini secara khusus dapat dimanipulasi akibat penggunaan function class
“eval” atau “document.*”. Hal ini menjadi celah keamanan dari aplikasi tersebut dimana
penggunaan elemen javascript secara berlebihan berakibat elemen dinamis DOM ( dynamic
DOM ) mendapatkan permission ( ijin ) untuk mengakses serta memanipulasi variable javascript
yang melibatkan beberapa variable penting lainnya.
Pada tabel 4.0 merupakan source code dari authentication routine sederhana ketika menerima
pemrosesan data username dan password dari web browser dan mengirimkan kembari ke
server melalui XHR object
Tabel 4.0 : authentication routine sederhana ketika menerima pemrosesan data username
dan password dari web browser dan mengirimkan kembali ke server melalui XHR object.
Function getLogin() { gb = gb + 1; var user = document.frmlogin.txtuser.value; var pwd = document.frmlogin.txtpwd.value; var xmlhttp = false; try { xmlhttp = new ActiveXObject(“Msxml2.XMLHTTP”); { Catch(e) { try { xmlhttp = new ActiveXObject(“Microsoft.XMLHTTP”); } Catch(E) { xmlhttp = false; } } If(!xmlhttp && typeof XMLHttpRequest!=’undefined’) { xmlhttp = new XMLHttpRequest(); } Temp = “login.do?user=”+user+”&pwd=”+pwd; xmlhttp.open(“GET”,temp,true); xmlhttp.onreadystatechange = function() { if(xmlhttp.readystate == 4 && xmlhttp.status == 200) { document.getElementByID(“main”).innerHTML = xmlhttp.responseText; } Xmlhttp.send(null); }
9 Created By : Herwin Anggeriana -- http://www.facebook.com/ITlinks.co.id
Pada table 4.0 terdapat function class, yang cukup penting yaitu :
temp = “login.do?user=”+user+”&pwd=”+pwd;
xmlhttp.open(“GET”,temp,true);
Celah keamanan yang terjadi pada source code dari tabel 4.0 adalah function variabel ‘temp’
yang telah terbentuk tanpa batasan keyword maupun waktu expired, hal ini terjadi karena
penggunaan variable secara global. Sebagai hasilnya setelah menjalankan function variable
‘temp’ maka variable ‘temp’ tersebut tetap bertahan ( without have expired or dropping value )
sepanjang aplikasi tersebut berjalan / diakses.
Dengan kondisi seperti ini, maka penyerang dapat mencuri / eavesdropping terhadap variable
‘temp’ melalui mekanisme XSS dan mendapatkan data username serta password yang
dihasilkan oleh elemen DOM berbasis XSS.
Teknik penyerangan DOM untuk pengendalian elemen Widget dan Mashup
Dalam beberapa contoh kasus diatas, dapat terlihat bahwa aplikasi Web 2.0 pada elemen DOM
digunakan untuk memanipulasi / mengolah serta meng-injeksi konten terbaru dan
memodifikasi dirinya sendiri ( elemen DOM itu sendiri ). Misalnya pada contoh lain ketika
menerapkan fungsional ( function ) sederhana seperti RSS feed dan injeksikan ke dalam elemen
DOM, proses validasi tidak lagi diperlukan dan menciptakan celah keamanan untuk melakukan
teknik injeksi yang sama berupa link ke elemen DOM tanpa perlu bersusah payah
mengeksporisasi proses validasinya.
Pada tabel 5.0 merupakan sepenggal source code dari snippet widget.
Tabel 5.0 : source code dari snippet widget
Function process RSS (divname,response) { var html = “”; var doc = response.documentElement; var items = doc.getElementsByTagName(‘item’); for(var i=0; i < items.length; i++) { var title = items[i].getElementsByTagName(‘title’)[0]; var link = items[i].getElementsByTagName(‘link’)[0]; html += “<a style=’text-decoration:none’ class=’style2’ href=”” +link.firstChild.data +”’>’” +title.firstChild.data +”</a><br><br>”; }
10 Created By : Herwin Anggeriana -- http://www.facebook.com/ITlinks.co.id
var target = document.getElementById(divname_; target.innerHTML=html; }
Pada tabel 5.0 diatas merupakan source code dari widget RSS feed. Widget tersebut melakukan
proses grab dari fungsional ( function ) RSS feed dan passing data melalui routine setelah script
tersebut diesekusi dalam browser. Hal ini menciptakan celah keamanan lain yang berbeda
dengan celah keamanan DOM berbasis XSS yaitu penggunaan kelemahan vector.
Dalam banyak aplikasi – aplikasi widget dibentuk dalam coding HTML versi kecil dengan format
pada umumnya javascript. Ketika widget di-injeksikan ke dalam elemen DOM dan memperoleh
permission penuh dalam proses kerjanya, maka penyerang dapat memanfaatkan celah
keamanan ini dengan menggunakan malicious widget ke dalam elemen DOM kemudian
memonitor melalui widget yang lainnya.
Sebagai contoh, pada tabel 6.0 merupakan source code widget malicious, asumsikan widget
lainnya sudah terinfeksi dan widget ini berperan menerima username dan password dari user.
Tabel 6.0 : Source code widget malicious
Function regEvent4me() { var objs = document.getElementsByName(“txtUser”); If (objs.length > 0) { var thefield = objs[0]; thefield.onblur = GetU; } objs = document.getElementsByName(“txtPass”); If (objs.length > 0) { var thefield = objs[0]; thefield.onblur = GetP; } }
Pada tabel 6.0, malicious widget tersebut memulai proses menerima data ( username,
password ) ketika terjadi pergerakkan mouse, tanpa sepengetahuan, user memasukkan data
pentingnya biasanya melalui form dari widget lain yang terinfeksi kemudian widget ini akan
menjalankan fungsional ( function ) GetU dan GetP. Fungsional ( function ) inilah yang akan
11 Created By : Herwin Anggeriana -- http://www.facebook.com/ITlinks.co.id
mengambil data konten vital dan mengirimkannya ke jaringan ( network ) yang berbeda dimana
si penyerang sedang menunggu.
Dengan kasus seperti ini, maka penting bagi kita sebelum menerapkan widget / injeksikan code
widget yang dibutuhkan ke dalam elemen DOM, sebaiknya dilakukan analisa arsitektur elemen
DOM, sumber dari widget tersebut ( platform ), dan proses kerja dari elemen widget tersebut.
Mencari dan mendeteksi elemen DOM dalam Web 2.0
Kita sudah melihat beberapa cara penyerangan dengan memanfaatkan elemen DOM, masih
banyak cara dan teknik – teknik penyerangan lain sejenisnya yang tersebar di internet. Jika kita
mencoba menarik benang merah dan membentuk kategori dari semua teknik penyerangan
berbasis DOM maka terdapat beberapa kategori klasifikasinya yaitu :
Penyerangan elemen DOM dengan menggunakan aplikasi Mashup : aplikasi mashup
menggunakan modul API dan tentunya API haruslah bersifat Open. Ketika API
diterapkan dalam mashup application, maka informasi mudah tersebar dari sumber
tidak terpercaya ( un-trusted source ), dipacket ( bundle ), dan terkirim ke asal target
penyerang. Pada dasarnya ( essentially ), stream data terjadi karena adanya injeksi jika
terdapat malicious script maka secara otomatis akan menjalankan malicious script
tersebut.
Penyerangan DOM side logic : Aplikasi Web 2.0 menggunakan client side logic dan
beberapa level business logic untuk membagi client side itu sendiri. Hal ini memberikan
celah bagi penyerang memanfaatkan teknik penyerangan dissect call dan berusaha
memahami core logic-nya dibalik proses yang terjadi, mengidentifikasi access control,
logic encryptionnya, secret flags dan sebagainya. Semua algoritma logic ini di-embedded
di dalam client side DOM dan dalam variable – variable stack sehingga memudahkan
untuk mengakses serta mamnipulasi konten yang tidak ter-authorisasi ( illegal content ).
CSRF dengan XML, SOAP, JSON atau AMF stream : Modul ini juga dapat menciptakan
celah keamanan dengan meng-injeksikan form berbasis HTML sehingga memaksakan
XML atau SOAP mengirimkan data ke domain berbeda dari web browser ( force cross
domain from web browser ). Hal ini disebabkan karena minimnya teknik pemograman
keamanan berbasis form HTML.
Cross technology Access : Web browser akhir – akhir ini berkembang pesat ( Internet
Explorer, Firefox, Opera, Netscape, Chrome dan sebagainya ), tentunya masing – masing
teknologi yang diterapkan dalam web browser saling berbeda. Prinsip dasar dari
teknologi web browser selalu menerapkan mekanisme stack. Sebagai contoh : Flash dan
AJAX yang berjalan dalam elemen DOM yang sama, begitu juga dengan Silverlight yang
terfocus pada variable elemen DOM dalam format javascript. Maka hal ini menciptakan
12 Created By : Herwin Anggeriana -- http://www.facebook.com/ITlinks.co.id
celah keamanan lebih besar dalam pengaksesan dari berbagai technology ( cross
technology access ). Asumsikan kita sebagai programmer mencoba meng-eleminasikan
kelemahan elemen DOM dan memperketat keamanan pada web browser IE, tetapi
apakah dapat dipastikan secure ketika berjalan pada platform Chrome? Bagaimana
dengan nasib user yang mengakses dengan platform web browser Chrome?
Jika kita ingin melakukan pengujian terhadap aplikasi untuk menemukan celah keamanan serta
kekurangan dari aplikasi yang dibangun tentunya dengan tujuan untuk improvisasi performance
aplikasi itu sendiri, maka diperlukan metode pengujian yang dikenal dengan metode Software
Testing Life Cycle ( STLC ) , secara garis besarnya dan umumnya metode STLC terbagi dalam
dua group phase yaitu blackbox dan whitebox testing. Mendeteksi kerentanan yang dimiliki
aplikasi berbasis Web 2.0 dengan metode sederhana blackbox STLC dapat dikatakan sulit
karena cukup beresiko.
Sebagai contoh ; tidak memungkinkan melakukan teknik fuzzing dan mencoba mengirimkan
request ke A dan berharap mendapatkan response dari B ( attacker ) secara specific hanya
untuk melihat kerentanan / celah keamanan yang terjadi. Hal ini memerlukan analisa terperinci
dan akurasi terhadap source code yang dihasilkan dan phase analisa terhadap source code
tersebut harus dilakukan secara statis dengan trik men-debug satu per satu source code dan
melihat proses script tersebut berjalan.
Berikut ini ada beberapa tips dalam teknik pencarian ( scanning ) terhadap elemen DOM yang
dapat membuka celah keamanan dari aplikasi Web 2.0 :
Tingkatkan performance pencarian elemen DOM untuk berbagai variasi pengaksesan
dan variasi proses kerjanya, perhatikan relevansi-ya ketika melakukan proses
pengiriman data ( passing ).
Lakukan performace pencarian elemen DOM untuk berbagai variasi pengaksesan dan
proses kerjanya dengan melakukan teknik XHR, perhatikan dan focuskan kepada
streaming data yang di-injeksikan dalam elemen DOM kemudian analisa dampak (
impact ) yang terjadi ketika proses tersebut sedang berjalan. Jika streaming data yang
terjadi menggunakan mekanisme seperti function ‘eval’ atau ‘document.write’ maka hal
itu dapat membuka celah keamanan ( reference keyword untuk mempelajari lebih jelas
– DOMScan ).
Lakukan proses debugging terhadap elemen javascript khususnya pada sisi run-time,
analisa aliran yang terjadi ( the flow of execution ) dari setiap komponen dengan
merujuk pada lingkungan berbagai versi platform web browser. Anda dapat
menggunakan alat bantu ( tools ) debugger yang cukup baik, terkadang web browser
seperti Firebug atau IE 8++ debugger toll dapat digunakan untuk efisiensi waktu
pengetestan.
13 Created By : Herwin Anggeriana -- http://www.facebook.com/ITlinks.co.id
Anda dapat menggunakan deobfuscator atau Javascript tracer.