Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

Bảo mật

Để ngăn việc chạy các tải trọng tùy ý bên trong pVM, Android Virtualization Framework (AVF) sử dụng phương pháp tiếp cận bảo mật theo lớp, trong đó mỗi lớp bổ sung thêm các biện pháp thực thi. Sau đây là danh sách các lớp bảo mật AVF:

  • Android - Android đảm bảo rằng chỉ những ứng dụng có quyền pVM mới được phép tạo hoặc kiểm tra pVM.

  • Bootloader - Bootloader đảm bảo rằng chỉ hình ảnh pVM do Google hoặc nhà cung cấp thiết bị ký mới được phép khởi động và tuân thủ quy trình Khởi động đã được xác minh của Android . Kiến trúc này ngụ ý các ứng dụng chạy pVM không thể đóng gói hạt nhân của riêng chúng.

  • pVM - pVM cung cấp khả năng phòng thủ chuyên sâu, chẳng hạn như với SELinux , cho các tải trọng chạy trong pVM. Defense-in-depth không cho phép dữ liệu ánh xạ dưới dạng thực thi ( neverallow execmem ) và đảm bảo rằng W ^ X giữ cho tất cả các loại tệp.

Mô hình bảo mật

Tính bảo mật, tính toàn vẹn và tính khả dụng, còn được gọi là bộ ba CIA, là một mô hình được thiết kế để hướng dẫn các chính sách bảo mật thông tin:

  • Bảo mật là một tập hợp các quy tắc giới hạn quyền truy cập thông tin.
  • Tính toàn vẹn là sự đảm bảo rằng thông tin là đáng tin cậy và chính xác.
  • Tính khả dụng là sự đảm bảo về quyền truy cập đáng tin cậy vào thông tin của các thực thể được ủy quyền.

Lưu ý rằng pKVM được thiết kế để duy trì tính bảo mật và tính toàn vẹn, nhưng không có sẵn, của khách. Những nguyên tắc này ảnh hưởng đến các quyết định thiết kế bao gồm tất cả các khía cạnh của kiến ​​trúc, từ bộ siêu giám sát đến các thành phần không gian của người dùng.

Bảo mật và toàn vẹn

Tính bảo mật bắt nguồn từ các thuộc tính cô lập bộ nhớ được thực thi bởi pKVM hypervisor. pKVM theo dõi quyền sở hữu bộ nhớ của các trang bộ nhớ vật lý riêng lẻ và bất kỳ yêu cầu nào từ chủ sở hữu đối với các trang được chia sẻ. pKVM đảm bảo rằng chỉ các pVM có quyền (máy chủ và khách) mới có trang đã cho được ánh xạ trong bảng trang giai đoạn 2 của chúng được kiểm soát bởi trình siêu giám sát. Kiến trúc này duy trì rằng nội dung của bộ nhớ do pVM sở hữu vẫn là riêng tư trừ khi chủ sở hữu chia sẻ rõ ràng nó với một pVM khác.

Các hạn chế để duy trì tính bảo mật cũng mở rộng cho bất kỳ thực thể nào trong hệ thống thực hiện truy cập bộ nhớ thay mặt cho pVM, cụ thể là các thiết bị và dịch vụ hỗ trợ DMA chạy ở các lớp đặc quyền hơn . Các nhà cung cấp SoC phải đáp ứng một loạt các yêu cầu mới trước khi họ có thể hỗ trợ pKVM, nếu không sẽ không thể cung cấp tính bảo mật.

Tính toàn vẹn áp dụng cho cả dữ liệu trong bộ nhớ và máy tính:

  • pVM không thể sửa đổi bộ nhớ của nhau mà không có sự đồng ý.
  • pVM không thể ảnh hưởng đến trạng thái CPU của nhau.

Các yêu cầu này được thực thi bởi hypervisor. Nhưng các vấn đề liên quan đến tính toàn vẹn của dữ liệu cũng nảy sinh với lưu trữ dữ liệu ảo, nơi các giải pháp khác phải được áp dụng, chẳng hạn như dm-verity hoặc AuthFS.

Những nguyên tắc này không khác gì sự cô lập quy trình được cung cấp bởi Linux, nơi quyền truy cập vào các trang bộ nhớ được kiểm soát bằng các bảng trang ở giai đoạn 1 và sự chuyển đổi ngữ cảnh hạt nhân giữa các quy trình. Tuy nhiên, phần EL2 của pKVM, thực thi các thuộc tính này, có gần một nửa bề mặt tấn công so với toàn bộ hạt nhân Linux (khoảng 10 nghìn so với 20 triệu dòng mã) và do đó cung cấp sự đảm bảo mạnh mẽ hơn cho các trường hợp sử dụng quá nhạy cảm. về cách ly quy trình.

Với kích thước của nó, pKVM tự cho mình để xác minh chính thức. Chúng tôi đang tích cực hỗ trợ nghiên cứu học thuật, nhằm mục đích chính thức chứng minh các đặc tính này trên hệ nhị phân pKVM thực tế.

Phần còn lại của tài liệu này bao gồm các đảm bảo về tính bảo mật và tính toàn vẹn mà mỗi thành phần xung quanh một pKVM cung cấp.

Người giám sát

pKVM là một siêu giám sát dựa trên KVM, cô lập pVM và Android thành các môi trường thực thi không tin cậy lẫn nhau. Các thuộc tính này giữ trong trường hợp có sự xâm phạm trong bất kỳ pVM nào, bao gồm cả máy chủ. Người giám sát thay thế tuân thủ AVF cần cung cấp các thuộc tính tương tự.

  • Một pVM không thể truy cập một trang thuộc về một thực thể khác, chẳng hạn như pVM hoặc hypervisor, trừ khi được chủ sở hữu trang chia sẻ rõ ràng. Quy tắc này bao gồm pVM máy chủ và áp dụng cho cả truy cập CPU và DMA.
  • Trước khi một trang được pVM sử dụng được trả lại cho máy chủ lưu trữ, chẳng hạn như khi pVM bị hủy, nó sẽ bị xóa sạch.
  • Bộ nhớ của tất cả các pVM và phần sụn pVM từ một lần khởi động thiết bị sẽ bị xóa sạch trước khi bộ nạp khởi động hệ điều hành chạy trong lần khởi động thiết bị tiếp theo.
  • Khi một trình gỡ lỗi phần cứng, chẳng hạn như SJTAG, được đính kèm, pVM không thể truy cập vào các khóa đã được đúc trước đó của nó.
  • Phần sụn pVM không khởi động nếu nó không thể xác minh hình ảnh ban đầu.
  • Phần sụn pVM không khởi động nếu tính toàn vẹn của instance.img bị xâm phạm.
  • Chuỗi chứng chỉ khởi động (BCC) và Số nhận dạng thiết bị tổng hợp (CDI) được cung cấp cho một cá thể pVM chỉ có thể được lấy bởi phiên bản cụ thể đó.

Hệ điều hành khách

Microdroid là một ví dụ về hệ điều hành chạy trong pVM. Microdroid bao gồm một bộ nạp khởi động dựa trên U-boot, GKI và một tập hợp con của không gian người dùng Android và một trình khởi chạy tải trọng. Các thuộc tính này giữ trong trường hợp có sự xâm phạm trong bất kỳ pVM nào, bao gồm cả máy chủ. Các hệ điều hành thay thế chạy trong pVM phải cung cấp các thuộc tính tương tự.

  • Microdroid sẽ không khởi động nếu không thể xác minh boot.img , super.img , vbmeta.img hoặc vbmeta\_system.img .
  • Microdroid sẽ không khởi động nếu xác minh APK không thành công.
  • Phiên bản Microdroid tương tự sẽ không khởi động ngay cả khi APK đã được cập nhật.
  • Microdroid sẽ không khởi động nếu bất kỳ APEX nào không xác minh được.
  • Microdroid sẽ không khởi động (hoặc khởi động với trạng thái ban đầu sạch sẽ) nếu instance.img được sửa đổi bên ngoài pVM khách.
  • Microdroid cung cấp chứng thực cho chuỗi khởi động.
  • Bất kỳ sửa đổi (chưa có dấu) nào đối với ảnh đĩa được chia sẻ cho pVM khách gây ra lỗi I / O ở phía pVM.
  • BCC và CDI được cung cấp cho một cá thể pVM chỉ có thể được dẫn xuất bởi phiên bản cụ thể đó.

Android

Đây là những thuộc tính do Android làm máy chủ duy trì nhưng không đúng trong trường hợp máy chủ bị xâm phạm:

  • Một pVM khách không thể tương tác trực tiếp với (ví dụ: tạo kết nối vsock với) các pVM khách khác.
  • Chỉ VirtualizationService trong pVM máy chủ mới có thể tạo kênh giao tiếp với pVM (Lưu ý: Nó có thể chuyển kênh đã thiết lập cho người khác).
  • Chỉ những ứng dụng được ký bằng khóa nền tảng mới có thể yêu cầu quyền tạo, sở hữu hoặc tương tác với pVM.
  • Mã định danh, được gọi là mã định danh ngữ cảnh (CID) , được sử dụng để thiết lập kết nối vsock giữa máy chủ và pVM không được sử dụng lại trong khi máy chủ pVM đang chạy. Ví dụ: không thể thay thế một pVM đang chạy bằng một pVM khác.

khả dụng

Trong ngữ cảnh của pVM, tính khả dụng có nghĩa là máy chủ phân bổ đủ tài nguyên cho khách để khách có thể thực hiện các công việc mà họ được thiết kế để làm.

Các trách nhiệm của máy chủ bao gồm lập lịch cho các CPU ảo của pVM. KVM, không giống như các siêu giám sát Kiểu 1 truyền thống, chẳng hạn như Xen, đưa ra quyết định thiết kế rõ ràng để ủy quyền lập lịch khối lượng công việc cho hạt nhân máy chủ. Với quy mô và độ phức tạp của các bộ lập lịch ngày nay, quyết định thiết kế này làm giảm đáng kể kích thước của cơ sở tính toán đáng tin cậy (TCB) và cho phép máy chủ đưa ra các quyết định lập lịch sáng suốt hơn để tối ưu hóa hiệu suất. Tuy nhiên, một máy chủ độc hại có thể chọn không bao giờ lên lịch cho khách.

Tương tự, pKVM cũng ủy quyền xử lý ngắt vật lý cho hạt nhân máy chủ để giảm độ phức tạp của trình siêu giám sát và để máy chủ phụ trách việc lập lịch. Nỗ lực được thực hiện để đảm bảo rằng việc chuyển tiếp các gián đoạn của khách chỉ dẫn đến việc từ chối dịch vụ (quá ít, quá nhiều hoặc gián đoạn được định tuyến sai).

Cuối cùng, quá trình giám sát máy ảo (VMM) của máy chủ chịu trách nhiệm cấp phát bộ nhớ và cung cấp các thiết bị ảo, chẳng hạn như thẻ mạng. VMM độc hại có thể giữ lại tài nguyên từ khách.

Mặc dù pKVM không cung cấp tính khả dụng cho khách, nhưng thiết kế bảo vệ tính khả dụng của máy chủ khỏi những khách độc hại vì máy chủ luôn có thể chặn trước hoặc chấm dứt khách và lấy lại tài nguyên của khách.

Khởi động an toàn

Dữ liệu được gắn với các phiên bản của pVM và khởi động an toàn đảm bảo rằng quyền truy cập vào dữ liệu của một phiên bản có thể được kiểm soát. Lần khởi động đầu tiên của một phiên bản cung cấp cho nó bằng cách tạo ngẫu nhiên một muối bí mật cho pVM và trích xuất các chi tiết, chẳng hạn như khóa công khai xác minh và hàm băm, từ các hình ảnh đã tải. Thông tin này được sử dụng để xác minh các lần khởi động tiếp theo của phiên bản pVM và đảm bảo bí mật của phiên bản chỉ được tiết lộ cho những hình ảnh vượt qua xác minh. Quá trình này xảy ra cho mọi giai đoạn tải trong pVM: pVM firmware, pVM ABL, Microdroid, v.v.

DICE cung cấp cho mỗi giai đoạn tải một cặp khóa chứng thực, phần công khai của chúng được chứng nhận trong mục nhập BCC cho giai đoạn đó. Cặp khóa này có thể thay đổi giữa các lần khởi động, do đó, một bí mật niêm phong cũng được tạo ra để ổn định cho phiên bản VM khi khởi động lại và như vậy, phù hợp để bảo vệ trạng thái liên tục. Bí mật niêm phong có giá trị cao đối với VM vì vậy không nên sử dụng trực tiếp. Thay vào đó, khóa niêm phong nên được lấy từ bí mật niêm phong và bí mật niêm phong phải được phá hủy càng sớm càng tốt.

Mỗi giai đoạn giao một đối tượng CBOR được mã hóa xác định cho giai đoạn tiếp theo. Đối tượng này chứa bí mật và BCC, chứa thông tin trạng thái tích lũy, chẳng hạn như liệu giai đoạn cuối có được tải an toàn hay không.

Đã mở khóa thiết bị

Khi một thiết bị được mở khóa bằng cách mở khóa bằng fastboot oem unlock , dữ liệu của người dùng sẽ bị xóa. Quá trình này bảo vệ dữ liệu người dùng khỏi bị truy cập trái phép. Dữ liệu riêng tư đối với pVM cũng bị vô hiệu khi xảy ra quá trình mở khóa thiết bị.

Sau khi được mở khóa, chủ sở hữu thiết bị có thể tự do chỉnh sửa lại các phân vùng thường được bảo vệ bằng khởi động đã xác minh, bao gồm cả các phân vùng chứa quá trình triển khai pKVM. Do đó, pKVM trên thiết bị đã mở khóa sẽ không được tin cậy để duy trì mô hình bảo mật.

Các bên ở xa có thể quan sát trạng thái không an toàn tiềm ẩn này bằng cách kiểm tra trạng thái khởi động đã được xác minh của thiết bị trong chứng chỉ chứng thực khóa.