SSLWatcher: SSL/TLS通信を監視し警告するハイパバイザ
平井 成海††電気通信大学

1

目次

123
4567

研究背景・目的と方針
SSL/TLSの概要
システムの設計
システムの実装
デモと実験

関連研究
まとめと今後の課題
2

目次

12
3
456
7

研究背景・目的と方針
SSL/TLSの概要
システムの設計
システムの実装
デモと実験

関連研究
まとめと今後の課題
3

背景 電子商取引やオンラインバンキングでは一般的にSSL/TLSが使用される▶ 機密性や完全性の確保▶ サーバ証明書による真正性の証明

電子商取引サイトの例

4

背景
 しかし近年、SSL/TLSのセキュリティに関する問題が出てきている▶ 脆弱性や不適切なサーバ設定が原因▶ 脆弱性の例● FREAK (CVE-2015-0204)● Logjam (CVE-2015-4000)▶ 不適切なサーバ設定の例● 受け入れる暗号スイート(暗号アルゴリズムとハッシュアルゴリズムの組み合わせ)の不適切な設定

5

背景 しかし近年、SSL/TLSのセキュリティに関する問題が出てきている▶ 画像はアプリケーション上の暗号スイートの表示だが、これを見てすぐにユーザは安全であると判断できない6

背景 しかし近年、SSL/TLSのセキュリティに関する問題が出てきている▶ 弱い暗号スイートをユーザが個別に拒否するのは難しい● 通常SSL/TLSのバージョン別でしか拒否できない(Internet Explorerなど)● ブラウザ以外のSSL/TLSを使用するアプリではSSL/TLSに関する設定が無い場合もある

7

目的と方針 安全性が損なわれるようなSSL/TLS通信を検出し警告することでユーザを守るようなシステムを作成する▶ 弱い暗号スイートや弱い鍵交換を検出する

 BitVisorを使用して通信を監視し警告対象の通信を見つけたら警告を行う
 提案システムをSSLWatcherと呼ぶ
8ユースケース SSL/TLS通信のセキュリティを向上させたいと考えている企業の管理者と従業員が対象
OS

従業員用PC

H/W

管理者

9

ユースケース SSL/TLS通信のセキュリティを向上させたいと考えている企業の管理者と従業員が対象
ゲストOS

SSL/TLS通信の監視
SSLWatcher

従業員用PC

H/W

導入

管理者

10

ユースケース SSL/TLS通信のセキュリティを向上させたいと考えている企業の管理者と従業員が対象
ゲストOS

SSL/TLS通信の監視
SSLWatcher

従業員用PC

H/W

使用

従業員

11

目次

1
2
3
4
5
6
7

研究背景・目的と方針
SSL/TLSの概要
システムの設計
システムの実装
デモと実験

関連研究
まとめと今後の課題
12

SSL/TLSのハンドシェイク
ClientHello

クライアントサーバ

クライアントが対応しているバージョンや暗号スイートを送信

13

SSL/TLSのハンドシェイク
ClientHello

ServerHello

クライアントサーバ

ClientHelloの情報を元に暗号スイートを決定

14

SSL/TLSのハンドシェイク
ClientHello

ServerHello
Certificate
サーバ

クライアントサーバ証明書を送信

15

SSL/TLSのハンドシェイク
ClientHello

ServerHello
Certificate
クライアントServerKeyExchange

サーバ

サーバ主導での鍵交換 (無い場合もある)

16

SSL/TLSのハンドシェイク
ClientHello

ServerHello
Certificate
クライアントServerKeyExchange

サーバ

ServerHelloDone
ServerHelloの終了を通知しクライアントを待つ

17

SSL/TLSのハンドシェイク
ClientKeyExchange

サーバ

クライアントクライアント主導での鍵交換

18

SSL/TLSのハンドシェイク
ClientKeyExchange
ChangeCipherSpec

クライアントサーバ

クライアント側の暗号化通信を開始

19

SSL/TLSのハンドシェイク
ClientKeyExchange
ChangeCipherSpec

クライアントChangeCipherSpec

サーバ

サーバ側の暗号化通信を開始

20

目次

1
2
3
4
5
6
7

研究背景・目的と方針
SSL/TLSの概要
システムの設計
システムの実装
デモと実験

関連研究
まとめと今後の課題
21

システム図
ゲストOS

暗号スイート
データベース

SSL/TLS通信か？

Yes

SSL/TLSセッション
ストレージ

通信内容のチェック

警告の必要ありと判定通信のキャプチャ

警告画面の出力

BitVisor
H/W

22

警告の基準
1. クライアントが対応している一番強度の高い暗号スイートのレベルより使用している暗号スイートのレベルが低いとき▶ レベルとは暗号強度を数値化したもの● SSL/TLSライブラリに含まれているものを一部改変▶ 例外として、RC4については対象としない

2. 弱い鍵交換が行われた可能性のあるとき▶

具体的には、鍵長が1024bit未満のとき
23SSL/TLSセッションストレージ SSL/TLSセッションストレージには各セッションの以下の情報が記録される▶ クライアントが対応している暗号スイート▶ セッションで使用している暗号スイート

 SSL/TLSセッションストレージはBitVisorのメモリ上に存在する

24

暗号スイートデータベース
 暗号スイートデータベースには各暗号スイー
トの詳細な情報が記録されている▶ 暗号アルゴリズム▶ ハッシュアルゴリズム▶ 強度分類 暗号スイートデータベースはBitVisorのイメージ上に含まれている
25

目次

12
3
4
5
6
7

研究背景・目的と方針
SSL/TLSの概要
システムの設計
システムの実装
デモと実験

関連研究
まとめと今後の課題
26

パケットキャプチャ パケットキャプチャにはBitVisorのVPN機能を使用した▶ レイヤ2透過モードを使用した(L2TPは使用しない)▶ 送受信の関数にパケット

BitVisor内のL2TP機能

パケット
キャプチャ

BitVisor内のVPNモジュール

BitVisor内のNICドライバ

キャプチャのためのコードを追加した
27

TCPパケットの再構成
 BitVisorに含まれているlwIPは使用できない▶ ネットワークスタックのライブラリなので単なる再構成には使用できない

 SSL/TLS通信はTCPパケットのため再構成を行う必要がある▶ LinuxのTCP/IPスタックをエミュレートするライブラリであるlibnidsを移植して使用した

 SSL/TLS通信のみを再構成する
28

libnidsの移植
 ネットワーク関連の必要な構造体等を移植した▶ <netinet/*.h>に含まれるような構造体等が対象

 BitVisorに含まれているOpenSSL移植用のヘルパライブラリ(chelp)を使用した▶ chelpのprintf()はクラッシュするため使用しなかった29

SSL/TLSセッションストレージ SSL/TLSセッションストレージの実装にはlibnidsのセッション構造体を使用した▶ libnidsのセッション構造体には任意のデータを一緒に持たせることができる▶ libnidsのセッションの初期化/破棄とともにそのデータも一緒に処理することができる

30

SSL/TLSセッションストレージ
 libnidsのセッション構造体 (抜粋)struct tcp_stream{
struct tuple4 addr;
char nids_state;struct lurker_node *listeners;
struct half_stream client;
struct half_stream server;(中略)void *user;};
31

暗号スイートデータベース

 暗号スイートデータベースの実装にはOpenSSLに含まれている暗号スイートの構造体配列を使用した▶ 構造体配列に含まれている情報がそのまま暗号

スイートデータベースの実装に使用できるため

32

暗号スイートデータベース
 OpenSSLの暗号スイートの構造体配列 (抜粋)const SSL_CIPHER ssl3_ciphers[] = {…
{1,TLS1_TXT_DHE_RSA_WITH_AES_256_SHA,
TLS1_CK_DHE_RSA_WITH_AES_256_SHA,
SSL_kDHE,
SSL_aRSA,SSL_AES256,
SSL_SHA1,
SSL_TLSV1,
SSL_NOT_EXP | SSL_HIGH | SSL_FIPS,
SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF,
256,256,},…

33

暗号スイートのレベル 基本的に暗号スイートデータベースに含まれている強度の情報から決定される▶ ただし、例外として3DESはレベル3

OpenSSLにおける強度

暗号スイートの例

レベルNULL

NULL-SHA0EXPORT

EXP-DES-CBC-SHA

1LOW

DES-CBC-SHA

2MEDIUM

RC4-SHA

3

HIGH

AES256-SHA

434

パケットを受け取ったときの動作
ゲストOS

暗号スイート
データベース

SSL/TLS通信か？

Yes

SSL/TLSセッション
ストレージ

通信内容のチェック

警告の必要ありと判定

通信のキャプチャ

警告画面の出力

BitVisor
H/W

35

パケットを受け取ったときの動作
ゲストOS

暗号スイート
データベース

SSL/TLS通信か？

Yes

SSL/TLSセッション
ストレージ

通信内容のチェック

警告の必要ありと判定

通信のキャプチャ

警告画面の出力

BitVisor
H/W

36

パケットを受け取ったときの動作
ゲストOS

暗号スイート
データベース

SSL/TLS通信か？

Yes

SSL/TLSセッション
ストレージ

通信内容のチェック

libnidsによってパケットが処理される

警告の必要ありと判定

通信のキャプチャ

警告画面の出力

BitVisor
H/W

37

パケットを受け取ったときの動作
ゲストOS

暗号スイート
データベース

SSL/TLS通信か？

Yes

SSL/TLSセッション
ストレージ

通信内容のチェック

警告の必要ありと判定

通信のキャプチャ

警告画面の出力

BitVisor
H/W38

パケットを受け取ったときの動作
ゲストOS

暗号スイート
データベース

SSL/TLS通信か？

Yes

SSL/TLSセッション
ストレージ

通信内容のチェック

警告の必要ありと判定

通信のキャプチャ

ClientHelloを発見時最も強度の高い暗号スイートをセッション
ストレージへ保存

警告画面の出力

BitVisor
H/W

39

パケットを受け取ったときの動作
ゲストOS

暗号スイート
データベース

SSL/TLS通信か？

Yes

SSL/TLSセッション
ストレージ

通信内容のチェック

警告の必要ありと判定

通信のキャプチャ

ServerHelloを発見時保存されている暗号スイートと使用されている暗号スイートのレベルを比較

警告画面の出力

BitVisor
H/W

40

パケットを受け取ったときの動作
ゲストOS

暗号スイート
データベース

SSL/TLS通信か？

Yes

SSL/TLSセッション
ストレージ

通信内容のチェック

警告の必要ありと判定

通信のキャプチャ

鍵交換を発見時交換されている鍵の長さが短すぎないか
調べる

警告画面の出力

BitVisor
H/W

41

パケットを受け取ったときの動作
ゲストOS

暗号スイート
データベース

SSL/TLS通信か？

Yes

SSL/TLSセッション
ストレージ

通信内容のチェック

必要であれば警告を行う

警告の必要ありと判定

通信のキャプチャ

警告画面の出力

BitVisor
H/W42

警告の表示 BitVisorに含まれているADvisor機能を使用した▶ ビデオRAMへの直接書き込みによってOSに依存しない画像の表示を実現する

 VPNモジュールから直接使用できないため対策を行った▶ BitVisorに搭載されているメッセージ機能を使用した
43

BitVisorのメッセージ機能
 msgから始まる各種関数によって、コア機能への間接呼び出しを行う▶ 以下はコード例

int desc;
desc = msgopen("vga");
msgsendint(desc, 1);
msgclose(desc);
44

目次

1
2
3
4
5
6
7

研究背景・目的と方針
SSL/TLSの概要
システムの設計
システムの実装
デモと実験

関連研究
まとめと今後の課題
45

デモ https://www.youtube.com/watch?v=C4YPtKy
V2pk にあります
1. Debian GNU/Linux 8上▶ 弱い暗号スイートの検出▶ 弱い鍵交換の検出

2. Windows 7上▶ 弱い暗号スイートの検出▶ 弱い鍵交換の検出

46

実験環境

CPU
ゲストOS
メモリ

Intel Core i3 4000M
Debian GNU/Linux 8
4GB

カーネルのバージョン 3.16.0-4-amd64
OpenSSLのバージョン 1.0.1k
1.4
BitVisorのバージョン
1Gbps Ethernet
ネットワーク47

通信のオーバーヘッドの測定
 スループットの測定によってオーバーヘッドを測定した▶ 使用したソフトはiperfとwget▶ iperfはデフォルト設定、wgetは1GiBのファイルをダウンロードすることとした▶ 10回測定し、平均値を取って最終的な値とした

48

通信のオーバーヘッドの測定
 iperfによるスループットの測定結果
BitVisorなし

936.0

BitVisorあり

882.8

SSLWatcher
非SSL/TLS通信

732.8

約28%のオーバーヘッド(Mbps)

0200

400

600

800

1000

49

通信のオーバーヘッドの測定
 wgetによるスループットの測定結果
BitVisorなし

896.0

BitVisorあり

516.2

SSLWatcher
HTTP通信442.0

約103%のオーバーヘッド

SSLWatcher
HTTPS通信(Mbps)

0200

479.04HTTPS通信の方が高速になったが原因は不明

400

600

800

1000

50

通信のオーバーヘッドの測定
 スループットの測定の結果、最大オーバーヘッドは以下の通りとなった▶ iperfでは約28%▶ wgetでは約103% 実際のユースケースで使用されるプログラム
ではオーバーヘッドはより少ないと思われる

51

目次

1
2
3
4
5
6
7

研究背景・目的と方針
SSL/TLSの概要
システムの設計
システムの実装
デモと実験

関連研究
まとめと今後の課題
52

IDS/IPS SnortなどのIDS/IPSはネットワークを監視し不正アクセスを検知するためのシステム▶ どのPCが通信したかをルータを超えて調べることができない▶ SSLWatcherは各PC上に導入されるため、ネットワークの構成に影響されない

53

SSL/TLSの設定に関する調査 Leeら [IMC ’07] やLevillainら [ACSAC ’12]
▶ インターネット上に存在するSSL/TLSサーバの設定を調査し、セキュリティ的な質を調べている▶ 通信を監視することでSSL/TLSサーバの設定を調査するという方法をSSLWatcherでは使用している

54

SSL/TLSのセキュリティ基準の決定

 Pukkawannaら [BADGERS ’14]
▶ サーバ証明書の情報と暗号スイートの情報からリスクスコアを算出し分類している▶ SSLWatcherはサーバ証明書の情報を使用していないが、ハイパバイザ上に実装されている点などが異なる

55

SSL/TLSのセキュリティ基準の決定

 MozillaによるSSL/TLSサーバの設定例▶ 互換性レベル別に3段階の設定がある▶ SSLWatcherでは、暗号スイートのレベルの決定や警告基準の例外の決定に使用している

56

目次

1
2
3
4
5
6
7

研究背景・目的と方針
SSL/TLSの概要
システムの設計
システムの実装
デモと実験

関連研究
まとめと今後の課題
57

まとめ SSL/TLS通信の安全性が低下するような通信を警告するシステムであるSSLWatcherの提案と実装を行った

 SSLWatcher上で弱い暗号スイートや鍵交換を使用するサーバを検出することができた

58

今後の課題 暗号スイートのレベルの計算に使用する情報の追加▶ ハッシュアルゴリズム等

 検出可能な脆弱性の追加▶ CCS Injection等

 サーバ証明書の情報の使用
 警告対象の通信の切断

 通信のオーバーヘッドのさらなる低減59