2025 年 3 月 27 日より、AOSP のビルドとコントリビューションには aosp-main
ではなく android-latest-release
を使用することをおすすめします。詳細については、AOSP の変更をご覧ください。
使用例
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
このドキュメントでは、AVF の一般的なユースケースについて説明します。
分離されたコンパイル
保護された VM はソフトウェア セキュア エンクレーブとして、セキュリティの影響を受けやすいコードをコンパイルするための安全な環境を提供します。この環境では、bootclasspath
とシステム サーバー JAR(APEX アップデートによってトリガーされる)のコンパイルをアーリーブートから再起動前に移動でき、APEX 更新後の起動時間が大幅に短縮されます。
実装は com.android.compos
APEX にあります。このコンポーネントはオプションであり、makefile を使用して追加できます。
図 1. メインラインの更新で JAR をコンパイルする
セキュリティの目標は、検証された入力を正しくコンパイルし、出力を単独で生成することです。信頼できないクライアントとして、Android はエラーを引き起こす以外の方法でコンパイル出力を変更できません(Android が起動時コンパイルにフォールバックする場合)。
VM のコンパイル サービスは、コンパイル中にエラーがない場合にのみ署名を生成します。Android は、署名検証のために VM から公開鍵を取得できます。
VM の鍵は、VM にマウントされている APEX と APK で定義された VM の DICE プロファイル、およびデバッグ可能性などの他の VM パラメータによって生成されます。
公開鍵が予期しない VM からのものかどうかを判断するために、Android は VM を起動して鍵が正しいかどうかを判断します。APEX が更新されるたびに、VM はアーリーブートで起動します。
保護された VM の確認付きブートを使用すると、コンパイル サービスは確認済みのコードのみを実行します。したがって、コードは、特定の条件(たとえば、名前と fs-verity
ダイジェストが許可リストで定義されている場合のみ入力ファイルを受け入れるなど)を満たす入力のみを受け入れるかを判断できます。
VM から公開される API はすべて攻撃対象になります。すべての入力ファイルとパラメータは、信頼できないクライアントからのものと見なし、処理前に検証と審査を行う必要があります。
入出力ファイルの整合性は VM によって検証されます。信頼できないファイル サーバーとして Android に保存されているファイルは次のように処理されます。
fs-verity
アルゴリズムを使用して、入力ファイルを使用する前に内容を確認する必要があります。入力ファイルを VM で使用できるようにするには、VM の DICE プロファイルに寄与するコンテナ(APK)にルートハッシュを指定する必要があります。信頼できるルートハッシュにより、入力を改ざんする攻撃者が検出されます。
- 出力ファイルの整合性は VM 内で維持する必要があります。出力ファイルが Android に保存されている場合でも、生成時に整合性は同じ
fs-verity
ツリー形式で維持されますが、動的に更新できます。最終出力ファイルは、VM で分離されたルートハッシュで識別できます。VM 内のサービスは、署名によって出力ファイルを保護します。
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2025-03-07 UTC。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2025-03-07 UTC。"],[],[],null,["# Use cases\n\nThis page contains common use cases for AVF.\n\nIsolated compilation\n--------------------\n\nAs a software-secure enclave, a protected virtual machine (VM) provides\na safe environment to compile security-sensitive code.\nThis environment allows moving the compilation\nof `bootclasspath` and system server JARs (triggered by an APEX update) from\nearly boot to before reboot, and significantly reduces the post APEX\nupdate boot time.\n\nThe implementation is in the [`com.android.compos`](https://cs.android.com/android/platform/superproject/+/android-latest-release:packages/modules/Virtualization/build/compos/Android.bp) APEX. This\ncomponent is optional and can be included using a [makefile](https://cs.android.com/android/platform/superproject/+/android-latest-release:packages/modules/Virtualization/build/apex/product_packages.mk).\n\n\n**Figure 1.** Compiling JARs on Mainline updates. Compiling JARs on Mainline updates\n\n\u003cbr /\u003e\n\nThe security goal is to truthfully compile verified input and produce the output\nin isolation; Android as an untrusted client can't alter the compilation\noutput in any way other than causing it to fail (when Android falls back to boot\ntime compilation).\n\nThe compilation service in the VM generates a signature only if there's no\nerror during the entire compilation. Android can retrieve the public key from\nthe VM for signature verification.\n\nThe VM's key is generated from the VM's DICE profile, defined by the APEXes\nand APKs mounted to the VM, in addition to other VM parameters, such as\ndebuggability.\n\nTo determine if the public key isn't from an unexpected VM, Android boots\nthe VM to determine if the key is correct. The VM is booted at early boot\nafter each APEX update.\n\nWith Protected VM's Verified Boot, the compilation service runs only verified\ncode. As a result the code can therefore determine to accept only inputs that\nsatisfy certain conditions, for example, accept an input file only where its\nname and the `fs-verity` digest are defined in an allowlist.\n\nAny exposed APIs from the VM are attack surfaces. All input files and\nparameters are assumed to be from an untrusted client, and must be verified and\nvetted before processing.\n\nInput and output file integrity is verified by the VM, with the files stored on\nAndroid as an untrusted file server, as follows:\n\n- The content of an input file must be verified before use using the `fs-verity` algorithm. For an input file to become available in the VM, its root hash must be provided in a container (APK) that contributes to the VM's DICE profile. With the trusted root hash, an attacker can't tamper with the input without being detected.\n- The integrity of the output file must be maintained in the VM. Even if an output file is stored on Android, during the generation, the integrity is maintained with the same `fs-verity` tree format but can be dynamically updated. The final output file can be identified with the root hash, which is isolated in the VM. The service in the VM protects the output files by signature.\n\nLinux development environment\n-----------------------------\n\nAndroid has traditionally been the only major operating system\nthat doesn't let users develop apps on the platform itself.\nWith the introduction of the Linux development environment,\nwe aim to provide a Linux-based development environment to Android\nusers who are developers. In the future, we plan to expand the effort\nto make it possible for our partners to implement innovative VM\nuse cases like running graphical user interface apps and even games.\n\nThe Linux development environment is available on select devices and runs\nin a non protected virtual machine.\n\n\n**Figure 2.** Linux development environment use case.\n\n\u003cbr /\u003e\n\nThe high-level flow is as follows:\n\n1. To use the Linux development environment, [enable developer options](https://developer.android.com/about/versions/15/release-notes#linux-development-environment).\n2. After you enable developer options, the Terminal app appears on your home launcher.\n3. Launch the Terminal app from your home launcher.\n4. If required, the Terminal app downloads the OS image from Play.\n5. The Terminal app uses the Android Virtualization Framework (AVF) to create a virtual machine (VM).\n6. AVF then runs the VM with the OS image.\n7. The virtual machine boots the OS from the image.\n8. After the VM boots, the WebView in the Terminal app connects to a web service in the virtual machine. This service provides terminal access over HTTP.\n9. You interact with the terminal by entering commands and viewing the output in the app.\n\nThe high-level components of the Linux VM are as follows:\n\n- **Terminal app:** An Android application providing a terminal interface. It uses a WebView to connect to a web service running in the VM for interaction. This app is disabled by default. Activate it in Developer Settings.\n- **Android Virtualization Framework (AVF):** Android's existing subsystem for VM creation and management. It requires minimal modification to support custom OS images for this feature.\n- **virtual machine:** A VM that AVF generates. It hosts the terminal service, and AVF creates it specifically for the Terminal app's functionality.\n- **OS image:** A slightly modified Debian-based OS image from upstream Debian. The Terminal app downloads this image from an external Google server. It serves as the foundation for the VM's operation.\n- **Guest Agent:** New software in the VM. It reports the OS's state to AVF and provides control of the virtual machine.\n- **ttyd**: Open-source software running in the VM that implements terminal emulation over HTTP. The Terminal app's WebView connects to it.\n- **Tethering Manager:** An existing Android subsystem. It provides network access to the virtual machine by tethering the VM to the Android-powered device.\n\nContent Safety On-Device\n------------------------\n\nContent Safety On-device is a privacy-preserving content safety solution created\nby the Content Safety On-device Team. It performs content safety classification\nfor various Google products on 1P/3P devices, and protects 1B+ users from\nabusive content, without requiring user data being sent back to Google servers.\nIt is designed to adhere to [Private Compute Core (PCC)](https://security.googleblog.com/2022/12/trust-in-transparency-private-compute.html)\nprinciples to verify transparent and privacy-preserving communication between\nthe client, the virtual machine (VM), and preventing any exfiltration of user\ndata. It can be used for things such as enabling abuse detection on devices,\nsuch as [Play Protect live threat detection](https://developers.google.com/android/play-protect).\n\nIn this use case, the system utilizes protected virtual machines to run its\nmodel classification for Play Protect live threat detection which then\nsignificantly enhances the security of its models and protections. This prevents\nreverse engineering and manipulation by attackers, even on rooted devices, by\nverifying only approved code runs and its operations are hidden from external\nprocesses.\n| **Note:** This specific use case is enabled on select devices supporting Play Protect live threat detection and AVF. Play Protect live threat detection will utilize AVF when available.\n\nThe high level flows are as follows:\n\n1. Live threat detection pings Private Compute Services to start the VM. Private Compute Services is a privacy-centric intermediary between the PCC and the cloud server\n2. Private Compute Services starts the VM and gets its public key from the VM\n3. Private Compute Services hands over VM ownership to Play Protect live threat detection\n4. Private Compute Services sends attestation and public key to the server\n5. Server verifies attestation and encrypt protections with VM public key\n6. Server then sends the encrypted protections back to the device\n7. Then, the on-device live threat detection can utilize encrypted protection within the VM. The VM is the only entity with the private key which can decrypt the protections\n\nThe high level component are as follows:\n\n- Server: Encrypt and deliver encrypted protections to the VM\n- Private Compute Services: Used to start the VM and mediate the communication to the VM and show transparency that no user data is going through Astrea to server\n- Play Protect live threat detection:\n - Contains and uses model classifiers provided by Content Safety on-device\n - Accepts ownership of the VM and holds it for classification use\n - Starts and stops the VM as needed.\n\nOEMs\n----\n\nAn OEM can use the AVF for custom use cases.\nFor example, OPPO uses AVF to enable its\n[AI private computing space](https://mp.weixin.qq.com/s/c2x1AdbAJJ0LNQt7PmHahA). This space's first application\nprovides an on-device risk control solution for app clients, running in a\nvirtual machine. The system counters threats from illicit activities,\noffering protection against various hazards."]]