Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ARM TrustZone エクスプロイト入門

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.

Ren Kimura

August 13, 2019
Tweet

More Decks by Ren Kimura

Other Decks in Programming

Transcript

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

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

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

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

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

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

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

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

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

    Secure-EL0 Secure-EL1 Trusted App, OSの脆弱性を使って権限昇格.... #大規模で複雑な実装が多いため脆弱性がある 鍵生成の依頼、取 得 セキュアモニタ Digital Rights Management 多種多様なシステムコール
  13. 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 ❍
  14. 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の認証機能を呼び出す。
  15. 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) // ヒープオーバーフロー発生
  16. 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
  17. 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
  18. 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
  19. 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
  20. 実行 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
  21. 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
  22. 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
  23. 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が使われている!!
  24. 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
  25. 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は物理的に分かれているのではなく仮想アドレスが異なっているだけです。 バックアップ/リストア
  26. 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)
  27. 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/
  28. 上級者向け: 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/
  29. おわりに TrustZone, TEEは優れたセキュアシステムだが、完璧ではない 49 • TA, TEE OSの脆弱性利用したエクスプロイト • 脆弱性を見つけるためのリバースエンジニアリング、方法論

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