Bảo mật

Để ngăn việc chạy các tải trọng tuỳ ý bên trong một pVM, Khung ảo hoá Android (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 bổ sung. 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.

  • 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 theo quy trình Xác minh quy trình khởi động của Android. Cấu trúc này ngụ ý rằng các ứng dụng chạy pVM không thể gói hạt nhân của riêng chúng.

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

Mô hình bảo mật

Tính bảo mật, tính toàn vẹn và khả năng sử 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 đáng tin cậy và chính xác.
  • Khả năng sử dụng là sự đảm bảo về khả năng 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 điều khiển ảo hoá pKVM thực thi. pKVM theo dõi quyền sở hữu bộ nhớ của từng trang bộ nhớ thực và mọi yêu cầu chia sẻ trang của chủ sở hữu. pKVM đảm bảo rằng chỉ pVM (máy chủ lưu trữ và khách) có quyền mới được liên kết trang nhất định trong bảng trang giai đoạn 2 do trình điều khiển ảo hoá kiểm soát. Cấu trúc này duy trì rằng 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 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 mọi thực thể trong hệ thống thay mặt cho pVM thực hiện việc truy cập bộ nhớ, cụ thể là các thiết bị có hỗ trợ DMAdịch vụ chạy trong các lớp đặc quyền cao 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 thì mới có thể hỗ trợ pKVM. Nếu không, bạn không thể cung cấp thông tin mật.

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

  • Sửa đổi kỷ niệm của nhau khi chưa có sự đồng ý.
  • Tác động đến trạng thái CPU của nhau.

Những yêu cầu này do trình điều khiển ảo hoá thực thi. 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 với bộ nhớ 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.

Những nguyên tắc này không khác với 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 (thực thi các thuộc tính này) có bề mặt tấn công thấp hơn 3 thứ tự so với toàn bộ nhân hệ điều hành Linux (khoảng 10 nghìn so với 20 triệu dòng mã) và do đó đảm bảo hơn nữa đối với những trường hợp sử dụng quá nhạy cảm nên không thể dựa vào cách ly quy trình.

Với quy mô như vậy, pKVM phù hợp với quy trình xác minh chính thức. Chúng tôi đang tích cực hỗ trợ hoạt động nghiên cứu học thuật nhằm chính thức chứng minh những 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 biện pháp đảm bảo tính bảo mật và 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 điều khiển ảo hoá 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 đá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 mọi pVM, bao gồm cả máy chủ lưu trữ. Các trình điều khiển ả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 một trang thuộc về một thực thể khác, chẳng hạn như pVM hoặc trình điều khiển ảo hoá, trừ phi chủ sở hữu trang chia sẻ rõ ràng. Quy tắc này bao gồm pVM của máy chủ và áp dụng cho cả quyền truy cập CPU và DMA.

  • Trước khi một trang do pVM sử dụng được trả về máy chủ, 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 trong 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 bạn đính kèm một trình gỡ lỗi phần cứng (chẳng hạn như SJTAG), pVM 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 thể xác minh 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ị phức hợp (CDI) được cung cấp cho phiên bản pVM chỉ có thể lấy từ phiên bản cụ thể đó.

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

Microdroid là một ví dụ về một hệ điều hành chạy trong một pVM. Microdroid bao gồm một trình tải khởi động dựa trên khởi động U, GKI, một tập hợp con 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 được lưu giữ trong trường hợp bị xâm phạm trong mọi pVM, bao gồm cả máy chủ lưu trữ. Các hệ điều hành thay thế chạy trong một 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 quá trình xác minh APK không thành công.

  • Phiên bản Microdroid đó sẽ không khởi động ngay cả khi tệp 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 không có lỗi) nếu instance.img được sửa đổi bên ngoài pVM máy khách.

  • Microdroid cung cấp chứng thực cho chuỗi khởi động.

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

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

  • Hoạt động ghi vào phương tiện bộ nhớ được mã hoá là thông tin mật, nhưng 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, hành vi can thiệp tuỳ ý bên ngoài vào một khối dữ liệu khiến khối dữ liệu đó xuất hiện dưới dạng rác đối với Microdroid, thay vì bị phát hiện một cách rõ ràng dưới dạng lỗi I/O.

Android

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

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

  • Chỉ VirtualizationService trong pVM máy chủ 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 (được gọi là giá trị nhận dạng ngữ cảnh (CID)) 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 sử dụng lại khi pVM của 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.

Phạm vi cung cấp

Trong bối cảnh pVM, tình trạng còn hàng (availability) là 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 thao tác 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ên lịch cho CPU ảo của pVM. KVM, không giống như các trình điều khiển ảo hoá Loại 1 thông thường (chẳng hạn như Xen), đưa ra quyết định thiết kế rõ ràng về việc uỷ quyền lên lịch tải công việc cho nhân hệ điều hành lưu trữ. Do kích thước và tính phức tạp của trình lập lịch biểu hiện nay, quyết định thiết kế này làm 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ủ lưu trữ đưa ra quyết định lên lịch sáng suốt hơn để tối ưu hoá hiệu suất. Tuy nhiên, một máy chủ lưu trữ độ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 hệ điều hành lưu trữ để giảm độ phức tạp của trình điều khiển ảo hoá và để máy chủ quản lý việc lên lịch. Chúng tôi cố gắng đảm bảo rằng việc chuyển tiếp các giá trị gián đoạn của khách chỉ dẫn đến tình trạng từ chối dịch vụ (quá ít, quá nhiều hoặc bị gián đoạn bị đị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ư thẻ mạng. Một VMM độc hại có thể giữ lại tài nguyên của máy khách.

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

Khởi động an toàn

Dữ liệu được liên kết với các thực thể của một pVM và tính năng khởi động an toàn giúp đảm bảo rằng việc truy cập vào dữ liệu của một thực thể có thể được kiểm soát. Lần khởi động đầu tiên của một thực thể cung cấp cho thực thể đó bằng cách tạo ngẫu nhiên một dữ liệu ngẫu nhiên cho pVM và trích xuất các thông tin chi tiết (chẳng hạn như hàm băm và khoá công khai xác minh) từ các hình ảnh đã tải. Thông tin này dùng để xác minh các lần khởi động tiếp theo của thực thể pVM và đảm bảo mã bí mật của thực thể chỉ được tiết lộ cho những hình ảnh vượt qua quy trình xác minh. Quá trình này diễn ra đối với 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 giai đoạn 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ượt khởi động, vì vậy, bí mật niêm phong cũng được lấy ổn định cho thực thể máy ảo khi khởi động lại, đồng thời phù hợp để bảo vệ trạng thái ổn định. Khoá 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á bí mật này. Thay vào đó, bạn nên lấy khoá niêm phong từ khoá bí mật niêm phong và huỷ bỏ bí mật niêm phong 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ư giai đoạn cuối cùng có được tải một cách an toàn hay không.

Thiết bị đã được mở khoá

Khi bạn mở khoá thiết bị bằng fastboot oem unlock, dữ liệu người dùng sẽ bị xoá. Quy 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ư cho pVM cũng sẽ bị vô hiệu hoá khi mở khoá thiết bị.

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

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