uefi and pci bootkits - pacsec...bios とuefi (1/2).. bios.. x86 アーキテクチャ...

50
UEFI and PCI bootkits Pierre Chifflier PacSec 2013

Upload: others

Post on 15-Jul-2020

22 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

UEFI and PCI bootkitsPierre ChifflierPacSec 2013

Page 2: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

ANSSI.. .

▶ ANSSI(フランスネットワーク情報セキュリティ庁) は、2009 年 7 月 7 日に設立された情報システムの防御およびセキュリティを所管する官庁

▶ 首相直轄▶ 主なミッション

▶ 予防▶ 情報システムの防御

http://www.ssi.gouv.fr/en/

UEFI and PCI bootkits 2/42

Page 3: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

UEFI の研究.. ..モチベーション..

......

▶ UEFI の研究▶ プレブートの危険性の喚起▶ 対策の提供と議論

.Study..

......

▶ ブートシーケンス▶ UEFI の機能:

▶ ブートローダのフック▶ ACPI テーブル▶ ネットワーク機能▶ …

▶ PCI デバイス▶ 対策

UEFI and PCI bootkits 3/42

Page 4: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

概要.. .

1 UEFI

2 PCI

3 UEFI VGA Bootkit の仕組み

4 Demo

5 対策

UEFI and PCI bootkits 4/42

Page 5: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

UEFI

UEFI and PCI bootkits 5/42

Page 6: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

BIOS と UEFI (1/2).. .

.BIOS..

......

▶ x86 アーキテクチャ▶ リアルモード (16 ビット)▶ 大容量ディスク (2TB 以上) はサポートしない、MBR セクター

▶ メモリマッピングは 1MB▶ インテグリティチェックなし▶ 時代遅れ

UEFI and PCI bootkits 6/42

Page 7: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

UEFI.. ..UEFI: 現在は?..

......

▶ 2000 EFI (Intel)▶ 2004 http://tianocore.org▶ 2005 UEFI (Unified EFI Forum, http://www.uefi.org)▶ 2013 現在のバージョン: UEFI 2.4

.目的..

......

▶ BIOS における制限の克服▶ 複数のアーキテクチャ(x86, ARM, Itanium, …)▶ ドライバの標準化▶ “現代的な” コンセプト: モジュール化、C 言語

UEFI and PCI bootkits 7/42

Page 8: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

UEFI: スペック.. ..プロトコル..

......

▶ IP4/6, UDP/TCP 4/6, ARP, DHCP4/6, MTFP4/6, FTP, PXE, iSCSI▶ VLAN, EAP, IPsec (IKEv2)▶ PCI, USB, SCSI, AHCI, リムーバブルメディア▶ GPT, vFAT▶ こんそーる、グラフィカルモード、ヒューマンインターフェース、

UTF-16▶ ユーザ概念▶ ACPI, SMRAM▶ デバッガー▶ 圧縮▶ EFI バイトコード仮想マシン▶ ファームウェア管理▶ …

UEFI and PCI bootkits 8/42

Page 9: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

UEFI とセキュリティ.. .

.EFI Development Kit (EDK) 2..

......

▶ 100 万行以上のソースコード▶ メモリページの保護は考慮されておらず、すべてが rwx▶ すべてのコードはリング 0 で実行▶ 広大なエリアで攻撃可能▶ ほとんどのコード (libc+、IPv4/IPv6、IPsec、PE parserなど) がスクラッチからの書き起こし

▶ StrCat と StrCpy が大量に

UEFI and PCI bootkits 9/42

Page 10: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

UEFI とセキュリティ(2).. .

.マルウェアが利用できるサービス..

......

▶ ネットワーク機能 (IPv4 と IPv6)▶ PXE 経由でのドライバの取得▶ IPsec トンネル▶ ACPI テーブルの操作▶ ドライバの追加

UEFI and PCI bootkits 10/42

Page 11: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

UEFI のブートシーケンス.. .

..

Security(SEC)

.

Pre EFIInitialization

(PEI)

.

DriverExecution

Environment(DXE)

.

BootDevSelect(BDS)

.

TransientSystemLoad

(TSL)

.

Run Time(RT)

.

AfterLife

(AL)

.Power on.

[Platform Initialization].

[....OS boot....].

Shutdown.

PreVerifier

.

CPUInit

.

ChipsetInit

.

BoardInit

.

verify

.

IntrinsicServices

.

EFI DriverDispatcher

.

DeviceDrivers

.

BootManager

.

Final OSBootLoader

.

Transient OSBootLoader

.

Transient OSEnvironment

.

OS-absentApp

.

Final OSEnvironment

.

OS PresentApp

.

AfterLife

.

.

HOOK !

.

HOOK !

.

HOOK !

UEFI and PCI bootkits 11/42

Page 12: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

PCI bootkits

UEFI and PCI bootkits 12/42

Page 13: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

概要: PCI 拡張 ROM.. .

▶ (小さな) オプションのメモリチップで、PCI/PCIe/Thunderboltに存在する

▶ ファームウェアによって実行されるコードを提供

▶ BIOS ではすでに攻撃対象に▶ UEFI ではどうか?

UEFI and PCI bootkits 13/42

Page 14: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

VGA カード.. .

UEFI and PCI bootkits 14/42

Page 15: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

シナリオと仮定.. .

.ユースケース..

......

▶ 攻撃者はすでに管理者特権を取得済み▶ 永続的でステルス性のあるルートキットをインストールしたい

▶ Bootkit: ブートローダールートキット▶ 変更はした痕跡が残る▶ BIOS パスワードが設定されている場合、困難▶ ハードウェアの使用?▶ BIOS を書き換えずに

UEFI and PCI bootkits 15/42

Page 16: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

例: グラフィックカード.. .

目的: 権限上昇.問題..

......

▶ OS はまだメモリにない▶ ハードディスクにもアクセスできない (暗号化されている可能性も)

▶ いかにコードを実行するか?▶ しかも数キロバイトで!

.当初の反響..

......

…こうした条件を考慮すると、せいぜい映画マトリックスのファンの空想でしかない

UEFI and PCI bootkits 16/42

Page 17: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

UEFI のブートシーケンス.. .

..

Security(SEC)

.

Pre EFIInitialization

(PEI)

.

DriverExecution

Environment(DXE)

.

BootDevSelect(BDS)

.

TransientSystemLoad

(TSL)

.

Run Time(RT)

.

AfterLife

(AL)

.Power on.

[Platform Initialization].

[....OS boot....].

Shutdown.

PreVerifier

.

CPUInit

.

ChipsetInit

.

BoardInit

.

verify

.

IntrinsicServices

.

EFI DriverDispatcher

.

DeviceDrivers

.

BootManager

.

Final OSBootLoader

.

Transient OSBootLoader

.

Transient OSEnvironment

.

OS-absentApp

.

Final OSEnvironment

.

OS PresentApp

.

AfterLife

.

.

HOOK !

.

HOOK !

.

HOOK !

UEFI and PCI bootkits 17/42

Page 18: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

シナリオ.. .

..

Security(SEC)

.

Pre EFIInitialization

(PEI)

.

DriverExecution

Environment(DXE)

.

BootDevSelect(BDS)

.

TransientSystemLoad

(TSL)

.

Run Time(RT)

.

AfterLife

(AL)

.Power on.

[Platform Initialization].

[....OS boot....].

Shutdown.

PreVerifier

.

CPUInit

.

ChipsetInit

.

BoardInit

.

verify

.

IntrinsicServices

.

EFI DriverDispatcher

.

DeviceDrivers

.

BootManager

.

Final OSBootLoader

.

Transient OSBootLoader

.

Transient OSEnvironment

.

OS-absentApp

.

Final OSEnvironment

.

OS PresentApp

.

AfterLife

.

Start:PCI card

.

HOOK !

.

HOOK !

.

HOOK !

UEFI and PCI bootkits 17/42

Page 19: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

シナリオ.. .

..

Security(SEC)

.

Pre EFIInitialization

(PEI)

.

DriverExecution

Environment(DXE)

.

BootDevSelect(BDS)

.

TransientSystemLoad

(TSL)

.

Run Time(RT)

.

AfterLife

(AL)

.Power on.

[Platform Initialization].

[....OS boot....].

Shutdown.

PreVerifier

.

CPUInit

.

ChipsetInit

.

BoardInit

.

verify

.

IntrinsicServices

.

EFI DriverDispatcher

.

DeviceDrivers

.

BootManager

.

Final OSBootLoader

.

Transient OSBootLoader

.

Transient OSEnvironment

.

OS-absentApp

.

Final OSEnvironment

.

OS PresentApp

.

AfterLife

.

Target:OS

.

HOOK !

.

HOOK !

.

HOOK !

UEFI and PCI bootkits 17/42

Page 20: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

UEFI ブートシーケンス.. .

... SEC,PEI

. DXE,BDS

. Grub2. Linux. App.

Power on

.

UEFI firmware

.

Bootloader

.

Operating System

.

LegacyCode

.

Header

.

InitCode

.

ModifiedExitBootServices

.

InterruptHandler

.

ModifiedFork

.

added code

.

1

.

2

.

3

.

4

.

5

.

Load Opt. ROM

.

LoadRO

M

.ExitBS.

.

#D

B

.

fork

UEFI and PCI bootkits 18/42

Page 21: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

現実的なシナリオ.. ..次のような方法で拡張 ROM を手にいれる..

......

▶ PCI デバイスの展開▶ 新たな内部 PCI デバイスの追加▶ 新たな外部 PCI デバイスの追加▶ USB メモリでのブート▶ OS の管理者特権の取得

.新たな機能..

......

▶ ハイブリッド ROM を作成する UEFI コードの追加▶ 拡張 ROM をフラッシュ✓□ バックドアがインストールされる

UEFI and PCI bootkits 19/42

Page 22: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

ROM の情報をダンプ.. .▶ cat /sys/bus/pci/devices/0000\:00\:02.0/rom▶ ベンダ提供のツール

.例: ATI..

......E:\> a t i f l a s h . exe −unlockrom 0E:\> a t i f l a s h . exe −s 0 myrom. bin

UEFI and PCI bootkits 20/42

Page 23: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

UEFI ROM の作成1.. .

.“ハイブリッド ROM” の作成..

......

▶ 開発ツール (vim + gcc)▶ DXE ドライバの作成: 64 ビット C コード (make)▶ PCI ID を選択▶ ROM フォーマットへ変換 (EfiRom)▶ イメージにパッチを当てる (cat)

1ROM のビルドは 1 日で終わらないUEFI and PCI bootkits 21/42

Page 24: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

PCI 拡張 ROM フォーマット.. .

..

PCI ROM Header< 64 kb

PCI Data Structure

PCI ROM Header< 64 kb

PCI Data Structure

Offset Length Value Header Field

00h−01h 2 55AAh PCI Expansion ROM signature

02h−17h 16h

218h−19h

Architecture Specific Data

Pointer to PCI Data Structure

Offset Length00h−03h

06h−07h08h−09h0Ah−0Bh

422

2

Header FieldSignature, the "PCIR" stringVendor IdentificationDevice IdentificationDevice List PointerPCI Data Structure Length

04h−05h

2

1 PCI Data Structure Revision3 Class Code0Dh−0Fh

0Ch

10h−11h 2 Image Length12h−13h 2 Vendor ROM Revision Level

1 Code Type14h15h 1 Last Image Indicator

16h−17h 2 Maximum Runtime Image Length18h−19h 2 Pointer to Configuration Utility Code Header1Ah−1Bh 2 Pointer to DTMF CLP Entry Point

Image 0

Image n

.

UEFI Code

.

ROM vanilla

PCI 拡張 ROM の変更

UEFI and PCI bootkits 22/42

Page 25: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

PCI 拡張 ROM フォーマット.. .

..

PCI ROM Header< 64 kb

PCI Data Structure

PCI ROM Header< 64 kb

PCI Data Structure

Offset Length Value Header Field

00h−01h 2 55AAh PCI Expansion ROM signature

02h−17h 16h

218h−19h

Architecture Specific Data

Pointer to PCI Data Structure

Offset Length00h−03h

06h−07h08h−09h0Ah−0Bh

422

2

Header FieldSignature, the "PCIR" stringVendor IdentificationDevice IdentificationDevice List PointerPCI Data Structure Length

04h−05h

2

1 PCI Data Structure Revision3 Class Code0Dh−0Fh

0Ch

10h−11h 2 Image Length12h−13h 2 Vendor ROM Revision Level

1 Code Type14h15h 1 Last Image Indicator

16h−17h 2 Maximum Runtime Image Length18h−19h 2 Pointer to Configuration Utility Code Header1Ah−1Bh 2 Pointer to DTMF CLP Entry Point

Image 0

Image n

.

UEFI Code

.

ROM vanilla

PCI 拡張 ROM の変更

UEFI and PCI bootkits 22/42

Page 26: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

PCI 拡張 ROM フォーマット.. .

..

PCI ROM Header< 64 kb

PCI Data Structure

PCI ROM Header< 64 kb

PCI Data Structure

Offset Length Value Header Field

00h−01h 2 55AAh PCI Expansion ROM signature

02h−17h 16h

218h−19h

Architecture Specific Data

Pointer to PCI Data Structure

Offset Length00h−03h

06h−07h08h−09h0Ah−0Bh

422

2

Header FieldSignature, the "PCIR" stringVendor IdentificationDevice IdentificationDevice List PointerPCI Data Structure Length

04h−05h

2

1 PCI Data Structure Revision3 Class Code0Dh−0Fh

0Ch

10h−11h 2 Image Length12h−13h 2 Vendor ROM Revision Level

1 Code Type14h15h 1 Last Image Indicator

16h−17h 2 Maximum Runtime Image Length18h−19h 2 Pointer to Configuration Utility Code Header1Ah−1Bh 2 Pointer to DTMF CLP Entry Point

Image 0

Image n

.

UEFI Code

.

ROM vanilla

PCI 拡張 ROM の変更

UEFI and PCI bootkits 22/42

Page 27: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

ROM の書き込み (1/2).. .▶ ベンダ提供のツール

.Example: ATI..

......E:\> a t i f l a s h . exe −unlockrom 0E:\> a t i f l a s h . exe −p −f 0 myrom. bin

▶ 三度お祈りして再起動

UEFI and PCI bootkits 23/42

Page 28: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

ROM の書き込み (2/2).. .

▶ SPI のフラッシュ: ローレベルなツール

UEFI and PCI bootkits 24/42

Page 29: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

UEFI での実行.. ..マルウェアの実行..

......

▶ UEFI ファームウェアが PCI デバイスをカウント▶ Expansion ROM がメモリにロードa:

▶ レガシー: (0xc0000 → 0xfffff)▶ UEFI: ダイナミック

▶ レガシーでは CSM(互換性サポートモジュール) によってROM がロード

▶ UEFI ROM はそのあとでロード▶ C のエントリーポイントがコール▶ 関数 ExitBootServices がフック

aすべての道は ROM に続く

UEFI and PCI bootkits 25/42

Page 30: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

Load PCI 拡張 ROM.. .

... SEC,PEI

. DXE,BDS

. Grub2. Linux. App.

Power on

.

UEFI firmware

.

Bootloader

.

Operating System

.

LegacyCode

.

Header

.

InitCode

.

ModifiedExitBootServices

.

InterruptHandler

.

ModifiedFork

.

added code

.

1

.

2

.

3

.

4

.

5

.

Load Opt. ROM

.

LoadRO

M

.ExitBS.

.

#D

B

.

fork

UEFI and PCI bootkits 26/42

Page 31: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

ブートローダの横取り.. ..ブートローダの役割..

......

▶ カーネルイメージをメモリにコピー(アドレス?)▶ ExitBootServices のコール▶ 問題: OS はメモリを再利用できる▶ Grub2 でテスト

.課題..

......

▶ 永続的なメモリ割り当て▶ コールスタックの再構築▶ アドレスの特定▶ 次のステップの準備

UEFI and PCI bootkits 27/42

Page 32: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

ブートローダの横取り.. ..ブートローダの役割..

......

▶ カーネルイメージをメモリにコピー(アドレス?)▶ ExitBootServices のコール▶ 問題: OS はメモリを再利用できる▶ Grub2 でテスト

.課題..

......

▶ 永続的なメモリ割り当て▶ コールスタックの再構築▶ アドレスの特定▶ 次のステップの準備

UEFI and PCI bootkits 27/42

Page 33: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

Next Step: ブートローダー.. .

... SEC,PEI

. DXE,BDS

. Grub2. Linux. App.

Power on

.

UEFI firmware

.

Bootloader

.

Operating System

.

LegacyCode

.

Header

.

InitCode

.

ModifiedExitBootServices

.

InterruptHandler

.

ModifiedFork

.

added code

.

1

.

2

.

3

.

4

.

5

.

Load Opt. ROM

.

LoadRO

M

.ExitBS.

.

#D

B

.

fork

UEFI and PCI bootkits 28/42

Page 34: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

カーネルの横取り (1/2).. .▶ 展開前のメモリイメージ▶ 物理アドレス ̸= 仮想アドレス▶ カーネル: IDT、GDT、ページネーションなどの初期化▶ モードの変更 (32 -> 64 ビット)、CS、DS …▶ ブレークポイントの使用は困難 (IDT)

..

EarlyKernel

.

DecompressionCode

.

InitPart 2

.

UncompressedImage

.

32 bits

.

32 bits

.

32 →64 bitsresetGDT

+IDT

.

ResetGDT+IDT

...

.

0x1000000

UEFI and PCI bootkits 29/42

Page 35: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

カーネルの横取り (2/2).. .

.Use ハードウェアブレークポイント..

......

▶ ハードウェアデバッグレジスタ▶ 割り込みの使用 #DB▶ 割り込みベクタ 1▶ ハードウェアブレークポイント 1: 0x1000000▶ ハードウェアブレークポイント 2: IDT のリロード前、初期化パート 2

UEFI and PCI bootkits 30/42

Page 36: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

Next Step: 初期カーネル.. .

... SEC,PEI

. DXE,BDS

. Grub2. Linux. App.

Power on

.

UEFI firmware

.

Bootloader

.

Operating System

.

LegacyCode

.

Header

.

InitCode

.

ModifiedExitBootServices

.

InterruptHandler

.

ModifiedFork

.

added code

.

1

.

2

.

3

.

4

.

5

.

Load Opt. ROM

.

LoadRO

M

.ExitBS.

.

#D

B

.

fork

UEFI and PCI bootkits 31/42

Page 37: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

syscall の改竄.. .

▶ システムコールの変更▶ メモリ上のコードにパッチ▶ 権限の上昇▶ 対象のシステムコール: fork▶ syscall のアドレスは?▶ 内部関数のアドレスは?

.変更されたシステムコール..

......

xor %rdi ,%rdicall *0 x f f f f f f f f 8 1 0 6 4 0 6 f ; prepare_kernel_credcall *0 x f f f f f f f f 8 1063db6 ; commit_credsret

UEFI and PCI bootkits 32/42

Page 38: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

Next Step: syscall.. .

... SEC,PEI

. DXE,BDS

. Grub2. Linux. App.

Power on

.

UEFI firmware

.

Bootloader

.

Operating System

.

LegacyCode

.

Header

.

InitCode

.

ModifiedExitBootServices

.

InterruptHandler

.

ModifiedFork

.

added code

.

1

.

2

.

3

.

4

.

5

.

Load Opt. ROM

.

LoadRO

M

.ExitBS.

.

#D

B

.

fork

UEFI and PCI bootkits 33/42

Page 39: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

Demo

... SEC,PEI

. DXE,BDS

. Grub2. Linux. App.

Power on

.

UEFI firmware

.

Bootloader

.

Operating System

.

LegacyCode

.

Header

.

InitCode

.

ModifiedExitBootServices

.

InterruptHandler

.

ModifiedFork

.

added code

.

1

.

2

.

3

.

4

.

5

.

Load Opt. ROM

.Load

ROM

.

ExitBS.

.

#D

B

.

fork

UEFI and PCI bootkits 34/42

Page 40: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

EFI バイトコード.. .

▶ EBC: EFI バイトコード▶ 仕様で定義される EBC 仮想マシン▶ アセンブリに似ているインストラクションでプラットフォームに依存しない

▶ Option ROM で使用可能.EFI バイトコードの例..

......

CC 67 04 00 ADD64 R7, R6 0x4B2 78 30 00 MOVnw @R0( 0 ,+48) , R772 87 30 00 MOVnw R7, @R0( 0,+48)03 07 CALL32 R7

UEFI and PCI bootkits 35/42

Page 41: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

EFI バイトコードとセキュリティ.. .

.EBC..

......

▶ ハードウェアに依存しない▶ メモリ制限なし▶ C の関数の呼び出し、および C 関数から呼び出し可能▶ ツールが存在しない、もしくは EBC のサポートが不十分▶ 例としては、ファイルを分析するとクラッシュなど

▶ コードの難読化に最適▶ Portable (複数の � ロードを含む)

..

UEFI and PCI bootkits 36/42

Page 42: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

EFI バイトコードとセキュリティ.. .

.EBC..

......

▶ ハードウェアに依存しない▶ メモリ制限なし▶ C の関数の呼び出し、および C 関数から呼び出し可能▶ ツールが存在しない、もしくは EBC のサポートが不十分▶ 例としては、ファイルを分析するとクラッシュなど

▶ コードの難読化に最適▶ Portable (複数の � ロードを含む)

..

UEFI and PCI bootkits 36/42

Page 43: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

EFI バイトコードとセキュリティ.. .

.EBC..

......

▶ ハードウェアに依存しない▶ メモリ制限なし▶ C の関数の呼び出し、および C 関数から呼び出し可能▶ ツールが存在しない、もしくは EBC のサポートが不十分▶ 例としては、ファイルを分析するとクラッシュなど▶ コードの難読化に最適▶ Portable (複数の � ロードを含む)

..

UEFI and PCI bootkits 36/42

Page 44: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

結果.. ..UEFI PCI Bootkits..

......

▶ 高いステルス性能: ディスクやファイルの変更がなく、占有するメモリも少ない: ステルス性が高い

▶ 高い移植性▶ アップグレードや再インストールでも生き延びる▶ DMA も利用可能▶ ディスクの暗号化に影響されない▶ BIOS パスワード: 対策にならない▶ アンチウイルス (UEFI でも): 無力▶ grsec、ランダム化など: エクスプロイトが困難になるが攻撃の防止にはならない

▶ ソリューション?

UEFI and PCI bootkits 37/42

Page 45: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

ソリューション 1: TPM.. .▶ パッシブなコンポーネントの [ はず ]

▶ (ほぼ) すべての PC に搭載▶ アイデア: いくつかの要素を測定▶ 極秘作戦で実際に使われた

.制限事項..

......

▶ アプリケーションの欠如▶ 必ずしもすべてのブートローダでサポートされていない▶ アップデートが複雑に▶ Full Disk Encryption の動作が必須▶ 完全ではないa

aBIOS Chronomancy のプレゼンテーションを参照

UEFI and PCI bootkits 38/42

Page 46: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

ソリューション 2: セキュアブート.. .

▶ UEFI の仕様に含まれる▶ ロード済み要素 (実行ファイル、ドライバ、拡張 ROM など) の暗号署名 (RSA2048) の確認

...

Source: Intel Developer Forum 2012

UEFI and PCI bootkits 39/42

Page 47: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

ソリューション 2: セキュアブート.. .

▶ UEFI の仕様に含まれる▶ ロード済み要素 (実行ファイル、ドライバ、拡張 ROM など) の暗号署名 (RSA2048) の確認

...

Source: Intel Developer Forum 2012

UEFI and PCI bootkits 39/42

Page 48: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

ソリューション 2: セキュアブート.. ..制限事項..

......

▶ 必須ではない (Windows 8 Hardware Certification で必須とされているが)

▶ 互換性サポートモジュール (CSM) を無効にする必要あり▶ 使用制限 (例 ARM タブレット)▶ CA の管理▶ Microsoft 以外の CA を使うには? 再署名か ROM のホワイトリスト?

▶ 完全ではない (例 SPI フラッシュへの直接書き込みaやNVRAM アクセス)

aA tale of one software bypass of windows 8 secure boot, Blackhat 2013

UEFI and PCI bootkits 40/42

Page 49: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

結論.. ..ハードウェア..

......

▶ 対策はあるが、実装が不十分もしくは使われていない▶ すべてのファームウェアコンポーネントは改竄から保護されていなければならない

.OEM ベンダへの提案..

......

▶ SPI の書き込みもしくは NVRAM の直接アクセスからUEFI を保護 (リブートモードを除く)

▶ 署名済みアップデートのみを許可▶ 初期ステップ (SEC/PEI) の保護▶ トラストルート S-CRTM (Static Core Root of Trust for

Measurement) の保護▶ そして上記をバグなしで実装

UEFI and PCI bootkits 41/42

Page 50: UEFI and PCI bootkits - PacSec...BIOS とUEFI (1/2).. BIOS.. x86 アーキテクチャ リアルモード(16 ビット) 大容量ディスク(2TB 以上) はサポートしない、MBR

今後の課題.. .

.Next..

......

▶ (多くの) UEFI 関数の評価▶ EFI バイトコードの分析▶ Blue Pill に代表される仮想化技術▶ UEFI ファームウェアの逆アセンブル▶ (Secure Boot、IPsec など) 実装の調査

ご質問は?

UEFI and PCI bootkits 42/42