HTTP/2クライアントの
パッシブ・フィンガープリンティング
CODEBLUE
@TOKYO
オリー・シガール
脅威研究シニアディレクター
Akamai
@orysegal
アジェンダ
▸データの収集、およびAkamai Intelligent Platformにおけ
る背景
▸HTTP/2概要
▸クライアント & デバイスのパッシブフィンガープリン
ティング
▸HTTP/2パッシブフィンガープリンティング
▸クライアントフィンガープリンティングの活用法
▸HTTP/2に関する脅威の現状
© 2017 AKAMAI | FASTER
FORWARD™
The Intelligent Platform
▸220,000+ エッジサーバー
▸3,315+ データセンター
▸1200+ 都市
▸129 国
▸1,227+ ネットワーク
▸60 Tbps ピーク時トラフィック
The Data
▸毎日 3 兆 ヒット
▸四半期ごとに 10億 ユニークIP
▸毎日 13+ 兆 行のログ
▸毎日 260+ TB の圧縮されたログ
ウェブ上の全てのトラフィックの15 - 3http://wwwnui.akamai.com/gnet/globe/
http://tech.akamai.com/attack-globe/
AKAMAI
© 2017 AKAMAI | FASTER
FORWARD™
1,000,000,000+ ヒット
25,600,000 IPアドレス
13,200 ホスト
632,900 ユーザーエージェント
413,400,000 ログイン
HTTP/2 - 1日の使用統計
10%トラフィック
HTTP/2 概要
HTTP/2 概要
▸ の開発したSPDYプロトコルがベースになってい
る
▸2015年に発表:
▸RFC 7540: Hypertext Transfer Protocol Version 2 (HTTP/2)
▸RFC 7541: HPACK: Header Compression for HTTP/2
▸HTTP/1.1 のパフォーマンス上の課題を改善
HTTP/1.1 の課題
© 2017 AKAMAI | FASTER
FORWARD™
並行性
圧縮
HTTP/1.0では、1つのTCPコネクションごとに同時に1つのリク
エストしか送ることができなかった。HTTP/1.1でリクエストパ
イプラインが追加されたが、これでは部分的な並行性しか得ら
れず、またHead-of-line blockingがネックになる
HTTPヘッダのフィールドはしばしば繰り返しや冗長な部分
が多く、不要なネットワークトラフィックを生み出したり
TCPのCongestion windowを埋めてしまったりしている
HTTP/1.xでは、サーバーからトラフィックプッシュを開始
することはない。次にクライアントが何を要求するか分かっ
ていても、サーバーはクライアントからの要求を待たなくて
はならない
サーバーがパッシブ< / >
HTTP/2 では...
© 2017 AKAMAI | FASTER
FORWARD™
並行性
圧縮
1つのTCPコネクション内でデータのインターリーブが可能
HTTPヘッダフィールドに効率的なエンコーディングを用い
ており、ヘッダの圧縮も行っている
新しいインタラクションモードとして、クライアントが必要
になると判断した場合にサーバからクライアントにレスポン
スをプッシュすることができる
サーバープッシュ< / >
並行性
© 2017 AKAMAI | FASTER
FORWARD™
TCP CONNECTION
STREAM 0
STREAM 1
STREAM 2
STREAM n
STREAM 1
ストリームとは、クライアントとサーバーの間に作られる、
独立した双方向性のフレームのシーケンスである
Frame
FrameFrame
FrameFrame
Frame
Frame Frame
HTTP/2 キー要素
▸コネクション: 2つのエンドポイント間のトランスポート
層のコネクション
▸ストリーム: HTTP/2コネクション内の双方向性のフレー
ムの流れ
▸フレーム: HTTP/2コネクションにおけるコミュニケー
ションの最小単位。ヘッダと、フレームタイプによって
長さの変わるオクテットのシーケンスからなる
▸メッセージ: 1つまたは複数のフレームのシーケンス (リ
クエストやレスポンスに対応)
© 2017 AKAMAI | FASTER
FORWARD™
フレームの構造
© 2017 AKAMAI | FASTER
FORWARD™
Length (24 bit)
Type (8 bit) Flags (8 bit)
R Stream Identifier (31 bit)
Frame payload (0...)
ヘッダのフレームの例
© 2017 AKAMAI | FASTER
FORWARD™
Length (24 bit) = XXXXX
Type = 0x1
HEADERS_FRAME
Flags = 0x25
END_HEADERS (0x4) ,
END_STREAM (0x1),
PRIORITY (0x20)
R Stream Identifier (Stream ID = 73)
Pad Length = 0
E = 1
Weight = 220
Stream Dependency = 0
:method: GET
:authority: http2.akamai.com
:scheme: https
:path: /resources/h2.css
user-agent: Mozilla/5.0 (......) Chrome/62.0.3202.75
HTTP/2 フレームタイプ
▸DATA {type = 0x0}
▸HEADERS {type = 0x1}
▸PRIORITY {type = 0x2}
▸RST_FRAME {type = 0x3}
▸SETTINGS {type = 0x4}
▸PUSH_PROMISE {type = 0x5}
▸PING {type = 0x6}
▸GOAWAY {type = 0x7}
▸WINDOW_UPDATE {type = 0x8}
▸CONTINUATION {type = 0x9}
© 2017 AKAMAI | FASTER
FORWARD™
HTTP/2 検査ツール
© 2017 AKAMAI | FASTER
FORWARD™
サーバーサイド
Webサーバのデバッグロ
グ
HTTP/2 検査ツール
© 2017 AKAMAI | FASTER
FORWARD™
クライアントサイド
Chrome://net-internals
HTTP/2 セッション初期化
© 2017 AKAMAI | FASTER
FORWARD™
HTTP (GET) リクエスト
© 2017 AKAMAI | FASTER
FORWARD™
HTTPレスポンス
© 2017 AKAMAI | FASTER
FORWARD™
注意点
▸HTTP/2はバイナリである (netcatで試すことができない)
▸HTTP/2 ではTLSが使われる
▸ほとんどのプロキシツール (Burp等) はH2をサポートし
ていない
© 2017 AKAMAI | FASTER
FORWARD™
© 2017 AKAMAI | FASTER
FORWARD™
パッシブ・クライアントフィンガープリン
ティング
パッシブ・クライアントフィンガープリンティ
ング
▸ユニークな特徴が観測できる可能性のある情報のパッシ
ブな収集
▸エンドユーザーではなく、ソフトウェアクライアントの
フィンガープリンティング
▸トランスポート層、セッション層、アプリケーション層
▸導き出す情報:
▸オペレーティングシステム (種類およびバージョン)
▸システムuptime
▸ソフトウェアクライアントの種類
© 2017 AKAMAI | FASTER
FORWARD™
▸HEADERS {type = 0x1}
▸PRIORITY {type = 0x2}
▸SETTINGS {type = 0x4}
▸WINDOW_UPDATE {type = 0x8}
フィンガープリントに用いられるHTTP/2フレーム
タイプ
© 2017 AKAMAI | FASTER
FORWARD™
▸DATA {type = 0x0}
▸HEADERS {type = 0x1}
▸PRIORITY {type = 0x2}
▸RST_FRAME {type = 0x3}
▸SETTINGS {type = 0x4}
▸PUSH_PROMISE {type = 0x5}
▸PING {type = 0x6}
▸GOAWAY {type = 0x7}
▸WINDOW_UPDATE {type = 0x8}
▸CONTINUATION {type = 0x9}
SETTINGSフレーム
SETTINGSフレームはエンドポイント同士が通信する設定
パラメータを伝達する。これはコネクション開始時に双方
から必ず送られなくてはならない
© 2017 AKAMAI | FASTER
FORWARD™
Fingerprint = [ 1:65536; 3:1000; 4:6291456 ]
SETTINGSフレーム
SETTINGSフレームはエンドポイント同士の通信手法に関
する設定パラメータを伝達する。これはコネクション開始
時に双方から必ず送られなくてはならない
© 2017 AKAMAI | FASTER
FORWARD™
Fingerprint = [ 1:65536; 3:1000; 4:6291456 ]
SETTINGSフレーム – エントロピー
© 2017 AKAMAI | FASTER
FORWARD™
WINDOW_UPDATEフレーム
▸WINDOW_UPDATEフレームはフローのコントロールに用い
られる
▸フローのコントロールは2つのレベル、各フレームのレベル
とコネクション全体のレベルで行われる
▸RFCではデフォルトのウインドウサイズは65,535オクテット
と定義されている
▸コネクションのフローコントロールウインドウは
WINDOW_UPDATEフレームを用いることによってのみ変更
することができる
© 2017 AKAMAI | FASTER
FORWARD™
フィンガープリントに’WINDOW_UPDATE’を追加
© 2017 AKAMAI | FASTER
FORWARD™
Fingerprint = [ 1:65536; 3:1000; 4:6291456 | 15663105 ]
PRIORITYフレーム
▸ストリームの依存関係と優先度の設定に
用いられる
▸優先度はストリームに重み付けを行うこ
とで設定される
▸重みは、リソース配分の割合を示す
▸一部でコネクション開始時に用いられる
▸各フレームには3つのフィールドがある:
▸重み
▸ストリーム依存関係
▸排他フラグ
© 2017 AKAMAI | FASTER
FORWARD™
index.html
<stream 1>
theme.css
<stream 9>
jquery.js
<stream 3>
fonts.js
<stream 5>
main.js
<stream 7>
FIREFOXのPRIORITYフレーム
© 2017 AKAMAI | FASTER
FORWARD™
<3>
201
<5>
101
<7>
1
0
<9>
1
<11>
1
Priority = 3:0:0:201, 5:0:0:101, 7:0:0:1, 9:0:7:1, 11:0:3:1
まとめ
© 2017 AKAMAI | FASTER
FORWARD™
User-Agent SETTINGS WINDOW UPDATE PRIORITY
okhttp/3.6.0 4:16777216 16711681 0
curl/7.54.0 3:100;4:1073741824 1073676289 0
nghttp2/1.22.0 3:100;4:65535 00
3:0:0:20,5:0:0:101,
7:0:0:1,9:0:7:1,11:0:3:1
Fingerprint = [3:100;4:65535|00|3:0:0:20,5:0:0:101,7:0:0:1,9:0:7:1,11:0:3:1]
© 2017 AKAMAI | FASTER
FORWARD™
疑似ヘッダ
▸HTTP/1.xではメッセージを用いてターゲットURI、リク
エストのメソッド、そしてステータスコードを表現した
▸HTTP/2では’:’で始まる特別な疑似ヘッダをこの為に用い
る
© 2017 AKAMAI | FASTER
FORWARD™
GET / HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
:method: GET
:path: /
:authority: www.example.com
:scheme: https
User-Agent: Mozilla/5.0
Accept: text/html
GET / HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
疑似ヘッダのエントロピー
© 2017 AKAMAI | FASTER
FORWARD™
[1:65535;3:100;4:131072 | 00 | 3:0:0:20,5:0:0:101,7:0:0:1,9:0:7:1,11:0:3:1 | m,p,a,s]
SETTINGS WINDOW_UPDATE PRIORITY PSEUDO-HEADER-ORDER
HTTP/2フィンガープリントフォーマット
© 2017 AKAMAI | FASTER
FORWARD™
パッシブHTTP/2フィンガープリンティングの用途
▸偽装されたウェブクライアントの検知:
▸偽装されたウェブクライアントのフィンガープリントは既知
のフィンガープリントとマッチしない
▸攻撃ツールとボットの検知:
▸既知のツールのシグネチャとして使うことができる
▸ウェブクライアントへのポジティブな制約
▸モバイルアプリのアクセスするAPIなど
▸匿名プロキシ & VPN検知
▸トラフィック & フィンガープリントの統計解析
© 2017 AKAMAI | FASTER
FORWARD™
© 2017 AKAMAI | FASTER
FORWARD™
HTTP/2脅威の現状
ほとんどのセキュリティツールはH2
をサポートしていない:
✘ Burp Suite
✘ Zed Attack Proxy
✘ Fiddler
✘ SQLmap
✘ Acunetix
✘ AppScan
✘ NetSparker
✘ SentryMBA
✘ THC-Hydra
何故?
攻撃者に実質的なインセン
ティブが無い - ウェブサーバ
はHTTP/1.xとHTTP/2 の両方
をサポートしている
© 2017 AKAMAI | FASTER
FORWARD™
まだ全ての一般的でシンプル
なHTTPライブラリがHTTP/2
をサポートしていない。対応
するにはコードのリファクタ
リングが必要
2016年に一部のサーバー実装で圧縮、ストリーム管理に問題が見つかっ
たが、これにはツール側の対応は不要
© 2017 AKAMAI | FASTER
FORWARD™

HTTP/2 クライアントのパッシブ・フィンガープリンティング by オリー・シガール

Editor's Notes

  • #4 Akamai is a leading CDN with approx. two hundred thousand edge servers world wide we observe substantial amount all web traffic including http/2 traffic