bringing memory safety to keystone enclave
play

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) :


  1. Bringing Memory-Safety to Keystone Enclave Mingshen Sun Baidu X-Lab Open-Source Enclaves Workshop (OSEW 2019) Berkeley, July 2019

  2. https://mesatee.org

  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 e ff orts in implementing safe GlobalPlatform TEE APIs implemented in OP-TEE � 3

  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

  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

  6. Rust Keystone • Target: riscv64imac-unknown-none-elf � 6

  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

  8. TrustZone Architecture Secure World Normal World S-EL0 EL0 trusted apps client apps SVC SVC S-EL1 Trusted OS Rich OS EL1 HVC/SMC Hypervisor EL2 SMC SMC S-EL3 Secure Monitor � 8

  9. OP-TEE Implementation Secure World Normal World GlobalPlatform GlobalPlatform trusted apps client apps OP-TEE Internal OP-TEE Client C API Core C API TEE Supplicant TEE TA SDK TEE Client SDK EL0 EL1 OP-TEE Trusted OS Rich OS (OP-TEE driver) ARM Trusted Firmware (Secure Monitor) � 9

  10. Safe SDK Design Secure World Normal World Safe GlobalPlatform Safe GlobalPlatform trusted apps client apps TEE Client API TEE Internal Core API TEE TA SDK TEE Client SDK OP-TEE Trusted OS Rich OS (OP-TEE driver) Rust OP-TEE TrustZone SDK ARM Trusted Firmware (Secure Monitor) � 10

  11. Design of Client SDK client apps Client apps targets: • aarch64-unknown-linux-gnu • arm-unknown-linux-gnu optee-teec third-party crates optee-teec-sys rust/libstd ... libteec C library Rust foundation layer Rust crates Upstream projects � 11

  12. Design of TA SDK trusted apps Two new targets in the Rust compiler/std: • aarch64-unknown-optee-trustzone • arm-unknown-optee-trustzone third-party crates optee-utee ... compiler-builtins libc rust/libstd optee-utee-sys libutil libutee C library Rust foundation layer Rust crates Upstream projects � 12

  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

  14. Example - Demo in QEMU � 14

  15. ④ ③ ② ① GlobalPlatform TEE API Specification Normal World Secure World TEEC_InitializeContext TA_CreateEntryPoint TEEC_OpenSession TEEC_InvokeCommand TA_OpenSessionEntryPoint TEEC_CloseSession TA_InvokeCommandEntryPoint TEEC_OpenSession TA_CloseSessionEntryPoint TEEC_InvokeCommand TEEC_CloseSession TA_DestroyEntryPoint TEEC_FinalizeContext � 15

  16. Example - Client (Current Design) ParamValue::new() Operation::new() session.invoke_command() Context::new() ctx.open_session() � 16

  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

  18. Example - Trusted App (Current Design) #[ta_create] #[ta_open_session] #[ta_close_session] #[ta_destory] #[ta_invoke_command] � 18

  19. Example - Use Serde Use serde to handle invoke command � 19

  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

  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.

  22. Backup Slides

  23. Example - Client (Initial Design) 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 unsafe { } � 23

  24. Example - Project Structure arm-unknown-linux-gnu • host/ : source code of the client app aarch64-unknown-linux-gnu • ta/ : source code of TA arm-unknown-optee-trustzone • ta.lds : linker script aarch64-unknown-optee-trustzone • 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. � 24

  25. Project Structure - rust/libstd src/librustc_target/spec/aarch64_unknown_optee_trustzone.rs src/libstd/sys/optee/alloc.rs src/libstd/sys/optee/net.rs src/libstd/sys/optee/args.rs src/libstd/sys/optee/os.rs src/libstd/sys/optee/backtrace.rs src/libstd/sys/optee/os_str.rs src/libstd/sys/optee/cmath.rs src/libstd/sys/optee/path.rs src/libstd/sys/optee/condvar.rs src/libstd/sys/optee/pipe.rs src/libstd/sys/optee/env.rs src/libstd/sys/optee/process.rs src/libstd/sys/optee/fs.rs src/libstd/sys/optee/rwlock.rs src/libstd/sys/optee/io.rs src/libstd/sys/optee/stack_overflow.rs src/libstd/sys/optee/memchr.rs src/libstd/sys/optee/stdio.rs src/libstd/sys/optee/mod.rs src/libstd/sys/optee/thread.rs src/libstd/sys/optee/mutex.rs src/libstd/sys/optee/thread_local.rs src/libstd/sys/optee/time.rs � 25

  26. Example: alloc.rs The underlying library of libc is libutil from OP-TEE � 26

  27. Example: thread.rs Thread is not supported in OP-TEE OS. Currently, we will raise a panic. � 27

  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

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

  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

  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

  32. Roadmap • April : open source • May : trusted storage API design, cryptographic operations 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 o ffi cial target. • 2019 Q3/4 : more trusted apps such as secure key service, remote attestation, fTPM, and machine learning algorithm. � 32

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend