deeper than ever before

57
A story of Research by: Josh”m0nk” Thomas / @m0nk_dot PacSec 2013 Deeper than Ever Before Exploring, Subverting, Breaking and Pivoting with NAND Flash Memory...

Upload: lajos

Post on 13-Jan-2016

34 views

Category:

Documents


0 download

DESCRIPTION

Deeper than Ever Before. Exploring, Subverting, Breaking and Pivoting with NAND Flash Memory. A story of Research by: Josh ” m0nk ” Thomas / @m0nk_dot PacSec 2013. ./whoami. 設立パートナーおよびチーフ「破壊」オフィサー @ Atredis Partners ( www.atredis.com ) ハードウェアリバースエンジニアでセキュリティ 研究者 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Deeper than Ever Before

A story of Research by: Josh”m0nk” Thomas / @m0nk_dot

PacSec 2013

Deeper than Ever BeforeExploring, Subverting, Breaking and Pivoting with NAND Flash Memory...

Page 2: Deeper than Ever Before

./whoami

設立パートナーおよびチーフ「破壊」オフィサー @ Atredis Partners (www.atredis.com)

ハードウェアリバースエンジニアでセキュリティ研究者

モバイル /スマートフォーン /組み込みシステム

メッシュネットワークファン

AI 、暗号技術とルートキット元開発者

カーネルドライバとハードウェアの境界を好む

[email protected] / @m0nk_dot on twitter

Page 3: Deeper than Ever Before

特定の分野に特化したセキュリティ企業

高度なハードウェアおよびソフトウェアアセスメントが専門

モバイルと組み込みシステム

社会的なインフラ

ブラックボックス

高度なマルウェアおよびルートキットの分析

職人的な高度な技術とオーダーメードなリサーチ

whois atredis.com

Page 4: Deeper than Ever Before

story arc

NAND フラッシュの紹介とその防御の考え方について ハードウェアとソフトウェア視点からの NAND の動作方法 プロジェクト NandX: 隠ぺいと破壊

攻撃面の選択 プロジェクトとソースコードの紹介 NAND フラッシュにおける防御の考え方とフォレンジック 隠ぺいからその先へ

プロジェクト Burner: プラットフォームの完全なコントロール Thank you / Q&A

Page 5: Deeper than Ever Before

NAND と その防御

Page 6: Deeper than Ever Before

NAND における防御の考え方

このプレゼンテーションでは、 NAND フラッシュハードウェアの機能上の側面を取り上げる

バグや欠陥ではなく、純粋にハードウェアの機能について

エレガントでコントロールされた故障メカニズムの再利用

このハードウェアの攻撃面を保護できるのは、リエンジニアリングと高度なフォレンジックツールしかない

よりよいツールが必要

Page 7: Deeper than Ever Before

NAND の動作

Page 8: Deeper than Ever Before

注意 :科学は難しい

Page 9: Deeper than Ever Before

NAND の動作 : ハードウェアの概要

バケツ - 技術用語ではないかもしれない

ページ - 通常は 512 バイト、 2048 バイト、もしくは 4096 バイト

ブロック – 通常は 16 キロバイトから 512 キロバイト

初期値は 1 にセットされる (0xFF)

0 にシフトするのは簡単

1 にシフトするのは難しい

Page 10: Deeper than Ever Before

NAND の動作 : 罠

電子の配置は容易

1 個の電子をつかむのは非常に困難

Page 11: Deeper than Ever Before

NAND の動作 : データの作成

NAND にデータを書き込むには、配置されている電子を取り除けばよい

本質的には、 0xFF からデータ部分を切り抜く

ファイルを保存する場合は、差分を切り抜くもしくは新しいバージョンを生成すべきかを調べる

このため、フォレンジックは困難に

Page 12: Deeper than Ever Before

NAND の動作 : エレガントで

コントロールされた故障 ゲートの作成は困難で、しかも

壊れやすい

通常 10,000 回から 100,000回の書き込みで壊れ始める

摩耗が進むため、摩耗を表面全体に分散させるウェアレべリングを実施する

ウェアレベリングが残すごみによってフォレンジックは困難になる

Page 13: Deeper than Ever Before

NAND の動作 : NAND フラッシュの種類

ロー NAND フラッシュ

コントローラはすべてソフトウェアによるコントローラ

ハードウェアは単純なストレージにすぎない

マネージド NAND フラッシュ

コントローラはハードウェアに組み込まれている

組み込みチューリングコントローラ

Page 14: Deeper than Ever Before

NAND の動作 : マネージド NAND フラッシュ

Page 15: Deeper than Ever Before

NAND の動作 : ソフトウェアと Android カーネ

ル ロー NAND = ドライバは複雑に

MMC/eMMC = ドライバはシンプルに

通常はプロプライエタリ な ( 非公開の ) ウェアレベリングアルゴリズムはハードウェアに組み込まれている

ドライバと無関係に、ハードウェアはシステムとやり取りし、故障メカニズムを明らかにしなければならない

Page 16: Deeper than Ever Before

NAND の動作 : MTD メタドライバ

MSM / MTD(Memory Technology Devices) サブシステム

メタドライバのようなもの

Android のブートパーティションで多用される

製品によってはすべてのNAND 管理に使用

Page 17: Deeper than Ever Before

NAND の動作 : システムの構築

Page 18: Deeper than Ever Before

NAND の動作 : コントロールされた失敗の

おさらい

ハードウェアが故障すると、 NAND はフラグを立てるだけのレイジーイレースをおこなう

コントローラには読み書き不良の閾値がある

障害に対応する実装には、誤り訂正符号と 前方誤り訂正による実装がある

Page 19: Deeper than Ever Before

NAND の動作 : 避けられない失敗

不良ブロックが検出されると、その NAND ブロックは アウトオブバンドエリア (OOB) と不良ブロックテーブル (BBT)に記録される

そのブロックはアドレス指定システムから消える

消えてしまったブロックを読めるツールは存在しない

不良ブロックをもとに戻すツールも存在しない

Page 20: Deeper than Ever Before

NAND の動作 : When things go wrong

システムによっては、 BBT を完全にカーネルメモリで管理している ( リブート中に「マスタ」としてディスクに書き込まれる )

デュアルページの OOB マーカーを BBT と ECC に使うシステムもある (Sony!)

最初もしくは最後のブロックを全体の BBT と ECC に使うシステムもある ( アドレス -10 と考えてよい )

Page 21: Deeper than Ever Before

NAND の動作 : 攻撃面の露出

YAFFS などのファイルシステム

ドライバレベルの MTD

Android / Linux カーネル

フラッシュトランジションレイヤー

ハードウェアの組み込みコントローラをリバースエンジニアリング

ユーザランドにおける不適切なコーディング

Page 22: Deeper than Ever Before

プロジェクト NandX:隠ぺい

Page 23: Deeper than Ever Before

プロジェクト NandX

目標 :

問題が発生していない任意のブロックを不良としてマーク ( アドレスシステムからそのブロックは削除される )

その不良ブロックに任意のデータを読み書き

Android カーネルと dd(1) を含む他のツールが読み書きできないことを確認

予測 :

膨大なハードウェアのリバースエンジニアリングと組み込みコントローラファームウェアのアセスメント

Page 24: Deeper than Ever Before

プロジェクト NandX:第 1 ステージの現実

30以上の機種を購入、テスト、返品

ロー NAND を探す

オープンソースカーネル

Page 25: Deeper than Ever Before

プロジェクト NandX:すべての携帯を調査

Page 26: Deeper than Ever Before
Page 27: Deeper than Ever Before

プロジェクト NandX:Sony Xperia Arc S!

Page 28: Deeper than Ever Before

プロジェクト NandX:MTD サブシステム

Page 29: Deeper than Ever Before

プロジェクト NandX:API を変更

実施するのは API を正しくない順序で叩くだけ

例外は BBT の OOB 書き込みだけ

ステップ :

ブロックを1つ選択し、内容を消去

ブロック全体に 0xDEADBEEF を書き込む

そのブロックを不良としてマーク ( ソニーの場合、 OOB に0x00)

任意のデータを読み書き

カーネルがクラッシュしリブート

Page 30: Deeper than Ever Before

プロジェクト NandX:デモ

http://youtu.be/AE_oUkKKaBY

Page 31: Deeper than Ever Before

プロジェクト NandX:A disappearing act

ブロック 37 が消える

0xDEADBEEF が書きこまれる

もともとその場所には Android のSettings.app (com.android.settings) があった

ハードウェアでダブルフリーが発生し、リブートする

Page 32: Deeper than Ever Before

証明にはソースコードが欠かせない

Page 33: Deeper than Ever Before

プロジェクト NandX:主要部分のコード

Page 34: Deeper than Ever Before

プロジェクト NandX:不良ブロックをマークする

第 1 ステージ

Page 35: Deeper than Ever Before

プロジェクト NandX:不良ブロックをマークする

第2ステージ

Page 36: Deeper than Ever Before

プロジェクト NandX:ログの概要

Page 37: Deeper than Ever Before

プロジェクト NandX:詳細なログ

Page 38: Deeper than Ever Before

プロジェクト NandX:最後に

ブロックが不良としてマークされると、現時点でそのブロックを回収できるツールは存在しない

工場出荷時の設定に戻しても回収できない

別の ROM をフラッシュしても回収できない

dd(1) でもそのブロックはコピーできない

0xDEADBEEF は完全に永続的な状態で隠ぺい

Page 39: Deeper than Ever Before

プロジェクト NandX:ツールを武器に

Page 40: Deeper than Ever Before

プロジェクト NandX:隠ぺいにとどまらない可能性

思考その 1:

目的のデータを削除し、 IT 部門がデータを消去して廃棄するのを待って、物理的にデータを外部に持ち出す

思考その 2:

不良ブロックとしてマークするというのはシステムから完全に削除されるということ ...

Page 41: Deeper than Ever Before

プロジェクト NandX:究極の武器

リモートからカーネルモジュールをロードし、物理的な NAND フラッシュのブロックがなくなるまで 1 ブロックづつ削除

修復は不可能でリプレースが必須

携帯電話に限らず、ほぼすべての組み込み機器で NAND が使用されている

SCADA

Page 42: Deeper than Ever Before

プロジェクト NandX:この発表の続きについて

機会があれば、リサーチ内容をオープンソースに

ベンダの企業秘密や知的財産が含まれるため、常に可能というわけではない

このプロジェクトは 100%オープンソースのツールで成り立っているため、このリサーチはリリースが可能だった

すべては次の URL に ( かなり長いホワイトペーパーも含む ):

https://github.com/monk-dot/NandX

Page 43: Deeper than Ever Before

プロジェクトBurner:

隠ぺいの向こうへ

Page 44: Deeper than Ever Before

プロジェクト Burner:概要

仮説 :

Android フォーンのカーネルを完全に管理下におくと、電源と電圧を内蔵バッテリからコントロールし、物理的に内蔵ハードウェアを操作できる。そのプロセスをコントロールし、それぞれのコンポーネントをターゲットを想定外の電圧によって運動学的破壊に至らしめることも可能になる

結果 :

仮説は正しい

Page 45: Deeper than Ever Before

プロジェクト Burner:Android の電源ハードウェア

バッテリーは生の電力を供給する

USB スタックもシステムに電源を供給する

パワーマネージメントIC(PMIC) が配線上の電圧を配分する

カーネルが PMIC を直接管理する

配線は必ずしもコンデンサや抵抗で保護されているわけでない

Page 46: Deeper than Ever Before

プロジェクト Burner:Android における電圧制御

ドキュメントの場所 :

<kernel_source>/Documentation/power/regulator/overview.txt

ドライバをのぞくと、 10 個以下の C ソースおよびヘッダで基板上の電圧フローを管理している

基盤の種類と無関係に注目すべきは *_regulator.c ファイル

Page 47: Deeper than Ever Before

プロジェクト Burner:ターゲット

プロジェクト Burner がターゲットにしたプラットフォームはSony Xperia Z (yuga)

Qualcomm の Snapdragon リファレンスプラットフォームがベースに

NAND コントローラは SD カードコントローラにつながっている

Qualcomm MSM 7X00A SDCC は NAND および SD カードの配線をコントロールしている

Page 48: Deeper than Ever Before

プロジェクト Burner:NAND の電圧を上昇させる

project kernel/sony/apq8064/diff −−git a/arch/arm/mach−msm/board−sony_yuga−regulator.cb/arch/arm/mach−msm/board−sony_yuga−regulator.c

−− RPM_LDO(L5, 0, 1, 0, 2950000, 2950000, NULL, 0, 0),++ RPM_LDO(L5, 0, 1, 0, 5900000, 5900000, NULL, 0, 0),−− RPM_LDO(L6, 0, 1, 0, 2950000, 2950000, NULL, 0, 0), ++ RPM_LDO(L6, 0, 1, 0, 5900000, 5900000, NULL, 0, 0),

Page 49: Deeper than Ever Before

プロジェクト Burner: NAND の電圧を上昇させる

高電圧によって :

NAND の読み込みは転送過程で破壊

NAND の書き込みはNAND ハードウェアを破壊

PMIC の値は保持されたままなので、デバイスをリブートするとブートローダがカーネルを読み込む際に NAND すべてを破壊

Page 50: Deeper than Ever Before

プロジェクト Burner:NAND の電圧を下げる

project kernel/sony/apq8064/diff −−git a/arch/arm/mach−msm/board−sony_yuga−regulator.cb/arch/arm/mach−msm/board−sony_yuga−regulator.c

−− RPM_LDO(L5, 0, 1, 0, 2950000, 2950000, NULL, 0, 0),++ RPM_LDO(L5, 0, 1, 0, 1250000, 1250000, NULL, 0, 0),−− RPM_LDO(L6, 0, 1, 0, 2950000, 2950000, NULL, 0, 0), ++ RPM_LDO(L6, 0, 1, 0, 1250000, 1250000, NULL, 0, 0),

Page 51: Deeper than Ever Before

プロジェクト Burner:NAND の電圧を下げる

低い電圧によって :

ほとんどの NAND読み込みは転送過程でデータが破壊

NAND 書き込みはハードウェアレベルで失敗

このテクニックでは携帯電話をただちにフリーズさせ、 NAND への書き込みもすべて失敗に終わり、二度と起動しなくなる

Page 52: Deeper than Ever Before

プロジェクトBurner:温度管理

Page 53: Deeper than Ever Before

プロジェクト Burner:温度管理

想定外の電圧をかける場合、温度管理デーモンの thermald に注意が必要

このデーモンを停止すべきではなく、単純に無効化する必要がある

これについては別のプレゼンテーションで

Page 54: Deeper than Ever Before

最後に

Page 55: Deeper than Ever Before

余談 : マルウェアとルートキット

マルウェアはつまらなく、資本主義的な目的で作られていると思われがち

非常に高度かつ高価なツールに目を向けると、こうした見方は一変する

この分野における高度な研究をさらに推進し、拡大するよう訴えたい。オープンな手法で研究する研究者の数はまだ少ない

オープンソース化した理由は、このリサーチ結果を武器として使えないようにするのが目的

Page 56: Deeper than Ever Before

ご質問は ?

Page 57: Deeper than Ever Before

Thank You - @m0nk_dot