Bảo mật

Để ngăn việc chạy các tải trọng tùy ý bên trong pVM, Khung ảo hóa Android (AVF) sử dụng phương pháp bảo mật theo lớp, trong đó mỗi lớp sẽ 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 đả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.

  • Bộ tải khởi động - Bộ tải khởi động đảm bảo rằng chỉ những hình ảnh pVM được ký bởi Google hoặc nhà cung cấp thiết bị mới được phép khởi động và tôn trọng quy trình Khởi động được xác minh của Android . Kiến trúc này ngụ ý rằng các ứng dụng chạy pVM không thể gói các hạt nhân của riêng 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. Bảo vệ chuyên sâu không cho phép dữ liệu ánh xạ dưới dạng có thể thực thi được ( 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 (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ề khả năng truy cập thông tin đáng tin cậy của các tổ chức được ủy 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ớ được thực thi bởi trình ảo hóa pKVM. pKVM theo dõi quyền sở hữu bộ nhớ của từng trang bộ nhớ vật lý riêng lẻ và mọi yêu cầu 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 nhất định được ánh xạ trong bảng trang giai đoạn 2 do trình ảo hóa điều khiển. Kiến trúc này duy trì rằng nội dung bộ nhớ do pVM sở hữu vẫn ở chế độ 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 áp dụ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ụ có khả năng DMA chạy trong các lớp đặc quyền hơn . Các nhà cung cấp hệ thống trên chip (SoC) phải đáp ứng một bộ yêu cầu mới trước khi họ có thể hỗ trợ pKVM. Nếu không, bí mật không thể được cung cấp.

Tính toàn vẹn áp dụng cho dữ liệu trong bộ nhớ 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.

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

Các nguyên tắc này không khác gì 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 các bảng trang giai đoạn 1 và 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, phần thực thi các thuộc tính này, có bề mặt tấn công gần bằng một nửa 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 mạnh mẽ hơn cho các trường hợp sử dụng quá nhạy cảm để có thể tin cậy. về sự cô lập của quá trình.

Với kích thước của nó, pKVM có thể được 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ứng minh chính thức 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 trang này đề cập đến việc đảm bảo 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 giám sát ảo

pKVM là một trình ảo hóa dựa trên KVM, có chức năng tách pVM và Android vào 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 được giữ trong trường hợp có sự thỏa hiệp trong bất kỳ pVM nào, bao gồm cả máy chủ. Các trình ảo hóa 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 một trang thuộc về một thực thể khác, chẳng hạn như pVM hoặc bộ ảo hóa, 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ả quyền truy cập CPU và DMA.

  • Trước khi một trang được pVM sử dụng được trả về máy chủ, chẳng hạn như khi pVM bị phá hủy, trang đó sẽ bị xóa.

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

  • Phần sụn pVM không khởi động nếu 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à Mã định danh thiết bị hỗn hợp (CDI) được cung cấp cho phiên bản pVM chỉ có thể được lấy từ 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 bộ tải khởi động dựa trên U-boot, GKI và một tập hợp con không gian người dùng Android cũng như trình khởi chạy tải trọng. Các thuộc tính này được giữ trong trường hợp có sự thỏa hiệp 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 sẽ 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 ký) nào đối với ảnh đĩa được chia sẻ với pVM khách đều gây ra lỗi I/O ở phía pVM.

  • BCC và CDI được cung cấp cho một phiên bản pVM chỉ có thể được lấy từ phiên bản cụ thể đó.

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

Android

Đây là các thuộc tính được 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ủ bị xâm phạm:

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

  • Chỉ VirtualizationService trong pVM máy chủ mới có thể tạo kênh liên lạc tới pVM.

  • 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 khi pVM máy chủ đ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.

khả dụng

Trong ngữ cảnh của pVM, tính khả dụng đề 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 nhiệm vụ mà họ được thiết kế để thực hiện.

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 trình ảo hóa Loại 1 thông thường (chẳng hạn như Xen), đưa ra quyết định thiết kế rõ ràng để ủy quyền lập kế hoạch khối lượng công việc cho 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 giúp giảm đáng kể kích thước 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 hóa hiệu suất. Tuy nhiên, 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 nhân máy chủ để giảm độ phức tạp của bộ ảo hóa và để máy chủ chịu trách nhiệm lập lịch trình. Nỗ lực được thực hiện để đảm bảo rằng việc chuyển tiếp các ngắt của khách chỉ dẫn đến việc từ chối dịch vụ (quá ít, quá nhiều hoặc các ngắt định tuyến sai).

Cuối cùng, quy trình giám sát máy ảo (VMM) của máy chủ 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ư card mạng. 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 khách nhưng thiết kế này bảo vệ tính khả dụng của máy chủ khỏi những vị khách độc hại vì máy chủ luôn có thể chiếm quyền trước hoặc chấm dứt khách và lấy lại tài nguyên của nó.

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à tính năng khởi động an toàn đảm bảo rằng quyền truy cập vào dữ liệu của 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 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ư các khóa công khai và hàm băm xác minh, từ các hình ảnh được 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 quá trình xác minh. Quá trình này xảy ra ở mọi giai đoạn tải trong pVM: firmware pVM, 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 cặp khóa này đượ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 trong các lần khởi động lại và do đó, 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 nên không nên sử dụng trực tiếp. Thay vào đó, chìa khóa niêm phong phải được lấy từ bí mật niêm phong và bí mật niêm phong phải được tiêu hủy càng sớm càng tốt.

Mỗi giai đoạn sẽ chuyển một đối tượng CBOR được mã hóa xác định sang giai đoạn tiếp theo. Đối tượng này chứa các 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.

Thiết bị đã mở khóa

Khi một thiết bị được mở khóa bằng fastboot oem unlock , dữ liệu 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 khởi động lại các phân vùng thường được bảo vệ bằng quá trình khởi động đã xác minh, bao gồm cả các phân vùng có chứa 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 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 đã được xác minh của thiết bị trong chứng chỉ chứng thực chính.