Android bảo vệ dữ liệu người dùng, bao gồm cả bộ nhớ được mã hoá dành cho thông tin đăng nhập và các khoá Keystore liên kết với hoạt động xác thực bằng các yếu tố kiến thức về màn hình khoá (LSKF) do người dùng định cấu hình, chẳng hạn như mã PIN, hình mở khoá và mật khẩu. LSKF thường là các giá trị có entropy thấp, chẳng hạn như mã PIN gồm 4 hoặc 6 chữ số, vì vậy, bạn cần phải bảo vệ khỏi các cuộc tấn công dò tìm theo kiểu vét cạn.
Android sử dụng bộ giới hạn tốc độ Môi trường thực thi đáng tin cậy (TEE) hoặc Phần tử bảo mật (SE) để làm chậm và chặn kẻ tấn công thực hiện các cuộc tấn công dò tìm mật khẩu thô trên LSKF nếu có đủ số lần thử. CDD 9.11 nêu rõ các yêu cầu và đề xuất tối thiểu về bảo mật đối với bộ giới hạn tốc độ LSKF. Android 16 QPR2 trở lên triển khai các chính sách giới hạn tốc độ mạnh mẽ hơn đáng kể so với các phiên bản Android thấp hơn. Để biết thêm thông tin chi tiết, hãy xem bài viết Chính sách mặc định về việc giới hạn tốc độ chặt chẽ hơn trong Android 16 QPR2 trở lên.
Android 17 trở lên sử dụng tính năng giới hạn tốc độ màn hình khoá mặc định mạnh hơn so với các phiên bản thấp hơn. Trong một số trường hợp hiếm gặp, người dùng có thể gặp phải tình trạng màn hình khoá hết thời gian chờ quá lâu. Vì vậy, Android 17 trở lên cung cấp ý kiến phản hồi nâng cao sau đây cho người dùng trên màn hình khoá.
- Cải thiện định dạng thời gian: Màn hình khoá hiển thị thời gian chờ từ một phút trở lên bằng các đơn vị thời gian lớn hơn để dễ đọc hơn, chẳng hạn như Hãy thử lại sau 30 phút thay vì Hãy thử lại sau 1800 giây.
- Đường liên kết rút gọn để khôi phục: Màn hình khoá hiển thị một đường liên kết rút gọn (mặc định là g.co/android/unlock) để giúp người dùng tìm thấy các tuỳ chọn khôi phục trên một thiết bị khác. Bạn có thể định cấu hình mối liên kết này thông qua tài nguyên
config_lockscreenLockoutShortlink. - Phản hồi về lần thử trùng lặp: Trên các thiết bị có chế độ triển khai Weaver, hệ thống sẽ hiển thị một thông báo riêng biệt khi người dùng nhập một lần đoán sai trùng lặp. Phản hồi cụ thể này không có trên các thiết bị chỉ có Gatekeeper vì các thiết bị này không cung cấp mã phản hồi riêng cho các lần đoán sai và các lỗi xác minh khác.
- Quản lý nhất quán việc nhập thông tin đăng nhập: Màn hình khoá sẽ tắt bàn phím nhập mã PIN nếu thiết bị sử dụng thông tin đăng nhập bằng mã PIN, tương tự như việc nhập thông tin đăng nhập bằng mật khẩu và hình mở khoá.
Phương thức LockPatternUtils#getLockoutAttemptDeadline(int) được đổi tên thành LockPatternUtils#getLockoutEndTime(int) và cung cấp thời gian kết thúc khoá từ bộ nhớ đệm do hệ thống quản lý. Bản cập nhật này giải quyết một vấn đề khi các đối tượng này chỉ được lưu vào bộ nhớ đệm cho mỗi phiên bản LockPatternUtils, do đó, hệ thống nhầm lẫn cho rằng không có thời gian chờ đang hoạt động nếu một thời gian chờ được kích hoạt bằng một phiên bản khác. Nhà phát triển lời nhắc về thông tin đăng nhập hệ thống (chẳng hạn như màn hình khoá và các hoạt động cài đặt) phải cập nhật các lời nhắc này để xác minh thời gian chờ hiện tại trước khi cho phép thực hiện các lần thử tiếp theo.
Mở khoá dữ liệu người dùng được bảo vệ bằng LSKF
LockSettingsService
quản lý việc lưu trữ và xác minh LSKF. Mỗi lần, người dùng chỉ có thể có một LSKF đang hoạt động. Việc chỉ định một LSKF mới sẽ vô hiệu hoá LSKF trước đó và bắt đầu chính sách giới hạn tốc độ từ đầu.
Một bộ giới hạn tốc độ chính trong TEE hoặc SE, một trong Gatekeeper hoặc Weaver sẽ thực thi việc giới hạn tốc độ cho LSKF đang hoạt động. LockSettingsService ưu tiên Weaver khi có một phương thức triển khai.
Dữ liệu người dùng được bảo vệ chỉ được mở khoá khi LSKF chính xác được cung cấp cho bộ giới hạn tốc độ chính. Nếu LSKF không chính xác, bộ giới hạn tốc độ sẽ tăng bộ đếm lỗi và thực thi thời gian chờ sau một số lần thất bại nhất định. Trong thời gian chờ, ứng dụng sẽ từ chối tất cả các lượt đoán và cung cấp thời gian chờ còn lại.
Chính sách giới hạn tốc độ mặc định nghiêm ngặt hơn trong Android 16 QPR2 trở lên
CDD 9.11 yêu cầu giới hạn tốc độ LSKF trong Android 6 trở lên. Trước đây, chính sách giới hạn tốc độ bắt buộc khá linh hoạt. Ví dụ: một quy trình triển khai đáp ứng các yêu cầu tối thiểu của Android 16 cho phép tối đa 10 lần đoán trong phút đầu tiên, 20 lần trong 6 phút, 50 lần trong 25 phút, 110 lần trong 24 giờ và 1.800 lần đoán trong 5 năm.
Mặc dù chính sách này khá an toàn đối với LSKF được chọn ngẫu nhiên một cách đồng đều, nhưng trên thực tế, người dùng không chọn LSKF ngẫu nhiên một cách đồng đều. Một số LSKF xuất hiện thường xuyên hơn nhiều so với những LSKF khác. Kẻ tấn công có thể đạt được tỷ lệ thành công đáng kể bằng cách thử LSKF theo thứ tự giảm dần tần suất.
Ví dụ: nghiên cứu Mã PIN này có thể dễ dàng đoán được cho thấy tỷ lệ thành công khi đoán mã PIN thực tế là 16,2% sau 100 lần đoán và 35,5% đối với các mẫu. Kẻ tấn công biết thông tin cụ thể của người dùng, chẳng hạn như ngày sinh, thì có thể đạt được tỷ lệ thành công cao hơn nữa.
Do đó, Android 16 QPR2 trở lên cung cấp chính sách mặc định mạnh mẽ hơn về việc giới hạn tốc độ LSKF. Chính sách này cho phép tối đa 6 lượt đoán trong phút đầu tiên, 7 lượt trong 6 phút, 8 lượt trong 25 phút, 12 lượt trong 24 giờ và 19 lượt trong 5 năm. Bạn sẽ không được đoán thêm sau khi đoán sai 20 lần. Bạn có thể xem toàn bộ lịch trình hết thời gian chờ trong bảng sau. Nội dung này có thể thay đổi trong các phiên bản Android sau này.
| Số lần đoán sai | Hết thời gian chờ sau khi đoán sai |
|---|---|
| 0 | Không áp dụng |
| 1-4 | 0 giây |
| 5 | 1 phút |
| 6 | 5 phút |
| 7 | 15 phút |
| 8 | 30 phút |
| 9 | 90 phút |
| 10 | 4 giờ |
| 11 | 12 giờ |
| 12 | 24 giờ |
| 13 | 4 ngày |
| 14 | 13 ngày |
| 15 | 41 ngày |
| 16 | 123 ngày |
| 17 | 1 năm |
| 18 | 3 năm |
| 19 | 9 năm |
| 20+ | Không được đoán thêm |
Đã cập nhật bộ giới hạn tốc độ
Android 16 QPR2 trở lên có các chế độ triển khai Gatekeeper và Weaver đã cập nhật để thực thi chính sách giới hạn tốc độ trong bảng.
Bộ giới hạn tốc độ phần mềm
Android 16 QPR2 trở lên có một bộ hạn chế tốc độ thứ cấp không bắt buộc, SoftwareRateLimiter.. Bộ hạn chế này được triển khai trong máy chủ hệ thống và cho phép các thiết bị cung cấp chính sách hạn chế tốc độ mạnh mẽ hơn khi không thể cập nhật TEE hoặc SE.
Định cấu hình SoftwareRateLimiter ở chế độ thực thi thông qua giá trị cấu hình config_softwareLskfRateLimiterEnforcing. Ở chế độ thực thi, SoftwareRateLimiter sẽ áp dụng chính sách giới hạn tốc độ đồng thời với bộ giới hạn tốc độ chính. Đối với một số lần đoán không chính xác nhất định, thời gian chờ là thời gian dài hơn so với thời gian cần thiết của bộ giới hạn tốc độ chính và thời gian cần thiết của SoftwareRateLimiter.
Ở chế độ không thực thi, SoftwareRateLimiter sẽ chuyển tất cả các yêu cầu xác minh đến bộ giới hạn tốc độ chính mà không áp dụng chính sách giới hạn tốc độ phụ.
Phát hiện lượt đoán trùng lặp
Để cải thiện khả năng sử dụng và cho phép sử dụng chính sách giới hạn tốc độ mạnh hơn, Android 16 QPR2 trở lên hỗ trợ tính năng phát hiện lượt đoán trùng lặp. Khi được bật, người dùng sẽ không bị phạt khi nhập cùng một LSKF không chính xác nhiều lần.
Đôi khi, người dùng hợp lệ nhập sai cùng một LSKF nhiều lần. Điều này dẫn đến thời gian chờ không cần thiết nếu được tính là nhiều lượt đoán. Kẻ tấn công có khả năng sẽ không thử một LSKF nhất định nhiều lần. Một chính sách không tính các lần đoán trùng lặp sẽ cải thiện khả năng sử dụng mục nhập LSKF cho người dùng hợp pháp mà không giúp kẻ tấn công có khả năng đoán LSKF dễ dàng hơn, cho phép thực thi các chính sách giới hạn tốc độ mạnh mẽ hơn. Người dùng hợp pháp ít có khả năng gặp phải tình trạng hết thời gian chờ, vì người dùng phải nhập 5 lần đoán sai riêng biệt thay vì 5 lần đoán sai bao gồm cả các lần đoán trùng lặp.
Trên các thiết bị chạy Android 16 QPR2 trở lên, một phương thức triển khai Weaver và SoftwareRateLimiter được định cấu hình ở chế độ thực thi, các lượt đoán trùng lặp sẽ được phát hiện và từ chối trước khi được chuyển đến Weaver. Những lượt từ chối như vậy không làm tăng số lượt đoán sai. Hệ thống sẽ theo dõi tối đa 5 lần đoán sai riêng biệt trong bộ nhớ. Nếu bộ theo dõi đầy, thì mục gần đây nhất sẽ bị loại bỏ để giải phóng bộ nhớ. Tất cả các lượt đoán được theo dõi sẽ bị loại bỏ 5 phút sau khi lượt đoán không chính xác không được theo dõi gần đây nhất được thực hiện.
Gatekeeper không tách biệt các lượt đoán sai với các lỗi xác minh khác, vì vậy SoftwareRateLimiter không hỗ trợ phát hiện lượt đoán trùng lặp khi Gatekeeper là bộ giới hạn tốc độ chính.
Người triển khai Weaver có thể chọn hỗ trợ tính năng phát hiện phỏng đoán trùng lặp trong quá trình triển khai Weaver.