Được rồi, đủ đình trệ; Đây là những gì tôi nghĩ ra cho đến nay
(xin lỗi, bài viết dài phía trước. Hãy dũng cảm, bạn ạ, cuộc hành trình sẽ có giá trị)
Kết hợp các phương pháp 3 và 4 từ bài đăng gốc thành một loại 'danh sách mờ' hoặc danh sách trắng động, và sau đó - và đây là mẹo - không chặn các IP không có trong danh sách trắng, chỉ cần đẩy chúng xuống địa ngục và quay lại .
Lưu ý rằng biện pháp này chỉ nhằm ngăn chặn kiểu tấn công rất cụ thể này. Trong thực tế, tất nhiên, nó sẽ hoạt động kết hợp với các cách tiếp cận thực tiễn tốt nhất khác để xác thực: điều chỉnh tên người dùng cố định, điều chỉnh trên mỗi IP, chính sách mật khẩu mạnh được thực thi bằng mã, đăng nhập cookie không được lưu trữ, băm tất cả các mật khẩu tương đương trước khi lưu chúng, không bao giờ sử dụng câu hỏi bảo mật, vv
Giả định về kịch bản tấn công
Nếu kẻ tấn công đang nhắm mục tiêu tên người dùng khác nhau, điều chỉnh tên người dùng của chúng tôi sẽ không kích hoạt. Nếu kẻ tấn công đang sử dụng botnet hoặc có quyền truy cập vào phạm vi IP lớn, việc điều chỉnh IP của chúng tôi là bất lực. Nếu kẻ tấn công đã quét trước danh sách người dùng của chúng tôi (thường có thể trên các dịch vụ web đăng ký mở), chúng tôi không thể phát hiện một cuộc tấn công đang diễn ra dựa trên số lỗi 'không tìm thấy người dùng'. Và nếu chúng tôi thực thi điều tiết toàn hệ thống hạn chế (tất cả tên người dùng, tất cả IP), thì bất kỳ cuộc tấn công nào như vậy sẽ làm toàn bộ trang web của chúng tôi trong suốt thời gian của cuộc tấn công cộng với thời gian điều tiết.
Vì vậy, chúng ta cần phải làm một cái gì đó khác.
Phần đầu tiên của biện pháp đối phó: Danh sách trắng
Điều chúng ta có thể khá chắc chắn, đó là kẻ tấn công không thể phát hiện và tự động giả mạo địa chỉ IP của hàng ngàn người dùng của chúng tôi (+). Mà làm cho danh sách trắng khả thi. Nói cách khác: đối với mỗi người dùng, chúng tôi lưu trữ một danh sách các IP (được băm) từ nơi người dùng đã đăng nhập trước đó (gần đây).
Do đó, chương trình danh sách trắng của chúng tôi sẽ hoạt động như một 'cửa trước' bị khóa, trong đó người dùng phải được kết nối từ một trong những IP 'tốt' được công nhận của mình để đăng nhập. Một cuộc tấn công vũ phu vào 'cửa trước' này thực tế là không thể (+).
. -tìm tình huống FUBAR
Phần thứ hai của biện pháp đối phó: Điều chỉnh toàn bộ hệ thống của các IP không được nhận dạng
Để làm cho danh sách trắng hoạt động cho dịch vụ web đăng ký mở, nơi người dùng chuyển đổi máy tính thường xuyên và / hoặc kết nối từ địa chỉ IP động, chúng tôi cần mở 'cửa mèo' cho người dùng kết nối từ các IP không được nhận dạng. Bí quyết là thiết kế cánh cửa đó để botnet bị kẹt, và vì vậy người dùng hợp pháp bị làm phiền ít nhất có thể .
Trong sơ đồ của tôi, điều này đạt được bằng cách đặt số lần đăng nhập thất bại tối đa rất hạn chế bởi các IP không được chấp thuận trong khoảng thời gian 3 giờ (có thể khôn ngoan hơn khi sử dụng thời gian ngắn hơn hoặc dài hơn tùy thuộc vào loại dịch vụ) và làm cho hạn chế đó toàn cầu , tức là. cho tất cả các tài khoản người dùng.
Ngay cả một lực lượng vũ phu chậm (1-2 phút giữa các lần thử) sẽ được phát hiện và ngăn chặn nhanh chóng và hiệu quả bằng phương pháp này. Tất nhiên, một lực lượng vũ phu thực sự chậm vẫn có thể không được chú ý, nhưng tốc độ quá chậm đánh bại mục đích chính của cuộc tấn công vũ phu.
Điều tôi hy vọng đạt được với cơ chế tiết lưu này là nếu đạt đến giới hạn tối đa, 'cửa mèo' của chúng tôi đóng lại trong một thời gian, nhưng cửa trước của chúng tôi vẫn mở cho người dùng hợp pháp kết nối bằng các phương tiện thông thường:
- Bằng cách kết nối từ một trong những IP được công nhận của họ
- Hoặc bằng cách sử dụng cookie đăng nhập liên tục (từ bất cứ đâu)
Người dùng hợp pháp duy nhất sẽ bị ảnh hưởng trong một cuộc tấn công - tức là. trong khi điều chỉnh được kích hoạt - sẽ là người dùng không có cookie đăng nhập liên tục, những người đang đăng nhập từ một vị trí không xác định hoặc bằng một IP động. Những người dùng đó sẽ không thể đăng nhập cho đến khi điều tiết bị tắt (điều này có thể mất một thời gian, nếu kẻ tấn công giữ botnet của anh ta chạy mặc dù điều tiết).
Để cho phép nhóm người dùng nhỏ này siết chặt cửa mèo bịt kín, ngay cả khi các bot vẫn đang cố gắng sử dụng nó, tôi sẽ sử dụng mẫu đăng nhập 'sao lưu' với CAPTCHA. Vì vậy, khi bạn hiển thị thông báo "Xin lỗi, nhưng bạn không thể đăng nhập từ địa chỉ IP này vào lúc này", bao gồm một liên kết có nội dung " đăng nhập sao lưu an toàn - CHỈ CÓ CON NGƯỜI ( bot: không nói dối ) ". Đùa sang một bên, khi họ nhấp vào liên kết đó, hãy cung cấp cho họ một hình thức đăng nhập được xác thực reCAPTCHA mà bỏ qua điều chỉnh trên toàn trang web. Bằng cách đó, NẾU họ là con người VÀ biết mật khẩu đăng nhập + chính xác (và có thể đọc CAPTCHA), họ sẽ không bao giờ bị từ chối dịch vụ, ngay cả khi họ đang kết nối từ một máy chủ không xác định và không sử dụng cookie tự động.
Ồ, và chỉ để làm rõ: Vì tôi thực sự coi CAPTCHA là xấu, nên tùy chọn đăng nhập 'sao lưu' sẽ chỉ xuất hiện khi điều chỉnh hoạt động .
Không thể phủ nhận rằng một cuộc tấn công được duy trì như thế vẫn sẽ tạo thành một hình thức tấn công DoS, nhưng với hệ thống được mô tả, nó sẽ chỉ ảnh hưởng đến những gì tôi nghi ngờ là một tập hợp con nhỏ của người dùng, cụ thể là những người không sử dụng Cookie "nhớ tôi" VÀ tình cờ đăng nhập trong khi một cuộc tấn công đang xảy ra VÀ không đăng nhập từ bất kỳ IP thông thường nào của họ VÀ những người không thể đọc CAPTCHA. Chỉ những người có thể nói không với TẤT CẢ các tiêu chí đó - cụ thể là bot và những người khuyết tật thực sự không may mắn - sẽ bị từ chối trong một cuộc tấn công bot.
EDIT: Thực tế, tôi đã nghĩ ra một cách để cho phép ngay cả những người dùng bị thách thức CAPTCHA vượt qua trong khi 'khóa máy': thay vì, hoặc như một phần bổ sung cho đăng nhập CAPTCHA dự phòng, cung cấp cho người dùng một tùy chọn để sử dụng một lần , mã khóa cụ thể của người dùng được gửi đến email của anh ta, sau đó anh ta có thể sử dụng để bỏ qua điều tiết. Điều này chắc chắn vượt qua ngưỡng 'phiền toái' của tôi, nhưng vì nó chỉ được sử dụng như là phương sách cuối cùng cho một nhóm nhỏ người dùng và vì nó vẫn bị khóa khỏi tài khoản của bạn, nên có thể chấp nhận được.
(Ngoài ra, lưu ý rằng không có điều này xảy ra nếu cuộc tấn công kém tinh vi hơn phiên bản phân tán khó chịu mà tôi đã mô tả ở đây. Nếu cuộc tấn công đến từ chỉ một vài IP hoặc chỉ đánh một vài tên người dùng, nó sẽ bị cản trở sớm hơn nhiều và không có hậu quả trên toàn trang web)
Vì vậy, đó là biện pháp đối phó mà tôi sẽ thực hiện trong thư viện xác thực của mình, một khi tôi tin rằng đó là âm thanh và đó không phải là một giải pháp đơn giản hơn nhiều mà tôi đã bỏ lỡ. Thực tế là, có rất nhiều cách tinh tế để làm những điều sai trái trong bảo mật, và tôi không ở trên đưa ra những giả định sai lầm hoặc logic thiếu sót vô vọng. Vì vậy, xin vui lòng, bất kỳ và tất cả thông tin phản hồi, chỉ trích và cải tiến, tinh tế, vv được đánh giá cao.