Android ปกป้องข้อมูลผู้ใช้ ซึ่งรวมถึงพื้นที่เก็บข้อมูลที่เข้ารหัสด้วยข้อมูลเข้าสู่ระบบและคีย์ Keystore ที่ผูกกับการตรวจสอบสิทธิ์ด้วย ปัจจัยความรู้เกี่ยวกับหน้าจอล็อก (LSKF) ที่ผู้ใช้กำหนดค่าไว้ เช่น PIN, รูปแบบ และ รหัสผ่าน โดยปกติแล้ว LSKF จะเป็นค่าเอนโทรปีต่ำ เช่น PIN 4 หรือ 6 หลัก จึงต้องมีการป้องกันการโจมตีแบบ Brute-Force
Android ใช้ตัวจำกัดอัตราของสภาพแวดล้อมการดำเนินการที่เชื่อถือได้ (TEE) หรือองค์ประกอบที่ปลอดภัย (SE) เพื่อชะลอการโจมตีแบบ Brute-Force ที่ผู้โจมตีพยายามใช้กับ LSKF และหากพยายามมากพอ ก็จะบล็อกการโจมตีดังกล่าว CDD 9.11 ระบุข้อกำหนดและคำแนะนำด้านความปลอดภัยขั้นต่ำสำหรับตัวจำกัดอัตราของ LSKF Android 16 QPR2 ขึ้นไปใช้นโยบายการจำกัดอัตราที่เข้มงวดกว่า Android เวอร์ชันต่ำกว่าอย่างมาก ดูรายละเอียดเพิ่มเติมได้ที่นโยบายการจำกัดอัตราเริ่มต้นที่เข้มงวดขึ้นใน Android 16 QPR2 ขึ้นไป
Android 17 ขึ้นไปใช้การจำกัดอัตราเริ่มต้นของหน้าจอล็อกที่เข้มงวดกว่าเวอร์ชันต่ำกว่า ผู้ใช้อาจพบระยะหมดเวลาของหน้าจอล็อกที่นานในบางกรณี Android 17 ขึ้นไปจึงมีการแสดงความคิดเห็นที่ได้รับการปรับปรุงต่อไปนี้แก่ผู้ใช้ในหน้าจอล็อก
- การจัดรูปแบบเวลาที่ได้รับการปรับปรุง: หน้าจอล็อกจะแสดงระยะหมดเวลาที่นานตั้งแต่ 1 นาทีขึ้นไป โดยใช้หน่วยเวลาที่ใหญ่ขึ้นเพื่อให้ผู้ใช้เข้าใจได้ง่ายขึ้น เช่น ลองอีกครั้งใน 30 นาที แทน ลองอีกครั้งใน 1, 800 วินาที
- ลิงก์สั้นสำหรับการกู้คืน: หน้าจอล็อกจะแสดงลิงก์สั้น
(ค่าเริ่มต้นคือ g.co/android/unlock) เพื่อช่วยให้ผู้ใช้ค้นหา
ตัวเลือกการกู้คืนในอุปกรณ์เครื่องอื่น คุณกำหนดค่าลิงก์นี้ได้ผ่านทรัพยากร
config_lockscreenLockoutShortlink - ความคิดเห็นเกี่ยวกับการพยายามซ้ำ: ในอุปกรณ์ที่มีการติดตั้งใช้งาน Weaver ระบบจะแสดงข้อความที่ไม่ซ้ำกันเมื่อมีการป้อนการคาดเดาที่ไม่ถูกต้องซ้ำ ความคิดเห็นเฉพาะนี้ไม่พร้อมใช้งานใน Gatekeeperที่ใช้ Gatekeeper เท่านั้น เนื่องจากอุปกรณ์ดังกล่าวไม่มีรหัสการตอบกลับแยกต่างหากสำหรับการคาดเดาที่ไม่ถูกต้องและความล้มเหลวในการยืนยันอื่นๆ
- การจัดการการป้อนข้อมูลเข้าสู่ระบบที่สอดคล้องกัน: หน้าจอล็อกจะปิดใช้แป้นป้อน PIN หาก อุปกรณ์ใช้ข้อมูลเข้าสู่ระบบ PIN ซึ่งคล้ายกับการป้อนข้อมูลเข้าสู่ระบบรหัสผ่านและรูปแบบ
เมธอด LockPatternUtils#getLockoutAttemptDeadline(int) เปลี่ยนชื่อเป็น LockPatternUtils#getLockoutEndTime(int) และแสดงเวลาสิ้นสุดการล็อกเอาต์จากแคชที่ระบบจัดการ การอัปเดตนี้ช่วยแก้ปัญหาที่ระบบแคชข้อมูลเฉพาะอินสแตนซ์ LockPatternUtils ซึ่งแสดงระยะหมดเวลาที่ใช้งานอยู่ไม่ถูกต้องหากมีการทริกเกอร์โดยใช้อินสแตนซ์อื่น นักพัฒนาแอปที่สร้างพรอมต์ข้อมูลเข้าสู่ระบบของระบบ เช่น กิจกรรมหน้าจอล็อกและการตั้งค่า ต้องอัปเดตพรอมต์ดังกล่าวเพื่อยืนยันระยะหมดเวลาที่มีอยู่ก่อนที่จะอนุญาตให้พยายามต่อ
ปลดล็อกข้อมูลผู้ใช้ที่ได้รับการปกป้องด้วย LSKF
LockSettingsService
จะจัดการการจัดเก็บและการยืนยัน LSKF ผู้ใช้จะมี LSKF ที่ใช้งานอยู่ได้เพียงรายการเดียวในแต่ละครั้ง การกำหนด LSKF ใหม่จะทำให้ LSKF ก่อนหน้าใช้ไม่ได้และเริ่มนโยบายการจำกัดอัตราตั้งแต่ต้น
ตัวจำกัดอัตราหลักใน TEE หรือ SE ซึ่งเป็น Gatekeeper
หรือ Weaver, จะบังคับใช้นโยบายการจำกัดอัตราสำหรับ
LSKF ที่ใช้งานอยู่ LockSettingsService จะเลือกใช้ Weaver หากมีการติดตั้งใช้งาน
ระบบจะปลดล็อกข้อมูลผู้ใช้ที่ได้รับการปกป้องก็ต่อเมื่อมีการระบุ LSKF ที่ถูกต้องให้กับตัวจำกัดอัตราหลัก หาก LSKF ไม่ถูกต้อง ตัวจำกัดอัตราจะเพิ่มตัวนับความล้มเหลวและบังคับใช้ระยะหมดเวลาหลังจากจำนวนความล้มเหลวที่กำหนด ในระหว่างระยะหมดเวลา ตัวจำกัดอัตราจะปฏิเสธการคาดเดาทั้งหมดและแสดงระยะหมดเวลาที่เหลือ
นโยบายการจำกัดอัตราเริ่มต้นที่เข้มงวดขึ้นใน Android 16 QPR2 ขึ้นไป
CDD 9.11 กำหนดให้มีการจำกัดอัตราของ LSKF ใน Android 6 ขึ้นไป โดยทั่วไปแล้ว นโยบายการจำกัดอัตราที่กำหนดไว้ค่อนข้างยืดหยุ่น ตัวอย่างเช่น การติดตั้งใช้งานที่เป็นไปตามข้อกำหนดขั้นต่ำของ Android 16 อนุญาตให้คาดเดาได้สูงสุด 10 ครั้งในนาทีแรก 20 ครั้งใน 6 นาที 50 ครั้งใน 25 นาที 110 ครั้งใน 24 ชั่วโมง และ 1,800 ครั้งใน 5 ปี
แม้ว่านโยบายนี้จะปลอดภัยพอสมควรสำหรับ LSKF ที่เลือกแบบสุ่มอย่างสม่ำเสมอ แต่ในทางปฏิบัติแล้วผู้ใช้ไม่ได้เลือก LSKF แบบสุ่มอย่างสม่ำเสมอ LSKF บางรายการเกิดขึ้นบ่อยกว่ารายการอื่นๆ มาก ผู้โจมตีสามารถประสบความสำเร็จในอัตราที่สูงมากได้โดยลองใช้ LSKF ตามลำดับความถี่ที่ลดลง
ตัวอย่างเช่น การศึกษา This PIN Can Be Easily Guessed พบอัตราความสำเร็จ 16.2% สำหรับการคาดเดา PIN ในโลกจริงหลังจากคาดเดา 100 ครั้ง และ 35.5% สำหรับรูปแบบ ผู้โจมตีที่ทราบข้อมูลเฉพาะของผู้ใช้ เช่น วันเกิด สามารถประสบความสำเร็จในอัตราที่สูงขึ้นได้
ดังนั้น Android 16 QPR2 ขึ้นไปจึงมีนโยบายการจำกัดอัตราเริ่มต้นของ LSKF ที่เข้มงวดขึ้น นโยบายนี้อนุญาตให้คาดเดาได้สูงสุด 6 ครั้งในนาทีแรก 7 ครั้งใน 6 นาที 8 ครั้งใน 25 นาที 12 ครั้งใน 24 ชั่วโมง และ 19 ครั้งใน 5 ปี หลังจากคาดเดาไม่ถูกต้อง 20 ครั้ง ระบบจะไม่อนุญาตให้คาดเดาอีก ตารางต่อไปนี้แสดงกำหนดการระยะหมดเวลาทั้งหมด ซึ่งอาจมีการเปลี่ยนแปลงใน Android เวอร์ชันในอนาคต
| จำนวนการคาดเดาไม่ถูกต้อง | ระยะหมดเวลาหลังจากการคาดเดาไม่ถูกต้อง |
|---|---|
| 0 | ไม่เกี่ยวข้อง |
| 1-4 | 0 วินาที |
| 5 | 1 นาที |
| 6 | 5 นาที |
| 7 | 15 นาที |
| 8 | 30 นาที |
| 9 | 90 นาที |
| 10 | 4 ชั่วโมง |
| 11 | 12 ชั่วโมง |
| 12 | 36 ชั่วโมง |
| 13 | 4 วัน |
| 14 | 13 วัน |
| 15 | 41 วัน |
| 16 | 123 วัน |
| 17 | 1 ปี |
| 18 | 3 ปี |
| 19 | 9 ปี |
| 20+ | ไม่อนุญาตให้คาดเดาอีก |
ตัวจำกัดอัตราที่อัปเดต
Android 16 QPR2 ขึ้นไปมีการติดตั้งใช้งาน Gatekeeper และ Weaver ที่อัปเดตแล้ว ซึ่งจะบังคับใช้ นโยบายการจำกัดอัตราในตาราง
ตัวจำกัดอัตราของซอฟต์แวร์
Android 16 QPR2 ขึ้นไปมีตัวจำกัดอัตราทุติยภูมิที่เป็นตัวเลือก ซึ่งก็คือ SoftwareRateLimiter.
โดยมีการติดตั้งใช้งานในเซิร์ฟเวอร์ระบบและช่วยให้อุปกรณ์เสนอนโยบายการจำกัดอัตราที่เข้มงวดขึ้นได้เมื่อ
ไม่สามารถอัปเดต TEE หรือ SE
กำหนดค่า SoftwareRateLimiter ในโหมดบังคับใช้ผ่านค่ากำหนดค่า config_softwareLskfRateLimiterEnforcing
ในโหมดบังคับใช้ SoftwareRateLimiter จะใช้นโยบายการจำกัดอัตราพร้อมกับตัวจำกัดอัตราหลัก สำหรับจำนวนการคาดเดาไม่ถูกต้องที่กำหนด ระยะหมดเวลาจะเป็นระยะเวลาที่นานกว่าระหว่างระยะเวลาที่ตัวจำกัดอัตราหลักกำหนดกับระยะเวลาที่ SoftwareRateLimiter กำหนด
ในโหมดที่ไม่บังคับใช้ SoftwareRateLimiter จะส่งคำขอการยืนยันทั้งหมดไปยังตัวจำกัดอัตราหลักโดยไม่ใช้นโยบายการจำกัดอัตราทุติยภูมิ
การตรวจหาการคาดเดาซ้ำ
Android 16 QPR2 ขึ้นไปรองรับการตรวจหาการคาดเดาซ้ำเพื่อปรับปรุงการใช้งานและเปิดใช้การใช้นโยบายการจำกัดอัตราที่เข้มงวดขึ้น เมื่อเปิดใช้ ผู้ใช้จะไม่ถูกลงโทษสำหรับการป้อน LSKF ที่ไม่ถูกต้องรายการเดิมซ้ำหลายครั้ง
บางครั้งผู้ใช้ที่ถูกต้องอาจป้อน LSKF ที่ไม่ถูกต้องรายการเดิมซ้ำหลายครั้ง ซึ่งจะทำให้เกิดระยะหมดเวลาที่ไม่จำเป็นหากระบบนับเป็นการคาดเดาหลายครั้ง ผู้โจมตีที่มีความสามารถจะไม่พยายามใช้ LSKF รายการเดิมมากกว่า 1 ครั้ง นโยบายที่ไม่นับการคาดเดาซ้ำจะช่วยปรับปรุงการใช้งานการป้อน LSKF สำหรับผู้ใช้ที่ถูกต้องโดยไม่ทำให้ผู้โจมตีที่มีความสามารถคาดเดา LSKF ได้ง่ายขึ้น ซึ่งช่วยให้บังคับใช้นโยบายการจำกัดอัตราที่เข้มงวดขึ้นได้ ผู้ใช้ที่ถูกต้องมีแนวโน้มที่จะไม่พบระยะหมดเวลาด้วยซ้ำ เนื่องจากผู้ใช้ต้องป้อนการคาดเดาไม่ถูกต้องที่ไม่ซ้ำกัน 5 รายการแทนการคาดเดาไม่ถูกต้อง 5 รายการซึ่งรวมถึงรายการซ้ำ
ในอุปกรณ์ที่ใช้ Android 16 QPR2 ขึ้นไป การติดตั้งใช้งาน Weaver และ SoftwareRateLimiter ที่กำหนดค่าในโหมดบังคับใช้ ระบบจะตรวจหาและปฏิเสธการคาดเดาซ้ำก่อนที่จะส่งไปยัง Weaver การปฏิเสธดังกล่าวจะไม่เพิ่มจำนวนการคาดเดาไม่ถูกต้อง ระบบจะติดตามการคาดเดาไม่ถูกต้องที่ไม่ซ้ำกันสูงสุด 5 รายการในหน่วยความจำ หากตัวติดตามเต็ม ระบบจะทิ้งรายการที่เก่าที่สุดเพื่อเพิ่มพื้นที่ ระบบจะทิ้งการคาดเดาทั้งหมดที่ติดตามไว้ 5 นาทีหลังจากมีการคาดเดาไม่ถูกต้องรายการสุดท้ายที่ไม่ได้ติดตาม
Gatekeeper จะไม่แยกการคาดเดาไม่ถูกต้องออกจากความล้มเหลวในการยืนยันอื่นๆ ดังนั้น SoftwareRateLimiter จึงไม่รองรับการตรวจหาการคาดเดาซ้ำเมื่อ Gatekeeper เป็นตัวจำกัดอัตราหลัก
ผู้ติดตั้งใช้งาน Weaver สามารถเลือกที่จะรองรับการตรวจหาการคาดเดาซ้ำในการติดตั้งใช้งาน Weaver ได้