Tại sao có một độ trễ lớn sau khi nhập sai mật khẩu?


89

Tôi nhận thấy một điều kỳ lạ (tốt, theo tôi) về mật khẩu. Ví dụ: nếu tôi nhập mật khẩu không chính xác trong khi đăng nhập, sẽ có một vài giây chậm trễ trước khi hệ thống cho tôi biết như vậy. Khi tôi cố gắng nhập sudosai mật khẩu, tôi cũng sẽ phải đợi trước khi shell nói "Xin lỗi, hãy thử lại".

Tôi tự hỏi tại sao phải mất quá lâu để "nhận ra" một mật khẩu không chính xác? Điều này đã được nhìn thấy trên một số bản phân phối tôi sử dụng (và thậm chí cả OSX), vì vậy tôi nghĩ rằng đó không phải là một điều cụ thể về phân phối.


Tôi đã nhận thấy điều này không chỉ trong thiết bị đầu cuối mà cả khi đăng nhập phiên ban đầu sau khi khởi động hoặc khi máy tính xách tay ở chế độ ngủ. Mở khóa bằng mật khẩu đúng là ngay lập tức, rất vui khi thấy câu hỏi này được nêu ra :)
krozaine

Câu trả lời:


92

Đây là một điều bảo mật, nó không thực sự mất nhiều thời gian để nhận ra nó. 2 lỗ hổng này giải quyết:

  1. điều này đăng nhập các nỗ lực đăng nhập, có nghĩa là ai đó không thể đập hệ thống nhanh như nó có thể cố gắng bẻ khóa nó (1 triệu lần thử một giây? Tôi không biết).

  2. Nếu nó đã làm điều đó ngay khi nó xác minh thông tin đăng nhập của bạn không chính xác, bạn có thể sử dụng lượng thời gian cần thiết để xác thực thông tin đăng nhập của mình để giúp đoán xem một phần thông tin của bạn có chính xác hay không, giảm đáng kể thời gian đoán.

để ngăn chặn 2 điều này, hệ thống chỉ mất một khoảng thời gian nhất định để thực hiện, tôi nghĩ bạn có thể định cấu hình thời gian chờ với PAM ( Xem câu trả lời của Michaels ).

Kỹ thuật bảo mật ( 2ed, amazon | 1ed, miễn phí ) đưa ra lời giải thích tốt hơn nhiều về những vấn đề này.


4
// offtopic g nó không phải là một lỗi, đó là một tính năng ;-)
echox

2
Liên kết liên kết của bạn đã được tự động viết lại thành SE, btw.
Gelatin

1
@Tshepang: Xem chương 2 , đặc biệt là §2.4 và §2.5.3.3.
Gilles

4
Sự khác biệt giữa thất bại sớm và muộn trong khi so sánh hàm băm mật khẩu được đo bằng nano giây. Với mã hóa phù hợp (so sánh bộ nhớ thời gian không đổi) không có sự khác biệt nào cả. Đó không phải là lý do để thêm một sự chậm trễ.
CodeInChaos

2
Tôi đồng ý với CodInChaos: Điểm thứ hai của câu trả lời là không chính xác. Điều gì thực sự xảy ra là như sau: 1. một hàm băm của đầu vào của bạn được tính toán; 2. hàm băm đó được so sánh với hàm băm được lưu trữ (mỗi byte của nó, ngay cả khi đã tìm thấy sự khác biệt); Lưu ý rằng hai bước này không có cách nào nhanh hơn hay chậm hơn tùy thuộc vào việc mật khẩu bạn nhập có chính xác hay không. (và như những người khác đã chỉ ra, việc thêm thời lượng ngủ sẽ không khắc phục được cuộc tấn công thời gian nếu có thể)
ví dụ

41

Đây là cố ý, để cố gắng và hạn chế vũ phu. Bạn thường có thể sửa đổi nó bằng cách tìm FAIL_DELAYmục nhập cấu hình /etc/login.defsvà thay đổi giá trị của nó ( 3theo mặc định là giây), mặc dù nhận xét trong tệp đó có vẻ như PAM sẽ thực thi ít nhất một 2giây chậm trễ bất kể là gì


9
Điều này là để ngăn chặn nhiều hơn là chỉ vũ phu. nhưng điểm thưởng cho biết nơi để cấu hình nó.
xenoterracide

5
Tôi nghĩ rằng fail_delay cũng có thể cấu hình được /etc/pam.d/login. Tìm kiếmpam_faildelay.so delay=
Steven D

8
điều gì ngăn bạn viết một trình bao bọc cho sudo bắt đầu một trường hợp sudo mới sau khi một nỗ lực không hoạt động trong vòng 0,1 giây?
Janus Troelsen

11

Trên các hệ thống linux hiện đại, lý do là pam_unix.so áp đặt độ trễ như vậy. Như đã đưa tin, điều này có thể được cấu hình xuống để hai giây bằng cách thay đổi FAIL_DELAYtrong /etc/login.defs. Nếu bạn muốn giảm độ trễ hơn nữa, bạn phải cung cấp cho pam_unix.so tùy chọn "gật đầu". Ví dụ: trên hệ thống của tôi, nếu bạn theo dõi bao gồm bắt đầu từ /etc/pam.d/sudo, bạn thấy bạn phải chỉnh sửa dòng sau /etc/pam.d/system-auth:

auth      required  pam_unix.so     try_first_pass nullok

và thay đổi nó thành này:

auth      required  pam_unix.so     try_first_pass nullok nodelay

Thật không may, cách distro linux (arch) của tôi cấu hình mọi thứ, cùng một system-authtệp được bao gồm bởi system-remote-login, được sử dụng bởi sshd.

Mặc dù an toàn để loại bỏ độ trễ trên sudo, vì nó được ghi lại, chỉ được sử dụng bởi người dùng cục bộ và có thể bỏ qua bởi những kẻ tấn công cục bộ, nhưng có lẽ bạn không muốn loại bỏ sự chậm trễ này cho đăng nhập từ xa. Tất nhiên bạn có thể sửa nó bằng cách viết một sudo tùy chỉnh không bao gồm các tệp auth hệ thống được chia sẻ.

Cá nhân, tôi nghĩ rằng sự chậm trễ trên sudo (và bỏ qua SIGINT) là một sai lầm lớn. Điều đó có nghĩa là người dùng biết họ nhập sai mật khẩu không thể giết quá trình và bị thất vọng. Tất nhiên, bạn vẫn có thể dừng sudo bằng Ctrl-Z, vì sudo không bắt được SIGTSTP và sau khi dừng, bạn có thể giết nó bằng kill -9 (SIGKILL). Nó chỉ gây phiền nhiễu để làm. Vì vậy, điều đó có nghĩa là một cuộc tấn công tự động có thể bắn sudos vào các thiết bị đầu cuối giả với tốc độ siêu cao. Nhưng sự chậm trễ làm nản lòng người dùng hợp pháp và khuyến khích họ tạm ngưng vỏ gốc thay vì thoát khỏi chúng để tránh phải sudo lại.


1
Tương tự với Fedora. Phân tích tuyệt vời
Freedom_Ben

Rực rỡ trả lời. Tôi cũng đã nghĩ FAIL_DELAY đã trở nên lỗi thời trong các hệ thống Máy tính để bàn hiện đại. Bạn nên dựa vào mã hóa phân vùng / ổ cứng và không có gì khác. Thông thường, không có người dùng thứ hai nào có thể cố gắng ép buộc mật khẩu gốc. Tuy nhiên , các chương trình độc hại tiềm ẩn có thể lạm dụng FAIL_DELAY không an toàn và do đó có quyền truy cập root.
phil294

đặt pam-unix thành nodelaysẽ đặt thời gian chờ thành 0 và FAIL_DELAY sau đó bị bỏ qua.
phil294

Tại sao không vô hiệu hóa độ trễ, sau đó vô hiệu hóa đăng nhập mật khẩu từ xa (chỉ SSH)? Điều đó không giải quyết vấn đề mà không đưa ra bất kỳ lỗ hổng bảo mật nào?
Radon Rosborough
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.