fG! @ CODE BLUE 2015
リンゴの中に
モンスターが
隠れてるかも?
私について
 経済学者
 人の行動に興味
 政治とかも
 あ、それとコンピュータもちょっと
EFI モンスター?
 EFIの紹介
 ハウツー
 (U)EFI バイナリーのリバースエンジニアリング
 (U)EFI ルートキットの探し方
前提条件
 参考環境
 MacBook Pro Retina 10,1.
 64-ビットのOS Xバージョン.
 Sandy Bridge 以降.
なぜにEFI?
 BIOS の代わり.
 もともとIntelによって開発.
 http://www.intel.com/content/www/us/en/architect
ure-and-technology/unified-extensible-firmware-
interface/efi-specifications-general-
technology.html
 現在はUEFIは、UEFIコンソーシアムによって管理.
 http://www.uefi.org
なぜにEFI?
 環境の初期化を行う.
 底階層機能へのアクセス
 モジュール構造.
 多機能.
 Cでの開発が容易.
どんな悪さができるかな?
 ディスクレス kernel/userland ルートキット
 Flash chip内にルートキットデータを記録.
 Boot時に解凍、カーネルへのパッチ.
 RAMのみでハードディスクへのアクセスが無い.
 Snareの SyScan 2012でのセッションを参照.
どんな悪さができるかな?
 検知が困難.
 通常のツールでの.
 耐フォレンジック.
 例えば耐メモリーダンプなど.
どんな悪さができるかな?
 OSインストールを越して存在
 HackingTeam が UEFI ルートキットを開発.
 https://github.com/hackedteam/vector-edk
 https://github.com/informationextraction/vect
or-
edk/blob/master/MdeModulePkg/Application/f
sbg/fsbg.c
どんな悪さができるかな?
 暗号化ディスク全体への攻撃
 キーロガーをインストール.
 FileVault2のパスワードをリカバリー
どんな悪さができるかな?
 “セキュア”なOSへの攻撃
 例:Tails.
 PGPキーやパスフレーズのリカバリー
 https://www.youtube.com/watch?v=sNY
sfUNegEA.
どんな悪さができるか?
 Bootloader
 カスタムブートローダーへリダイレクト.
 SMM バックドア
 http://blog.cr4.sh/2015/07/building-reliable-
smm-backdoor-for-uefi.html
0dayの物語…
 ファームウェア関連の0 day.
 数ヶ月前に公開.
 https://reverse.put.as/2015/05/29/the-
empire-strikes-back-apple-how-your-mac-
firmware-security-is-completely-broken/
0 dayの物語…
 フラッシュのロックを行っていない.
 ユーザーランドからフラッシュへの書き込み.
 Thunderstrikeと似てるが、より有効.
 Thunderstrikeは物理的なアクセスが必要.
 Prince Harming はリモートでの攻撃が可能
.
0 dayの物語…
 誘因が極めて簡単.
 マシンをスリープさせる.
 閉める、ファンが止まるのを待つ、再び開ける.
 もしくは “pmset sleepnow”を使って強制する.
0 dayの物語…
 Sandy Bridge と Ivy Bridge Macs が脆
弱.
 Haswell 以降は対応済み.
 古い機種すべてが脆弱
 Core 2 Duo 以降.
 そもそもフラッシュ保護が無い.
0デーの物語…
 アップデートが提供されている:
MacBook Air
MacBook
Pro
Mac Mini Mac Pro iMac
4,1 8,1 5,1 6,1 12,1
5,1 9,1 6,1 13,1
6,1 10,1 7,1 14,1
7,1 10,2 14,2
11,1 14,3
11,2 14,4
11,4 15,1
12,1
0 dayの物語…
 リバースエンジニアリングをすることで脆弱性
を理解する.
 https://reverse.put.as/2015/07/01/reversing
-prince-harmings-kiss-of-death/
 関連するEFIの文献へのリンクが含まれている.
0 dayの物語…
 Venamis こと Dark Jedi もパッチされた.
 http://events.ccc.de/congress/2014/Fahrpla
n/events/6129.html
 http://blog.cr4.sh/2015/02/exploiting-uefi-
boot-script-table.html
 若干複雑さが増えたが結果は一緒.
0 dayの物語…
 お話はこれで終わりでは無い.
 ThunderStrike 2 のスライドを参照.
 他の未パッチの脆弱性.
 リモートでの攻撃が可能.
Apple ...
EFIはどこに?
 通常はCMOSシリアルフラッシュ内.
 2つのメジャーなチップ
 Macronix MX25L6406E.
 Micron N25Q064A.
 SPI 互換性.
 大半は 64 Mbits/8 Mbytes.
EFIはどこに?
 新しい機種はフラッシュチップ
 Winbond W25Q64FV.
 EfiFlasher.efiのチップのリスト:
SST 25VF080 Macronix 25L1605 ST Micro M25P16 WinBond 25X32
SST 25VF016 Macronix 25L3205 ST Micro M25P32 Winbond 25X64
SST 25VF032 Macronix 25L6436E Eon M25P32 Winbond 25X128
SST 25VF064 Atmel 45DB321 Eon M25P16 Numonyx N25Q064
EFIはどこに?
 大半のチップは 8 pin SOIC.
 SMD もしくは BGA バージョン?
 Retinas 13”?
 New MacBook 12”?
EFIはどこに?
 チップはバルクで安く購入可能.
 書き換え実験に有効.
 Aliexpress.comで容易に入手可.
 平均価格:10個で$14 N25Q064A.
 平均価格: 10個で$8 MX25L640E.
EFIはどこに?
 モデルによってはアクセスが容易.
 Retinas 15” が最も簡単.
 他機種は大々的な分解を要する.
 とはいえ、 MacBook Pro 8,1 は5分程度で
分解可能
uv
EFIを書き出す
 ハードウェア
 最善で安定している.
 信頼性が高い.
 ソフトウェア
 チップがflashrom対応なら可能.
 信頼性が低い.
ハードウェア
 SPI互換なプログラマー.
 http://flashrom.org/Supported_programme
rs
 おいらはTrammell HudsonのSPI flasher
を使用.
 https://trmm.net/SPI
ハードウェア
 0Teensy 2.0 or 3.x.を元に
ハードウェア
 作るのが簡単.
 安い, ~ $30.
 高速64Mbit flashを8分以内にダンプ可能.
 Teensy 3 バージョンはさらに早い.
 問題なく作動する!
Flash chip SPI pinout
Teensy 2.0 pinout
Teensy 2.0 pinout
 Teensy 2 のデフォルト電圧は5v.
 Flash chips は 3,3.v.
 電圧レギュレータが必要 MCP1825.
 https://www.pjrc.com/store/mcp1825.ht
ml
Teensy 3.1 pinout
Tips & Tricks
 WP と RST ピンを入れ替えて VCCに.
 様々なSPI pins 名
 SCLK, SCK, CLK.
 MOSI, SIMO, SDO, DO, DOUT, SO, MTSR.
 MISO, SOMI, SDI, DI, DIN, SI, MRST.
 SS, nCS, CS, CSB, CSN, nSS, STE, SYNC.
ハードウェア
 フラッシュ全部を読む方法
ハードウェア
 64MB flash全部に書く方法
ハードウェア
 フラッシュへの書き込みにはLinuxが最適
OS X ではいくつかの問題.
 pv もしくは serial driver 関連?
 http://www.ivarch.com/programs/pv.shtml
ソフトウェア
 システム要件
 Flashrom
 DirectHW.kext
 TrammellのRwmemでも可.
 もしくは readphysmem.
ソフトウェア
 DarwinDumper.
 Flashrom と DirectHW.kext.のバイナリー
が含まれている
 カーネル拡張は署名されて無い.
 (今でも) Appleによってホワイトリスト
されている
ソフトウェア
 http://flashrom.org/Flashrom
 http://www.coreboot.org/DirectHW
 https://bitbucket.org/blackosx/darwindum
per/downloads
 https://github.com/osresearch/rwmem
 https://github.com/gdbinit/readphysmem
ソフトウェア
 AppleHWAccess.kext.
 readphysmem utility.
 外部kext無くしてもbiosが読める.
 Mavericks と Yosemiteではデフォルト.
 El Capitanには無い.
ソフトウェア
 実験するには十分.
 (U)EFI ルートキットを探し出すには力不足.
 HackingTeam製でなければ.
 彼らのバージョンはソフトウェアダンプから隠す努
力をしてない.
フラッシュの中身は?
フラッシュの中身は?
フラッシュの中身は?
フラッシュの中身は?
ディスクリプタ領域
 他領域の場所.
 アクセス権限.
 OS/BIOS は ME 領域へのアクセスすべきでは
無い.
 VSCC はME のフラッシュへのアクセスを制
御
Intel ME region
 CPUの中にCPU .
 Javaが動いている.
 システム電源が入ってなくてもアクティブ.
 アウトバンドネットワークアクセス!
 BIOSやOSからのアクセスは無い.
Intel ME region
 基本的にはブラックボックス.
 Igor Skochinskyによるプレゼンが3つ.
 今後も調査が必要!
 解凍ツール
 http://io.smashthestack.org/me/
Intel ME region
 Rootkit in your laptop: Hidden code in
your chipset and how to discover what
exactly it does
 Intel ME Secrets
 Intel ME: Two years later
 https://github.com/skochinsky/papers
BIOS 領域
 内容
 各フェーズのためのEFIバイナリ.
 NVRAM.
 Microcode (全モデルでは無い).
 各独自のファームウェアボリューム上に存在
(FVH).
BIOS 領域
 全てが GUIDでラベル分けされている.
 ファイル名は無い.
 多くの GUIDはEFIの仕様内に記載されている.
 他のはベンダー独自もしくはプライベート.
 Googleと幸運が仲間〜!
EFI ブートフェーズ
 それぞれ違った初期化フェーズ.
 次のフェーズのためにリソースを提供.
 例えばメモリー等.
The PEI/DXE ディスパッチャ
 PEIとDXEフェーズではディスパッチャが違う
 ロードする順序、依存関係を保証する.
 依存性式.
 セクションとして提供されている.
gFrameworkEfiMpServiceProtocol
Guid
ツール
 UEFIToolとUEFIExtract
 https://github.com/LongSoft/UEFITool
 Snare’s IDA EFI Utils
 https://github.com/snare/ida-efiutils/
 UEFI Firmware parser
 https://github.com/snare/ida-efiutils/
 CHIPSEC
 https://github.com/chipsec/chipsec
EFI file types
 二つの実行可能ファイルタイプ.
 PE32/PE32+ (Windows同様に).
 TE – Terse Executable.
 16/32/64 bit コード,フェーズによっては.
TE file フォーマット
 TE はPEの簡易版.
 無用なPE ヘッダーは削除されている.
 領域を確保するために.
 SECとPEIフェーズバイナリーによって使わ
れてる.
TE file フォーマット
 IDA では正しく分解でき無い.
 TE ヘッダーを正しくパースしない.
 知る限りでは 6.8でも改善されてない.
 解決作は自分で TE ローダーを書くこと.
 https://github.com/gdbinit/TELoader
EFI Services
 リンクするスタンダードなライブラリーが無い
 その代わりサービスがある.
 各フェーズ向けに基本機能が提供されている
 関数ポインターでアクセス可能.
EFI Services
EFI Services
EFI Services
 各フェーズには違うサービスがある.
 Entrypoint 関数はテーブルへのポインター
を含む.
EFI Services
EFI Services
 DXE ドライバーでよく見かけるコード
呼び出し規則
 32-bit バイナリーは通常のC的な規則を使用
 引数はスタックへ受け継げられる.
 SEC/PEI フェーズバイナリ.
呼び出し規則
 64-bit バイナリーはMicrosoft’s x64を使用
 最初の四つの引数: RCX, RDX, R8, R9.
 スタック上に居続ける.
 32-byte のスタック上のシャドースペース.
 最初のスタック因数の開始点は0x20のオフセッ
ト.
 DXE フェーズバイナリー.
Protocols & PPIs
 基本サービスでは不十分.
 他に提供されているサービスは?
 プロトコルとPPI経由で.
 (U)EFIによってインストール(公開)されている.
 他によってアクセスと検索が可能.
Protocols & PPIs
 プロトコル(PPIも)データ構造体.
 識別子としてのGUIDを含む.
 関数ポインターとデータも付随されている.
Protocols & PPIs
 プロトコルはDXEフェーズ内に存在.
 PPIはPEIフェーズ内に存在.
 実際は二者とも同等と考えれば良い.
PPI使用例
 まずはじめにPPIを探し出す
PPI使用例
 次に使ってみる.
プロトコル使用例
Apple によるEFI カスタム化
 Apple独自の改修.
 リザーブフィールドに対して.
 対応する必要がある.
 でなければファームウェアが無効に.
 UEFITool v0.27+ が全部対応可能
Apple によるEFIカスタム化
 最初の8バイト.
 同一GUIDを持つファームウェアボリュームで
は不変.
 バージョンでの違いは?
 未知数、ということで関係があるとは考え無い
Apple によるEFI カスタム化
 次の4 バイト.
 CRC32 値.
 ファームウェアボリューム内に.
 仕様によりヘッダーは独自の16ビットチェック
サム.
Apple によるEFI カスタム化
 最後の4 バイト.
 ファームウェアのファイルによって使われる全領域
.
 ボリューム内の未使用領域へ変更の際には必ず
アップデートされる必要が有る
 間違えるとファームウェアが無効に.
0xA0000 – 0x34E30 = 0x06B1D0
EFI モンスターの見つけ方
 フラッシュの中身をダンプする.
 可能ならばハードウェア経由で.
 有効なイメージが必要.
 以前に認証・信頼されたダンプ.
 またはファームウェアのアップデート.
EFI モンスターの見つけ方
 Apple社からのファームウェアアップデート.
 直接ダウンロード.
 https://support.apple.com/en-us/HT201518
 もしくは、OSインストーラーやアップデートに
含まれている.
 Appleからハッシュは無い(まだ).
EFI モンスターの見つけ方
 アップデートが有る機種でのみ有効.
 新機種はファームウェアのアップデートを待
つ必要がある.
EFI モンスターの見つけ方
 Firmware & signatures vault
 https://github.com/gdbinit/firmware_vault
 おいらの PGP キーで署名.
 Appleからのアップデートより抽出.
 もうすぐSMCのアップデート.
EFIモンスターの見つけ方
 アップデートには2種類のファイル形式が使
われてる
 SCAP (最も一般的).
 FD (幾つかの新機種と旧機種).
 UEFIToolは両方の処理が行える.
SCAP
 EFI Capsule.
 アップデートの配信に使われる.
 推奨される配信手法.
 ファームウェアボリュームによって構成.
 フラッシュダンプのパーサーの再利用が可能
u
v
SCAP
u は EfiFlasher.efi または
UpdateDriverDxeとしても知られている.
v はBIOSの領域内の中身.
 別々のGUIDで被包化されている.
u
v
w
SCAP
 u は NVRAM 領域.
 v は Microcode.
 w は Boot ボリューム.
SCAP
 SCAP は署名されている.
 RSA2048 SHA256.
 Apple がUEFIからバックポート.
 Trammell Hudsonによって最初に報告され
る
EFIモンスターの見つけ方
 フラッシュダンプをSCAPと比較.
 ダンプ内の全EFIバイナリーを見つける.
 SCAPの中身に対してチェックサムを実行.
EFIモンスターの見つけ方
 次のことも要確認:
 新しいファイル.
 欠如してるファイル.
 空き、パディング領域?
EFIモンスターの見つけ方
 NVRAMの中身を確認!
 ブードデバイスが収納されている.
 HackingTeamは新しい変数を収納してた.
 対象システムを感染するかどうかを決定する“ト
リガー”.
システムを感染せよ
システムを感染しない
EFIモンスターの見つけ方
 boot.efiを見落とすな
 内密性は高く無い.
 複雑さは必ずしも必要でないことを思い出し
て!
 うまくいくのなら、使えば?
EFIモンスターの使い方
 SCAP はEfiFlasherに使われる.
 独自のファームウェアを縫い合わせることが可
能.
 SCAPからファイルを抽出して構成する.
 SPI経由でフラッシュする.
 SCAPが本物と仮定.
EFIモンスターの見つけ方
 縫い合わせツールは作業予定.
 考えられる懸念事項:
 NVRAM の中身?
 シリアルナンバー?
 現在のダンブを使ってバイナリーを置き換え
るだけ?
結論
 (U)EFI ルートキットは幻の神獣ではない.
 とはいえ、非常に珍しい.
 実際のところ、どのようなものがあるかは知ら無
い.
 HackingTeamが2014年に一つ開発.
 とはいえ、簡単であり高度な物ではなかった.
結論
 検知にはハードウェア援助が必要.
 毎月、パソコンを分解する事は、費用、効率、
拡張性から非現実的.
 エンタプライズレベルではどのように対応す
べきか?
結論
 通常ベンダーはアップデートのリリースが遅
い.
 仮にリリースしたとしても.
 legbacore.com の過去の調査を参照.
結論
 SMC も面白いチップ.
 Alex Ionescu と Andrea Barisani が研究
を行った事がある.
 ルートキット開発の可能性として期待大?
結論
 Intel Management Engine (ME).
 巨大なパンドラの箱?
 セキュリティ研究者はもっと容易にアクセスさ
せてもらうべき.
結論
 Option ROMs.
 AppleのEFI実装では未だに懸念事項.
 非SecureBoot (署名されたOptionROMs).
 Thunderstrike 2 OptionROM ワームを参
照.
結論
 Trolling 釣り・荒らし?
 真実?
 多分、両者が混在.
 Appleのロジックボードの回路図を参照.
 無数の相互接続された物が存在.
結論
 信頼できるハードウェアソリューションが必要.
 ハードウェアが信頼できなければソフトウェア
問題を解決する事は時間の無駄.
結論
 物理的な保護策を再度検討?
 スィッチによって:
 Flash への書き込み.
 マイク.
 カメラ.
 そのほか...
結論
結論
 Acer C720 & C720P Chromebook.
 https://www.chromium.org/chromium-
os/developer-information-for-chrome-os-
devices/acer-c720-chromebook
 7番は書き込み防止ネジ.
結論
 新しいハードウェアデザインが必要?
 NVRAM は書き込み可能が必要.
 書き込み可能な領域のための独立したチップ
?
 BOM/領域制限?
結論
 Appleにとって大きな可能性がここにある.
 設計からサプライチェーンまで完全管理.
 デザインの可能が可能.
 より迅速なアップデートを行うように影響.
 Chromebookのみが競争?
ご挨拶
 CODE BLUE チーム, Snare, Trammell,
Xeno, Corey, Saure, cr4sh.
https://reverse.put.as
https://github.com/gdbinit
reverser@put.as
@osxreverser
#osxre @ irc.freenode.net
PGP key
https://reverse.put.as/wp-content/uploads/2008/06/publickey.txt
PGP Fingerprint
7B05 44D1 A1D5 3078 7F4C E745 9BB7 2A44 ED41
BF05
毎日が可能性に満ちた日!
探検しに行こう!
参照
 images.google.comからの画像。 Credit due to all their authors.
 Thunderstrike presentation
 https://trmm.net/Thunderstrike_31c3
 Thunderstrike 2 presentation
 https://trmm.net/Thunderstrike_2
 Snare EFI rootkits presentations
 https://reverse.put.as/wp-
content/uploads/2011/06/De_Mysteriis_Dom_Jobsivs_-_Syscan.pdf
 https://reverse.put.as/wp-
content/uploads/2011/06/De_Mysteriis_Dom_Jobsivs_Black_Hat_Slides.pdf
 Legbacore.com papers and presentations
 http://legbacore.com/Research.html
References
 Alex Ionescu, Ninjas and Harry Potter: “Spell”unking in Apple
SMC Land
 http://www.nosuchcon.org/talks/2013/D1_02_Alex_Ninjas_and_Harry_Potte
r.pdf
 Alex Ionescu, Apple SMC The place to be definitely For an
implant
 https://www.youtube.com/watch?v=nSqpinjjgmg
 Andrea Barisani, Daniele Bianco, Practical Exploitation of
Embedded Systems
 http://dev.inversepath.com/download/public/embedded_systems_exploitati
on.pdf
References
 fG!, The Empire Strikes Back Apple – how your Mac firmware
security is completely broken
 https://reverse.put.as/2015/05/29/the-empire-strikes-back-apple-how-your-
mac-firmware-security-is-completely-broken/
 fG!, Reversing Prince Harming’s kiss of death
 https://reverse.put.as/2015/07/01/reversing-prince-harmings-kiss-of-death/
 Cr4sh, Exploiting UEFI boot script table vulnerability
 http://blog.cr4.sh/2015_02_01_archive.html
References
 Cr4sh, Building reliable SMM backdoor for UEFI based
platforms
 http://blog.cr4.sh/2015/07/building-reliable-smm-backdoor-for-uefi.html
 Firmware papers and presentations timeline
 http://timeglider.com/timeline/5ca2daa6078caaf4
 Archive of OS X/iOS and firmware papers & presentations
 https://reverse.put.as/papers/
 Intel ATR - Black Hat 2015 / Def Con 23 - Firmware rootkit
 https://www.youtube.com/watch?v=sJnIiPN0104&app=desktop

あなたのAppleにもEFIモンスターはいませんか? by Pedro Vilaça - CODE BLUE 2015

Editor's Notes

  • #8 Core 2 Duo machines have flash always unlocked. Check Snare’s EFI presentations where he recovered his machine. No flash protections on those versions? Needs to be verified.
  • #9 I just shown you how horrible broken kernel extensions code signing is. But let me show you some additional ways to break it further.
  • #22 How can we exploit this vulnerability to load kernel code and bypass code signing checks?
  • #25 The write was possible from userland as Snare noticed in 2012. But with introduction of Sandy Bridge it wasn’t anymore (or shouldn’t be).
  • #29 Some models use the same update, for example Mac Mini 5,3 uses the 5,1 (5,3 is the server version)
  • #31 This was also another bug in the S3 implementation. It was possible to modify the boot script from a kernel extension and then trigger the malicious script with a sleep. It requires slightly more complexity since we need to modify the bootscript loading a kernel extension.
  • #32 This was also another bug in the S3 implementation. It was possible to modify the boot script from a kernel extension and then trigger the malicious script with a sleep. It requires slightly more complexity since we need to modify the bootscript loading a kernel extension.
  • #37 Usually we can interface with it via SPI but other protocols might be available.
  • #46 Add picture of my desktop motherboard
  • #61 Not anymore true for El Capitan
  • #66 Sample of rwmem output
  • #129 I asked Apple to start signing and publishing all the images so we can have something to compare against.
  • #132 Older models as in core 2 duo…
  • #133 Recommended because it can be signed and contain other features (on UEFI)
  • #134 In 1 we can see the EfiFlasher binary In 2 the contents of the update. We have firmware volumes encapsulated inside another firmaware volume.
  • #137 Explain what is NVRAM.
  • #149 New from?
  • #150 New from?
  • #151 New from?
  • #152 New from?
  • #159 New from?
  • #160 New from?
  • #161 TPM?
  • #165 For example the ethernet region was integrated to save space and BOM.
  • #166 For example the ethernet region was integrated to save space and BOM.