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

    View full-size slide

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

    View full-size slide

  3. 講義概要
    本パートではARMプロセッサのセキュリティ機構であるTrustZone上に実装されるTrusted Execution
    Environment (TEE)に対する攻撃手法ついて学習します。


    ※本講義は著作権侵害や違法なクラッキングを推進するものではありません


    3

    View full-size slide

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

    View full-size slide

  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 ファームウェア
    限られたアクセスのみ可

    View full-size slide

  6. ARM TrustZoneの必要性
    6
    Normal World
    EL0
    EL1
    Secure World
    Secure-EL0
    Secure-EL1
    暗号化/鍵生成処理を隔離する理由。 Secure Worldの存在意義とは? 

    攻撃者の立場に立って考えてみると分かりやすい。

    View full-size slide

  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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  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/

    View full-size slide

  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)

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  18. Trust Zone セキュリティの”現実”
    18
    Normal World
    EL0
    EL1
    Secure World
    Secure-EL0
    Secure-EL1
    Trusted App, OSの脆弱性を使って権限昇格....
    #大規模で複雑な実装が多いため脆弱性がある
    鍵生成の依頼、取

    セキュアモニタ
    Digital Rights Management
    多種多様なシステムコール

    View full-size slide

  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 ❍

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

  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の認証機能を呼び出す。

    View full-size slide

  23. CVE-2019-1010298
    23

    View full-size slide

  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) // ヒープオーバーフロー発生

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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=/out/arm/export-ta_arm64
    cd optee_examples/hello_world/host
    make \
    CROSS_COMPILE=aarch64-linux-gnu- \
    TEEC_EXPORT=/usr/local \
    --no-builtin-variables

    View full-size slide

  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

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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が使われている!!

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  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命令

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

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

    View full-size slide

  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

    View full-size slide

  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は物理的に分かれているのではなく仮想アドレスが異なっているだけです。
    バックアップ/リストア

    View full-size slide

  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のブート

    View full-size slide

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

    View full-size slide

  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)

    View full-size slide

  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/

    View full-size slide

  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/

    View full-size slide

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

    View full-size slide