Slide 1

Slide 1 text

ARM TrustZoneエクスプロイト 入門 木村 廉 株式会社リチェルカセキュリティ 代表取締役社長 セキュリティネクストキャンプ 2019/8/13 講義1 Trusted Execution Environment (TEE)に対する攻撃と対策

Slide 2

Slide 2 text

自己紹介 ● 神戸大学大学院 修士2年生(M2) ● 研究留学@CMU CyLab ● twitter: @RKX1209 2

Slide 3

Slide 3 text

講義概要 本パートではARMプロセッサのセキュリティ機構であるTrustZone上に実装されるTrusted Execution Environment (TEE)に対する攻撃手法ついて学習します。 
 
 ※本講義は著作権侵害や違法なクラッキングを推進するものではありません 
 
 3

Slide 4

Slide 4 text

背景知識 ARM Trust Zone, TEE入門

Slide 5

Slide 5 text

ARM TrustZoneとは ARMプロセッサ(Cortex-A, Cortex-M)に搭載されているセキュリティ機能。 2つの環境に分離 
 5 「Normal World」 通常のアプリケーションやOSが動作 
 「Secure World」 暗号化/復号、鍵生成といった攻撃者から守るべき重要な処理が動作 Normal World EL0 EL1 Secure World Secure-EL0 Secure-EL1 EL3 ファームウェア 限られたアクセスのみ可

Slide 6

Slide 6 text

ARM TrustZoneの必要性 6 Normal World EL0 EL1 Secure World Secure-EL0 Secure-EL1 暗号化/鍵生成処理を隔離する理由。 Secure Worldの存在意義とは? 
 攻撃者の立場に立って考えてみると分かりやすい。 


Slide 7

Slide 7 text

ケース1: 秘密鍵をrootパーミッションでローカル保存 7 Normal World EL0 EL1 Secure World Secure-EL0 Secure-EL1 2048bit RSA秘密鍵生成 # openssl genrsa -out private.key 2048 
 # ls -l private.key
 -rw------- 1 rkx rkx 1766 private.key

Slide 8

Slide 8 text

ケース1: 秘密鍵をrootパーミッションでローカル保存 8 Normal World EL0 EL1 Secure World Secure-EL0 Secure-EL1 ユーザーアプリケーションの脆弱性を使って権限昇格! #巨大で複雑なアプリほど脆弱性が多く、狙い目

Slide 9

Slide 9 text

ケース2: 秘密鍵をカーネル/ハイパーバイザ空間に保存 9 Normal World EL0 EL1 Secure World Secure-EL0 Secure-EL1 秘密鍵をユーザー空間からアクセス不能なカーネル、ハ イパーバイザ空間に保存! 実例: PlayStation3ハイパーバイザ, AMD SEV

Slide 10

Slide 10 text

ケース2: 秘密鍵をカーネル/ハイパーバイザ空間に保存 10 Normal World EL0 EL1 Secure World Secure-EL0 Secure-EL1 カーネル,ハイパーバイザの脆弱性を使って権限昇格! #巨大で複雑なソフトウェアなため脆弱性が多い

Slide 11

Slide 11 text

解決案: 小規模で単純なソフトウェアで管理しよう 11 Normal World EL0 EL1 Secure World Secure-EL0 Secure-EL1 鍵生成、暗号化/復号処理を小規模なソフトウェアとして 分離。 TCB(Trusted Computing Base)の削減 鍵生成の依頼、取得

Slide 12

Slide 12 text

解決案: 小規模で単純なソフトウェアで管理しよう 12 Normal World EL0 EL1 Secure World Secure-EL0 Secure-EL1 Trusted App, OSの脆弱性を使って権限昇格.... #小規模で単純なソフトウェアなため脆弱性が少ない 鍵生成の依頼、取得

Slide 13

Slide 13 text

TEE (Trusted Execution Environment)の策定 13 Normal World EL0 EL1 Secure World Secure-EL0 Secure-EL1 鍵生成の依頼、取得 Trusted OSシステムコール これらWorld間や内部のインターフェースを2009年 GlobalPlatformがTEEとして策定 
 https://globalplatform.org/specs-library/

Slide 14

Slide 14 text

TEE API 14 Normal World EL0 EL1 Secure World Secure-EL0 Secure-EL1 TEE Client API TEE Core internal API ● TEE Client API … Normal - Secure World間のやり取りの規約、API
 ● TEE Core internal API … TA - Trusted OS間のシステムコール規約、内部API
 ioctl(2)

Slide 15

Slide 15 text

https://googleprojectzero.blogspot.com/2017/07/trust-issues-exploiting-trustzone-tees.html 実例: AndroidのTEE, TrustZoneアーキテクチャ 15

Slide 16

Slide 16 text

Trust Zone エクスプロイト入門 Trusted App, OSの脆弱性を利用した権限昇格

Slide 17

Slide 17 text

Trust Zoneセキュリティの”理想” 17 Normal World EL0 EL1 Secure World Secure-EL0 Secure-EL1 Trusted App, OSの脆弱性を使って権限昇格.... #小規模で単純なソフトウェアなため脆弱性が少ない 鍵生成の依頼、取得

Slide 18

Slide 18 text

Trust Zone セキュリティの”現実” 18 Normal World EL0 EL1 Secure World Secure-EL0 Secure-EL1 Trusted App, OSの脆弱性を使って権限昇格.... #大規模で複雑な実装が多いため脆弱性がある 鍵生成の依頼、取 得 セキュアモニタ Digital Rights Management 多種多様なシステムコール

Slide 19

Slide 19 text

TEEの実装例 チップベンダーごとにTEEの実装が存在する 19 vendor project name driver OSS devices Qualcomm QSEE /dev/qseecom × Pixel, Nexus Samsung KNOX (Trustonic) /dev/mobicore × Galaxy Huawei ? /dev/tc_ns × Huawei PX OP-TEE OP-TEE /dev/tee0 ❍ Google Trusty TEE ? ❍ Sierra SierraTEE /dev/otz_client ❍

Slide 20

Slide 20 text

Trust Zoneエクスプロイト 実践 オープンソースなTEEの実装、OP-TEEを試してみよう 20 OP-TEE Security Advisories https://www.op-tee.org/security-advisories/ 2018年4月 ~ 2019年5月の間に28個の脆弱性が発見されている。

Slide 21

Slide 21 text

CVE-2019-1010298 RSA-PSS署名に使用するCore internal API, TEE_AsymmetricVerifyDigest()の脆弱性 21 https://nvd.nist.gov/vuln/detail/CVE-2019-1010298 https://github.com/OP-TEE/optee_os/commit/70697bf3c5dc3d201341b01a1a8e5bc6d2fb48f8

Slide 22

Slide 22 text

OP-TEEによるRSA-PSS署名の流れ 22 Normal World EL0 EL1 Secure World Secure-EL0 Secure-EL1 1. RSA-PSS認証依頼 2. TAディスパッチ 3. TEE_AsymmetricVerifyDigest() 4. 認証結果取得 Normal WorldからRSA-PSS認証依頼を受けたTrusted OSが適切なTAを実行(スケジューラ) TAはシステムコールでTrusted OSの認証機能を呼び出す。

Slide 23

Slide 23 text

CVE-2019-1010298 23

Slide 24

Slide 24 text

CVE-2019-1010298 24 num_paramsを巨大な整数に設定する事でsizeof(TEE_Attribute) * num_paramsが整数 オーバーフロー。 8 * 0x80000004 = 0x20 params = malloc(0x20); // 0x20 byteバッファを確保 copy_in_attrs(utc, 0x80000004, params) // ヒープオーバーフロー発生

Slide 25

Slide 25 text

https://github.com/RKX1209/CVE-2019-1010298 25

Slide 26

Slide 26 text

OP-TEE開発環境セットアップ 実機が存在しないためQEMUを用いてNormal/Secure Worldをエミュレーション TEE用QEMUおよびLinuxカーネルイメージ(TEE driver)のビルド 26 mkdir optee cd optee repo init -u https://github.com/OP-TEE/manifest.git -m qemu_v8.xml -b master repo sync cd build make toolchains make -j2 QEMU_VIRTFS_ENABLE=y QEMU_USERNET_ENABLE=y GDBSERVER=y make run GDBSERVER=y

Slide 27

Slide 27 text

OP-TEE開発環境セットアップ OP-TEE Client Library (TEE runtime)のビルド 27 git clone https://github.com/OP-TEE/optee_client.git mkdir build cd build cmake -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc .. make -j make install

Slide 28

Slide 28 text

OP-TEE開発環境セットアップ OP-TEE OSおよびTA devkitのインストール 28 git clone https://github.com/OP-TEE/optee_os cd optee_os make -j2 \ CFG_ARM64_core=y \ CFG_TEE_BENCHMARK=n \ CFG_TEE_CORE_LOG_LEVEL=3 \ CROSS_COMPILE=aarch64-linux-gnu- \ CROSS_COMPILE_core=aarch64-linux-gnu- \ CROSS_COMPILE_ta_arm32=arm-linux-gnueabihf- \ CROSS_COMPILE_ta_arm64=aarch64-linux-gnu- \ DEBUG=1 \ O=out/arm \ PLATFORM=vexpress-qemu_armv8a

Slide 29

Slide 29 text

Trusted Appの開発とビルド クライアントソフト、TAのビルド 29 cd optee_examples/hello_world/ta make \ CROSS_COMPILE=aarch64-linux-gnu- \ PLATFORM=vexpress-qemu_virt \ TA_DEV_KIT_DIR=/out/arm/export-ta_arm64 cd optee_examples/hello_world/host make \ CROSS_COMPILE=aarch64-linux-gnu- \ TEEC_EXPORT=/usr/local \ --no-builtin-variables

Slide 30

Slide 30 text

実行 OP-TEEへのデプロイ 30 QEMUホストとゲストのファイルシェア (host) mkdir -p /mnt/host (guest) mount -t 9p -o trans=virtio host /mnt/host クライアントバイナリを /bin へ TAバイナリを/lib/optee_armtz/ へコピー 実行 ./client_app

Slide 31

Slide 31 text

Trust Zone解析 入門 Trusted App, OSのリバースエンジニアリング

Slide 32

Slide 32 text

Androidデバイスの解析 32 AndroidデバイスはFDE (Full Disk Encryption)によってディスクを暗号化している。 ロック解除のためのパスコードとヒューズ(fuse)チップに保存されたhardware keyを利用 Qualcomm Snapdragon SoCが搭載されたスマートフォンの解析 https://blog.trailofbits.com/2016/02/17/apple-can-comply-with-the-fbi-court-order/ http://bits-please.blogspot.com/2016/06/extracting-qualcomms-keymaster-keys.html

Slide 33

Slide 33 text

Androidデバイスの解析 33 Secure World用パーティションを参照するにはデバイスのroot化が必須。 Normal Worldのroot権限のみでは参照できない事もあるがGoogle Pixelは可能 Trusted App, OSをAndroidデバイスからダンプ $ adb shell sailfish:/ # whoami root sailfish:/ # ls -l /dev/block/platform/soc/624000.ufshc/by-name/ lrwxrwxrwx 1 root root 15 1971-11-17 02:38 tz_a -> /dev/block/sda5 lrwxrwxrwx 1 root root 15 1971-11-17 02:38 tz_b -> /dev/block/sda6

Slide 34

Slide 34 text

Androidデバイスの解析 34 Trust Zoneパーティションをローカルマシンにダンプ $ adb pull /dev/block/sda5 qsee.img $ file qsee.img ./qsee.img: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), statically linked, stripped $ hexdump -C ./qsee.img | head 00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |.ELF............| 00000010 02 00 b7 00 01 00 00 00 00 60 68 06 00 00 00 00 |.........`h.....| 00000020 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |@...............| パーティションのフォーマットにELFが使われている!!

Slide 35

Slide 35 text

Androidデバイスの解析 35 010 editor等のバイナリエディタでディスクイメージを俯瞰。確かにELFらしい

Slide 36

Slide 36 text

Qualcommのアンチリバースエンジニアリング技術 36 IDA proを使ってリバースエンジニアリングしてみると....? 複数の存在しないアドレスへ の参照命令が出現する。 IDA proが当該領域をどうやらマップしていない....

Slide 37

Slide 37 text

Qualcommのアンチリバースエンジニアリング技術 37 readelf -a ./qsee.img 一番重要なメモリ領域が”NULLセグメント”として定義されているためIDA proがこれを無視。 http://bits-please.blogspot.com/2015/08/exploring-qualcomms-trustzone.html

Slide 38

Slide 38 text

QSEEのSMC(Secure Monitor Call)ハンドラの解析 38 パーティションは数MBの巨大なstripped binaryであるため効率的なリバースエンジニアリン グが求められる。 QSEE OS内のSMCハンドラのみ解析。 38 Normal World EL0 EL1 Secure World Secure-EL0 Secure-EL1 SMC命令

Slide 39

Slide 39 text

QSEEのSMC(Secure Monitor Call)ハンドラの解析 IDA ProでSMCハンドラを設定している命令をオペコード検索 Trustec OSはMRC/MCR命令を使ってMVBAR (Monitor Vector Base Address Register)に SMCハンドラテーブルを登録

Slide 40

Slide 40 text

クライアントサイド /dev/qseeの解析 Trusted OSのSMCハンドラを特定した後は、SMCを発行するNormal World側のクライアントソ フトを解析。 /dev/qseeはOSSなためソースコードが読めます。 http://androidxref.com/kernel_3.4/xref/arch/arm/mach-m sm/scm.c

Slide 41

Slide 41 text

Trust Zoneエクスプロイト 応用編 Boomerang, ブートローダー, ワームブートハック, Androidディスク復号

Slide 42

Slide 42 text

Nintendo Switch 42 42 Normal World EL0 EL1 Secure World 鍵生成の依頼、取得 Secure WorldにOSが存在せず、サービスのみ実装 (TEE Serviceアーキテクチャ) Demystifying Arm TrustZone: A Comprehensive Survey https://dl.acm.org/citation.cfm?id=3291047

Slide 43

Slide 43 text

Nintendo Switch warmboot hack 1. 本体スリープ時、Trust Zoneが自身のメモリの内容をNormal WorldのDRAMに保存 2. スリープ解除後にDRAMから内容をリストア。 この時内容が改竄されていないことを SHA256でチェック。 3. SHA256が保存されているPMCがNormal Worldのカーネルから読み書き可能な領域に mapされているバグ 43 Nomal World EL0 EL1 Secure World ※ DRAM, TZRAMは物理的に分かれているのではなく仮想アドレスが異なっているだけです。 バックアップ/リストア

Slide 44

Slide 44 text

Nintendo Switch BootROM hack Trusted AppやOSはブート時にブートロードによって署名検証されるため、署名された正規の ものしかインストールできない。 AndroidのカスタムROM等でもSecure Worldをカスタマイズするのは難しい 44 Nomal World EL0 EL1 Secure World 1. Secure Worldのブート 2. 署名検証 3. Normal Worldのブート

Slide 45

Slide 45 text

Nintendo Switch BootROM hack Nintendo Switchのブートローダーに脆弱性があった!! (正確にはNVIDIA製) ブートローダー上で任意コード実行が可能になったため、カスタマイズしたSecure Worldをデ プロイできる。結果的に全てのゲームソフト等の著作権保護鍵が読み取れる状態に 45 Nomal World EL0 EL1 Secure World 署名検証バイパスに成功

Slide 46

Slide 46 text

Boomerang flow [NDSS’17] Secure Worldが全てのメモリ空間にアクセスできる事を利用したConfused Deputy Attack 実行結果をポインタに保存する類のTrustZone APIにNormal Worldの任意の物理アドレスポ インタを渡す事でカーネルやハイパーバイザ空間などを書き換えさせるテクニック。 46 Normal World EL0 EL1 Secure World Secure-EL0 Secure-EL1 1. 物理アドレスptrを渡す 3. ptrに結果保存 2. WriteToBuf(ptr)

Slide 47

Slide 47 text

Boomerang flow [NDSS’17] この脆弱性はTrust Zone, TEEの根本的な設計に起因するため非常に多くのデバイスに影 響。 脆弱性検出: Blanket Execution [USENIX’14]を使用したBoomerang flow自動検出 脆弱性利用: 権限昇格に成功 [GeekPwn2016] 対策: 物理アドレスでのやり取りを禁止、 Secure WorldからNormal Worldのページングを読 む、セマンティクス復元等。 Aravind Machiry, et.al BOOMERANG: Exploiting the Semantic Gap in Trusted Execution Environments [NDSS 17] https://github.com/ucsb-seclab/boomerang/

Slide 48

Slide 48 text

上級者向け: Android FDE(Full Disk Encryption)の復号 Google Project Zeroのリサーチャーが行ったAndroidディスク復号。 iPhoneロック解除の件でFBIとAppleが争った際、FBIはこの技術を行使しなかった。 本講義で紹介した方法論を総動員すれば可能です。 興味のある人は挑戦してみてください。 FBIが出来なかった事をやってみよう。 48 Extracting Qualcomm's KeyMaster Keys - Breaking Android Full Disk Encryption http://bits-please.blogspot.com/2016/06/extracting-qualcomms-keymaster-keys.html 「Android」端末のフルディスク暗号化に脆弱性--「Snapdragon」プロセッサ搭載で https://japan.zdnet.com/article/35085361/

Slide 49

Slide 49 text

おわりに TrustZone, TEEは優れたセキュアシステムだが、完璧ではない 49 ● TA, TEE OSの脆弱性利用したエクスプロイト ● 脆弱性を見つけるためのリバースエンジニアリング、方法論 ● これらを組み合わせた攻撃プランとその影響 この講義で触れていない最先端技術 ● Secure Worldの脆弱性検出自動化、ファジング ● ハードウェアレベルのエクスプロイト、サイドチャネル攻撃 ● Secure Worldのメモリ分離、TrustZone aware Hypervisor