Pemahaman CSRF dalam Metode Menyerang Pada Situs Website

PropellerAds
Bagaikan gol bunuh diri, Cross-site Request Forgery adalah sebuah serangan pada website yang dieksekusi atas wewenang korban, tanpa dikehendakinya.

Untuk memahami Cross-site Request Forgery (CSRF), skenario berikut menunjukkan contoh serangan CSRF yang berbahaya dan merugikan pengguna. Katakanlah terdapat sebuah website transaksi isi pulsa elektrik, si A merupakan salah satu member-nya dan memiliki deposit yang cukup untuk bertransaksi.

Untuk mengeksekusi transaksi, website mengharuskan pengguna login terlebih dahulu, lalu transaksi terjadi dengan mengakses link http://domain/transaksi. php?no_hp=xxxxxxxxx&nilai_pulsa= 100000, isi dari fi eld no_hp adalah nomor handphone tujuan yang ingin diisi ulang, dengan contoh pulsa senilai 100.000 rupiah. Tentunya, developer web telah memproteksi link ini agar hanya dapat diakses oleh member yang telah berhasil login.

Si B yang merupakan tokoh antagonis dalam skenario ini, mengetahui cara kerja website tersebut. Ia juga menemukan bahwa website itu memiliki fi tur yang menyimpan otentifi kasi member dalam jangka waktu tertentu (menggunakan session/cookies). Selama masih valid, pengguna dapat masuk tanpa perlu login dan memasukkan password lagi. Anda tentu mengetahui banyak website memberikan pilihan “remember me” atau “keep me logged in” bagi pengguna, bukan?

Si B (penyerang) lalu mengirimkan e-mail kepada si A (korban) berisi link http://domain/transaksi.php?no_hp=x xxxxxxxx&jumlah=100000, dimana field no_hp berisi nomor handphone si B. Link ini disamarkan dengan teknik tertentu dan seolah-olah merupakan link yang menarik. Apa yang terjadi jika si A lengah mengklik link tersebut? Jika cookies valid/tidak expired, transaksi tersebut akan tereksekusi atas otoritas si A (sebagai pihak yang login). Hasilnya, si B menikmati pulsa gratis senilai 100.000 rupiah.

CSRF dan XSS

Dari contoh skenario yang diberikan, terlihat bahwa CSRF mengirimkan HTTP request ke sebuah website tanpa pengetahuan atau keinginan korban, dengan memanfaatkan session yang valid. Karena itu, serangan ini juga sering disebut dengan session riding, atau one-click attack.

Pemahaman CSRF sering rancu dengan pemahaman jenis serangan lain yang dikenal dengan XSS (Cross-site Scripting). Perbedaan yang signifi kan adalah XSS melakukan injeksi script pada sisi client dalam penyerangannya. Contohnya seperti script di bawah ini:


<a href=”javascript:alert(document. cookie);”> Isi cookies </a>

Kode di atas akan menampilkan sebuah link, yang jika diklik akan menampilkan isi cookies. Selain disisipkan pada link, XSS juga dapat disisipkan pada field-field input (text input, text area) yang terdapat pada guestbook, forum, dan sebagainya. Dengan melakukan validasi input yang tepat pada sisi server, maka XSS dapat dicegah. Bisasaja penanggulangan XSS dilakukan juga dari sisi client dengan men-disable JavaScript pada browser. Tetapi konsekuensinya, script lain yang berguna dan tidak berbahaya menjadi tidak dapat dijalankan juga.

Hal ini berbeda dengan CSRF, yang alih-alih menginjeksi, ia justru memanfaatkan fungsi dari aplikasi web itu sendiri. Perhatikan sebuah contoh serangan CSRF lagi, pada kode HTML di bawah ini:


<a href=”http://www.xyz.com/messages. php?empty=Trash&folder=Trash”> klik sini </a>

 Pada kode di atas, kita asumsikan xyz.com adalah sebuah website jejaring sosial ataupun webmail yang memiliki mailbox dengan folder-folder Inbox, Sent, Trash, dan seterusnya. Jika link tersebut diklik dan pengguna memiliki session account xyz.com yang sedang terbuka, maka otomatis folder Trash pada xyz.com akan dikosongkan (empty). Tidak ada penggunaan JavaScript di sini, sehingga men-disable JavaScript pun tidak ada gunanya. Pada contoh di atas mungkin terlihat tidak ada ruginya mengosongkan folder Trash, tetapi jika dilakukan tanpa Anda kehendaki, hal tersebut sudah merupakan sebuah celah keamanan.

Jika contoh kode di atas membutuhkan interaksi pengguna berupa klik tombol mouse agar link diarahkan ke tujuan, maka kode berikut akan langsung menjalankan link tersebut, bahkan halaman xyz.com juga tidak tampil pada browser:


<img src=”http://www.xyz.com/messages. php?empty=Trash&folder=Trash” width=”10” height=”10” border=”1”>

Untuk mengelabui pengguna dengan link-link yang bertujuan jahat, baik CSRF ataupun XSS seringkali menggunakan social engineering. Bayangkan skenario-skenario berbahaya lainnya yang mungkin dilakukan melalui serangan CSRF, antara lain:

1. Menulis komentar/posting dengan menggunakan account orang lain.
2. Melakukan penilaian (rate) sebuah artikel berkali-kali, dengan account yang berbeda-beda.
3. Mengubah konfigurasi pribadi, katakanlah pada situs jejaring sosial terdapat konfi gurasi untuk menampilkan foto agar dapat dilihat seluruh pengguna, dan berbagai kemungkinan lain.

Seluruh contoh skenario CSRF tersebut dapat terjadi, jika website target menyediakan fi tur tersebut dan lengah dalam mengantisipasi pengamanannya. Ancaman serangan semakin bervariasi jika dikombinasikan dengan bentuk serangan lain, seperti XSS atau SQL injection.

Pencegahan dari Sisi Aplikasi Web

Beberapa upaya pencegahan dapat dilakukan dari sisi server/aplikasi web, untuk menahan serangan CSRF. Secara teknis, Anda dapat melakukan tindakan, antara lain:

1. Memeriksa header HTTP referer

Header HTTP referer berfungsi untuk mengetahui darimana request berasal. Sebagai contoh, pada sebuah domain xyz.com, Anda memiliki fi le request.html berisi kode HTML berikut:


<html> <head></head> <body> <a href=”http://www.xyz.com/test. php”> klik </a> </body> </html>

Kode HTML di atas menampilkan link menuju URL http://www.xyz.com/test. php, sedangkan test.php berisi kode PHP sebagai berikut:


<?php echo “Request berasal dari: “ . $HTTP_REFERER; ?>

Jika pengguna menjalankan http:// www.xyz.com/request.html, dan mengklik link tersebut, maka browser akan menampilkan hasil:


Request berasal dari: http://www.xyz. com/request.html

Dalam hal ini, program mengetahui bahwa request dipanggil melalui domain yang valid, yaitu xyz.com. Jika seseorang mencoba mengirimkan link http://www. xyz.com/test.php melalui chat atau e mail, bisa jadi hasil yang didapatkan adalah:


Request berasal dari:

Artinya, variabel $HTTP_REFERER tidak berisi nilai apapun, atau bisa saja menampilkan nilai diluar domain xyz. com. Dengan demikian dapat diasumsikan bahwa percobaan serangan CSRF sedang dilakukan, sehingga dapat dilakukan tindakan pencegahan yang diperlukan. Walaupun demikian, cara ini tidak menjamin informasi header referer selalu benar, terutama untuk browser dan proxy yang mengabaikan header referer dengan pertimbangan privacy.

2. Menyertakan otentifi kasi tambahan pada parameter POST atau GET

Cara ini tidak hanya mengandalkan otentifi kasi berdasarkan cookies yang berada pada sisi client, tetapi juga ditambah dengan sebuah token yang dikirim melalui parameter POST atau GET, token berupa server side session berisi id unik yang di-generate oleh script setiap kali request dilakukan. Contohnya, terdapat fi le request.php dengan kode berikut:


<?php session_start(); $token = md5(rand()); $_SESSION[‘token’] = $token; echo “<a href=’http://www.xyz.com/ test.php?token=$token’> klik </a>”; ?>

Pada fi le test.php yang merupakan URL tujuan, berisi validasi token seperti berikut:


<?php session_start(); if($_SESSION[‘token’] == $_ GET[‘token’]) { echo “Valid”; } else { echo “Invalid”; } ?>

Jika token valid, maka akan tampil teks “Valid”. Jika tidak, akan tampil teks “Invalid” pada browser.

BAGAIMANA CSRF MENYERANG

Celah keamanan CSRF (baca “sea-surf”) telah dikenal sejak tahun 1990-an dalam beberapa kasus eksploitasi, dan tetap mengancam sampai saat ini, seiring dengan semakin menjamurnya berbagai website dengan teknologi dan fiturnya masing-masing. CSRF merupakan pemalsuan request yang berasal dari site yang berbeda, tetapi dari sisi client tidak mengubah alamat IP, karena memang dieksekusi oleh korban.

Penyerang mengirimkan link atau halaman berisi request tersembunyi pada pengguna (korban), yang dieksekusi oleh pengguna tersebut ke website target. Dalam menyusun serangan, penyerang akan mempelajari terlebih dahulu kelemahan-kelemahan website target yang dapat dimanfaatkan dengan teknik CSRF.

Website yang menyimpan cookies sehingga mengizinkan pengguna untuk datang kembali tanpa mengetikkan username dan password, akan menarik perhatian penyerang untuk lebih mengeksplorasi fi tur-fi tur yang terdapat pada website setelah login dilakukan.

Berhati-hatilah karena walaupun Anda membuat website yang cukup strict dalam masalah login, website tersebut belum tentu aman 100% dari serangan CSRF. Bagaimana jika website tersebut memiliki fi tur message/mailbox seperti yang dimiliki berbagai website jejaring sosial dan webmail? E-mail atau message berbahaya dikirimkan langsung ke mailbox Anda.

Penyerang juga akan mempelajari apakah website melakukan pengecekan header atau token berisi id unik. Jika pengamanan ini tidak dilakukan dan hanya berdasarkan session/cookies saat login, maka serangan CSRF dapat dilakukan tanpa masalah berarti.

Eksplorasi berikutnya adalah melihat fi tur apa saja yang disediakan website, mungkin berbentuk form atau button/link yang dapat di-submit.

Penyerang akan melihat fungsinya, aksi-aksi sensitif seperti delete account, change password, mengubah preferensi, dan sebagainya, akan menarik perhatian penyerang untuk dimanfaatkan bagi kepentingan dirinya.

Jika terdapat parameter yang berpotensi digunakan dalam serangan CSRF, maka penyerang akan menentukan nilai parameter dalam penyerangannya. Jika terdapat hidden input berisi token rahasia, penyerang akan berusaha menemukan algoritma dan menebak isi fi eld tersebut. Setelah serangan siap dilancarkan, penyerang akan berusaha menarik korbannya dengan link atau halaman yang mengandung request tersembunyi.

Semakin website Anda dikenal, semakin berpotensi dieksplorasi oleh siapapun. Hanya dengan memahami pemikiran dan usaha yang mungkin dilakukan penyerang, maka perancangan aplikasi web dapat diarahkan pada tindak pengamanan yang tepat.


3. Membatasi jangka waktu kadaluarsa cookies/session

Walaupun seringkali cookies merupakan pilihan pengguna, misalnya apakah ingin mencentang pilihan “remember me” pada form login, ataupun dapat menghapus sendiri cookies pada browser, dari sisi aplikasi web juga perlu mengantisipasi keamanan pengguna dengan memperhitungkan jangka waktu kadaluarsa cookies. Untuk website perbankan atau transaksi online, umumnya jika tidak terjadi aktivitas apapun (idle) pada periode waktu yang ditentukan, maka pengguna akan logout secara otomatis.

4. URL Rewriting

Penggunaan URL Rewriting yang tidak menunjukkan parameter rumit tidak hanya untuk membuat website Anda lebih friendly bagi search engine, tetapi juga mempersulit penyerangan CSRF yang memanfaatkan parameter.

5. CAPTCHA

Penggunaan CAPTCHA umumnya digunakan untuk memastikan aksi dilakukan oleh manusia, bukan oleh komputer atau program robot yang dirancang untuk melakukannya secara otomatis. Contohnya dalam mem-posting komentar pada blog/forum, proses registrasi anggota, dan sebagainya. Untuk menahan serangan CSRF, penggunaan CAPTCHA dapat dipertimbangkan agar aplikasi web menampilkan konfi rmasi apakah pengguna benar ingin melakukan aksi tertentu. Walaupun perlu dipertimbangkan juga tingkat kenyamanan pengguna jika aplikasi terlalu banyak menampilkan CAPTCHA dengan kerumitannya masing-masing. Gambar 1 menunjukkan beberapa bentuk CAPTCHA.

Pencegahan dari Sisi Client

Pencegahan dari sisi client/pengguna merupakan hal lain yang cukup kompleks, serangan CSRF dapat terjadi sekalipun Anda beroperasi pada komputer dengan perlindungan fi rewall tangguh dan antivirus ter-update. Umumnya serangan CSRF dilakukan dengan bantuan teknik social engineering, sehingga pengetahuan pengguna memegang peranan penting agar tidak terjebak. Selalu ingat untuk logout setelah menggunakan sebuah aplikasi web juga merupakan salah satu tindak pencegahan.

Mengutamakan Keamanan

Berbagai website (termasuk yang sudah populer sekalipun) memiliki titik kerawanan serangan CSRF, yang timbul karena fi tur yang dihadirkan website tersebut. Di lain sisi, kita tidak ingin hanya memiliki website HTML statik (yang dijamin kebal serangan CSRF). Sebuah fi tur memang dapat memanjakan pengguna, tetapi mengamankan pengguna dari berbagai serangan, merupakan sebuah fasilitas yang harus diutamakan dalam pembangunan aplikasi web.

Demikian pembahasan singkat tentang Pemahaman CSRF dalam Metode Menyerang Pada Situs Website. Mudah-mudahan akan memberikan manfaat bagi kita semua, jangan lupa masukan berupa saran, kritik atau sekedar komen selalu saya tunggu dan tak lupa selalu saya ucapkan terima kasih.

Share this with short URL:

You Might Also Like:

Use parse tool to easy get the text style on disqus comments:
Show Parser Hide Parser