ch09
|  | @ -0,0 +1,148 @@ | |||
| # Secure virtualised workloads | ||||
| 
 | ||||
| * **workload**: any job/payload that needs to be executed on infrastructure | ||||
|     * straight on OS | ||||
|     * in a VM | ||||
|     * in a container | ||||
| 
 | ||||
| ## Virtual machines | ||||
| 
 | ||||
|  | ||||
| 
 | ||||
| * physical hardware | ||||
|     * CPU, memory, chipset, I/O... | ||||
|     * resources often underutilized | ||||
|     * no isolation | ||||
| * hardware-level abstraction | ||||
|     * virtual hardware | ||||
|     * encapsulate all OS and application state | ||||
| * virtualization software | ||||
|     * hypervisor/VMM | ||||
|     * extra level of indirection to decouple hardware and OS | ||||
|     * strong isolation between VMs | ||||
|     * improves utilization | ||||
| * secure multiplexing | ||||
|     * isolation on hardware level | ||||
|     * failure of one VM does not affect others | ||||
| * entire VM is a file | ||||
|     * easy to snapshot, clone, move, distribute | ||||
| * create once, run anywhere (well we try) | ||||
| * types | ||||
|     * **type 1**: hypervisor runs on bare metal (no host OS) (VMWare, Microsoft | ||||
|       Hyper-V, KVM...) | ||||
|     * **type 2**: hypervisor runs on host OS (Virtualbox, VMWare Workstation...) | ||||
|         * relies on host OS to manage calls to hardware | ||||
|         * adds latency | ||||
|         * security risks of host OS exploitable | ||||
|         * aimed towards developers | ||||
| 
 | ||||
| {width=50%} \ {width=50%} | ||||
| 
 | ||||
| ## Containers | ||||
| 
 | ||||
| * virtualization on OS level | ||||
| * much more lightweight -> more dense utilization | ||||
| * share same host OS / kernel | ||||
| * advantages | ||||
|     * much faster startup | ||||
|     * easier to manage | ||||
|     * more containers per host than VMs | ||||
| * no hardware isolation, so security issues | ||||
| * the future | ||||
|     * blur the line between contains and VMs | ||||
|     * **Kata-containers**: lightweight VM per container (better security) | ||||
|     * **Microsoft HyperV**: sometimes wraps containers in lightweight VM | ||||
| * Linux Security Modules (LSM) | ||||
|     * hostile processes can break out of container (badly configured | ||||
|       namespaces, kernel exploits...) | ||||
|     * LSM defines mandatory access control | ||||
|     * lists allowed capabilities (syscalls) per process | ||||
|     * defined by sysadmin | ||||
|     * prevents niche syscalls from being exploited | ||||
| * types | ||||
|     * **OS-level containerization**: spawn containers straight on host OS + kernel | ||||
|         * isolation using kernel functionality (namespaces, cgroups...) | ||||
|         * no need for full guest OS | ||||
|         * no hardware extensions | ||||
|         * attackers could escape container and compromise host | ||||
|         * Docker | ||||
|     * **micro-VM**: containers in lightweight VMs on host | ||||
|         * utilizes hardware-enforced isolation | ||||
|         * containers do not share kernel | ||||
|         * safer | ||||
|         * slower startup, worse performance | ||||
|     * **unikernel**: application compiled together with tailored kernel | ||||
|         * monitor appplication on syscalls used | ||||
|         * once known, construct microkernel and fixed-purpose image | ||||
|         * no user space, only kernel space | ||||
|         * much smaller attack surface (kernel only contains what's necessary) | ||||
|         * runs straight on hypervisor or bare metal | ||||
|         * small footprint, quick to start | ||||
|     * **sandboxing**: container in sandbox running copy of host kernel | ||||
|         * syscalls translated to host kernel | ||||
|         * good isolation | ||||
|         * slow | ||||
|         * not all syscalls supported (yet) | ||||
|          | ||||
| 
 | ||||
| {width=50%} \ {width=50%} | ||||
| 
 | ||||
| {width=50%} \ {width=50%} | ||||
| 
 | ||||
| ## Linux kernel isolation support | ||||
| 
 | ||||
| * [https://linuxcontainers.org/] | ||||
| * built into Linux kernel | ||||
| * LXC (Linux Containers) | ||||
|     * OS-level virtualization for running containers on Linux host | ||||
|     * low-level, difficult to use | ||||
| * LXD (Linux Container Hypervisor) | ||||
|     * built on top of LXC | ||||
|     * Canonical development | ||||
|     * focus on containerising entire operations systems, not individual applications | ||||
| 
 | ||||
| ### Cgroups | ||||
| 
 | ||||
| * control groups | ||||
| * Linux feature to separate processes into groups | ||||
|     * resource limiting e.g. cpu shares | ||||
|     * prioritization e.g. cpu pinning | ||||
|     * device access | ||||
| 
 | ||||
| ### Namespaces | ||||
| 
 | ||||
| * provide isolated view of global resources for a group of processes | ||||
|     * only see other processes in namespaces | ||||
|     * only see allowed devices, users, file system... | ||||
|     * 2 PIDs: global one and one within namespace | ||||
|     * own root file system (copy of host root) | ||||
| 
 | ||||
| ## WebAssembly | ||||
| 
 | ||||
| * W3C standard for portable high-performance applications | ||||
| * binary code | ||||
|     * compiled to virtual CPU | ||||
|     * runs in runtime | ||||
| * portable compilation target | ||||
| * near-native performance | ||||
| * WebAssembly System Interface (WASI): OS-level functionality + integrated | ||||
|   security | ||||
| 
 | ||||
| ## Trusted execution environment | ||||
| 
 | ||||
| * confidential computing: protect data in use | ||||
|     * at-rest data: data on storage, just encrypt it | ||||
|     * in-transit data: use ewncryption | ||||
|     * in-use data: needs to be decrypted before it can be used in application | ||||
|     * TEE looks to address data in use security concern | ||||
| * protect *guest* from untrustworthy *host* | ||||
|     * confidentiality: unauthorized entities cannot view data used in TEE, data | ||||
|       is encrypted in-memory | ||||
|     * integrity: prevent tampering (checksums) | ||||
|     * provable origin: hardware-signed evidence of origina and current state so | ||||
|       client can verify and decide to trust code running in TEE | ||||
| * AMD Secure Encrypted Virtualization (SEV, SEV-ES) | ||||
| * Intel Software Guard Extensions (SGX) | ||||
| * Intel Trusted Domain Extensions (TDX) | ||||
| 
 | ||||
|  | ||||
| After Width: | Height: | Size: 18 KiB | 
| After Width: | Height: | Size: 34 KiB | 
| After Width: | Height: | Size: 21 KiB | 
| After Width: | Height: | Size: 29 KiB | 
| After Width: | Height: | Size: 32 KiB | 
| After Width: | Height: | Size: 30 KiB | 
| After Width: | Height: | Size: 24 KiB | 
| After Width: | Height: | Size: 24 KiB |