https://crocs.fi.muni.cz @CRoCS_MUNI PV204 Security technologies Trusted Boot, TPM, SGX Petr Švenda svenda@fi.muni.cz @rngsec Centre for Research on Cryptography and Security, Masaryk University Please comment on slides with anything unclear, incorrect or suggestions for improvement https://drive.google.com/file/d/1i8K1d8JpIesLnMbf8S4QUNs3UEXhLbUr/view?usp=sharing https://crocs.fi.muni.cz @CRoCS_MUNI Overview • Booting chain of programs • BIOS as root of trust • Verified and Measured boot • Trusted boot in the wild – Trusted Platform Module – Chromium, Windows 8/10, UEFI… • Dynamic root of trust – Intel’s TXT, SGX | PV204: Trusted boot2 https://crocs.fi.muni.cz @CRoCS_MUNI Motivation – untrusted host platform • Traditional role of operating system – Isolate processed – Manage privileges, authorize operations • But how to deal with – Debugger, disassembler – Intercepted multimedia output – Malware run along with banking app – Keyloggers, Evil maid – System administrators, Service providers – … | PV204: Trusted boot3 https://crocs.fi.muni.cz @CRoCS_MUNI Solution? • Code signing (e.g., Microsoft AuthentiCode) – Application binary is signed, PKI used to verify certificate – If not signed, user is notified – Mandatory signing for selected applications (drivers…) | PV204: Trusted boot Signed == Secure? 4 https://crocs.fi.muni.cz @CRoCS_MUNI Signed == Secure? 5 | PV204: Trusted boot https://crocs.fi.muni.cz @CRoCS_MUNI Trust in program’s functionality • Trust in a program code? – Signed code may still contain bugs and vulnerabilities • Trust only in a program code? – Underlying OS layers – Underlying firmware – Underlying hardware – Memory used by the program – Other code with access to the program’s memory/code – … • The program is almost never executed “alone” | PV204: Trusted boot6 https://crocs.fi.muni.cz @CRoCS_MUNI Problem statement • How to make sure that valid programs run only within valid environment? 1. Is it possible to start valid “clean” environment on previously compromised machine? 2. Is it possible to prevent tampering of apps against an attacker with physical access? 3. How to prove to remote party what apps are running on local machine? | PV204: Trusted boot7 https://crocs.fi.muni.cz @CRoCS_MUNI Classical boot chain | PV204: Trusted boot http://www.thegeekstuff.com/2011/02/linux-boot-process/ http://social.technet.microsoft.com/wiki/contents/articles/11341.the-windows-7-boot-process-sbsl.aspx Linux Windows (7) How to detect that BIOS or OS Loader was modified? (evil maid, bootkit…) 8 https://crocs.fi.muni.cz @CRoCS_MUNI How to arrive at the expected chain of apps? 1. Just trust the whole boot process 2. Make all applications in protected read-only memory – If read-only => cannot be (maliciously) modified. But is it really what is running? 3. Signature-based approach: Verified boot – Before next app is executed, its signature is verified – Requires valid (unforged) public key (integrity) – Requires trust to owner of private key (signs only valid applications) 4. Create un-spoofable log what executed: Measured boot – Before next app is executed, its hash (“measurement”) is added to un-spoofable log (TPM’s PCR) – Will NOT prevent run of unwanted app, but environment cannot lie about what was executed (after-thefact examination) – Requires (protected) log storage (Trusted Platform Module) – May require authentication of log (Remote attestation) | PV204: Trusted boot9 https://crocs.fi.muni.cz @CRoCS_MUNI “Verified” boot (signatures) | PV204: Trusted boot “Measured” boot (cumulative hash) Trusted boot 10 https://crocs.fi.muni.cz @CRoCS_MUNI “Verified” boot | PV204: Trusted boot BIOS MBR GRUB Kernel User app … VERIFY (RSA) VERIFY (RSA) VERIFY (RSA) VERIFY (RSA) MEASURE: PCR = H(PCR | H(MBR)) MEASURE: PCR = H(PCR | H(GRUB)) MEASURE: PCR = H(PCR | H(Kernel)) MEASURE: PCR = H(PCR | H(User app)) Nothing => BIOS is Root of Trust What verifies or measures BIOS? RESET: PCR = 0 PCR = H(…H(H(0|H(MBR))|H(GRUB)…H(User app)) => “Measured” boot 11 https://crocs.fi.muni.cz @CRoCS_MUNI Root of trust (for verified/measured boot) • Verified and Measured boot need some root of trust – Initial piece of code that nobody verifies/measures • Static root of trust – Start building trusted chain after reset of whole device • Dynamic root of trust – Start building trusted chain without reset of device (faster) • What can be root of trust? – static root of trust: BIOS, UEFI firmware, Intel Boot Guard – dynamic root of trust: Intel TXT, Intel SGX • Root of trust requires special protection – As nobody verifies than nobody will detect eventual modification | PV204: Trusted boot12 https://crocs.fi.muni.cz @CRoCS_MUNI BIOS as root of trust • First code executed on CPU of target machine • Privileged access to hardware – E.g., can write into memory of OS code via DMA • Provides code for System Management Mode (SMM) – Routines executed during the whole platform runtime – x86 feature since 386, all normal execution is suspended – Used for power management, memory errors, hardware-assisted debugger… – Very powerful mode (=> also target of “ring -2” rootkits) | PV204: Trusted boot13 https://crocs.fi.muni.cz @CRoCS_MUNI BIOS – security considerations • How BIOS verifies integrity of next module to run? • Where public key(s) for verification are stored? • How to handle updates of signing keys? • How BIOS checks signatures on its own updates? • How BIOS can be compromised? | PV204: Trusted boot14 https://crocs.fi.muni.cz @CRoCS_MUNI How BIOS can be compromised? 1. Maliciously written by BIOS vendor (backdoor) 2. Replacement of genuine BIOS by malicious one – By physical flash (SPI programmer) of BIOS code – By lack of flashing protection mechanism by original BIOS – By code logic flaws in BIOS locking mechanisms 3. Modification of other code/data used by BIOS – Bug in parsing unsigned data… • Currently used protections: – Chipset-enforced protection of flash memory with BIOS – BIOS signature verification before new version is written – Hardware-aided check of executed code (TPM, TXT, SGX) – Check of BIOS signature before execution by CPU (IBG) | PV204: Trusted boot15 https://crocs.fi.muni.cz @CRoCS_MUNI BIOS write locking – “locks” • Prevent unauthorized BIOS flash (from host OS) • Allow for authorized BIOS changes – BIOS upgrade, signing keys update – Change of persistent configurations (boot device…) • Locking mechanism (locks) for BIOS memory write 1. Locks are unlocked after reboot 2. Signature on new BIOS version is verified by old BIOS, and new is flashed eventually (before locking locks) 3. BIOS configuration (boot device priority) is written before locking locks 4. Locks locked before handling execution to other code | PV204: Trusted boot16 https://crocs.fi.muni.cz @CRoCS_MUNI Attacks against BIOS locks 1. Attacks typically via BIOS code vulnerability – BIOS usually does not takes (much) user input, but may parse BIOS update blob with some parts unsigned (logo) – Buffer overflow in logo parsing => Locks are not locked yet => write own BIOS – http://invisiblethingslab.com/resources/bh09usa/Attacking%20Intel%20BIOS.pdf 2. Write into flash memory by SPI programmer | PV204: Trusted boot Which one is more serious? Different attacker models 1. Is remote, but patchable 2. Is local attacker, but requires design changes to prevent 17 https://crocs.fi.muni.cz @CRoCS_MUNI Impact: Attack against Tails live-CD distro • Tails is live-CD Linux distribution • Designed to provide security even on previously compromised computer – Boot complete fresh OS from live-CD + security tools • Attack 1: Physical BIOS modification – Modified BIOS inserts malicious code into Tails during boot time – Known thread, physical access to computer assumed • Attack 2: SMM rootkit (LightEater) – Bug in BIOS exploited by remote party to modify SMM routines • Main issue: Tails tries to start with clean erased computer, but some elements still persist erase (BIOS modifications) | PV204: Trusted boot18 https://crocs.fi.muni.cz @CRoCS_MUNI INTEL BOOT GUARD (IBG) | PV204: Trusted boot19 https://crocs.fi.muni.cz @CRoCS_MUNI Intel Boot Guard (IBG) • Relatively recently (2014) introduced feature to protect BIOS – Piece of trusted processor-provided, ROM-based code – Runs first after reset, verifies Initial Boot Block (IBB) 1. “Measured” boot mode (TPM-based) – Passively extends TPM’s PCRs by hash of IBB 2. “Verified” boot mode (digital signature) – OEM vendor hardcodes public key via fuses into CPU – Intel Boot Guard checks signature of IBB by OEM’s key – Only vendor-approved IBB=>BIOS=>OS is executed 3. Combination of measured and verified mode | PV204: Trusted boot20 https://crocs.fi.muni.cz @CRoCS_MUNI BIOS Intel Boot Guard – new root of trust | PV204: Trusted boot BIOS MBR GRUB Kernel User app … Intel Boot Guard (CPU) VERIFY (RSA) VERIFY (RSA) VERIFY (RSA) VERIFY (RSA) VERIFY (RSA) MEASURE: PCR = H(BIOS-IBB) MEASURE: PCR = H(PCR | H(MBR)) MEASURE: PCR = H(PCR | H(GRUB)) MEASURE: PCR = H(PCR | H(Kernel)) MEASURE: PCR = H(PCR | H(User app)) IBG: Measured modeIBG: Verified mode 21 https://crocs.fi.muni.cz @CRoCS_MUNI Intel Boot Guard – security improvements • What attacks are mitigated by Intel Boot Guard? • Direct BIOS flash by SPI programmer – Mitigated, signature/measurement mismatch • Remote change of BIOS / BIOS data – Mitigated, signature/measurement mismatch • Other bug(s) in BIOS code – Not mitigated, signed code still contains bug • Any new attacks opened by IBG? | PV204: Trusted boot22 https://crocs.fi.muni.cz @CRoCS_MUNI How hard is to incorporate backdoor? • OEM vendor can sign backdoored BIOS – But multiple OEM vendors exist, open-source bootloaders (coreboot) • Intel Boot Guard is written by Intel only – But OEM fuses own verification public key, right? – But it is the IBG code that actually verifies a signature! • Trivial (potential) backdoor (inside IBG code inside CPU) – if (IBB[SOME_OFFSET] == BACKDOOR_MAGIC) then always load provided BIOS (no signature check) – Or possibly verify by some other public key (secure even when BACKDOOR_MAGIC is leaked) | PV204: Trusted boot23 https://crocs.fi.muni.cz @CRoCS_MUNI Short summary • Signature-based “verified” boot approach – Whitelisting approach – run only what is signed – Robust signature process needed (trust in private key owner) – Integrity of verification public key is critical – Key management is necessary (multiple keys, key updates) • “Measured” boot approach – Un-spoofable log of hashes of executed code – Can be remotely verified (remote attestation, explained later) • Root of trust needs to be protected – Historically was BIOS (+ update signatures + write locks) – Recently Intel Boot Guard inside CPU (signature of BIOS) | PV204: Trusted boot24 https://crocs.fi.muni.cz @CRoCS_MUNI TRUSTED PLATFORM MODULE | PV204: Trusted boot25 https://crocs.fi.muni.cz @CRoCS_MUNI TPM hardware • Cryptographic smart card connected/inside to device – Secure storage, secure crypto environment… – (But not programmable JavaCard ☺) • Physical placement 1. Additional chip on motherboard (discrete TPM) 2. Incorporated inside CPU (fTPM) 3. Incorporated in peripheral (integrated TPM, e.g., Ethernet card) 4. (Software TPM – for development and debugging) • Accessed during boot time – “Measured” boot (TPM’s PCR registers) – Bitlocker encrypted drive keys • Accessed later (private key operation) | PV204: Trusted boot26 https://crocs.fi.muni.cz @CRoCS_MUNI Trusted platform module | PV204: Trusted boot Author: Guillaume Piolle 27 https://crocs.fi.muni.cz @CRoCS_MUNI Trusted Platform Module (TPM) • ISO/IEC 11889 standard for secure crypto-processor • Versions published by Trusted Computing Group – https://trustedcomputinggroup.org – TPM 1.2 (2011) – TPM 2.0 (2016, not compatible with 1.2, but downgrade switch in BIOS) • Tools to communicate with TPM – Windows: Microsoft PCPTool, TSS.MSR, Windows API – Linux: tpm_tools, tpm2_tools, GUI TPMManager | PV204: Trusted boot28 https://crocs.fi.muni.cz @CRoCS_MUNI TPM 1.2 vs. TPM 2.0 | PV204: Trusted boot https://en.wikipedia.org/wiki/Trusted_Platform_Module • TPM 2.0 introduced algorithm flexibility (no longer fixed SHA-1) – If (some) algorithm is broken, no need to create “TPM 3.0” • TPM 2.0 often supports legacy API 1.2 (switch in BIOS) • TPM 2.0 seems to focus on IoT-like devices (support TLS) 29 https://crocs.fi.muni.cz @CRoCS_MUNI Provided security functions I. “Measured” boot with remote attestation – Provide signed log of what executed on platform (PCR) II. Storage of keys (disk encryption, private keys…) – Can be additionally password protected III. Binding and Sealing of data – Encryption key wrapped by concrete TPM’s public key IV. Platform integrity – Software will not start if current PCR value is not right | PV204: Trusted boot30 https://crocs.fi.muni.cz @CRoCS_MUNI TPM Trusted Software Stack stack | PV204: Trusted boot Infineon, http://www.cs.unh.edu/~it666/reading_list/Hardware/tpm_fundamentals.pdf 31 https://crocs.fi.muni.cz @CRoCS_MUNI TPM PCR • Platform Configuration Register (PCR) • Measurement cumulatively stored in PCR – measurement = SHA1(next block to execute) – PCR[i] = SHA1(PCR[i] | new_measurement) – Current block measure & store next before passing control • PCR cannot be erased until reboot – Every part that was executed is stored – Possible to perform after-the-fact verification what executed • Idea: boot what you want, but PCR will hold trace • Multiple PCRs to support finer grained reporting | PV204: Trusted boot32 https://crocs.fi.muni.cz @CRoCS_MUNI Platform attestation – PCR registers • W: PCPTool.exe GetPCRs • L: cat `find /sys/class/ -name "tpm0"`/device/pcrs | PV204: Trusted boot33 https://crocs.fi.muni.cz @CRoCS_MUNI Remote attestation of platform state • So you measured your boot. How to prove your state to remote party? • Idea: 1. Take PCR values (inside TPM) 2. Sign it (inside TPM) by TPM’s private key (AIK) 3. Remote party holds public key and can verify signature => trust in authenticity of PCR values | PV204: Trusted boot34 https://crocs.fi.muni.cz @CRoCS_MUNI Remote attestation of platform state • Apps running on your computer measured in PCRs • Your TPM contains unique Endorsement key • You can generate Attestation key inside TPM (AIK) – And sign AIK by Endorsement key (inside TPM) • You can sign your PCRs by AIK (inside TPM) • Remote party can verify signature on AIK key – Using public key of Endorsement key • Remote party can verify signature on PCRs – Using public key of AIK key • Remote party now knows “what” you are running | PV204: Trusted boot35 https://crocs.fi.muni.cz @CRoCS_MUNI Remote attestation • Multiple PCRs to support finer grained reporting – not just single cumulative value • Multiple PCRs available – BIOS, ROM, Memory Block Register [index 0-4] – OS loaders [5-7], Operating System [8-15] – Debug [16], Localities, Trusted OS [17-22] – Application specific [23] • What is PCR measurement good for? – PCR content can be signed by TPM’s private key and exported – List of applications claimed to be executed (=> PCR expected value can be recomputed by remote party) – => Remote attestation | PV204: Trusted boot36 https://crocs.fi.muni.cz @CRoCS_MUNI Platform attestation – PCR registers | PV204: Trusted boot PADS TPM_VERSION_12 28 8cb1a2e093cf41c1a726bab3e10bc1750180bbc5 b2a83b0ebf2f8374299a5b2bdfc31ea955ad7236 b2a83b0ebf2f8374299a5b2bdfc31ea955ad7236 b2a83b0ebf2f8374299a5b2bdfc31ea955ad7236 68fffb7e5c5f6e6461b3527a0694f41ebd07e4e1 8e33d52190def152c9939e9dd9b0ea84da25d29b b2a83b0ebf2f8374299a5b2bdfc31ea955ad7236 b2a83b0ebf2f8374299a5b2bdfc31ea955ad7236 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 b2a83b0ebf2f8374299a5b2bdfc31ea955ad7236 7c84e69cd581eefd7ebe1406666711fd4fda8aa8 01788a8a31f2dafcd9fe58c5a11701e187687d49 26cda47f1db41bedc2c2b1e6c91311c98b4e2246 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffff 0000000000000000000000000000000000000000 …37 https://crocs.fi.muni.cz @CRoCS_MUNI TPM platform info • Provides information about your platform state • Included in PCR12 (Operating System information) | PV204: Trusted boot 44 2 0 66 179136858 0 64 179136858 45 0 0 671791368580 67 179136858 Reboot => 38 https://crocs.fi.muni.cz @CRoCS_MUNI TRUSTED BOOT – REAL IMPLEMENTATIONS | PV204: Trusted boot39 https://crocs.fi.muni.cz @CRoCS_MUNI Verified boot - Chromium OS • Starts with read-only part of firmware/BIOS (root of trust) – Cannot be forged, but also cannot be not updated – Contains permanently stored root RSA public key • “Verified” boot strategy is used – Verifies that all executed code is from Chromium OS source tree – Code signatures verified by (shorter) keys signed by root key • speed tradeoff + possibility to update compromised keys • Does not completely prevent user to boot other OSes – Developer mode turned on => signature on kernel not checked – TPM is used to provide mode reporting (normal/devel/recovery) • https://www.chromium.org/chromium-os/chromiumos-design-docs/verified-boot • https://www.chromium.org/chromium-os/chromiumos-design-docs/verified-boot-crypto | PV204: Trusted boot40 https://crocs.fi.muni.cz @CRoCS_MUNI Chromium OS uses of TPM • Limited remote attestation (PCR[0] used) – to store developer and recovery mode switches • Prevent rollback attack – Prevented by strictly increasing version of key & firmware – Version is written in TPM’s NV RAM location, only read-only firmware can update this location – Key version prevents update to older (compromised) key – Firmware version prevents update to vulnerable firmware • Store selected user’s private keys (secure storage) • Wrap selected disk encryption keys by TPM’s system key • https://www.chromium.org/developers/design-documents/tpm-usage | PV204: Trusted boot41 https://crocs.fi.muni.cz @CRoCS_MUNI UEFI SECURE BOOT Secured and Trusted Boot | PV204: Trusted boot42 https://crocs.fi.muni.cz @CRoCS_MUNI UEFI secure boot principles • Platform key (RSA 2048b, PK) for authentication of platform owner • Key exchange keys (KEKs) for authentication of other components (drivers, OS components…) 1. “Setup" mode – platform key (PK) is not loaded yet – Everybody can write its own platform key (become owner) – Once PK is written, switch to “user” mode 2. “User” mode – New keys (PKs, KEKs) can be written only if signed by PK – New software components loaded only if signed by KEKs | PV204: Trusted boot43 https://crocs.fi.muni.cz @CRoCS_MUNI| PV204: Trusted boot Measured into OS PCRs 8-12 Measured in PCRs[0-6] by the platform manufacturer NFTS Boot Sector [8] NTFS Boot Block [9] Boot Manager [10] MemTest [12-14] POST [0] C-RTM [0] INT 19h handler [0] WinResume [12-14] 3rd party driver specially signed 3rd party driver normally signed Signed OS Components Unsigned OS Components Platform Manufacturer Components 3rd party plugin hardware Option ROM Init [2] Hibernated Image Legend: NTFS Partition Table [5] Data (Not validated) Master Boot Record[4] Measured Boot with Conventional BIOS WinLoad [12-14] Measured into OS PCRs[12-14] during boot Loaded by WinLoad hal.dll bootvid.dll psched.dll kd.dll ntoskrnl.exe ci.dll ntoskrnl.exe driver initialization in phases... Early Launch AM Drivers Phase 1 Other Boot Drivers Phase 3 AM Early Launch #2 Storage Normal Drivers Phase 4 Networking Mouse AM Early Launch #1 Policy Data TPM Dependent Drivers Phase 2 PnP Manager TPM driver TBD bootres.dll AM Early Launch #2 Policy Data System Hive AM #1 Runtime Others AM Early Launch #1 AM Early Launch #N Could be measured by an AM component in PCR[15]. AM Early Launch #N Policy Data others Config Data[1] Option ROM Config Data[3] Microsoft, Secured Boot and Measured Boot: Hardening Early Boot Components Against Malware 44 https://crocs.fi.muni.cz @CRoCS_MUNI| PV204: Trusted boot Measured into OS PCRs[12-14] during boot Measured into OS PCRs 8-12 Measured in PCRs[0-6] by the platform manufacturer Boot Manager [4] WinLoad [12-14] MemTest [12-14] Boot Services Runtime Services [0] C-RTM / Platform Init [0] UEFI OS Loader WinResume [12-14] 3rd party driver specially signed 3rd party driver normally signed Signed OS Components Platform Manufacturer Components 3rd party plugin hardware Boot Service Drivers [0] Hibernated Image Legend: GPT / Partition Table [5] Data (Not validated) Measured Boot with UEFIRuntime Drivers [2] Boot Variables [5] Config/ Variables[3] Config/ Variables[1] Loaded by WinLoad hal.dll bootvid.dll psched.dll kd.dll ntoskrnl.exe ci.dll ntoskrnl.exe driver initialization in phases... Early Launch AM Drivers Phase 1 Other Boot Drivers Phase 3 AM Early Launch #2 Storage Normal Drivers Phase 4 Networking Mouse AM Early Launch #1 Policy Data TPM Dependent Drivers Phase 2 PnP Manager TPM driver TBD bootres.dll AM Early Launch #2 Policy Data System Hive AM #1 Runtime Others AM Early Launch #1 AM Early Launch #N Could be measured by an AM component in PCR[15]. AM Early Launch #N Policy Data others 45 https://crocs.fi.muni.cz @CRoCS_MUNI WINDOWS 8/10 TRUSTED BOOT Secured and Trusted Boot | PV204: Trusted boot46 https://crocs.fi.muni.cz @CRoCS_MUNI Windows 8/10 trusted boot • Certified Windows 8/10 devices have trusted boot by default – “Verified” boot used (UEFI+OS sign) – “Measured” boot used (TPM) • TPM PCRs used for measurements • TPM used for keys protection – BitLocker disk encryption key – ROCA CVE-2017-15361 is relevant • If Infineon TPM used, patch! | PV204: Trusted boot http://technet.microsoft.com/en-US/windows/dn168167.aspx 47 https://crocs.fi.muni.cz @CRoCS_MUNI Usage of TPM in BitLocker (disk encryption) • Source of Volume Master Key (VMK) 48 | PV204: Trusted boot M. Russinovich et. al., Windows Internals Part 2, 6th Edition https://crocs.fi.muni.cz @CRoCS_MUNI Attack: Sniffing keys for BitLocker • Nice writeup how to sniff BitLocker key when send from TPM to OS, then decrypt disk image – https://pulsesecurity.co.nz/articles/TPM-sniffing 49 | PV204: Trusted boot https://crocs.fi.muni.cz @CRoCS_MUNI Windows 8/10 – secure boot process • Certified Windows 8/10 devices must have secure boot enabled by default | PV204: Trusted boot Microsoft, Secured Boot and Measured Boot: Hardening Early Boot Components Against Malware 50 https://crocs.fi.muni.cz @CRoCS_MUNI TPM owner password • You “own” TPM if you can set owner password – One owner password per single TPM • Password set during TPM initialization phase – can be repeated, but content is erased • Password protected storage of keys (Bitlocker…) | PV204: Trusted boot Runtpm.msc 51 https://crocs.fi.muni.cz @CRoCS_MUNI| PV204: Trusted boot52 https://crocs.fi.muni.cz @CRoCS_MUNI BASIC COMPONENTS | PV204: Trusted boot53 https://crocs.fi.muni.cz @CRoCS_MUNI TPM keys • Endorsement key (EK) – Generated during manufacturing, permanent – Remain in TPM device during whole chip lifetime • TPM Storage Root Key (SRK) – Generated by use after taking ownership – New Storage root key can be generated after TPM clear – Used to protect TPM keys created by application • Various delegate keys – Separate keys signed/wrapped by EK, SRK… – Application can generate and store own keys – Good practice: do not have single key for everything | PV204: Trusted boot54 https://crocs.fi.muni.cz @CRoCS_MUNI TPM storage keys | PV204: Trusted boot • Application keys encrypted under SRK • Exported as protected blob • Stored on mass-storage • If needed, decrypted back and placed into slot • Key usable until removed http://www.cs.unh.edu/~it666/reading_list/Hardware/tpm_fundamentals.pdf 55 https://crocs.fi.muni.cz @CRoCS_MUNI TPM policy • TPM releases secret only when PCR contains particular value • Enforcement even in measured-only mode – Key is not released if unexpected component was started (started => is included in measurements) • Conditions can use ANDs and ORs • How to handle policy updates? – Change policy of state only from already valid state | PV204: Trusted boot56 https://crocs.fi.muni.cz @CRoCS_MUNI Programming with TPM • The TPM Software Stack from Microsoft Research (C++, Java, C#, Python) – https://github.com/Microsoft/TSS.MSR • tpm2-tools – Open-source TPM stack for Linux and Windows – https://github.com/tpm2-software/tpm2-tools | PV204: Trusted boot57 https://crocs.fi.muni.cz @CRoCS_MUNI Usage of TPM in cloud-computing • Combination of virtualization and trusted computing – Modified Xen hypervisor used to make standard TPM available for secret-less virtual machine – Results in significant decrease in the size of trusted computational base (TCB) • Several different implementations – E.g., Red Hat keylime • https://github.com/keylime/ | PV204: Trusted boot http://bleikertz.com/research/acns2013.pdf 58 https://crocs.fi.muni.cz @CRoCS_MUNI DYNAMIC ROOT OF TRUST | PV204: Trusted boot59 https://crocs.fi.muni.cz @CRoCS_MUNI Static Root of Trust Measurement (SRTM) • Start trusted immutable piece of firmware – E.g., BIOS loader or Intel Boot Guard • Initiates measurement process – Integrity of every next component is added to TPM’s PCRs – Start → BIOS → PCI EEPROM → MBR → OS … • But do we need to start (trusted boot) only after reboot? – Takes relatively long time – Can we execute the same process, but dynamically? – Can we exclude long chain (BIOS, PCI…)? • Long chain => large Trusted Computing Base (TCB)! | PV204: Trusted boot60 https://crocs.fi.muni.cz @CRoCS_MUNI Dynamic Root Trust Measurement (DRTM) • Launch of measured environment at any time – “Late lunch” option – No need to reset whole platform – Can be also terminated after some time • Measurement process similar to static root of trust – Application trust chain executed from dynamic root • Implementation of DRTM – Intel’s TXT (not used much in practice, server CPUs typically) – Intel’s SGX (all Skylake processors and newer, from 2015) | PV204: Trusted boot61 https://crocs.fi.muni.cz @CRoCS_MUNI Intel’s Trusted Execution Technology • Intel’s TXT uses a processor-based root of trust – Option given in TCG specifications • Goal: shorten chain of trust – Run specific program in verified/trusted chain without restart • Goal: provide independent root of trust (CPU-based) – Processor isolates memory of Measured Launched Environment (MLE) from other processes • Intel’s TXT still uses TPM to store measurements • http://www.intel.com/content/dam/www/public/us/en/documents/guides/intel- txt-software-development-guide.pdf • Outdated, abounded in favor of SGX | PV204: Trusted boot62 https://crocs.fi.muni.cz @CRoCS_MUNI Intel’s TXT issues 1. TXT still relies on BIOS provided code (SMM) – TXT-started chain can be compromised by forged BIOS – Hard to patch (design decision, not implementation bug) – Proposed defence by hardening and sandboxing SMM 2. Bugs in TXT implementation – Memory corruption, misconfiguring VT-d … – Can be fixed after discovery 3. Bugs in processing residual state of pre-TXT lunch – Maliciously modified ACPI tables – Can be fixed after discovery | PV204: Trusted boot63 https://crocs.fi.muni.cz @CRoCS_MUNI tboot – open-source implementation • Pre-kernel/VMM module • Based on Intel’s Trusted Execution Technology • Performs a measured and verified launch of an OS kernel/VMM • http://sourceforge.net/projects/tboot/ | PV204: Trusted boot64 https://crocs.fi.muni.cz @CRoCS_MUNI Intel’s SGX : Security enclave • Intel’s Software Guard Extension (SGX) – New set of CPU instructions intended for future cloud server CPUs • Protection against privileged attacker – Server admin with physical access, privileged malware • Application requests private region of code and data – Security enclave (4KB for heap, stack, code) – Encrypted enclave is stored in main RAM memory, decrypted only inside CPU – Access from outside enclave is prevented on CPU level – Code for enclave is distributed as part of application • Trusted Computing Base significantly limited! ☺ – But proprietary Intel code inside CPU  | PV204: Trusted boot65 https://crocs.fi.muni.cz @CRoCS_MUNI Intel’s SGX – some details • EGETKEY instruction generates new enclave key – SGX security version numbers – Device ID (unique number of CPU) – Owner epoch – additional entropy from user • EREPORT instruction generates signed report – Local/remote attestation of target platform • Debugging possible if application opt in • Enclave cannot be emulated by VM | PV204: Trusted boot66 https://crocs.fi.muni.cz @CRoCS_MUNI SGX hardened password verification | PV204: Trusted boot https://jbp.io/2016/01/17/using-sgx-to-hash-passwords/ 67 https://crocs.fi.muni.cz @CRoCS_MUNI Intel SGX is very active research area • Many small enclaves to cover whole program – User-annotated code split into many enclaves (“microns”) • Secure interaction between microns (attest, auth. encryption) – Tor, H2O, FreeTDS and OpenSSL successfully transformed • 2685, 154, 473 and 307 LOC changes required respectively • TCB only 20KLOC, PANOPLY specific overhead 24% • Memory randomization of code inside enclave – SGX program modified with custom LLVM compiler – Added in-enclave loader for ASLR & swDEP (2703 LOC) – Code&data split into 32/64B units randomized separately • Full library OS based on SGX (Haven, Graphene-SGX) | PV204: Trusted boot68 https://crocs.fi.muni.cz @CRoCS_MUNI Recent attacks against SGX • SGX is not a silver bullet • Vulnerable to side-channels – Attacker with physical access explicitly excluded from attacker model – Impacted by Spectre attack (2017) • https://github.com/lsds/spectre-attack-sgx • https://github.com/osusecLab/SgxPectre – Impacted by Foreshadow attack (CVE-2018-3615) https://foreshadowattack.eu/ • Reading out attestation private key • Bugs of enclave code are still problem (developer) • Not everything is running inside enclave (other code, user input…) 69 | PV204: Trusted boot https://crocs.fi.muni.cz @CRoCS_MUNI Programming with Intel’s SGX • Intel SGX SDK – https://software.intel.com/en-us/sgx-sdk – 6th generation core processor (or later) based platform with SGX enabled BIOS support • Example: Hardened password hashing – https://jbp.io/2016/01/17/using-sgx-to-hash-passwords/ – https://github.com/ctz/sgx-pwenclave • More SGX info – http://theinvisiblethings.blogspot.cz/2013/08/thoughts-on-intels-upcoming-software.html – http://theinvisiblethings.blogspot.cz/2013/09/thoughts-on-intels-upcoming-software.html | PV204: Trusted boot70 https://crocs.fi.muni.cz @CRoCS_MUNI Intel SGX deprecated on non-server CPUs (end 2021) • Intel deprecated technology for the newest CPUs • Not completely clear reasons so far • Possibly mix of many attacks which cannot be fixed without changing the architecture significantly (and breaking compatibility) • https://community.intel.com/t5/Intel-Software-Guard-Extensions/Intel- SGX-deprecated-in-11th-Gen-processors/m-p/1351848 • https://edc.intel.com/content/www/us/en/design/ipla/software- development-platforms/client/platforms/alder-lake-desktop/12th- generation-intel-core-processors-datasheet-volume-1-of- 2/001/deprecated-technologies/ 71 | PV204: Trusted boot https://crocs.fi.muni.cz @CRoCS_MUNI TRUSTED COMPUTING - CRITIQUE | PV204: Trusted boot72 https://crocs.fi.muni.cz @CRoCS_MUNI Trusted computing - controversy • For whom is your computed trusted? – Secure against you as an owner? • Is TC preventing users to run code of their choice? – Custom OS distribution? – Open OEM system – locked on first installation – Physical switch to unlock later • Why some people from Trusted Computing consortium think that Trustworthy Computing might be better title? | PV204: Trusted boot73 https://crocs.fi.muni.cz @CRoCS_MUNI Trusted computing - controversy • R. Anderson, `Trusted Computing' FAQ (2003) – http://www.cl.cam.ac.uk/~rja14/tcpa-faq.html • J. Edge, UEFI and "secure boot“ – http://lwn.net/Articles/447381/ • R. Stallman, Can You Trust Your Computer? – https://www.gnu.org/philosophy/can-you-trust.html • Selected problems addressed in current designs | PV204: Trusted boot74 https://crocs.fi.muni.cz @CRoCS_MUNI Summary • Two principal solutions for trusted boot – Verified boot (signatures) and Measured boot (PCR+RA) • Start from clean (and trusted) point – Allow only intended software to run – Or prove what actually executed • Additional hardware inside motherboard / CPU provides wide range of new possibilities (TPM) • Size of Trusted Computing Base matters (TPM/SGX) • Controversy about implication of trusted boot – Who owns and control target platform | PV204: Trusted boot75