Mục lục
Password Spraying Attack là gì?
Password Spraying Attack là kỹ thuật chỉ sử dụng một mật khẩu phổ biến để dò đoán cho tất cả tài khoản tồn tại trong hệ thống.
Kỹ thuật tấn công Password Spraying Attack nằm trong hạng mục Identification and Authentication Failures được nhắc tới trong Top 10 lỗ hổng OWASP năm 2021. Mục đích của nó là tìm ra các tài khoản sử dụng mật khẩu yếu để phá vỡ chức năng xác thực người dùng (Authentication) của hệ thống.
Authentication
Authentication là cơ chế xác thực người dùng hoặc thiết bị trước khi nó được cho phép truy cập vào các tài nguyên của ứng dụng hoặc hệ thống nào đó. Quá trình này thường yêu cầu người dùng cung cấp thông tin đăng nhập như email, số điện thoại hay tên đăng nhập và mật khẩu.
Bypass Authentication
Authentication là một phần rất quan trọng của bảo mật thông tin. Nên đây là cánh cửa đầu tiên chạm mặt Hacker. Họ phải tìm cách vượt qua khi Penetration Testing (Kiểm thử xâm nhập) một trang Web. Đứng trước chức năng Login, ngay lập tức họ sẽ thực hiện tấn công dò đoán tài khoản và mật khẩu (Brute Force Attack) bằng một trong hai phương pháp Dictionary Attack và Spraying Attack.
Kỹ thuật Dictionary Attack
Trước khi tấn công, Hacker phải thực hiện việc thăm dò hệ thống và chuẩn bị hai danh sách tài khoản (username.txt) và mật khẩu (password.txt) hay được sử dụng bởi các lập trình viên. Sau đó họ sử dụng các công cụ tấn công như FFUFF hoặc Burp Suite Intruder để thử tất cả các trường hợp khả thi của tên đăng nhập và mật khẩu.
Nếu muốn cuộc tấn công có tỉ lệ thành công cao. Các Hacker phải tạo ra hai danh sách tài khoản và mật khẩu phải liên quan tới mục tiêu tấn công. Hacker lúc này sẽ phải nghiên cứu hành vi và thói quen đặt mật khẩu của người dùng. Tuy nhiên, kiểu tấn công này vẫn tốn rất nhiều thời gian vì nó phải tạo ra rất nhiều trường hợp dò đoán.
Nếu hệ thống phòng vệ triển khai Account Lockout Policy – Chính sách tự động khoá tài khoản của người dùng sau khi đăng nhập sai N lần thì kỹ thuật tấn công này nhanh chóng bị khắc chế.
Kỹ thuật Password Spraying Attack
Hacker sẽ không chịu bó tay khi họ bị khắc chế bởi kỹ thuật phòng vệ Account Lockout Policy. Nếu hệ thống khoá tài khoản của nạn nhân sau 3 lần nhập sai, họ sẽ đoán 2 lần hoặc chỉ cần 1 lần thôi là đủ rồi. Vì nếu may mắn có xảy ra thì nó đã xảy ra.
Hacker phải tìm được thật thật nhiều tài khoản tồn tại trên hệ thống. Đây chính là điểm mấu chốt để thành công trong cuộc tấn công này. Hacker sẽ sử dụng một mật khẩu cực phổ hiến hoặc mật khẩu mặc định của tổ chức được đặt theo một công thức tổng quát nào đó, ví dụ “TenCongTy@123“.
Nếu mật khẩu của bạn không thực sự đủ mạnh hoặc nó vô tình nằm trong danh sách những mật khẩu phổ biến thì hacker có thể dò đoán và truy cập tài khoản của bạn. Các chuyên gia đều khuyên người dùng sử dụng một chuỗi ký tự ngẫu nhiên, phức tạp để đặt mật khẩu. Nhưng không phải ai trong chúng ta đều có một trí nhớ tốt hoặc có ý thức về tầm quan trọng của các tài khoản của mình.
Thay vì chuẩn bị cả 2 danh sách tài khoản và mật khẩu mất khá nhiều thời gian. Để tìm kiếm các tài khoản tồn tại chính xác trên hệ thống, họ sẽ thực hiện kỹ thuật thu thập thông tin tài khoản (Username Enumeration). Các tài khoản có thể tìm thấy ở trong các chức năng và biểu hiện dưới đây:
- Chức năng danh sách người dùng đang online
- Xem thông tin tác giả bài của bài viết
- Thông tin email, username, số điện thoại trên mạng xã hội
- Danh sách tài khoản từ các sự cố rò rỉ dữ liệu, được đăng tải trên chợ đen
- Thu thập thông tin về tài khoản qua các cảnh báo của chức năng đăng ký
Nếu chúng ta nhận được các thông báo “email [email protected] đã tồn tại trên hệ thống” hoặc “Mật khẩu cho tài khoản [email protected] không đúng” khi đăng nhập. Chúng ta dễ dàng đoán được trên hệ thống đang tồn tại tài khoản [email protected].
Cùng xét một trang web bị bypass authentication sau. Chức năng đăng nhập được thể hiện ở đường dẫn https://example.com/login.php, hai tham số username và password được truyền lên bằng phương thức POST.
POST /login.php HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 31
username=cookiehanhoan&password=wrongpass
Nếu đăng nhập đúng nó sẽ chuyển hướng người dùng về trang chủ. Còn nếu tài khoản đăng nhập sai, HTTP Response sẽ trả về mã trạng thái HTTP 401 Unauthorized, đồng thời trả về thông báo lỗi “Invalid password” để cho biết tên người dùng đã nhập đúng nhưng mật khẩu sai.
HTTP/1.1 401 Unauthorized
Content-Type: text/plain
Invalid password
Một danh sách username.txt chứa toàn bộ các tài khoản tồn tại trên hệ thống và một mật khẩu phổ biến là Password123
John
Smith
Betty
Elon Musk
Emmy
CookieHanHoan
Tấn công Password Spraying Attack bằng công cụ Hydra
Để bắt đầu việc dò đoán, họ coi cái mật khẩu vừa rồi chính là bình sơn và đem đi xịt (Sparying) lên tất cả các tài khoản mà họ kiếm được. Sau đó, họ sử dụng công cụ Hydra để thực hiện việc tạo các HTTP POST Request đăng nhập.
hydra -L usernames.txt -p "Password123" https://example.com/login.php http-post-form \
"username=^USER^&password=^PASS^:Invalid Password" -w 5 -o result.txt
Công cụ Hydra sử dụng danh sách tên người dùng trong file usernames.txt và mật khẩu cố định là “Password123” để tấn công. Các tham số trong câu lệnh được giải thích như sau:
- -L usernames.txt: Đường dẫn đến file danh sách tên người dùng.
- -p “Password123”: Mật khẩu cố định sử dụng để tấn công.
- https://example.com/login.php: Đường dẫn đến trang đăng nhập của mục tiêu
- http-post-form: Sử dụng phương thức HTTP POST để gửi yêu cầu đăng nhập.
- “username=^USER^&password=^PASS^:Invalid Password”: Tham số được gửi lên, ^USER^ và ^PASS^ sẽ được thay thế bằng tên người dùng và mật khẩu từ file usernames.txt và “Password123”. Điều kiện để phát hiện tài khoản sai mật khẩu là kiểm tra dòng chữ “Invalid Password” được trả về trong HTTP Response
- -w 5: thời gian chờ giữa mỗi lần thử đăng nhập (đơn vị là giây).
- -o result.txt: Kết quả sẽ được lưu vào file result.txt.
Tấn công Password Spraying Attack bằng công cụ FFUFF
Nếu không có Hydra, bạn có thể sử dụng công cụ FFUFF để tấn công đăng nhập tương tự trên. Cách dùng FFUF để thực hiện tấn công như sau:
ffuf -w usernames.txt:U -w 0 -u https://example.com/login.php -d "username=FUZZ&password=Password123" -X POST -fc "Invalid Password"
Trong đó:
- -w usernames.txt:U: sử dụng danh sách tên người dùng trong file usernames.txt.
- -w 0: Không sử dụng danh sách mật khẩu (do đã đặt mật khẩu là cố định là “Password123”).
- -d “username=FUZZ&password=Password123”: Dữ liệu đầu vào cho phương thức POST, với “FUZZ” sẽ được thay thế bằng các từ trong danh sách tên người dùng.
- -X POST: Sử dụng phương thức POST.
- -fc “Invalid Password”: Chỉ hiển thị các Request có Response trả về là dòng chữ Invalid Password
Ngăn chặn Tấn công Password Spraying Attack
Cả hai kỹ thuật này mặc dù đều rất dễ khai thác nhưng nó có thể gây ra thiệt hại nghiêm trọng cho người dùng và hệ thống. Để ngăn chặn các kỹ thuật tấn công này, các lập trình viên và quản trị viên hệ thống cần thực hiện các biện pháp bảo mật như:
- Sử dụng các chính sách mật khẩu mạnh
- Giới hạn (điều tiết) số lần đăng nhập (Rate Limit hoặc Throttle) không thành công
- Sử dụng sử dụng các hình thức xác thực bổ sung như Google Captcha để bảo vệ tài khoản của người dùng.
- Giới hạn IP truy cập vào chức năng đăng nhập
- Giới hạn cho chức năng đăng nhập được phép xử lý tối đa bao nhiêu khách hàng.
What do you think?
It is nice to know your opinion. Leave a comment.