ARM TrustZone エクスプロイト入門

194b192123e0671dc9f81647d61411a6?s=47 Ren Kimura
August 13, 2019

ARM TrustZone エクスプロイト入門

My short training program in seccamp19.
A brief tutorial for reverse engineering and exploitation against ARM TrustZone security.

194b192123e0671dc9f81647d61411a6?s=128

Ren Kimura

August 13, 2019
Tweet

Transcript

  1. ARM TrustZoneエクスプロイト 入門 木村 廉 株式会社リチェルカセキュリティ 代表取締役社長 セキュリティネクストキャンプ 2019/8/13 講義1

    Trusted Execution Environment (TEE)に対する攻撃と対策
  2. 自己紹介 • 神戸大学大学院 修士2年生(M2) • 研究留学@CMU CyLab • twitter: @RKX1209

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


    3
  4. 背景知識 ARM Trust Zone, TEE入門

  5. 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 ファームウェア 限られたアクセスのみ可
  6. ARM TrustZoneの必要性 6 Normal World EL0 EL1 Secure World Secure-EL0

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

  7. ケース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
  8. ケース1: 秘密鍵をrootパーミッションでローカル保存 8 Normal World EL0 EL1 Secure World Secure-EL0

    Secure-EL1 ユーザーアプリケーションの脆弱性を使って権限昇格! #巨大で複雑なアプリほど脆弱性が多く、狙い目
  9. ケース2: 秘密鍵をカーネル/ハイパーバイザ空間に保存 9 Normal World EL0 EL1 Secure World Secure-EL0

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

    Secure-EL1 カーネル,ハイパーバイザの脆弱性を使って権限昇格! #巨大で複雑なソフトウェアなため脆弱性が多い
  11. 解決案: 小規模で単純なソフトウェアで管理しよう 11 Normal World EL0 EL1 Secure World Secure-EL0

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

    Secure-EL1 Trusted App, OSの脆弱性を使って権限昇格.... #小規模で単純なソフトウェアなため脆弱性が少ない 鍵生成の依頼、取得
  13. 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/
  14. 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)
  15. https://googleprojectzero.blogspot.com/2017/07/trust-issues-exploiting-trustzone-tees.html 実例: AndroidのTEE, TrustZoneアーキテクチャ 15

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

  17. Trust Zoneセキュリティの”理想” 17 Normal World EL0 EL1 Secure World Secure-EL0

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

    Secure-EL0 Secure-EL1 Trusted App, OSの脆弱性を使って権限昇格.... #大規模で複雑な実装が多いため脆弱性がある 鍵生成の依頼、取 得 セキュアモニタ Digital Rights Management 多種多様なシステムコール
  19. 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 ❍
  20. Trust Zoneエクスプロイト 実践 オープンソースなTEEの実装、OP-TEEを試してみよう 20 OP-TEE Security Advisories https://www.op-tee.org/security-advisories/ 2018年4月

    ~ 2019年5月の間に28個の脆弱性が発見されている。
  21. 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

  22. 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の認証機能を呼び出す。
  23. CVE-2019-1010298 23

  24. 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) // ヒープオーバーフロー発生
  25. https://github.com/RKX1209/CVE-2019-1010298 25

  26. 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
  27. 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
  28. 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
  29. Trusted Appの開発とビルド クライアントソフト、TAのビルド 29 cd optee_examples/hello_world/ta make \ CROSS_COMPILE=aarch64-linux-gnu- \

    PLATFORM=vexpress-qemu_virt \ TA_DEV_KIT_DIR=<optee_os>/out/arm/export-ta_arm64 cd optee_examples/hello_world/host make \ CROSS_COMPILE=aarch64-linux-gnu- \ TEEC_EXPORT=/usr/local \ --no-builtin-variables
  30. 実行 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
  31. Trust Zone解析 入門 Trusted App, OSのリバースエンジニアリング

  32. 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
  33. 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
  34. 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が使われている!!
  35. Androidデバイスの解析 35 010 editor等のバイナリエディタでディスクイメージを俯瞰。確かにELFらしい

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

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

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

    Normal World EL0 EL1 Secure World Secure-EL0 Secure-EL1 SMC命令
  39. QSEEのSMC(Secure Monitor Call)ハンドラの解析 IDA ProでSMCハンドラを設定している命令をオペコード検索 Trustec OSはMRC/MCR命令を使ってMVBAR (Monitor Vector Base

    Address Register)に SMCハンドラテーブルを登録
  40. クライアントサイド /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

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

  42. 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
  43. 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は物理的に分かれているのではなく仮想アドレスが異なっているだけです。 バックアップ/リストア
  44. 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のブート
  45. Nintendo Switch BootROM hack Nintendo Switchのブートローダーに脆弱性があった!! (正確にはNVIDIA製) ブートローダー上で任意コード実行が可能になったため、カスタマイズしたSecure Worldをデ プロイできる。結果的に全てのゲームソフト等の著作権保護鍵が読み取れる状態に

    45 Nomal World EL0 EL1 Secure World 署名検証バイパスに成功
  46. 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)
  47. 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/
  48. 上級者向け: 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/
  49. おわりに TrustZone, TEEは優れたセキュアシステムだが、完璧ではない 49 • TA, TEE OSの脆弱性利用したエクスプロイト • 脆弱性を見つけるためのリバースエンジニアリング、方法論

    • これらを組み合わせた攻撃プランとその影響 この講義で触れていない最先端技術 • Secure Worldの脆弱性検出自動化、ファジング • ハードウェアレベルのエクスプロイト、サイドチャネル攻撃 • Secure Worldのメモリ分離、TrustZone aware Hypervisor