Bringing Memory-Safety to Keystone Enclave Mingshen Sun Baidu X-Lab - - PowerPoint PPT Presentation

bringing memory safety to keystone enclave
SMART_READER_LITE
LIVE PREVIEW

Bringing Memory-Safety to Keystone Enclave Mingshen Sun Baidu X-Lab - - PowerPoint PPT Presentation

Bringing Memory-Safety to Keystone Enclave Mingshen Sun Baidu X-Lab Open-Source Enclaves Workshop (OSEW 2019) Berkeley, July 2019 https://mesatee.org Rust and Keystone Enclave Open-Source Enclave (RISC-V Hardware/Keystone Enclave) :


slide-1
SLIDE 1

Bringing Memory-Safety to Keystone Enclave

Mingshen Sun

Baidu X-Lab

Open-Source Enclaves Workshop (OSEW 2019) Berkeley, July 2019

slide-2
SLIDE 2

https://mesatee.org

slide-3
SLIDE 3

Rust and Keystone Enclave

  • Open-Source Enclave (RISC-V Hardware/Keystone

Enclave): openness, simplicity, and flexibility

  • Rust: Safety, performance, and productivity
  • Outline:
  • 1. Briefly introduce our progress in bringing Rust to

Keystone Enclave

  • 2. Discuss our efforts in implementing safe

GlobalPlatform TEE APIs implemented in OP-TEE

3

slide-4
SLIDE 4

Why Rust

  • Memory-safety issues break security guarantees of

TrustZone.

  • Qualcomm's Secure Execution Environment (QSEE)

privilege escalation vulnerability and exploit (CVE-2015-6639) : http://bits-please.blogspot.com/ 2016/05/qsee-privilege-escalation-vulnerability.html

  • Extracting Qualcomm's KeyMaster Keys - Breaking

Android Full Disk Encryption: http://bits- please.blogspot.com/2016/06/extracting-qualcomms- keymaster-keys.html

4

slide-5
SLIDE 5

Rust and Keystone Enclave

  • SDK Overview: https://docs.keystone-enclave.org/en/

latest/Keystone-Applications/SDK-Basics.html

  • Host libraries (lib/host)
  • Enclave Application libraries (lib/app)
  • Edge libraries (lib/edge)
  • Runtimes (rts/)

5

slide-6
SLIDE 6

Rust Keystone

  • Target: riscv64imac-unknown-none-elf

6

slide-7
SLIDE 7

TEE Specs

  • GlobalPlatform TEE specifications
  • TEE System Architecture (GPD_SPE_009): defines a

general TEE architecture

  • TEE Internal Core API Specification (GPD_SPE_010)
  • TEE Client API Specification (GPD_SPE_007): defines

communication interface between Rich OS apps and trusted apps.

  • OP-TEE: open portable trusted execution environment in

compliance with GlobalPlatform specs.

7

slide-8
SLIDE 8

TrustZone Architecture

trusted apps client apps Rich OS Trusted OS Secure Monitor

Secure World Normal World

Hypervisor

EL0 EL1 EL2 SVC SVC SMC SMC HVC/SMC S-EL0 S-EL1 S-EL3

8

slide-9
SLIDE 9

OP-TEE Implementation

trusted apps client apps TEE Client SDK TEE TA SDK

Rich OS (OP-TEE driver)

OP-TEE Trusted OS ARM Trusted Firmware (Secure Monitor)

Secure World Normal World

GlobalPlatform OP-TEE Internal Core C API

GlobalPlatform OP-TEE Client C API

TEE Supplicant

EL0 EL1

9

slide-10
SLIDE 10

Safe SDK Design

trusted apps client apps TEE Client SDK TEE TA SDK OP-TEE Trusted OS

Secure World Normal World

Safe GlobalPlatform TEE Internal Core API

Safe GlobalPlatform TEE Client API

Rust OP-TEE TrustZone SDK

Rich OS (OP-TEE driver)

ARM Trusted Firmware (Secure Monitor)

10

slide-11
SLIDE 11

libteec

  • ptee-teec
  • ptee-teec-sys

Design of Client SDK

C library Rust foundation layer Rust crates Upstream projects

client apps third-party crates rust/libstd ...

Client apps targets:

  • aarch64-unknown-linux-gnu
  • arm-unknown-linux-gnu

11

slide-12
SLIDE 12

libutee libutil rust/libstd compiler-builtins libc

  • ptee-utee
  • ptee-utee-sys

... third-party crates trusted apps

C library Rust foundation layer Rust crates Upstream projects

Design of TA SDK

Two new targets in the Rust compiler/std:

  • aarch64-unknown-optee-trustzone
  • arm-unknown-optee-trustzone

12

slide-13
SLIDE 13

Project Structure

  • optee-teec: client-side Rust library (LoC: ~933)
  • optee-utee: TA-side Rust library (LoC: ~2827)
  • optee: upstream optee library (optee_client, optee_os)
  • rust: modified Rust including
  • rust: ~29 files changed, 1800 insertions
  • libc: ~4 files changed, 131 insertions
  • compiler-builtins: ~3 files changed, 3 insertions(+), 1

deletion(-)

  • examples: hello_world, aes, hotp, random,

secure_storage, and serde (LoC: ~3373)

13

slide-14
SLIDE 14

Example - Demo in QEMU

14

slide-15
SLIDE 15

GlobalPlatform TEE API Specification

TA_CreateEntryPoint TA_DestroyEntryPoint TA_OpenSessionEntryPoint TA_CloseSessionEntryPoint TA_InvokeCommandEntryPoint TEEC_InitializeContext TEEC_FinalizeContext TEEC_OpenSession TEEC_CloseSession TEEC_InvokeCommand TEEC_OpenSession TEEC_CloseSession TEEC_InvokeCommand

Normal World Secure World ① ② ③ ④

15

slide-16
SLIDE 16

Example - Client (Current Design)

Context::new() ParamValue::new() Operation::new() ctx.open_session() session.invoke_command()

16

slide-17
SLIDE 17

Example - Trusted App (First Commit)

#[no_mangle] pub extern "C" fn TA_CreateEntryPoint() -> TEE_Result { return TEE_SUCCESS; } #[no_mangle] pub extern "C" fn TA_OpenSessionEntryPoint( _paramTypes: ParamTypes, _params: TEE_Param, _sessionContext: SessionP) -> TEE_Result { return TEE_SUCCESS; } 0 => { unsafe { _params[0].value.a += 121; } },

17

slide-18
SLIDE 18

Example - Trusted App (Current Design)

#[ta_create] #[ta_open_session] #[ta_close_session] #[ta_destory] #[ta_invoke_command]

18

slide-19
SLIDE 19

Example - Use Serde

Use serde to handle invoke command

19

slide-20
SLIDE 20

Other Examples

  • hello_world: minimal project structure
  • aes: crypto, shared memory APIs
  • hotp: crypto APIs
  • random: crypto APIs
  • secure_storage: secure object related APIs
  • serde: Rust third-party crates for de/serialization
  • message_passing_interface

20

slide-21
SLIDE 21

Thanks

  • Rust and Keystone Enclave
  • Safe GlobalPlatform APIs implemented in OP-TEE
  • Baidu ❤ Rust
  • Rust SGX SDK
  • MesaTEE: A Framework for Universal Secure Computing
  • MesaLock Linux, MesaLink, MesaPy, etc.
slide-22
SLIDE 22

Backup Slides

slide-23
SLIDE 23

Example - Client (Initial Design)

unsafe { } raw::TEEC_Context raw::TEEC_Session raw::TEEC_Parameter raw::TEEC_Operation raw::TEEC_InitializeContext raw::TEEC_OpenSession raw::TEEC_InvokeCommand raw::TEEC_CloseSession raw::TEEC_FinalizeContext

23

slide-24
SLIDE 24

Example - Project Structure

  • host/: source code of the client app
  • ta/: source code of TA
  • ta.lds: linker script
  • Xargo.toml: "Cargo.toml" for cross compilation
  • ta_static.rs: some static data structure for TA
  • proto/: shared data structure and configurations like a protocol
  • Makefile: Makefile to build host and client
  • uuid.txt: UUID for TA, randomly generated if the file does not exist.

arm-unknown-linux-gnu aarch64-unknown-linux-gnu arm-unknown-optee-trustzone aarch64-unknown-optee-trustzone

24

slide-25
SLIDE 25

Project Structure - rust/libstd

src/librustc_target/spec/aarch64_unknown_optee_trustzone.rs

25

src/libstd/sys/optee/alloc.rs src/libstd/sys/optee/args.rs src/libstd/sys/optee/backtrace.rs src/libstd/sys/optee/cmath.rs src/libstd/sys/optee/condvar.rs src/libstd/sys/optee/env.rs src/libstd/sys/optee/fs.rs src/libstd/sys/optee/io.rs src/libstd/sys/optee/memchr.rs src/libstd/sys/optee/mod.rs src/libstd/sys/optee/mutex.rs src/libstd/sys/optee/net.rs src/libstd/sys/optee/os.rs src/libstd/sys/optee/os_str.rs src/libstd/sys/optee/path.rs src/libstd/sys/optee/pipe.rs src/libstd/sys/optee/process.rs src/libstd/sys/optee/rwlock.rs src/libstd/sys/optee/stack_overflow.rs src/libstd/sys/optee/stdio.rs src/libstd/sys/optee/thread.rs src/libstd/sys/optee/thread_local.rs src/libstd/sys/optee/time.rs

slide-26
SLIDE 26

Example: alloc.rs

The underlying library of libc is libutil from OP-TEE

26

slide-27
SLIDE 27

Example: thread.rs

Thread is not supported in OP-TEE

  • OS. Currently, we will raise a panic.

27

slide-28
SLIDE 28

Background

  • ARM TrustZone provide

trusted execution environment in mobile phone and embedded devices

  • TrustZone secures mobile

payment, identification authentication, key management, AI models, DRM,OS integrity, etc.

28

slide-29
SLIDE 29

TrustZone Architecture

An Exploration of ARM TrustZone Technology: https://genode.org/documentation/articles/trustzone

29

slide-30
SLIDE 30

Project Structure

  • Rust OP-TEE TrustZone SDK: https://github.com/

mesalock-linux/rust-optee-trustzone-sdk

  • Rust: https://github.com/mesalock-linux/rust
  • Rust libc: https://github.com/mesalock-linux/libc.git
  • Rust compiler-builtins: https://github.com/

mesalock-linux/compiler-builtins.git

  • Wiki: https://github.com/mesalock-linux/rust-optee-

trustzone-sdk/wiki

30

slide-31
SLIDE 31

Other Examples

  • hello_world: minimal project structure
  • aes: crypto, shared memory APIs
  • hotp: crypto APIs
  • random: crypto APIs
  • secure_storage: secure object related APIs
  • serde: Rust third-party crates for de/serialization
  • message_passing_interface

31

slide-32
SLIDE 32

Roadmap

  • April: open source
  • May: trusted storage API design, cryptographic
  • perations API design, TEE arithmetical API design, and

more third-party Rust crates

  • Jun: push modified Rust compiler/std to upstream and

make OP-TEE TrustZone as an official target.

  • 2019 Q3/4: more trusted apps such as secure key

service, remote attestation, fTPM, and machine learning algorithm.

32