Download - Deeper than Ever Before
![Page 1: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/1.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/2.jpg)
./whoami
設立パートナーおよびチーフ「破壊」オフィサー @ Atredis Partners (www.atredis.com)
ハードウェアリバースエンジニアでセキュリティ研究者
モバイル /スマートフォーン /組み込みシステム
メッシュネットワークファン
AI 、暗号技術とルートキット元開発者
カーネルドライバとハードウェアの境界を好む
[email protected] / @m0nk_dot on twitter
![Page 3: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/3.jpg)
特定の分野に特化したセキュリティ企業
高度なハードウェアおよびソフトウェアアセスメントが専門
モバイルと組み込みシステム
社会的なインフラ
ブラックボックス
高度なマルウェアおよびルートキットの分析
職人的な高度な技術とオーダーメードなリサーチ
whois atredis.com
![Page 4: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/4.jpg)
story arc
NAND フラッシュの紹介とその防御の考え方について ハードウェアとソフトウェア視点からの NAND の動作方法 プロジェクト NandX: 隠ぺいと破壊
攻撃面の選択 プロジェクトとソースコードの紹介 NAND フラッシュにおける防御の考え方とフォレンジック 隠ぺいからその先へ
プロジェクト Burner: プラットフォームの完全なコントロール Thank you / Q&A
![Page 5: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/5.jpg)
NAND と その防御
![Page 6: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/6.jpg)
NAND における防御の考え方
このプレゼンテーションでは、 NAND フラッシュハードウェアの機能上の側面を取り上げる
バグや欠陥ではなく、純粋にハードウェアの機能について
エレガントでコントロールされた故障メカニズムの再利用
このハードウェアの攻撃面を保護できるのは、リエンジニアリングと高度なフォレンジックツールしかない
よりよいツールが必要
![Page 7: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/7.jpg)
NAND の動作
![Page 8: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/8.jpg)
注意 :科学は難しい
![Page 9: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/9.jpg)
NAND の動作 : ハードウェアの概要
バケツ - 技術用語ではないかもしれない
ページ - 通常は 512 バイト、 2048 バイト、もしくは 4096 バイト
ブロック – 通常は 16 キロバイトから 512 キロバイト
初期値は 1 にセットされる (0xFF)
0 にシフトするのは簡単
1 にシフトするのは難しい
![Page 10: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/10.jpg)
NAND の動作 : 罠
電子の配置は容易
1 個の電子をつかむのは非常に困難
![Page 11: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/11.jpg)
NAND の動作 : データの作成
NAND にデータを書き込むには、配置されている電子を取り除けばよい
本質的には、 0xFF からデータ部分を切り抜く
ファイルを保存する場合は、差分を切り抜くもしくは新しいバージョンを生成すべきかを調べる
このため、フォレンジックは困難に
![Page 12: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/12.jpg)
NAND の動作 : エレガントで
コントロールされた故障 ゲートの作成は困難で、しかも
壊れやすい
通常 10,000 回から 100,000回の書き込みで壊れ始める
摩耗が進むため、摩耗を表面全体に分散させるウェアレべリングを実施する
ウェアレベリングが残すごみによってフォレンジックは困難になる
![Page 13: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/13.jpg)
NAND の動作 : NAND フラッシュの種類
ロー NAND フラッシュ
コントローラはすべてソフトウェアによるコントローラ
ハードウェアは単純なストレージにすぎない
マネージド NAND フラッシュ
コントローラはハードウェアに組み込まれている
組み込みチューリングコントローラ
![Page 14: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/14.jpg)
NAND の動作 : マネージド NAND フラッシュ
![Page 15: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/15.jpg)
NAND の動作 : ソフトウェアと Android カーネ
ル ロー NAND = ドライバは複雑に
MMC/eMMC = ドライバはシンプルに
通常はプロプライエタリ な ( 非公開の ) ウェアレベリングアルゴリズムはハードウェアに組み込まれている
ドライバと無関係に、ハードウェアはシステムとやり取りし、故障メカニズムを明らかにしなければならない
![Page 16: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/16.jpg)
NAND の動作 : MTD メタドライバ
MSM / MTD(Memory Technology Devices) サブシステム
メタドライバのようなもの
Android のブートパーティションで多用される
製品によってはすべてのNAND 管理に使用
![Page 17: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/17.jpg)
NAND の動作 : システムの構築
![Page 18: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/18.jpg)
NAND の動作 : コントロールされた失敗の
おさらい
ハードウェアが故障すると、 NAND はフラグを立てるだけのレイジーイレースをおこなう
コントローラには読み書き不良の閾値がある
障害に対応する実装には、誤り訂正符号と 前方誤り訂正による実装がある
![Page 19: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/19.jpg)
NAND の動作 : 避けられない失敗
不良ブロックが検出されると、その NAND ブロックは アウトオブバンドエリア (OOB) と不良ブロックテーブル (BBT)に記録される
そのブロックはアドレス指定システムから消える
消えてしまったブロックを読めるツールは存在しない
不良ブロックをもとに戻すツールも存在しない
![Page 20: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/20.jpg)
NAND の動作 : When things go wrong
システムによっては、 BBT を完全にカーネルメモリで管理している ( リブート中に「マスタ」としてディスクに書き込まれる )
デュアルページの OOB マーカーを BBT と ECC に使うシステムもある (Sony!)
最初もしくは最後のブロックを全体の BBT と ECC に使うシステムもある ( アドレス -10 と考えてよい )
![Page 21: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/21.jpg)
NAND の動作 : 攻撃面の露出
YAFFS などのファイルシステム
ドライバレベルの MTD
Android / Linux カーネル
フラッシュトランジションレイヤー
ハードウェアの組み込みコントローラをリバースエンジニアリング
ユーザランドにおける不適切なコーディング
![Page 22: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/22.jpg)
プロジェクト NandX:隠ぺい
![Page 23: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/23.jpg)
プロジェクト NandX
目標 :
問題が発生していない任意のブロックを不良としてマーク ( アドレスシステムからそのブロックは削除される )
その不良ブロックに任意のデータを読み書き
Android カーネルと dd(1) を含む他のツールが読み書きできないことを確認
予測 :
膨大なハードウェアのリバースエンジニアリングと組み込みコントローラファームウェアのアセスメント
![Page 24: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/24.jpg)
プロジェクト NandX:第 1 ステージの現実
30以上の機種を購入、テスト、返品
ロー NAND を探す
オープンソースカーネル
![Page 25: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/25.jpg)
プロジェクト NandX:すべての携帯を調査
![Page 26: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/26.jpg)
![Page 27: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/27.jpg)
プロジェクト NandX:Sony Xperia Arc S!
![Page 28: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/28.jpg)
プロジェクト NandX:MTD サブシステム
![Page 29: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/29.jpg)
プロジェクト NandX:API を変更
実施するのは API を正しくない順序で叩くだけ
例外は BBT の OOB 書き込みだけ
ステップ :
ブロックを1つ選択し、内容を消去
ブロック全体に 0xDEADBEEF を書き込む
そのブロックを不良としてマーク ( ソニーの場合、 OOB に0x00)
任意のデータを読み書き
カーネルがクラッシュしリブート
![Page 31: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/31.jpg)
プロジェクト NandX:A disappearing act
ブロック 37 が消える
0xDEADBEEF が書きこまれる
もともとその場所には Android のSettings.app (com.android.settings) があった
ハードウェアでダブルフリーが発生し、リブートする
![Page 32: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/32.jpg)
証明にはソースコードが欠かせない
![Page 33: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/33.jpg)
プロジェクト NandX:主要部分のコード
![Page 34: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/34.jpg)
プロジェクト NandX:不良ブロックをマークする
第 1 ステージ
![Page 35: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/35.jpg)
プロジェクト NandX:不良ブロックをマークする
第2ステージ
![Page 36: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/36.jpg)
プロジェクト NandX:ログの概要
![Page 37: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/37.jpg)
プロジェクト NandX:詳細なログ
![Page 38: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/38.jpg)
プロジェクト NandX:最後に
ブロックが不良としてマークされると、現時点でそのブロックを回収できるツールは存在しない
工場出荷時の設定に戻しても回収できない
別の ROM をフラッシュしても回収できない
dd(1) でもそのブロックはコピーできない
0xDEADBEEF は完全に永続的な状態で隠ぺい
![Page 39: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/39.jpg)
プロジェクト NandX:ツールを武器に
![Page 40: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/40.jpg)
プロジェクト NandX:隠ぺいにとどまらない可能性
思考その 1:
目的のデータを削除し、 IT 部門がデータを消去して廃棄するのを待って、物理的にデータを外部に持ち出す
思考その 2:
不良ブロックとしてマークするというのはシステムから完全に削除されるということ ...
![Page 41: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/41.jpg)
プロジェクト NandX:究極の武器
リモートからカーネルモジュールをロードし、物理的な NAND フラッシュのブロックがなくなるまで 1 ブロックづつ削除
修復は不可能でリプレースが必須
携帯電話に限らず、ほぼすべての組み込み機器で NAND が使用されている
SCADA
![Page 42: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/42.jpg)
プロジェクト NandX:この発表の続きについて
機会があれば、リサーチ内容をオープンソースに
ベンダの企業秘密や知的財産が含まれるため、常に可能というわけではない
このプロジェクトは 100%オープンソースのツールで成り立っているため、このリサーチはリリースが可能だった
すべては次の URL に ( かなり長いホワイトペーパーも含む ):
https://github.com/monk-dot/NandX
![Page 43: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/43.jpg)
プロジェクトBurner:
隠ぺいの向こうへ
![Page 44: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/44.jpg)
プロジェクト Burner:概要
仮説 :
Android フォーンのカーネルを完全に管理下におくと、電源と電圧を内蔵バッテリからコントロールし、物理的に内蔵ハードウェアを操作できる。そのプロセスをコントロールし、それぞれのコンポーネントをターゲットを想定外の電圧によって運動学的破壊に至らしめることも可能になる
結果 :
仮説は正しい
![Page 45: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/45.jpg)
プロジェクト Burner:Android の電源ハードウェア
バッテリーは生の電力を供給する
USB スタックもシステムに電源を供給する
パワーマネージメントIC(PMIC) が配線上の電圧を配分する
カーネルが PMIC を直接管理する
配線は必ずしもコンデンサや抵抗で保護されているわけでない
![Page 46: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/46.jpg)
プロジェクト Burner:Android における電圧制御
ドキュメントの場所 :
<kernel_source>/Documentation/power/regulator/overview.txt
ドライバをのぞくと、 10 個以下の C ソースおよびヘッダで基板上の電圧フローを管理している
基盤の種類と無関係に注目すべきは *_regulator.c ファイル
![Page 47: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/47.jpg)
プロジェクト Burner:ターゲット
プロジェクト Burner がターゲットにしたプラットフォームはSony Xperia Z (yuga)
Qualcomm の Snapdragon リファレンスプラットフォームがベースに
NAND コントローラは SD カードコントローラにつながっている
Qualcomm MSM 7X00A SDCC は NAND および SD カードの配線をコントロールしている
![Page 48: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/48.jpg)
プロジェクト 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](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/49.jpg)
プロジェクト Burner: NAND の電圧を上昇させる
高電圧によって :
NAND の読み込みは転送過程で破壊
NAND の書き込みはNAND ハードウェアを破壊
PMIC の値は保持されたままなので、デバイスをリブートするとブートローダがカーネルを読み込む際に NAND すべてを破壊
![Page 50: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/50.jpg)
プロジェクト 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](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/51.jpg)
プロジェクト Burner:NAND の電圧を下げる
低い電圧によって :
ほとんどの NAND読み込みは転送過程でデータが破壊
NAND 書き込みはハードウェアレベルで失敗
このテクニックでは携帯電話をただちにフリーズさせ、 NAND への書き込みもすべて失敗に終わり、二度と起動しなくなる
![Page 52: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/52.jpg)
プロジェクトBurner:温度管理
![Page 53: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/53.jpg)
プロジェクト Burner:温度管理
想定外の電圧をかける場合、温度管理デーモンの thermald に注意が必要
このデーモンを停止すべきではなく、単純に無効化する必要がある
これについては別のプレゼンテーションで
![Page 54: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/54.jpg)
最後に
![Page 55: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/55.jpg)
余談 : マルウェアとルートキット
マルウェアはつまらなく、資本主義的な目的で作られていると思われがち
非常に高度かつ高価なツールに目を向けると、こうした見方は一変する
この分野における高度な研究をさらに推進し、拡大するよう訴えたい。オープンな手法で研究する研究者の数はまだ少ない
オープンソース化した理由は、このリサーチ結果を武器として使えないようにするのが目的
![Page 56: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/56.jpg)
ご質問は ?
![Page 57: Deeper than Ever Before](https://reader035.vdocuments.mx/reader035/viewer/2022062409/56814644550346895db35007/html5/thumbnails/57.jpg)
Thank You - @m0nk_dot