|
| 1 | +<!-- cSpell:ignore Mikko Ylinen Tobin Feldman Fizthum --> |
| 2 | +# Confidential Containers Self-assessment |
| 3 | + |
| 4 | +December 2024 |
| 5 | + |
| 6 | +Primary authors: Mikko Ylinen and Tobin Feldman-Fizthum |
| 7 | + |
| 8 | +## Self-assessment outline |
| 9 | + |
| 10 | +### Table of contents |
| 11 | + |
| 12 | +* [Metadata](#metadata) |
| 13 | + * [Security links](#security-links) |
| 14 | +* [Overview](#overview) |
| 15 | + * [Actors and Actions](#actors-and-actions) |
| 16 | + * [Background](#background) |
| 17 | + * [Goals](#goals) |
| 18 | + * [Non-goals](#non-goals) |
| 19 | +* [Self-assessment use](#self-assessment-use) |
| 20 | +* [Security functions and features](#security-functions-and-features) |
| 21 | +* [Project compliance](#project-compliance) |
| 22 | +* [Secure development practices](#secure-development-practices) |
| 23 | +* [Security issue resolution](#security-issue-resolution) |
| 24 | +* [Appendix](#appendix) |
| 25 | + |
| 26 | +### Metadata |
| 27 | + |
| 28 | +||| |
| 29 | +| -- | -- | |
| 30 | +| Assessment Stage | Incomplete. | |
| 31 | +| Software | <https://github.com/confidential-containers/> | |
| 32 | +| Security Provider | Yes, the primary function of the project is to support the security of a system. | |
| 33 | +| Languages | Rust, Go, and Rego (for policies) | |
| 34 | +| SBOM | Currently, not generated by the project. `go.mod` and `Cargo.toml` files are available for each release. | |
| 35 | + |
| 36 | +#### Security links |
| 37 | + |
| 38 | +<!-- markdown-link-check-disable --> |
| 39 | +| Doc | url | |
| 40 | +| -- | -- | |
| 41 | +| Security file | Github org-wide security policy in each repo: <https://github.com/confidential-containers/.github/blob/main/SECURITY.md> | |
| 42 | +| Design overview | <https://confidentialcontainers.org/docs/architecture/design-overview/> | |
| 43 | +| Trust Model | <https://confidentialcontainers.org/docs/architecture/trust-model/> | |
| 44 | +| Attestation Flow | <https://confidentialcontainers.org/docs/attestation/> | |
| 45 | +<!-- markdown-link-check-enable --> |
| 46 | + |
| 47 | +### Overview |
| 48 | + |
| 49 | +Confidential Containers (CoCo) leverages [Trusted Execution Environments (TEEs)](https://en.wikipedia.org/wiki/Trusted_execution_environment) |
| 50 | +to protect containers and data and to deliver cloud native confidential computing. |
| 51 | + |
| 52 | +The project enables the following: |
| 53 | + |
| 54 | +* Run unmodified applications and containers |
| 55 | +* Support for multiple confidential hardware platforms and cloud offerings |
| 56 | +* End-to-end attestation flow built-in |
| 57 | + |
| 58 | +#### Background |
| 59 | + |
| 60 | +Confidential Containers provides a set of primitives for building confidential Cloud Native |
| 61 | +applications. The following are the key ingredients in CoCo's feature set: |
| 62 | + |
| 63 | +* running a Kubernetes pod inside of a confidential virtual machine (VM) leveraging k8s `RuntimeClass`es |
| 64 | +* attestable [pod configuration policies](https://github.com/kata-containers/kata-containers/blob/main/docs/how-to/how-to-use-the-kata-agent-policy.md) |
| 65 | + (pod Spec, CRI/runtime allow/denylist) and other init data to allow |
| 66 | + workload owners to control the trusted compute base (TCB) of the runtime environment |
| 67 | +* handling of encrypted and signed container images so that related secrets (image layer |
| 68 | + decryption keys) and integrity protected elements (image policies, trusted public keys) |
| 69 | + are provisioned after a successful remote attestation and processed inside the TEEs only |
| 70 | +* sealed Kubernetes Secrets (transparently decrypted for workloads) and protected volumes |
| 71 | + |
| 72 | +#### Actors and Actions |
| 73 | + |
| 74 | +[The project design overview](https://confidentialcontainers.org/docs/architecture/design-overview/) and |
| 75 | +[a detailed attestation flow](https://confidentialcontainers.org/docs/attestation/) are maintained |
| 76 | +on the project website and not repeated here. |
| 77 | + |
| 78 | +#### Goals |
| 79 | + |
| 80 | +The goal of the Confidential Containers project is to standardize confidential |
| 81 | +computing at the pod level and simplify its consumption in Kubernetes. |
| 82 | + |
| 83 | +This enables Kubernetes users to deploy confidential container workloads using |
| 84 | +familiar workflows and tools without extensive knowledge of the underlying |
| 85 | +confidential computing technologies so that code integrity and data confidentiality |
| 86 | +are guaranteed. |
| 87 | + |
| 88 | +Confidential Containers maps pods to confidential VMs, meaning that everything |
| 89 | +inside a pod is within their own TEE. CoCo infrastructure components inside the |
| 90 | +confidential VM are responsible for a) providing a secure runtime environment for |
| 91 | +the workload and its data, b) the necessary guardrails for protecting the API between |
| 92 | +the untrusted host (including the kubelet and CRI runtimes) and the trusted VM, |
| 93 | +and c) remote attestation functions. |
| 94 | + |
| 95 | +The project also seeks to build tested reference use-cases to demonstrate the |
| 96 | +benefits of confidential computing to the ecosystem. The main focus is in trusted |
| 97 | +software supply chains and confidential AI (in different forms). |
| 98 | + |
| 99 | +#### Non-goals |
| 100 | + |
| 101 | +While the project provides many building blocks to make confidential container workload |
| 102 | +deployments easy, the users must understand the security requirements of their workloads |
| 103 | +(such as allowing exec'ing new processes, where the logs are written to etc.). |
| 104 | + |
| 105 | +Moreover, running workloads in TEEs does not protect confidential data from adversaries |
| 106 | +inside the TEE (e.g., triggered by unpatched vulnerabilities in the container images). |
| 107 | + |
| 108 | +Finally, confidential computing platforms usually do not protect against hardware |
| 109 | +side-channels. Neither does Confidential Containers. Also, confidential computing |
| 110 | +does not protect against denial of service. Since the untrusted host is in charge |
| 111 | +of scheduling, it can simply not run the guest and is true for Confidential Containers |
| 112 | +as well. |
| 113 | + |
| 114 | +### Self-assessment use |
| 115 | + |
| 116 | +This self-assessment is created by the Confidential Containers team to perform an internal analysis of the |
| 117 | +project's security. It is not intended to provide a security audit of Confidential Containers, or |
| 118 | +function as an independent assessment or attestation of Confidential Containers' security health. |
| 119 | + |
| 120 | +This document serves to provide Confidential Containers users with an initial understanding of |
| 121 | +Confidential Containers' security, where to find existing security documentation, Confidential Containers plans for |
| 122 | +security, and general overview of Confidential Containers security practices, both for development of |
| 123 | +Confidential Containers as well as security of Confidential Containers. |
| 124 | + |
| 125 | +This document provides the CNCF TAG-Security with an initial understanding of Confidential Containers |
| 126 | +to assist in a joint-assessment, necessary for projects under incubation. Taken |
| 127 | +together, this document and the joint-assessment serve as a cornerstone for if and when |
| 128 | +Confidential Containers seeks graduation and is preparing for a security audit. |
| 129 | + |
| 130 | +### Security functions and features |
| 131 | + |
| 132 | +* In confidential computing careful scrutiny is required whenever information |
| 133 | +crosses the boundary between the trusted and untrusted contexts. Secrets should not |
| 134 | +leave the enclave without protection and entities outside of the enclave should not be |
| 135 | +able to trigger malicious behavior inside it. In Confidential Containers there |
| 136 | +are APIs that cross the trust boundary. The main example is the API between the `Kata |
| 137 | +Agent` in the guest and the `Kata Shim` on the host. This API is protected with an |
| 138 | +[OPA policy](https://github.com/kata-containers/kata-containers/blob/main/docs/how-to/how-to-use-the-kata-agent-policy.md) |
| 139 | +running inside the guest that can block malicious requests by the host. |
| 140 | + |
| 141 | +* Attestation is a crucial part of confidential computing and a direct requirement |
| 142 | +of many guest operations. For example, to unpack an encrypted container image, the |
| 143 | +guest must retrieve a secret key. Inside the guest the `confidential-data-hub` |
| 144 | +and `attestation-agent` handle operations involving secrets and attestation. |
| 145 | + |
| 146 | +* When using Kata Containers container, images are pulled on the worker node with the |
| 147 | +help of a CRI runtime like containerd. The image rootfs bundles are exposed to the |
| 148 | +guest via filesystem passthrough (virtiofs, 9p). This is not suitable for confidential |
| 149 | +workloads because the container images are exposed to the untrusted host. With |
| 150 | +Confidential Containers images are pulled and unpacked inside of the guest. This |
| 151 | +requires additional components such as `image-rs` to be part of the guest rootfs and |
| 152 | +support from the CRI runtimes to make it possible to not do the image pull themselves. |
| 153 | + |
| 154 | +### Project compliance |
| 155 | + |
| 156 | +* Confidential Containers does not comply with any specific security standards. |
| 157 | +* It follows [Remote ATtestation ProcedureS (RATS) architecture](https://www.ietf.org/archive/id/draft-ietf-rats-architecture-22.html) |
| 158 | + principles and terminology for its attestation architecture. |
| 159 | +* It implements [KBS attestation protocol specification](https://github.com/confidential-containers/trustee/blob/main/kbs/docs/kbs_attestation_protocol.md) |
| 160 | + for the confidential VM (pod) and trusted key-broker-service communication. |
| 161 | +* Confidential Containers Trustee attestation tokens follow [EAT Attestation Result (EAR)](https://datatracker.ietf.org/doc/draft-fv-rats-ear/) message format. |
| 162 | + |
| 163 | +### Secure development practices |
| 164 | + |
| 165 | +* CoCo repositories are hosted on [Github](https://github.com/confidential-containers/) |
| 166 | +and code changes are submitted through pull-requests. |
| 167 | +* All changes must be reviewed and approved by two maintainers and the CI tests must pass |
| 168 | +before a pull-request can be merged to `main`. |
| 169 | +* The CI checks run by Github workflows include: |
| 170 | + * Developer Certificate of Origin (DCO) check to verify commits are signed-off correctly |
| 171 | + * code linter and formatting |
| 172 | + * code unit (e.g., `cargo test`) and e2e tests (e.g., running full e2e attestation with a workload in a k8s cluster on real TEEs) |
| 173 | +* CoCo uses `dependabot` to keep its Cargo and Go module dependencies up-to-date. Furthermore, |
| 174 | +some sub-project repositories have also enabled automatic updates of (pinned) Github actions. |
| 175 | +* The community [communication channels](https://github.com/confidential-containers/#join-the-community) include: |
| 176 | + * CNCF Slack: `#confidential-containers` (and sub-project specific channels with `#confidential-containers-` prefix). |
| 177 | + * Weekly community meeting and sub-project meetings. |
| 178 | + * Blog posts and other information (such as the design/architecture docs and guides) on the [project website](https://confidentialcontainers.org/). |
| 179 | + |
| 180 | +### Security issue resolution |
| 181 | + |
| 182 | +* Responsible Disclosures Process and Incident Response: Confidential Containers Github |
| 183 | + org-wide [security policy](https://github.com/confidential-containers/.github/blob/main/SECURITY.md) |
| 184 | + is available for each sub-project repository. It describes how the project vulnerabilities |
| 185 | + are reported, analyzed, patched, and informed. |
| 186 | + |
| 187 | +### Appendix |
| 188 | + |
| 189 | +* Known Issues Over Time: The project has published one [Security Advisory](https://github.com/confidential-containers/trustee/security/advisories/GHSA-7jc6-j236-vvjw). |
| 190 | +* [](https://www.bestpractices.dev/projects/5719) |
| 191 | +* Case Studies: The project maintains a list of [ADOPTERS](https://github.com/confidential-containers/confidential-containers/blob/main/ADOPTERS.md). |
| 192 | + Vendors/adopters have posted blogs and talked publicly (e.g., at KubeCon) about using CoCo |
| 193 | + in many use-cases. Moreover, the project itself runs a working group for |
| 194 | + [use-case driven development](https://docs.google.com/document/d/1LnGNeyUyPM61Iv4kBKFbfgmBr3RmxHYZ7Ev88obN0_E/edit?tab=t.0#heading=h.b0rnn2bw76n). |
| 195 | +* Related Projects / Vendors: Confidential Containers are connected to a wide array |
| 196 | + of projects. Some projects are directly implicated in the design of Confidential |
| 197 | + Containers such as [Kata Containers](https://katacontainers.io/). The support from |
| 198 | + container runtimes (containerd/CRI-O) and their add-ons (e.g., containerd snapshotters) |
| 199 | + are also critical. CoCo project is complementary (by enabling extra level of security) |
| 200 | + to many cloud-native projects and has no overlap with any other project given its feature |
| 201 | + set and capabilities. A more detailed [project alignment](https://github.com/confidential-containers/confidential-containers/blob/main/alignment.md) |
| 202 | + is available in the community repository. |
0 commit comments