psj2014 josh pacsec2014-v1-jp - pacsec applied security ... · 営業は、簡単なbyod,...

29
PacSec 2014のための探求の物語: @m0nk_dot @natronkeltner @afrocheese ドラゴンの来襲 ARM TrustZoneアーキテクチャに潜 む脆弱性を探して

Upload: others

Post on 05-Aug-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部

PacSec 2014のための探求の物語: @m0nk_dot

@natronkeltner @afrocheese

ドラゴンの来襲�ARM TrustZoneアーキテクチャに潜

む脆弱性を探して

Page 2: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部

我々は何者なのか�●  Josh Thomas

●  @m0nk_dot / [email protected]

●  Partner @ Atredis Partners

●  Nathan Keltner

●  @natronkeltner / [email protected]

●  Partner @ Atredis Partners

●  Charles Holmes

●  @afrocheese / [email protected]

●  Principal Research Consultant

●  Atredis Partners, www.atredis.com

●  フォーカスかつ特化したセキュリティ会社

●  高度なハードウェア・ソフトウェア品質評価を専門にしている

Page 3: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部

TrustZoneの建前�

●  モバイルセキュリティの「究極的な」ソリューションとして盛大に売り込まれている

●  営業は、簡単なBYOD, 安全なPIN入力, APTに対する防御の実現を約束している [1]

●  建前としては、隔離されたプロセッサコアとメモリーがあって、外部から影響を与える事は出来ない状態で、プログラムが特権アクセスで実行される

●  「普通の世界」が影響を及ぼすどころか気付きすらしない「セキュアな世界」で処理を行える

●  機密処理を隠蔽した状態で実行する事でマルウェアから情報を守れる技術を欲しがらない人が居るだろうか?

[1] http://www.arm.com/products/processors/technologies/trustzone/index.php

Page 4: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部

TrustZoneアーキテクチャ�

引用元: http://www.arm.com/images/TrustZone_Software_Architecture.jpg

Page 5: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部

私がTrustZoneに期待した事�

●  マルウェアに絶対盗み見られたくない処理を代わりに行わせる事が出来て、同じ魔法の箱を使っている他の人には影響を及ぼす事の無い、セキュアなチップ

●  ネットバンキングアプリのログイン

●  音声の暗号化

●  2要素認証に関係するデータ

●  パスワード

●  その他

Page 6: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部

TrustZoneの現実�

Page 7: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部

とはいえ、それって何に使われているの?�

●  DRM (Widevine, HDCP)

●  Qfuses

●  セキュアで書き換え不可能なキーストレージ

●  ハードウェアの環境設定 (セキュアブートの設定, JTAGの構成, 機器識別子)

●  メーカー特有の機能

●  ブートローダーのアンロック (Dan RosenbergのBlack Hat 2014での発表を参照)

●  SIMのアンロック

●  カーネルの整合性の監視 / 判定 (サムスンのKnox)

●  ユーザーがマルウェアから隠したいものではなく、何処かの偉い人がユーザーから隠したいもの(例: キャリアロック, アメリカ映画協会 等)。

Page 8: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部

SnapDragonとは�何か?�

●  SoC (システムオンチップ)

●  QSEEを実行可能(クアルコムのセキュア実行環境)

●  ARMバスはちょっと見にはクールだ: AMBA: AXI, APB, etc

●  機器認証はどうやってるのか?

Page 9: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部

QSEEが動く機器は?�

●  Android

●  Samsung Galaxy S3, Moto X, Sony Xperia Z, HTC One (M7) and HTC One XL, Nexus 5, LG G2, …

●  BlackBerry

●  Q30, Z10, …

●  Windows Phone

●  Lumia 830, …

Page 10: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部

インターフェース�

●  SMC[セキュアモニタコール]インターフェース(最も公に研究されてきた)

●  割り込み

●  共有メモリ

●  周辺機器

Page 11: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部

TrustZoneアーキテクチャの問題�

●  TrustZoneは、一般的なカーネルに対してのカーネルのようなもの

●  IOCTLのようなインターフェースから設計思想を学んでいない

●  ASLR, DEPは無い

●  TrustZoneのイメージは平文で格納されている

●  物理メモリのポインタがいたるところにある

●  TrustZoneの内部メモリやサービス可用性を保護する為のモデルが多数ある

Page 12: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部

TrustZoneの保護機能�

●  それぞれの関数が個別に入力の妥当性を検査する

●  一部のメーカーはクアルコムの検査コードを利用している

●  独自の検査コードを利用しているメーカーもある

●  独自の検査コードとクアルコムの検査コードを組み合わせて利用するメーカーもある

●  クアルコムは、たとえ既に使われなくなった関数であっても、一般的には無効化しない

●  HTCは関数を無効化するためのアクセスビットマップを実装している

Page 13: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部

サービス可用性�

●  TrustZoneの裏側では、それぞれのSMCコールは、通常の環境に露出する機能を実装した個別の「サービス」である。

●  これらはTrustZone内部で名前が登録されているので、プログラムによって特定できる

Page 14: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部

tzbsp_set_boot_addr tzbsp_resource_config tzbsp_write_mss_qdsp6_nmi�

tzbsp_milestone_set tzbsp_is_service_available tzbsp_memprot_map2 tzbsp_cpu_config tzbsp_get_diag tzbsp_memprot_unmap2

tzbsp_cpu_config_query tzbsp_fver_get_version tzbsp_memprot_tlbinval tzbsp_wdt_disable tzbsp_ssd_decrypt_img_ns tzbsp_xpu_config_violation_err_fatal tzbsp_wdt_trigger ks_ns_encrypt_keystore_ns tzbsp_xpu_disable_mmss_qrib

config_hw_for_offline_ram_dump tzbsp_ssd_protect_keystore_ns tzbsp_dcvs_create_group tzbsp_video_set_state tzbsp_ssd_parse_md_ns tzbsp_dcvs_register_core

tzbsp_pil_init_image_ns tzbsp_ssd_decrypt_img_frag_ns tzbsp_dcvs_set_alg_params tzbsp_pil_mem_area tzbsp_ssd_decrypt_elf_seg_frag_ns tzbsp_dcvs_init

tzbsp_pil_auth_reset_ns tz_blow_sw_fuse tzbsp_graphics_dcvs_init tzbsp_pil_unlock_area tz_is_sw_fuse_blown tzbsp_nfdbg_config

tzbsp_pil_is_subsystem_supported tzbsp_qfprom_write_row tzbsp_nfdbg_ctx_size tzbsp_pil_is_subsystem_mandated tzbsp_qfprom_write_multiple_rows tzbsp_nfdbg_is_int_ok

tzbsp_write_lpass_qdsp6_nmi tzbsp_qfprom_read_row tzbsp_ocmem_lock_region tzbsp_set_cpu_ctx_buf tzbsp_qfprom_rollback_write_row tzbsp_ocmem_unlock_region

tzbsp_set_l1_dump_buf tzbsp_prng_getdata_syscall tzbsp_ocmem_enable_mem_dump tzbsp_query_l1_dump_buf_size tzbsp_mpu_protect_memory tzbsp_ocmem_disable_mem_dump

tzbsp_set_l2_dump_buf tzbsp_sec_cfg_restore tzbsp_es_save_partition_hash tzbsp_query_l2_dump_buf_size tzbsp_smmu_get_pt_size tzbsp_es_is_activated

tzbsp_set_ocmem_dump_buf tzbsp_smmu_set_pt_mem tzbsp_exec_smc_ext tzbsp_query_ocmem_dump_buf_size tzbsp_video_set_va_ranges tzbsp_exec_smc tzbsp_security_allows_mem_dump tzbsp_vmidmt_set_memtype tzbsp_tzos_smc

tzbsp_smmu_fault_regs_dump tzbsp_memprot_lock2

MSM 8974 ❖ MSM 8960 ❖ 両方

Page 15: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部

メーカーが実装したサービス�

Moto X

motorola_tzbsp_ns_service 

Xperia Z

tzbsp_oem_do_something 

tzbsp_oem_s1_cmd 

HTC One M7 / XL

tzbsp_oem_do_something  tzbsp_oem_enc  tzbsp_oem_get_rand  tzbsp_oem_log_operator 

tzbsp_oem_hash  tzbsp_oem_set_simlock_retry  tzbsp_oem_get_security_level  tzbsp_oem_verify_bootloader 

tzbsp_oem_aes  tzbsp_oem_set_simlock  tzbsp_oem_update_simlock  tzbsp_oem_simlock_magic 

tzbsp_oem_read_mem  tzbsp_oem_set_ddr_mpu  tzbsp_oem_update_smem  tzbsp_oem_emmc_write_prot 

tzbsp_oem_write_mem  tzbsp_oem_set_gpio_owner  tzbsp_oem_read_simlock  tzbsp_oem_access_item 

tzbsp_oem_disable_svc  tzbsp_oem_read_simlock_mask  tzbsp_oem_memcpy  tzbsp_oem_3rd_party_syscall 

tzbsp_oem_query_key  tzbsp_oem_simlock_unlock  tzbsp_oem_memprot  tzbsp_oem_key_ladder 

Page 16: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部

TrustZone内部の仕切り�

●  ああ、しかもその上に...:

●  TrustZoneは1つの大きい箱のようなもので、1人のプレーヤーが犯した1つの間違いが全員に影響してしまう!

●  プレーヤー: クアルコム, ディスクレティクス, メーカー, ネットフリックス? 等

Page 17: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部

要約すると...�

●  サービス可用性とメモリアクセスのモデルは...もろい

●  ほとんどの場合、1つのメモリ書き込み脆弱性で、TrustZoneが台無しになる思われる。

●  ...そしてこのアーキテクチャは、キノコの如く次々とメモリ書き込み脆弱性を産み出すように設計されている

Page 18: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部

SCMコール�

●  ARMのSMC命令を利用して、スーパーバイザーモードやカーネル空間から呼び出す事が出来る。その際、r0レジスタにSCMコマンド構造体の物理アドレスを格納する。

●  詳細はAndroidカーネルのarch/arm/mach-msm/scm.cを参照

コマンドヘッダー

コマンドバッファー

レスポンスヘッダー レスポンスバッファー

struct scm_command { u32 len; u32 buf_offset; u32 resp_hdr_offset; u32 id; u32 buf[0]; };

Page 19: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部

TrustZoneのサービス�

●  TrustZoneのイメージはサポートされている全てのSCMコールのテーブルを保持している

●  イメージが読み込まれた正しいアドレスを確かめるのに有用である

struct scm_service { u32 id; char * name; u32 return_type; int (*impl)(); u32 num_args; u32 arg_size[0]; }

Page 20: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部

HTCの場合�

●  優秀な基本的関数が揃っている(write_mem, read_mem, memcpy, …)

●  HTCはそれぞれのtzbsp_oem関数に対応したアクセスビットマスクを保持している

●  それぞれのサービスは不要になった時には無効化出来る

Page 21: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部

メモリ書き込みの脆弱性�

●  このサービスは入力の妥当性を検証しない!

●  我々が調べたケース全てでg_fs_statusが0だった

●  我々にゼロ書き込みの脆弱性をもたらした

Page 22: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部

メモリアドレスの検証�

Page 23: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部

メモリアドレスの「検証」�

●  lenが非常に大きい場合はどうなる?0xffffffffだったら?

●  0x2A03F000以上だったらどうか?

●  0x70000だったら?

Page 24: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部
Page 25: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部

tzbsp_oem_memcpy

●  この関数の方がもっと良いよね?

●  もし「検証」を全て取り除けたならね。

Page 26: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部

あっ、そうか。�

●  00 00 = MOV r0, r0

●  00 00 00 00 = ANDEQ r0, r0, r0

Page 27: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部

この「NOP脆弱性」を使おう�

Page 28: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部

Exploitのソースコード�

Page 29: PSJ2014 Josh PacSec2014-v1-jp - PacSec Applied Security ... · 営業は、簡単なbyod, 安全なpin入力, aptに対する防御の実現を約 束している [1] 建前としては、隔離されたプロセッサコアとメモリーがあって、外部

~ 完 ~