Japan Computer Emergency
Response TeamCoordination Center

電子署名者 : Japan Computer Emergency
Response Team Coordination Center
DN : c=JP, st=Tokyo, l=Chiyoda-ku,
email=office@jpcert.or.jp, o=Japan ComputerEmergency Response Team Coordination
Center, cn=Japan Computer Emergency
Response Team Coordination Center
日付 : 2015.03.11 16:47:28 +09'00'

セキュリティバリアデバイスのストレージ保護機能とその活用
戸田賢二 古原和邦（独）産業技術総合研究所 （AIST）[制御システムセキュリティセンター（CSSC）との連携研究]講演内容• 開発の背景• SBD（セキュリティバリアデバイス）の概念• データ保護機能の動作方式• ハードウェア及びセキュリティタグ• セクタ単位のアクセス制御• ファイル単位のアクセス制御 （NTFS）• アクセスログ• SBDの制約と可能性
2

研究の背景：PCやサーバ• 巨大となったOSやアプリの脆弱性を完全にふさぐことは困難(増加傾向）• 未発見の脆弱性や発見されてから対策が行われるまで間はゼロデイと呼ばれ無防備な状態

脆弱性特定数の推移(http://www.symantec.com/ja/jp/threatreport/topic.jsp?id=vulnerability_trends&aid=
total_number_of_vulnerabilities)3

研究の背景：制御システム• ハードウェアの制約上負荷のかかるセキュリティソフトの導入が困難• 動作検証や可用性の問題から古いOSやアプリをセキュリティパッチもあてずに使い続けるケー
スも多い
ファイルシステムは現在NTFSにのみ対応• 簡単に後付けでき、ソフトのインストールが不要
で、OSやアプリを問わず装着するだけで、指定した重要データを防御する本発表のSBDの開発
4

SBD装着概念図

TargetSystemソフトもハードもそのままでIOポートにSBDを挟むだけ
5

OSやアプリを問わずデータアクセスを保護！

SBD:
データ保護機能の動作方式① ターゲットシステム（防御対象システム）からストレージにＩＯリクエスト発生① SBDは、対応するＩＯブロッ
クのセキュリティ情報を同時に読み出す①②

オリジナルＨＤＤ：
通常データ
6② セキュリティ情報に応じて、アクセスを制限したり、ユーザに確認したりする③
Read〇 RW=10
追加ＨＤＤ：Write×
セキュリティ情報

PCから不可視！

ＳＢＤ:
全体写真

セキュリティバリアデバイス

7

SBD用FPGAボード

ＳＢＤ:
ボードとその仕様

8

•
•
•
•
•
•
••
•
•
•

ボード大きさ： PCI Expressカード形状（突起部除き長さ230mm高さ110mm）
FPGAチップ： Xilinx Kintex-7 676ピン XC7K325T
コンフィギュレーション用フラッシュロム： 電源ON時にFPGAへの回路書き込み用
メモリI/F：
DDR3 SODIMM×1ポート
映像入力：
HDMI×1ポート（コピー制御機能HDCPなし）
映像出力 ：
HDMI×1ポート（コピー制御機能HDCPなし）
光オーディオ： 入力×1 ，出力×１
ストレージI/F： SATA (7ピン)×5ポート
通信用I/F：
1G/100Mビットイーサ（RJ-45）×2ポート
汎用I/F：USB (Type A)×6ポート（USB2.0対応）
SBD制御PC用I/F：
PCI Express×1

SBDボードの接続形態
SBD Board
SATA0

SATA0
SATA1
USB0
USB1

USB0

HDMI

HDMI

Ethernet (LAN)

Target Control Device

SATA1

USB1

PCIe
(card slot)

Ethernet(LAN)

Peripherals of Target Control Device

SBD Control PC

9ＳＢＤ：
セキュリティタグの構成（セクタ単位の制御）
Target Control Device

Original Storage of Target Control Device

Security Barrier Device (SBD)
SBD Board

SATA

BLOCK

Storage Access

Storage AccessOriginal Data in Target Storage
PCIeLoop Back

SBD Control PC(Linux kernel 2.6 or above)USB

Additional Storage
AccessUser Login to
SBD

Additional Storage for SBD Security
SBD PASSWORD FILE
USB

Loop Back

USER
NAME

PASSWORD(root)

USER
NAME

PASSWORD

...

UID
0GID

SBD SECURITY TAGs for corresponding BLOCK

UID
1

GID

UID

HDMI

SBD SECURITY MODE
for storage access

GID
RqraWqra

RqraWqra

RqraWqra

OWNER

GROUP

OTHER

(R: read, W: write, q: query, r: record, a: alert)

LoopBack / AccessControl:{Query - assert / negate},{Recording - all / no},{Alert - no}
Ethernet
SBD DEFAULT UID & GID
UID10GID• 現在SATA ポート回路が実装済み• Ethernet は遮断可能セキュリティバリアデバイス（SBD）：
ファイル単位のアクセス制御 動機
ファイル単位の防御ができれば利便性が大幅に向上する：• システムや重要データは多くの場合ファイルである• ファイルを防御用パーティションに移動しなくてよい• オリジナルのデータディスクをそのまま保護可能• 防御対象ファイルの指定や解除が極めて容易• SBDの着脱のストレスがゼロ（コネクタ着脱のみ）

11

SBD:ファイル単位のアクセス制御
高解像度化の実現
ファイルのデータ ＋ ルートからのパス を保護ディレクトリやポインタ領域のアクセス単位≦セクタサイズ５１２Ｂ
アクセス制御の高解像度化が必要

1. セクタに対応するセキュリティ情報に必要とされる解像度を記録
2. 当該セクタをストレージに書き込むとき，その解像度の単位でアクセス制御の処理を行う：書き込み禁止であれば，書き込み禁止の部分のデータはストレージから読み出した方を用いて当該ディレクトリ領域上のデータは変更しない
12

SBD:ファイル防御の動作（リード禁止）リード禁止:
1. 防御対象のファイル情報をSBDに書き込む（バイト単位で禁止可能）
2. そのファイルを防御対象PCから読む(SBDはユーザに警告を出す）0が内容として返される
先頭８バイトより後ろを読み出し禁止にした場合：防御対象ＰＣでのエラー
メッセージ(Ubuntu) →13

SBD:書き込み禁止の要件
EXT2（Linux）ファイルシステムの例• /appdata/app_critical がセキュアデータ：
ルートからのパスも保護が必要
14

ファイル単位のアクセス制御：
高解像度化しても残る困難
NTFSファイルのライト禁止制御：① PCメモリ上のディスクのキャッシュの内容とディスクの内容が異なってしまうためファイルシステムが破損しOSがクラッシュする可能性がある。

② ライト禁止ファイルのルートからのパス（すなわちそのファイルまでのディレクトリ群）もライト禁止する必要があるが、NTFSでは、ディレクトリ内のファイルへのポインタエントリはBalanced Treeのアルゴリズムで管理され、ライト禁止ファイルのエントリの位置が、通常ファイルの追加や削除により変動する。←SBDは固定領域の保護を想定したFPGA上の回路で高速化を達成しており、可変領域への対応は性能ペナルティを招く。

15

ＳＢＤのファイル単位のアクセス制御：
ＯＳのキャッシュとの整合【問題点】 WindowsやLinuxではメモリ上のキャッシュを活用し高速化：• スーパーブロック（ブロックグループデスクリプタ，フリーブロックやフリーi-nodeのビットマップ情報など）• i-nodeキャッシュ• ディレクトリエントリキャッシュ• バッファキャッシュ（ディスクブロックのデータに対応）• ページキャッシュ（ファイルのデータに対応）

16

書き込み時にストレージ上のデータ書き込みを禁止するとキャッシュとの齟齬が発生！

ファイル単位のアクセス制御：
困難を克服
NTFSファイルのライト禁止制御：

SBDでOSの挙動を観察・実験① PCメモリ上のディスクのキャッシュの内容とディスクの内容が異なってしまうためファイルシステムが破損しOSがクラッシュする可能性がある。

→SBDからエラーを返し意図的に疑似不良ブロックを発生させる！
② ライト禁止ファイルのルートからのパス（すなわちそのファイルまでのディレクトリ群）もライト禁止する必要があるが、NTFSでは、ディレクトリ内のファイルへのポインタエントリはBalanced Treeのアルゴリズムで管理され、ライト禁止ファイルのエントリの位置が、通常ファイルの追加や削除により変動する。←SBDは固定領域の保護を想定したFPGA上の回路で高速化を達成しており、可変領域への対応は性能ペナルティを招く。

→ファイル内の親ディレクトリへのポインタは位置固定！
17

ファイル単位のアクセス制御：
書き込み禁止時のエラー種別の実験
書き込み禁止ファイルへ書き込みに対しSBDがOS（win7）に次のエラーを返した場合(書換／リネーム／削除)
 Write Protect エラー： OSの応答が悪くなり、再起動するのに３分必要（終了時にも当該領域の書き込みリトライを繰り返すため）→ファイルは書換前の状態に戻るが書き込み禁止時にシステムが不安定

 Device Fault エラー： OSは当該セクタを不良セクタと認識し、正常なセクタと入れ替える。ユーザはSBDから警告を受け取るだけで、OSは正常。OSを再起動する際SBDが疑似不良セクタを元に戻す→ファイルは書換前
18 の状態に戻る＆システムは常に安定

SBD: Windows7におけるファイル防御の動作（ライト禁止）
ライト禁止(上書き／リネーム／消去):
1. 防御対象のファイル情報をSBDに書き込む
2. 防御対象PC を再起動（キャッシュを無効化するため）
3. そのファイルを防御対象PCから 上書き／リネーム／消去 する、とその操作は完了する（SBDは、Device Fault
エラーを返し疑似不良セクタを発生させると共に、ユーザに警告を出す）
4. 防御対象PCに chkdsk をスケジュールして終了
5. SBDが防御対象ディスクの$MFT（i-nodeテーブル）を疑
似不良セクタの無かった状態に戻す
6. 防御対象PCを起動（chkdskが実行されてからOS起動）ライト禁止ファイルが復旧
19

20

NTFS File System Map (file and $MFT&Mirr)
Sector 0 : MBR(physical sector address)
0-445
446-461462-447478-493494-509510-511BIOS Parameter Block
NTFS Boot Sector 0(logical sector address)

Partition table entry
Boot code

0-0
1-3
4-4
5-7
8-11
12-15

Partition table entry #1
Partition table entry #2
Partition table entry #3
Partition table entry #4
Signature value 0xAA55

0-2
3-10
11-35

Bootable flag
Starting CHS address
Partition type
Ending CHS address

36-83

Starting LBA address (sec)Size in sectors

84-509510-511

MFT entry header for
testA.txt
0-3
4-5
6-7
8-15
16-17
18-19
20-21
22-23

Magic number: “FILE”
Offset to the update sequence#entries in fix up array

Non-resident flag (0)(0x98) 0x0(272)-(275)(276)-(279)#Parent-MFT （MFT #5)(0xB0) 0x18

Attribute type ID (0x30)
Attribute length (120=0x78)

Master File Table(MFT entry: 1kB each)

Byte per sector
Sectors per cluster

#0
#1
#2
#3
Hidden Sectors#4Large Sectors
0x30-37#5#6
Total no of sectors
Logical cluster no for MFT#7($MFT)
Logical cluster no for MFT#8copy
Reserved secotors$MFTMedia descriptor (F8 is HDD)

$MftMirr$LogFile$Volume$AttrDef
Root Directory “.”

Clusters per MFT record

0-(55)(56)-(151)(152)-(271)

MFT entry header$STANDARD_INFROMATION$FILE_NAME

Volume serial no.
padding(#17340)

testA.txt$DATA

Attribute type ID (0x40)-1023(0x110)Attribute length (40=0x28)$DATA(resident)

Sequence no.

(176)-(183)

Hard link countOffset to the first attributeFlags (0x01: record in USE,
0x02: directory(0x37)

Attribute type ID (0x10)(416)-(419)(420)-(423)(424)-(434)0x16File name space (0: POSIX)
Filename(“testA.txt”: 9*2=18B, twobytes code)$STANDARD_INFORMATION(0xF0) 0x58
(0xF1) 0x59
$SECURITY_DESCRIPTOR(0xE2) 0x5A
Attribute type ID (0x50)(0x138)(312)-(315)(316)-(319) Attribute length (104=0x68)

Attribute type ID (0x80)
Attribute length (32=0x20)
Non-resident flag (0 : resident)

Attribute length (9)Offset to attr. St. (24=0x18)(0x38)

Attribute stream(“test data”)

Attribute length (96=0x60))

padding(0x1A0) 0x0
0x4
0x8
0x10
0x14
0x16
(0x18)

-1023

0x3FF
$BITMAP
Attribute type ID (0xB0)
Attribute length (0x50)

Non-resident flag (0)(0x1F)-(447)
File creation time
File altered time
MFT changed time
Last accessed time

(0x50)(0x58)(0x60)(0x68)(non-resident)-(271)(0x10F)(416)-(419)(420)-(423)(424)-(434)(0x97)

Attribute type ID (0x80)
Attribute length (0x50)
Non-resident flag (1 : non-reg.)Starting VCN of run list
Ending VCN of run list

Overview of NTFS partition
NTFS
Boot
Sec.

21

$Boot
$BadClus$LogFile sequence no.

-(55)-(151)

MFT entry for textA.txt$Bitmap($MFTMirr: Attr. length=0x70)$OBJECT_ID$FILE_NAME
0x0 (152)-(155)(156)-(159)(160)-(160)

Filename length (9)(56)-(59)(60)-(63)(64)-(64)

11-12
13-13
Jump instruction
14-19
OEM code
20-21
22-27
BPB (BIOS Parameter Block)
28-31
32-35
Extended BPB
36-39
40-47
Bootstrap code
48-55
56-63
End of sector marker (0xAA55)
64-71
72-79
79-83
($MFT: Attr. length=0x68)

MFT(MasterFile
Table)

MFT

Clusters

P

P+Q

Clusterblock

Clusterblock

Offset to data run (0x40)

MFT
copy

Data run #1
Data run #2(0x100) (0x108)(0x1A0) 0x0
0x4
0x8
0x10
0x18
0x20
0x22(0x40)

Runlist
01N+1-Run offset
size (N)Run length
size (M)Run length

Run offset (P)

M+N+1-Run offsetsize

Run length
size

Run length
Run offset (Q)22SBD:ファイル単位のアクセス制御
ライト禁止の動作形態（まとめ）NFTSファイルのライト禁止制御：

ライト禁止をOSと整合させて解決！

① ライト禁止ファイルへのライト、リネーム、削除などが行われた場合、まずメモリ上のディスクのキャッシュで操作が完了し、書き換えが成功したように見える。

② しかし、間もなくそれは、ディスクに書かれることになり、SBDが検知する。
③ SBDは、疑似不良セクタを発生させ、同時にユーザにライト禁止違反を警告 （SBDは違反をトリガとしてイーサネットを遮断することも可能）④ ユーザがOSを再起動すると、SBDがファイル復帰動作を行いライト禁止のファイルが元の状態に復活し、PCは元の状態にもどる。
$BadClusファイルから疑似不良ブロックを回収
23

ＳＢＤ：
ファイル単位のアクセス制御 実現方式
Target Control Device

Original Storage of Target Control Device

Security Barrier Device (SBD)
SBD Board

SATA

BLOCK

Storage Access

Storage AccessOriginal Data in Target Storage
PCIe

Loop Back

監視制御はバイトUSB
単位に高解像度化したブロック単位でUSB
FPGAの回路で行う
ため高速（ファイルシステム
HDMI
非依存）

SBD Control PC(Linux kernel 2.6 or above)
Additional StorageAccess

User Login to
SBD

Additional Storage for SBD Security
SBD PASSWORD FILE
Loop Back

USER
NAME

PASSWORD(root)USER
NAME

PASSWORD

...

UID
0GID

SBD SECURITY TAGs for corresponding BLOCK

UID
1GID

UID

SBD SECURITY MODE
for storage access

GIDRqraWqra

RqraWqra

RqraWqra

OWNER

GROUP

OTHER

(R: read, W: write, q: query, r: record, a: alert)

LoopBack / AccessControl:{Query - assert / negate},{Recording - all / no},{Alert - no}
Ethernet
SBD DEFAULT UID & GID
UID

24

GID

ファイルシステムを解釈し高解像度化したブロック毎の監視制御ルールを事前に作成（ファイルシステム依存）

ＳＢＤ：
アクセス制御 性能
オーバヘッドの大きい高解像度化した状態：
バイト単位のアクセスを監視した状態＝ファイル単位のアクセスを監視した状態
実験レベルで リード 1３0MByte/s
ライト 60MByte/s 様々な条件でテスト中
セクタ同士の比較をバイト単位でマスクして行う回路＋複数セクタをまとめてディスクＩＯするバッファ回路

測定条件：
データ用及びセキュリティタグ用ディスクとして、Samsung
SSD 830, 128GBを用い、UbuntuのDisk UtilityのReadOnly / Write Benchmarkを使用
25

ＳＢＤ：
アクセスログ
ソフトウェアによるファイルのアクセスログ機能：• .NET Framework の FileSystemWatcher クラス（msdn）• Windows のセキュリティ監査の新機能（technet: グローバル オブジェクト アクセスの監査など）• 監視ソフトウェア（ファイルモニタなど）• ハイパーバイザによる実装
SBDは、マザーボードとディスクの間でSATAを中継しておりファイルへのアクセスを把握可能• ログ取得がマルウェアから隔離• ログ取得のオーバヘッドが殆どない• 取得したログと防御への活用（挙動監視や書き込み禁止など）
26

SBDがブート領域への書き込みを防御しイーサネットを遮断し遠隔操作を断ち切った例

27

SBDの制約と可能性
••
•
•
•
•

•
28

Windows Update (書き込み禁止システムファイルが含まれる場合）、デフラグ、chkdskなどに際しては、SBDの監視を解除し、事後にセキュリティ情報の更新が必要
Diskやパーティションの暗号化には非対応。ファイル単位（コンテンツのみ）の暗号化には対応
ファイル・フォルダ・パーティション・ディスクの秘匿が容易
一旦書いた内容は保護される追記型ファイルの実現（ログファイルの改ざん防止にも有効）
ホームページの改ざん防止・警告
データサーバでの顧客情報の保護（指定ファイル（群）の（大量）リードなど検出可能。ファイル中の特定データや特定のフィールドを読み出し禁止に設定など可能）
ディスクアクセス（将来他のポートも）データの取得・解析・制御ツールとしてご静聴ありがとうございました29