PHẦN I: Cách đăng nhập
Chúng tôi sẽ cho rằng bạn đã biết cách tạo một biểu mẫu HTML đăng nhập + mật khẩu để gửi các giá trị thành tập lệnh ở phía máy chủ để xác thực. Các phần dưới đây sẽ xử lý các mẫu cho auth thực tế âm thanh và cách tránh các cạm bẫy bảo mật phổ biến nhất.
Đến HTTPS hay không HTTPS?
Trừ khi kết nối đã được bảo mật (nghĩa là được truyền qua HTTPS bằng SSL / TLS), các giá trị biểu mẫu đăng nhập của bạn sẽ được gửi trong Cleartext, cho phép bất kỳ ai nghe lén trên dòng giữa trình duyệt và máy chủ web sẽ có thể đọc thông tin đăng nhập khi chúng đi qua xuyên qua. Kiểu nghe lén này được các chính phủ thực hiện thường xuyên, nhưng nói chung, chúng tôi sẽ không giải quyết các dây 'thuộc sở hữu' ngoài việc nói điều này: Chỉ cần sử dụng HTTPS.
Về bản chất, cách thực tế duy nhất để bảo vệ chống lại việc nghe lén / phát hiện gói tin trong khi đăng nhập là sử dụng HTTPS hoặc một chương trình mã hóa dựa trên chứng chỉ khác (ví dụ: TLS ) hoặc sơ đồ phản hồi thử thách đã được kiểm chứng & thử nghiệm (ví dụ: Diffie-Hellman dựa trên SRP). Bất kỳ phương pháp nào khác có thể dễ dàng bị phá vỡ bởi một kẻ tấn công nghe lén.
Tất nhiên, nếu bạn sẵn sàng nhận được một chút không thực tế, bạn cũng có thể sử dụng một số dạng sơ đồ xác thực hai yếu tố (ví dụ: ứng dụng Google Authenticator, một cuốn sách mã 'kiểu chiến tranh lạnh' hoặc khóa máy tạo khóa RSA). Nếu được áp dụng chính xác, điều này có thể hoạt động ngay cả với kết nối không bảo mật, nhưng thật khó để tưởng tượng rằng một nhà phát triển sẽ sẵn sàng thực hiện xác thực hai yếu tố nhưng không phải SSL.
(Không) Cuộn mã hóa / băm JavaScript của riêng bạn
Do chi phí (mặc dù có thể tránh được ) và khó khăn về kỹ thuật khi thiết lập chứng chỉ SSL trên trang web của bạn, một số nhà phát triển đã cố gắng thực hiện các phương pháp băm hoặc mã hóa trong trình duyệt của riêng họ để tránh truyền thông tin đăng nhập rõ ràng qua một dây không bảo mật.
Mặc dù đây là một suy nghĩ cao quý, nhưng về cơ bản nó là vô dụng (và có thể là một lỗ hổng bảo mật ) trừ khi nó được kết hợp với một trong những điều trên - nghĩa là bảo vệ dòng bằng mã hóa mạnh hoặc sử dụng phản hồi thử thách đã được thử nghiệm cơ chế (nếu bạn không biết đó là gì, chỉ cần biết rằng đó là một trong những điều khó chứng minh nhất, khó thiết kế nhất và khó thực hiện nhất trong các khái niệm trong bảo mật kỹ thuật số).
Mặc dù việc băm mật khẩu có thể có hiệu quả đối với việc tiết lộ mật khẩu , nhưng nó rất dễ bị tấn công lại, các cuộc tấn công / tấn công Man-In-The-Middle (nếu kẻ tấn công có thể tiêm một vài byte vào trang HTML không bảo mật của bạn trước khi nó đến tay bạn Trình duyệt, họ có thể chỉ cần bình luận về việc băm trong JavaScript) hoặc các cuộc tấn công vũ phu (vì bạn đang trao cho kẻ tấn công cả tên người dùng, mật khẩu và mật khẩu băm).
CAPTCHAS chống lại loài người
CAPTCHA có nghĩa là để ngăn chặn một loại tấn công cụ thể: từ điển tự động / thử nghiệm và lỗi không có người vận hành. Không có nghi ngờ rằng đây là một mối đe dọa thực sự, tuy nhiên, có nhiều cách để xử lý nó một cách liền mạch mà không yêu cầu CAPTCHA, các kế hoạch điều chỉnh đăng nhập phía máy chủ được thiết kế đặc biệt - chúng ta sẽ thảo luận về những vấn đề này sau.
Biết rằng việc triển khai CAPTCHA không được tạo giống nhau; chúng thường không thể hòa tan được với con người, hầu hết chúng thực sự không hiệu quả với bot, tất cả chúng đều không hiệu quả đối với lao động thế giới thứ ba rẻ tiền (theo OWASP , tỷ lệ đổ mồ hôi hiện tại là 12 đô la trên 500 thử nghiệm), và một số triển khai có thể là về mặt kỹ thuật bất hợp pháp ở một số quốc gia (xem Bảng cheat xác thực OWASP ). Nếu bạn phải sử dụng CAPTCHA, hãy sử dụng reCAPTCHA của Google , vì định nghĩa đó là OCR-hard (vì nó sử dụng quét sách đã phân loại sai OCR) và rất cố gắng thân thiện với người dùng.
Cá nhân, tôi có xu hướng thấy CAPTCHAS gây phiền nhiễu và chỉ sử dụng chúng như là phương sách cuối cùng khi người dùng không đăng nhập được một số lần và độ trễ điều chỉnh được tối đa hóa. Điều này sẽ hiếm khi đủ để được chấp nhận và nó củng cố toàn bộ hệ thống.
Lưu mật khẩu / Xác minh thông tin đăng nhập
Đây cuối cùng có thể là kiến thức phổ biến sau khi tất cả các vụ hack và rò rỉ dữ liệu người dùng được công bố rộng rãi mà chúng ta đã thấy trong những năm gần đây, nhưng phải nói rằng: Không lưu trữ mật khẩu trong văn bản rõ ràng trong cơ sở dữ liệu của bạn. Cơ sở dữ liệu người dùng thường xuyên bị hack, rò rỉ hoặc lượm lặt thông qua SQL SQL và nếu bạn đang lưu trữ mật khẩu thô, thô, đó là trò chơi tức thì để bảo mật đăng nhập của bạn.
Vì vậy, nếu bạn không thể lưu trữ mật khẩu, làm thế nào để bạn kiểm tra xem kết hợp đăng nhập + mật khẩu được gửi từ biểu mẫu đăng nhập có đúng không? Câu trả lời là băm bằng cách sử dụng hàm phái sinh chính . Bất cứ khi nào người dùng mới được tạo hoặc thay đổi mật khẩu, bạn lấy mật khẩu và chạy nó thông qua một KDF, chẳng hạn như Argon2, bcrypt, scrypt hoặc PBKDF2, biến mật khẩu Cleartext ("chính xác là" tìm kiếm ngẫu nhiên ") , an toàn hơn rất nhiều để lưu trữ trong cơ sở dữ liệu của bạn. Để xác minh đăng nhập, bạn chạy cùng hàm băm trên mật khẩu đã nhập, lần này chuyển qua muối và so sánh chuỗi băm kết quả với giá trị được lưu trữ trong cơ sở dữ liệu của bạn. Argon2, bcrypt và scrypt lưu trữ muối với hàm băm đã có. Kiểm tra bài viết này trên sec.stackexchange để biết thêm thông tin chi tiết.
Lý do một loại muối được sử dụng là bản thân việc băm là không đủ - bạn sẽ muốn thêm cái gọi là 'muối' để bảo vệ hàm băm chống lại các bảng cầu vồng . Một muối có hiệu quả ngăn chặn hai mật khẩu khớp chính xác với việc được lưu trữ dưới cùng một giá trị băm, ngăn toàn bộ cơ sở dữ liệu được quét trong một lần chạy nếu kẻ tấn công đang thực hiện một cuộc tấn công đoán mật khẩu.
Không nên sử dụng hàm băm mật mã để lưu trữ mật khẩu vì mật khẩu do người dùng chọn không đủ mạnh (nghĩa là thường không chứa đủ entropy) và một cuộc tấn công đoán mật khẩu có thể được hoàn thành trong một thời gian tương đối ngắn bởi kẻ tấn công có quyền truy cập vào bảng băm. Đây là lý do tại sao các KDF được sử dụng - những cách này "kéo dài khóa" một cách hiệu quả , điều đó có nghĩa là mọi mật khẩu đoán kẻ tấn công gây ra nhiều lần lặp lại thuật toán băm, ví dụ 10.000 lần, khiến kẻ tấn công đoán mật khẩu chậm hơn 10.000 lần.
Dữ liệu phiên - "Bạn đã đăng nhập với tư cách Người nhện69"
Khi máy chủ đã xác minh thông tin đăng nhập và mật khẩu đối với cơ sở dữ liệu người dùng của bạn và tìm thấy sự trùng khớp, hệ thống cần một cách để nhớ rằng trình duyệt đã được xác thực. Thực tế này chỉ nên được lưu trữ phía máy chủ trong dữ liệu phiên.
Nếu bạn không quen với dữ liệu phiên, thì đây là cách nó hoạt động: Một chuỗi được tạo ngẫu nhiên duy nhất được lưu trữ trong một cookie hết hạn và được sử dụng để tham chiếu bộ sưu tập dữ liệu - dữ liệu phiên - được lưu trữ trên máy chủ. Nếu bạn đang sử dụng một khung công tác MVC, điều này chắc chắn đã được xử lý.
Nếu có thể, hãy đảm bảo cookie phiên có cờ an toàn và chỉ HTTP được đặt khi được gửi tới trình duyệt. Cờ httpOnly cung cấp một số bảo vệ chống lại cookie được đọc thông qua cuộc tấn công XSS. Cờ bảo mật đảm bảo rằng cookie chỉ được gửi lại qua HTTPS và do đó bảo vệ chống lại các cuộc tấn công đánh hơi mạng. Giá trị của cookie không nên dự đoán được. Khi một cookie tham chiếu phiên không tồn tại được trình bày, giá trị của nó phải được thay thế ngay lập tức để ngăn việc sửa phiên .
PHẦN II: Cách duy trì đăng nhập - Hộp kiểm "Nhớ tôi" khét tiếng
Cookies đăng nhập liên tục (chức năng "nhớ tôi") là một khu vực nguy hiểm; một mặt, chúng hoàn toàn an toàn như thông tin đăng nhập thông thường khi người dùng hiểu cách xử lý chúng; và mặt khác, chúng là một rủi ro bảo mật rất lớn trong tay của những người dùng bất cẩn, những người có thể sử dụng chúng trên máy tính công cộng và quên đăng xuất và ai có thể không biết cookie trình duyệt là gì hoặc cách xóa chúng.
Cá nhân, tôi thích đăng nhập liên tục cho các trang web tôi truy cập thường xuyên, nhưng tôi biết cách xử lý chúng một cách an toàn. Nếu bạn khẳng định rằng người dùng của bạn biết điều tương tự, bạn có thể sử dụng thông tin đăng nhập liên tục với một lương tâm trong sạch. Nếu không - tốt, thì bạn có thể đăng ký triết lý rằng người dùng bất cẩn với thông tin đăng nhập của họ đã tự mang nó nếu họ bị hack. Không giống như chúng ta đến nhà của người dùng và xé tất cả những ghi chú Post-It gây ra bằng mặt với mật khẩu mà họ đã xếp hàng trên cạnh màn hình của họ.
Tất nhiên, một số hệ thống không đủ khả năng để có bất kỳ tài khoản nào bị hack; Đối với các hệ thống như vậy, không có cách nào bạn có thể biện minh cho việc đăng nhập liên tục.
Nếu bạn quyết định triển khai cookie đăng nhập liên tục, đây là cách bạn thực hiện:
Trước tiên, hãy dành chút thời gian để đọc bài viết của Paragon Initiative về chủ đề này. Bạn sẽ cần phải có một loạt các yếu tố đúng, và bài viết làm rất tốt công việc giải thích từng yếu tố.
Và chỉ để nhắc lại một trong những cạm bẫy phổ biến nhất, ĐỪNG LƯU TRỮ COOKIE ĐĂNG KÝ NGHIÊM TÚC (TOKEN) TRONG CƠ SỞ DỮ LIỆU CỦA BẠN, CHỈ CÓ MỘT VẤN ĐỀ CỦA NÓ! Mã thông báo đăng nhập là Mật khẩu tương đương, vì vậy nếu kẻ tấn công có được cơ sở dữ liệu của bạn, họ có thể sử dụng mã thông báo để đăng nhập vào bất kỳ tài khoản nào, giống như chúng là các kết hợp mật khẩu đăng nhập rõ ràng. Do đó, sử dụng băm (theo https://security.stackexchange.com/a/63438/5002 một hàm băm yếu sẽ làm tốt cho mục đích này) khi lưu trữ mã thông báo đăng nhập liên tục.
PHẦN III: Sử dụng câu hỏi bí mật
Đừng thực hiện 'những câu hỏi bí mật' . Tính năng 'câu hỏi bí mật' là mô hình chống bảo mật. Đọc bài viết từ liên kết số 4 từ danh sách PHẢI-ĐỌC. Bạn có thể hỏi Sarah Palin về điều đó, sau Yahoo! tài khoản email đã bị hack trong một chiến dịch tranh cử tổng thống trước đó vì câu trả lời cho câu hỏi bảo mật của cô là ... "Trường trung học Wasilla"!
Ngay cả với các câu hỏi do người dùng chỉ định, rất có khả năng hầu hết người dùng sẽ chọn:
Một câu hỏi bí mật 'tiêu chuẩn' như tên thời con gái của mẹ hoặc thú cưng yêu thích
Một mẩu chuyện nhỏ đơn giản mà bất cứ ai cũng có thể nâng lên từ blog, hồ sơ LinkedIn hoặc tương tự của họ
Bất kỳ câu hỏi nào dễ trả lời hơn là đoán mật khẩu của họ. Mà, đối với bất kỳ mật khẩu phong nha, là mọi câu hỏi bạn có thể tưởng tượng
Tóm lại, các câu hỏi bảo mật vốn không an toàn trong hầu hết tất cả các dạng và biến thể của chúng, và không nên được sử dụng trong sơ đồ xác thực vì bất kỳ lý do nào.
Lý do thực sự tại sao các câu hỏi bảo mật thậm chí tồn tại ngoài tự nhiên là vì chúng thuận tiện tiết kiệm chi phí cho một vài cuộc gọi hỗ trợ từ những người dùng không thể truy cập email của họ để nhận mã kích hoạt lại. Điều này với chi phí bảo mật và danh tiếng của Sarah Palin. Có đáng không? Chắc là không.
PHẦN IV: Chức năng mật khẩu bị quên
Tôi đã đề cập tại sao bạn không bao giờ nên sử dụng các câu hỏi bảo mật để xử lý mật khẩu người dùng bị quên / mất; cũng không cần phải nói rằng bạn không bao giờ nên gửi email cho người dùng mật khẩu thực tế của họ. Có ít nhất hai cạm bẫy quá phổ biến cần tránh trong lĩnh vực này:
Không đặt lại mật khẩu đã quên thành mật khẩu mạnh được tạo tự động - những mật khẩu đó rất khó nhớ, điều đó có nghĩa là người dùng phải thay đổi hoặc ghi lại - giả sử, trên Post-It màu vàng sáng trên cạnh màn hình của họ. Thay vì đặt mật khẩu mới, chỉ cần cho phép người dùng chọn một mật khẩu mới ngay lập tức - đó là những gì họ muốn làm bằng mọi cách. (Một ngoại lệ cho điều này có thể là nếu người dùng đang sử dụng phổ biến trình quản lý mật khẩu để lưu trữ / quản lý mật khẩu mà thông thường không thể nhớ được nếu không ghi lại).
Luôn băm mã mật khẩu / mã thông báo bị mất trong cơ sở dữ liệu. LẠI , mã này là một ví dụ khác về Mật khẩu tương đương, vì vậy nó PHẢI được băm trong trường hợp kẻ tấn công có được cơ sở dữ liệu của bạn. Khi mã mật khẩu bị mất được yêu cầu, hãy gửi mã bản rõ đến địa chỉ email của người dùng, sau đó băm nó, lưu mã băm trong cơ sở dữ liệu của bạn - và vứt bỏ bản gốc . Giống như mật khẩu hoặc mã thông báo đăng nhập liên tục.
Lưu ý cuối cùng: luôn đảm bảo giao diện của bạn để nhập 'mã mật khẩu bị mất' ít nhất là an toàn như chính hình thức đăng nhập của bạn, hoặc kẻ tấn công sẽ chỉ sử dụng điều này để có quyền truy cập thay thế. Đảm bảo rằng bạn tạo rất lâu 'mã mật khẩu bị mất' (ví dụ: 16 ký tự chữ và số phân biệt chữ hoa chữ thường) là một khởi đầu tốt, nhưng hãy xem xét thêm sơ đồ điều chỉnh giống như bạn làm cho chính biểu mẫu đăng nhập.
PHẦN V: Kiểm tra cường độ mật khẩu
Trước tiên, bạn sẽ muốn đọc bài viết nhỏ này để kiểm tra thực tế: 500 mật khẩu phổ biến nhất
Được rồi, vì vậy, có thể danh sách này không phải là danh sách chính thức của các mật khẩu phổ biến nhất trên bất kỳ hệ thống nào ở mọi nơi , nhưng đó là một dấu hiệu tốt về việc mọi người sẽ chọn mật khẩu kém như thế nào khi không có chính sách bắt buộc. Thêm vào đó, danh sách trông đáng sợ gần nhà khi bạn so sánh nó với các phân tích có sẵn công khai về mật khẩu bị đánh cắp gần đây.
Vì vậy: Không có yêu cầu về độ mạnh mật khẩu tối thiểu, 2% người dùng sử dụng một trong 20 mật khẩu phổ biến nhất. Ý nghĩa: nếu kẻ tấn công chỉ nhận được 20 lần thử, 1 trong 50 tài khoản trên trang web của bạn sẽ bị bẻ khóa.
Việc ngăn chặn điều này đòi hỏi phải tính toán entropy của mật khẩu và sau đó áp dụng ngưỡng. Ấn bản đặc biệt của Viện Tiêu chuẩn và Công nghệ (NIST) 800-63 có một loạt các đề xuất rất tốt. Điều đó, khi kết hợp với phân tích bố cục từ điển và bàn phím (ví dụ: 'qwertyuiop' là mật khẩu xấu), có thể từ chối 99% tất cả mật khẩu được chọn kém ở mức 18 bit của entropy. Đơn giản chỉ cần tính toán cường độ mật khẩu và hiển thị máy đo cường độ thị giác cho người dùng là tốt, nhưng không đủ. Trừ khi nó được thi hành, rất nhiều người dùng rất có thể sẽ bỏ qua nó.
Và để làm mới về tính thân thiện của người dùng đối với mật khẩu có độ entropy cao, Mật khẩu Sức mạnh xkcd của Randall Munroe rất được khuyến khích.
Sử dụng API đã được kiểm tra của Troy Hunt để kiểm tra mật khẩu của người dùng đối với mật khẩu bị xâm phạm trong các vi phạm dữ liệu công khai.
PHẦN VI: Nhiều hơn nữa - Hoặc: Ngăn chặn các nỗ lực đăng nhập nhanh
Trước tiên, hãy xem các con số: Tốc độ khôi phục mật khẩu - Mật khẩu của bạn sẽ đứng trong bao lâu
Nếu bạn không có thời gian để xem qua các bảng trong liên kết đó, thì đây là danh sách của chúng:
Phải mất hầu như không có thời gian để crack một mật khẩu yếu, ngay cả khi bạn đang nứt nó với một bàn tính
Phải mất hầu như không có thời gian để crack mật khẩu 9 ký tự chữ và số nếu nó là trường hợp nhạy cảm
Phải mất hầu như không có thời gian để crack một phức tạp, biểu tượng và chữ cái-và-con số, mật khẩu trên-và-chữ thường nếu nó là dài ít hơn 8 ký tự (một máy tính để bàn có thể tìm kiếm toàn bộ keyspace lên đến 7 ký tự trong một vấn đề của ngày hoặc thậm chí giờ)
Tuy nhiên, sẽ mất một lượng thời gian không đáng có để bẻ khóa ngay cả mật khẩu 6 ký tự, nếu bạn bị giới hạn một lần thử mỗi giây!
Vậy chúng ta có thể học được gì từ những con số này? Chà, rất nhiều, nhưng chúng ta có thể tập trung vào phần quan trọng nhất: thực tế là ngăn chặn số lượng lớn các nỗ lực đăng nhập liên tiếp nhanh chóng (ví dụ như cuộc tấn công vũ phu ) thực sự không khó. Nhưng ngăn chặn nó đúng không dễ như bạn tưởng.
Nói chung, bạn có ba lựa chọn hoàn toàn hiệu quả trước các cuộc tấn công vũ phu (và tấn công từ điển, nhưng vì bạn đã sử dụng chính sách mật khẩu mạnh, nên chúng không phải là vấn đề) :
Trình bày CAPTCHA sau khi N thất bại (khó chịu như địa ngục và thường không hiệu quả - nhưng tôi đang lặp lại ở đây)
Khóa tài khoản và yêu cầu xác minh email sau khi N thất bại (đây là một cuộc tấn công DoS đang chờ xảy ra)
Và cuối cùng, đăng nhập điều chỉnh : nghĩa là thiết lập độ trễ thời gian giữa các lần thử sau N lần thử thất bại (vâng, các cuộc tấn công DoS vẫn có thể xảy ra, nhưng ít nhất chúng có khả năng giảm đi rất nhiều và phức tạp hơn rất nhiều).
Thực tiễn tốt nhất # 1: Độ trễ thời gian ngắn tăng theo số lần thử thất bại, như:
- 1 lần thất bại = không chậm trễ
- 2 lần thất bại = chậm 2 giây
- 3 lần thất bại = chậm 4 giây
- 4 lần thất bại = chậm 8 giây
- 5 lần thất bại = chậm 16 giây
- Vân vân.
DoS tấn công sơ đồ này sẽ rất không thực tế, vì thời gian khóa kết quả lớn hơn một chút so với tổng số lần khóa trước đó.
Để làm rõ: Sự chậm trễ không phải là sự chậm trễ trước khi trả lại phản hồi cho trình duyệt. Nó giống như một khoảng thời gian chờ hoặc thời gian chịu lửa trong đó đăng nhập cố gắng vào một tài khoản cụ thể hoặc từ một địa chỉ IP cụ thể sẽ không được chấp nhận hoặc đánh giá. Đó là, thông tin đăng nhập chính xác sẽ không trở lại trong một lần đăng nhập thành công và thông tin đăng nhập không chính xác sẽ không kích hoạt sự gia tăng độ trễ.
Cách thực hành tốt nhất # 2: Độ trễ thời gian dài trung bình có hiệu lực sau N lần thử thất bại, như:
- 1-4 lần thất bại = không chậm trễ
- 5 lần thất bại = chậm 15-30 phút
DoS tấn công sơ đồ này sẽ không thực tế, nhưng chắc chắn có thể thực hiện được. Ngoài ra, có thể có liên quan để lưu ý rằng một sự chậm trễ lâu như vậy có thể rất khó chịu cho một người dùng hợp pháp. Người dùng hay quên sẽ không thích bạn.
Cách thực hành tốt nhất # 3: Kết hợp hai cách tiếp cận - có thể là độ trễ thời gian ngắn cố định có hiệu lực sau N lần thử thất bại, như:
- 1-4 lần thất bại = không chậm trễ
- Hơn 5 lần thử thất bại = độ trễ 20 giây
Hoặc, độ trễ tăng dần với giới hạn trên cố định, như:
- 1 lần thử thất bại = chậm 5 giây
- 2 lần thất bại = chậm 15 giây
- Hơn 3 lần thất bại = độ trễ 45 giây
Lược đồ cuối cùng này được lấy từ các đề xuất thực tiễn tốt nhất của OWASP (liên kết 1 từ danh sách MUST-READ) và nên được coi là thực tiễn tốt nhất, ngay cả khi nó được thừa nhận ở phía hạn chế.
Tuy nhiên, theo nguyên tắc thông thường, tôi sẽ nói: chính sách mật khẩu của bạn càng mạnh thì bạn càng ít phải sửa lỗi người dùng bị chậm trễ. Nếu bạn yêu cầu mạnh (chữ số và chữ số phân biệt chữ hoa chữ thường + số và ký hiệu bắt buộc) 9+ mật khẩu ký tự, bạn có thể cung cấp cho người dùng 2-4 lần thử mật khẩu không bị trì hoãn trước khi kích hoạt điều chỉnh.
DoS tấn công chương trình điều chỉnh đăng nhập cuối cùng này sẽ rất không thực tế. Và như là một liên lạc cuối cùng, luôn cho phép các thông tin đăng nhập (cookie) liên tục (và / hoặc một hình thức đăng nhập được xác minh CAPTCHA) đi qua, vì vậy người dùng hợp pháp thậm chí sẽ không bị trì hoãn trong khi cuộc tấn công đang diễn ra . Theo cách đó, cuộc tấn công DoS rất không thực tế trở thành một cuộc tấn công cực kỳ không thực tế.
Ngoài ra, thật hợp lý khi thực hiện điều tiết mạnh mẽ hơn trên tài khoản quản trị viên, vì đó là những điểm vào hấp dẫn nhất
PHẦN VII: Tấn công Brute Force phân tán
Chỉ là một bên, những kẻ tấn công tiên tiến hơn sẽ cố gắng phá vỡ thông tin đăng nhập bằng cách 'truyền bá hoạt động của chúng':
Phân phối các nỗ lực trên botnet để ngăn chặn gắn cờ địa chỉ IP
Thay vì chọn một người dùng và thử 50.000 mật khẩu phổ biến nhất (mà họ không thể, vì điều chỉnh của chúng tôi), họ sẽ chọn Mật khẩu phổ biến nhất và thay vào đó thử với 50.000 người dùng. Bằng cách đó, không chỉ họ có được các biện pháp thử tối đa như CAPTCHA và điều chỉnh đăng nhập, cơ hội thành công của họ cũng tăng lên, vì mật khẩu phổ biến số 1 nhiều hơn nhiều so với số 49.995
Khoảng cách các yêu cầu đăng nhập cho mỗi tài khoản người dùng, giả sử, cách nhau 30 giây, để lẻn dưới radar
Ở đây, cách tốt nhất là ghi nhật ký số lần đăng nhập thất bại, toàn hệ thống và sử dụng tần suất đăng nhập xấu của trang web của bạn làm cơ sở cho giới hạn trên mà bạn áp đặt cho tất cả người dùng.
Quá trừu tượng? Hãy để tôi viết lại:
Giả sử trang web của bạn đã có trung bình 120 thông tin đăng nhập xấu mỗi ngày trong 3 tháng qua. Sử dụng mức đó (trung bình đang chạy), hệ thống của bạn có thể đặt giới hạn toàn cầu thành 3 lần - tức là. 360 lần thất bại trong khoảng thời gian 24 giờ. Sau đó, nếu tổng số lần thử thất bại trên tất cả các tài khoản vượt quá con số đó trong vòng một ngày (hoặc thậm chí tốt hơn, hãy theo dõi tốc độ tăng tốc và kích hoạt trên ngưỡng tính toán), nó sẽ kích hoạt điều chỉnh đăng nhập trên toàn hệ thống - nghĩa là độ trễ ngắn cho TẤT CẢ người dùng (tuy nhiên, ngoại trừ thông tin đăng nhập cookie và / hoặc thông tin đăng nhập CAPTCHA dự phòng).
Tôi cũng đã đăng một câu hỏi với nhiều chi tiết hơn và một cuộc thảo luận thực sự tốt về cách tránh những kẻ lừa đảo gian xảo trong việc chống lại các cuộc tấn công vũ phu phân tán
PHẦN VIII: Nhà cung cấp xác thực và xác thực hai yếu tố
Thông tin có thể bị xâm phạm, cho dù bằng cách khai thác, mật khẩu bị ghi và mất, máy tính xách tay có khóa bị đánh cắp hoặc người dùng nhập thông tin đăng nhập vào các trang web lừa đảo. Đăng nhập có thể được bảo vệ thêm bằng xác thực hai yếu tố, sử dụng các yếu tố ngoài băng như mã sử dụng một lần nhận được từ một cuộc gọi điện thoại, tin nhắn SMS, ứng dụng hoặc dongle. Một số nhà cung cấp cung cấp dịch vụ xác thực hai yếu tố.
Xác thực hoàn toàn có thể được ủy quyền cho một dịch vụ đăng nhập một lần, trong đó nhà cung cấp khác xử lý việc thu thập thông tin xác thực. Điều này đẩy vấn đề đến một bên thứ ba đáng tin cậy. Google và Twitter đều cung cấp dịch vụ SSO dựa trên tiêu chuẩn, trong khi Facebook cung cấp giải pháp độc quyền tương tự.
PHẢI-LIÊN KẾT ĐỌC VỀ Xác thực Web
- Hướng dẫn OWASP để xác thực / Bảng xác thực OWASP
- Dos và Don'ts of Client xác thực trên web (tài liệu nghiên cứu MIT rất dễ đọc)
- Wikipedia: cookie HTTP
- Câu hỏi kiến thức cá nhân để xác thực dự phòng: Câu hỏi bảo mật trong kỷ nguyên của Facebook (tài liệu nghiên cứu Berkeley rất dễ đọc)