Xác minh quy trình khởi động

Tính năng Khởi động đã xác minh yêu cầu xác minh bằng mật mã tất cả mã và dữ liệu có thể thực thi thuộc phiên bản Android đang khởi động trước khi được sử dụng. Điều này bao gồm nhân (được tải từ phân vùng boot), cây thiết bị (được tải từ phân vùng dtbo), phân vùng system, phân vùng vendor, v.v.

Các phân vùng nhỏ, chẳng hạn như bootdtbo, chỉ được đọc một lần thường được xác minh bằng cách tải toàn bộ nội dung vào bộ nhớ rồi tính toán hàm băm của nội dung đó. Sau đó, giá trị hàm băm được tính này sẽ được so sánh với giá trị hàm băm dự kiến. Nếu giá trị không khớp, Android sẽ không tải. Để biết thêm thông tin chi tiết, hãy xem phần Quy trình khởi động.

Các phân vùng lớn không vừa bộ nhớ (chẳng hạn như hệ thống tệp) có thể sử dụng cây băm, trong đó quy trình xác minh là một quy trình liên tục diễn ra khi dữ liệu được tải vào bộ nhớ. Trong trường hợp này, hàm băm gốc của cây băm được tính trong thời gian chạy và được kiểm tra dựa trên giá trị hàm băm gốc dự kiến. Android có trình điều khiển dm-verity để xác minh các phân vùng lớn hơn. Nếu tại một thời điểm nào đó, hàm băm gốc được tính không khớp với giá trị hàm băm gốc dự kiến, thì dữ liệu sẽ không được dùng và Android sẽ chuyển sang trạng thái lỗi. Để biết thêm thông tin chi tiết, hãy xem phần lỗi dm-verity.

Các hàm băm dự kiến thường được lưu trữ ở cuối hoặc đầu mỗi phân vùng đã xác minh, trong một phân vùng chuyên dụng hoặc cả hai. Điều quan trọng là các hàm băm này được ký (trực tiếp hoặc gián tiếp) bằng gốc tin cậy. Ví dụ: quy trình triển khai AVB hỗ trợ cả hai phương pháp, hãy xem phần Xác minh quy trình khởi động trên Android để biết thông tin chi tiết.

Bảo vệ chống khôi phục

Ngay cả khi có quy trình cập nhật hoàn toàn bảo mật, vẫn có khả năng một lỗ hổng bảo mật không liên tục của nhân Android sẽ cài đặt thủ công một phiên bản Android cũ hơn, dễ bị tấn công hơn, khởi động lại vào phiên bản dễ bị tấn công đó, rồi dùng phiên bản Android đó để cài đặt một lỗ hổng bảo mật liên tục. Từ đó, kẻ tấn công sẽ sở hữu vĩnh viễn thiết bị và có thể làm bất cứ điều gì, kể cả vô hiệu hoá các bản cập nhật.

Biện pháp bảo vệ chống lại loại tấn công này được gọi là Bảo vệ chống quay về phiên bản cũ. Thông thường, tính năng bảo vệ chống hạ cấp được triển khai bằng cách sử dụng bộ nhớ chống giả mạo để ghi lại phiên bản gần đây nhất của Android và từ chối khởi động Android nếu phiên bản này thấp hơn phiên bản đã ghi. Các phiên bản thường được theo dõi theo từng phân vùng.

Để biết thêm thông tin chi tiết về cách AVB xử lý các biện pháp bảo vệ chống quay lại, hãy xem README của AVB.

Xử lý lỗi xác minh

Quy trình xác minh có thể không thành công tại thời điểm khởi động (chẳng hạn như nếu hàm băm được tính trên phân vùng boot không khớp với hàm băm dự kiến) hoặc tại thời điểm chạy (chẳng hạn như nếu dm-verity gặp lỗi xác minh trên phân vùng system). Nếu quá trình xác minh không thành công tại thời điểm khởi động, thiết bị sẽ không khởi động được và người dùng cuối cần thực hiện các bước để khôi phục thiết bị.

Nếu quá trình xác minh không thành công trong thời gian chạy, quy trình này sẽ phức tạp hơn một chút. Nếu thiết bị sử dụng dm-verity, thì bạn nên định cấu hình thiết bị ở chế độ restart. Ở chế độ restart, nếu gặp phải lỗi xác minh, thiết bị sẽ khởi động lại ngay lập tức với một cờ cụ thể được đặt để cho biết lý do. Trình tải khởi động sẽ nhận thấy cờ này và chuyển dm-verity sang sử dụng chế độ Lỗi I/O (eio) và duy trì ở chế độ này cho đến khi một bản cập nhật mới được cài đặt.

Khi khởi động ở chế độ eio, thiết bị sẽ hiển thị màn hình lỗi để thông báo cho người dùng rằng thiết bị đã phát hiện thấy dữ liệu bị hỏng và có thể không hoạt động đúng cách. Màn hình này sẽ xuất hiện cho đến khi người dùng đóng. Ở chế độ eio, trình điều khiển dm-verity sẽ không khởi động lại thiết bị nếu gặp phải lỗi xác minh, thay vào đó, lỗi EIO sẽ được trả về và ứng dụng cần xử lý lỗi này.

Mục đích là để trình cập nhật hệ thống sẽ chạy (nhờ đó, người dùng có thể cài đặt một hệ điều hành mới mà không gặp lỗi hỏng dữ liệu) hoặc người dùng có thể lấy càng nhiều dữ liệu của họ ra khỏi thiết bị càng tốt. Sau khi hệ điều hành mới được cài đặt, trình tải khởi động sẽ nhận thấy hệ điều hành mới cài đặt và chuyển về chế độ restart.