Bảo mật

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

  • 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.

  • Trình tải khởi động – Trình tải khởi động đảm bảo rằng chỉ những 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 Android Verified Boot. Cấu trúc này ngụ ý rằng các ứng dụng chạy pVM không thể gói các nhân riêng của chúng.

  • pVM cung cấp khả năng bảo vệ chuyên sâu, chẳng hạn như với SELinux, cho các tải trọng chạy trong pVM. Phương pháp phòng thủ chuyên sâu không cho phép ánh xạ dữ liệu dưới dạng tệp thực thi (neverallow execmem) và đảm bảo rằng W^X được áp dụng 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 sẵn có (bộ ba CIA) tạo nên 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:

  • Tính bảo mật là một bộ quy tắc giới hạn quyền truy cập vào 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 sẵn có 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 uỷ quyền.

Tính bảo mật và tính toàn vẹn

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

Các hạn chế về việc duy trì tính bảo mật cũng áp dụng cho mọi thực thể trong hệ thống thực hiện các hoạt động truy cập bộ nhớ thay cho pVM, cụ thể là các thiết bị có khả năng DMAcác dịch vụ chạy ở các lớp có đặc quyền cao hơn. Các nhà cung cấp Hệ thống trên vi mạch (SoC) phải đáp ứng một bộ yêu cầu mới thì mới có thể hỗ trợ pKVM. Nếu không, chúng tôi không thể đảm bảo tính bảo mật.

Tính toàn vẹn áp dụng cho dữ liệu trong bộ nhớ hoạt động tính toán. pVM không thể:

  • Sửa đổi ký ức của nhau mà không có sự đồng ý.
  • Ảnh hưởng đến trạng thái CPU của nhau.

Trình giám sát máy ảo sẽ thực thi các yêu cầu này. Tuy nhiên, các vấn đề liên quan đến tính toàn vẹn của dữ liệu cũng phát sinh khi lưu trữ dữ liệu ảo, khi 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ì nguyên tắc cách ly quy trình do Linux cung cấp, trong đó quyền truy cập vào các trang bộ nhớ được kiểm soát bằng bảng trang giai đoạn 1 và các công tắc ngữ cảnh của nhân giữa các quy trình. Tuy nhiên, phần EL2 của pKVM (nơi thực thi các thuộc tính này) có bề mặt tấn công nhỏ hơn 3 bậc so với toàn bộ nhân Linux (khoảng 10 nghìn so với 20 triệu dòng mã) và do đó, mang lại sự đảm bảo chắc chắn hơn cho các trường hợp sử dụng quá nhạy cảm để dựa vào tính năng cách ly quy trình.

Do kích thước của mình, pKVM phù hợp với việc xác minh chính thức. Chúng tôi đang tích cực hỗ trợ nghiên cứu khoa học, nhằm chính thức chứng minh các thuộc tính này trên tệp nhị phân pKVM thực tế.

Phần còn lại của trang này đề cập đến 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 pKVM cung cấp.

Trình điều khiển ảo hoá

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

  • pVM không thể truy cập vào trang thuộc về một thực thể khác, chẳng hạn như pVM hoặc siêu giám sát viên, trừ phi chủ sở hữu trang chia sẻ một cách rõ ràng. Quy tắc này bao gồm pVM máy chủ và áp dụng cho cả quyền truy cập vào CPU và DMA.

  • Trước khi một trang do pVM sử dụng được trả về cho máy chủ lưu trữ, chẳng hạn như khi pVM bị huỷ, trang đó sẽ bị xoá.

  • Bộ nhớ của tất cả pVM và chương trình cơ sở pVM từ một lần khởi động thiết bị sẽ bị xoá trước khi trình tải 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 sẽ không thể truy cập vào các khoá đã tạo trước đó.

  • Chương trình cơ sở pVM sẽ không khởi động nếu không xác minh được hình ảnh ban đầu.

  • Chương trình cơ sở pVM sẽ 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ỉ DICE và Giá trị nhận dạng thiết bị kết hợp (CDI) được cung cấp cho một phiên bản 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 trình tải khởi động dựa trên U-boot, GKI, một nhóm nhỏ không gian người dùng Android và một trình chạy tải trọng. Các thuộc tính này sẽ được giữ lại trong trường hợp có hành vi xâm nhập vào bất kỳ pVM nào, kể cả máy chủ lưu trữ. 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 xác minh được boot.img, super.img, vbmeta.img hoặc vbmeta\_system.img.

  • Microdroid sẽ không khởi động nếu quá trình xác minh APK không thành công.

  • Cùng một phiên bản Microdroid sẽ không khởi động ngay cả khi APK đã được cập nhật.

  • Microdroid sẽ không khởi động nếu có bất kỳ APEX nào không vượt qua được quy trình xác minh.

  • Microdroid sẽ không khởi động (hoặc khởi động với trạng thái ban đầu sạch) 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.

  • Mọi nội dung sửa đổi (chưa ký) đối với hình ảnh đĩa được chia sẻ với pVM khách đều gây ra lỗi I/O ở phía pVM.

  • Chỉ phiên bản cụ thể đó mới có thể lấy được chuỗi chứng chỉ DICE và CDI được cung cấp cho một phiên bản pVM.

  • Các hoạt động ghi vào ổ lưu trữ được mã hoá là bí mật, tuy nhiên, không có biện pháp bảo vệ khôi phục ở mức độ chi tiết của một khối mã hoá. Hơn nữa, việc giả mạo tuỳ ý khác đối với một khối dữ liệu bên ngoài sẽ khiến khối đó xuất hiện dưới dạng dữ liệu rác đối với Microdroid, thay vì được phát hiện rõ ràng là lỗi I/O.

Android

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

  • pVM khách không thể tương tác trực tiếp (chẳng hạn như tạo kết nối) với các pVM khách khác.vsock

  • Chỉ VirtualizationService trong pVM của máy chủ lưu trữ mới có thể tạo kênh giao tiếp với pVM.

  • Chỉ những ứng dụng được ký bằng khoá 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.

  • Giá trị nhận dạng (gọi là giá trị nhận dạng bối cảnh (CID)) được dùng để thiết lập các kết nối vsock giữa máy chủ lưu trữ và pVM sẽ không được dùng lại khi pVM máy chủ lưu trữ đang chạy. Ví dụ: bạn không thể thay thế một pVM đang chạy bằng một pVM khác.

Phạm vi cung cấp

Trong bối cảnh pVM, tính sẵn có đề cập đến việc máy chủ phân bổ đủ tài nguyên cho khách để khách có thể thực hiện các tác vụ mà họ được thiết kế để thực hiện.

Trách nhiệm của máy chủ bao gồm việc lập lịch cho CPU ảo của pVM. Không giống như các trình giám sát siêu ảo hoá Loại 1 thông thường (chẳng hạn như Xen), KVM đưa ra quyết định thiết kế rõ ràng là uỷ quyền lập lịch tải cho nhân máy chủ. Với quy mô và độ phức tạp của các trình lập lịch ngày nay, quyết định thiết kế này giúp giảm đáng kể quy mô của cơ sở điện 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 hoá 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 uỷ quyền việc xử lý gián đoạn vật lý cho nhân máy chủ để giảm độ phức tạp của trình giám sát siêu vi và để máy chủ chịu trách nhiệm lập lịch. Chúng tôi nỗ lực để đả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 sai hướng).

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

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

Khởi động an toàn

Dữ liệu được liên kết với các phiên bản của pVM và quy trình khởi động an toàn đảm bảo rằng bạn có thể kiểm soát quyền truy cập vào dữ liệu của một phiên bản. Lần khởi động đầu tiên của một phiên bản sẽ cung cấp phiên bản đó bằng cách tạo ngẫu nhiên một chuỗi ngẫu nhiên bí mật cho pVM và trích xuất các thông tin chi tiết, chẳng hạn như khoá công khai và hàm băm xác minh, từ các hình ảnh đã tải. Thông tin này được 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 các bí mật của phiên bản chỉ được phát hành cho những hình ảnh vượt qua quy trình xác minh. Quá trình này diễn ra cho mọi giai đoạn tải trong pVM: chương trình cơ sở pVM, pVM ABL, Microdroid, v.v.

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

Mỗi giai đoạn sẽ chuyển một đối tượng CBOR được mã hoá một cách xác định cho giai đoạn tiếp theo. Đối tượng này chứa các khoá bí mật và chuỗi chứng chỉ DICE, chứa thông tin trạng thái tích luỹ, chẳng hạn như liệu giai đoạn cuối cùng có được tải một cách an toàn hay không.

Thiết bị đã mở khoá

Khi thiết bị được mở khoá bằng fastboot oem unlock, dữ liệu người dùng sẽ bị xoá. Quy trình này giúp 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 sẽ không hợp lệ khi thiết bị được mở khoá.

Sau khi mở khoá, chủ sở hữu thiết bị có thể thoải mái nạp lại các phân vùng thường được bảo vệ bằng quy trình khởi động đã xác minh, bao gồm cả các phân vùng chứa pvmfw và việc triển khai pKVM. Do đó, thiết bị chưa mở khoá không được tin tưởng là có thể duy trì mô hình bảo mật của pVM.

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