Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
abend_cve_9999_0001
PPTX, PDF
8,908 views
もしWebセキュリティのエンジニアがRFC7540の「HTTP/2アプリ」をWeb診断したら
もしWebセキュリティのエンジニアがRFC7540の「HTTP/2アプリ」をWeb診断したら
Engineering
◦
Read more
52
Save
Share
Embed
Embed presentation
Download
Downloaded 55 times
1
/ 57
2
/ 57
3
/ 57
4
/ 57
5
/ 57
6
/ 57
7
/ 57
8
/ 57
9
/ 57
10
/ 57
11
/ 57
12
/ 57
13
/ 57
14
/ 57
15
/ 57
16
/ 57
17
/ 57
18
/ 57
19
/ 57
20
/ 57
21
/ 57
22
/ 57
23
/ 57
24
/ 57
25
/ 57
26
/ 57
27
/ 57
28
/ 57
29
/ 57
30
/ 57
31
/ 57
32
/ 57
33
/ 57
34
/ 57
35
/ 57
36
/ 57
37
/ 57
38
/ 57
39
/ 57
40
/ 57
41
/ 57
42
/ 57
43
/ 57
44
/ 57
45
/ 57
46
/ 57
47
/ 57
48
/ 57
49
/ 57
50
/ 57
51
/ 57
52
/ 57
53
/ 57
54
/ 57
55
/ 57
56
/ 57
57
/ 57
More Related Content
PDF
20201028 AWS Black Belt Online Seminar Amazon CloudFront deep dive
by
Amazon Web Services Japan
PPTX
Amazon Athena で実現する データ分析の広がり
by
Amazon Web Services Japan
PPTX
SPAセキュリティ入門~PHP Conference Japan 2021
by
Hiroshi Tokumaru
PDF
Spring Boot × Vue.jsでSPAを作る
by
Go Miyasaka
PPTX
中小規模サービスのApacheチューニング
by
勲 國府田
PDF
アプリ開発で知っておきたい認証技術 - OAuth 1.0 + OAuth 2.0 + OpenID Connect -
by
Naoki Nagazumi
PDF
ビッグデータ処理データベースの全体像と使い分け
by
Recruit Technologies
PDF
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
by
Trainocate Japan, Ltd.
20201028 AWS Black Belt Online Seminar Amazon CloudFront deep dive
by
Amazon Web Services Japan
Amazon Athena で実現する データ分析の広がり
by
Amazon Web Services Japan
SPAセキュリティ入門~PHP Conference Japan 2021
by
Hiroshi Tokumaru
Spring Boot × Vue.jsでSPAを作る
by
Go Miyasaka
中小規模サービスのApacheチューニング
by
勲 國府田
アプリ開発で知っておきたい認証技術 - OAuth 1.0 + OAuth 2.0 + OpenID Connect -
by
Naoki Nagazumi
ビッグデータ処理データベースの全体像と使い分け
by
Recruit Technologies
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
by
Trainocate Japan, Ltd.
What's hot
PDF
AWS Black Belt Online Seminar 2017 Deployment on AWS
by
Amazon Web Services Japan
PDF
AWSからのメール送信
by
Amazon Web Services Japan
PPTX
[20220126] JAWS-UG 2022初頭までに葬ったAWSアンチパターン大紹介
by
Amazon Web Services Japan
PDF
AWS Black Belt - AWS Glue
by
Amazon Web Services Japan
PDF
ログ+メトリック+トレースの組み合わせで構築する一元的なオブザーバビリティ
by
Elasticsearch
PDF
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
by
Amazon Web Services Japan
PPTX
PenTesterが知っている危ないAWS環境の共通点
by
zaki4649
PDF
AWS Black Belt Techシリーズ Amazon WorkDocs / Amazon WorkMail
by
Amazon Web Services Japan
PDF
20200128 AWS Black Belt Online Seminar Amazon Forecast
by
Amazon Web Services Japan
PDF
20190130 AWS Well-Architectedの活用方法とレビューの進め方をお伝えしていきたい
by
Amazon Web Services Japan
PDF
The Twelve-Factor Appで考えるAWSのサービス開発
by
Amazon Web Services Japan
PDF
20210526 AWS Expert Online マルチアカウント管理の基本
by
Amazon Web Services Japan
PDF
20190806 AWS Black Belt Online Seminar AWS Glue
by
Amazon Web Services Japan
PDF
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
by
Amazon Web Services Japan
PPTX
Azure API Management 俺的マニュアル
by
貴志 上坂
PDF
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN
by
Amazon Web Services Japan
PDF
MuleアプリケーションのCI/CD
by
MuleSoft Meetup Tokyo
PPTX
Awsをオンプレドメコンに連携させる
by
Syuichi Murashima
PDF
20200212 AWS Black Belt Online Seminar AWS Systems Manager
by
Amazon Web Services Japan
PDF
WebSocket / WebRTCの技術紹介
by
Yasuhiro Mawarimichi
AWS Black Belt Online Seminar 2017 Deployment on AWS
by
Amazon Web Services Japan
AWSからのメール送信
by
Amazon Web Services Japan
[20220126] JAWS-UG 2022初頭までに葬ったAWSアンチパターン大紹介
by
Amazon Web Services Japan
AWS Black Belt - AWS Glue
by
Amazon Web Services Japan
ログ+メトリック+トレースの組み合わせで構築する一元的なオブザーバビリティ
by
Elasticsearch
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
by
Amazon Web Services Japan
PenTesterが知っている危ないAWS環境の共通点
by
zaki4649
AWS Black Belt Techシリーズ Amazon WorkDocs / Amazon WorkMail
by
Amazon Web Services Japan
20200128 AWS Black Belt Online Seminar Amazon Forecast
by
Amazon Web Services Japan
20190130 AWS Well-Architectedの活用方法とレビューの進め方をお伝えしていきたい
by
Amazon Web Services Japan
The Twelve-Factor Appで考えるAWSのサービス開発
by
Amazon Web Services Japan
20210526 AWS Expert Online マルチアカウント管理の基本
by
Amazon Web Services Japan
20190806 AWS Black Belt Online Seminar AWS Glue
by
Amazon Web Services Japan
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
by
Amazon Web Services Japan
Azure API Management 俺的マニュアル
by
貴志 上坂
202110 AWS Black Belt Online Seminar AWS Site-to-Site VPN
by
Amazon Web Services Japan
MuleアプリケーションのCI/CD
by
MuleSoft Meetup Tokyo
Awsをオンプレドメコンに連携させる
by
Syuichi Murashima
20200212 AWS Black Belt Online Seminar AWS Systems Manager
by
Amazon Web Services Japan
WebSocket / WebRTCの技術紹介
by
Yasuhiro Mawarimichi
Similar to もしWebセキュリティのエンジニアがRFC7540の「HTTP/2アプリ」をWeb診断したら
PDF
HTTP/2 入門
by
Yahoo!デベロッパーネットワーク
PPTX
HTTP2 最速実装 〜入門編〜
by
Kaoru Maeda
PDF
http2 最速実装 v2
by
Yoshihiro Iwanaga
PDF
HTTP入門
by
Sota Sugiura
PDF
HTTP/2, QUIC入門
by
shigeki_ohtsu
PDF
HTTP/2時代のウェブサイト設計
by
Kazuho Oku
PDF
WebSocket Protocol と Plack::Middleware::WebSocket
by
Yu Nobuoka
PPTX
httpbis interim とhttp2.0相互接続試験の話
by
shigeki_ohtsu
PDF
Rails と Rack と HTTP と通信の話
by
Progate, Inc.
PPTX
JavaプログラマのためのWebSocket概要
by
Shumpei Shiraishi
PDF
IETF90 Web関連WG報告 #isocjp
by
Kaoru Maeda
PPTX
HTTP/2 draft 14 preview and IETF90 httpbis WG Report
by
Kaoru Maeda
PDF
Janogia20120921 yoshinotakeshi
by
Keisuke Ishibashi
PDF
20120525 mt websocket
by
Ryosuke MATSUMOTO
PDF
最新プロトコル HTT/2 とは
by
Yukimitsu Izawa
PPTX
HTML はネットワークをいかに変えてきたか
by
彰 村地
PDF
Stuart attacking http2 implementations truefinal-jp
by
PacSecJP
PDF
HTTP2 時代の Web - web over http2
by
Jxck Jxck
PDF
HTTP2入門
by
Sota Sugiura
PPTX
HTTP/2 クライアントのパッシブ・フィンガープリンティング by オリー・シガール
by
CODE BLUE
HTTP/2 入門
by
Yahoo!デベロッパーネットワーク
HTTP2 最速実装 〜入門編〜
by
Kaoru Maeda
http2 最速実装 v2
by
Yoshihiro Iwanaga
HTTP入門
by
Sota Sugiura
HTTP/2, QUIC入門
by
shigeki_ohtsu
HTTP/2時代のウェブサイト設計
by
Kazuho Oku
WebSocket Protocol と Plack::Middleware::WebSocket
by
Yu Nobuoka
httpbis interim とhttp2.0相互接続試験の話
by
shigeki_ohtsu
Rails と Rack と HTTP と通信の話
by
Progate, Inc.
JavaプログラマのためのWebSocket概要
by
Shumpei Shiraishi
IETF90 Web関連WG報告 #isocjp
by
Kaoru Maeda
HTTP/2 draft 14 preview and IETF90 httpbis WG Report
by
Kaoru Maeda
Janogia20120921 yoshinotakeshi
by
Keisuke Ishibashi
20120525 mt websocket
by
Ryosuke MATSUMOTO
最新プロトコル HTT/2 とは
by
Yukimitsu Izawa
HTML はネットワークをいかに変えてきたか
by
彰 村地
Stuart attacking http2 implementations truefinal-jp
by
PacSecJP
HTTP2 時代の Web - web over http2
by
Jxck Jxck
HTTP2入門
by
Sota Sugiura
HTTP/2 クライアントのパッシブ・フィンガープリンティング by オリー・シガール
by
CODE BLUE
More from abend_cve_9999_0001
PPTX
フリーでできるセキュリティWeb編(SQLMあpを楽しもう)
by
abend_cve_9999_0001
PPTX
標的型攻撃からどのように身を守るのか
by
abend_cve_9999_0001
PPTX
Nmapの真実
by
abend_cve_9999_0001
PPTX
フリーでできるWebセキュリティ(burp編)
by
abend_cve_9999_0001
PPTX
Nmapの真実(続)
by
abend_cve_9999_0001
PDF
フリーでできるセキュリティチェック OpenVAS CLI編
by
abend_cve_9999_0001
PPTX
Burp番外編~バープ、チョトニホンゴデキル~
by
abend_cve_9999_0001
PPTX
Bypassing anti virus using powershell
by
abend_cve_9999_0001
PPTX
Your hash is.
by
abend_cve_9999_0001
PPTX
Burpで指定文字列を検索
by
abend_cve_9999_0001
PPTX
ポートスキャンを擬人化してみた
by
abend_cve_9999_0001
PPTX
Nmap 9つの真実
by
abend_cve_9999_0001
PPTX
Nmap 9 truth "Nothing to say any more"
by
abend_cve_9999_0001
PPTX
Bypassing Windows Security Functions(ja)
by
abend_cve_9999_0001
PPTX
Bypassing Windows Security Functions(en)
by
abend_cve_9999_0001
PPTX
バックアップファイルの管理
by
abend_cve_9999_0001
PPTX
Burp Suite Japanユーザグループ紹介
by
abend_cve_9999_0001
PPTX
The vulnerabilities never bothered me anyway
by
abend_cve_9999_0001
PPTX
ハニーポットで見る攻撃手法(特に結論はありません)
by
abend_cve_9999_0001
PPTX
おちこんだりもしたけど、私は元気です。
by
abend_cve_9999_0001
フリーでできるセキュリティWeb編(SQLMあpを楽しもう)
by
abend_cve_9999_0001
標的型攻撃からどのように身を守るのか
by
abend_cve_9999_0001
Nmapの真実
by
abend_cve_9999_0001
フリーでできるWebセキュリティ(burp編)
by
abend_cve_9999_0001
Nmapの真実(続)
by
abend_cve_9999_0001
フリーでできるセキュリティチェック OpenVAS CLI編
by
abend_cve_9999_0001
Burp番外編~バープ、チョトニホンゴデキル~
by
abend_cve_9999_0001
Bypassing anti virus using powershell
by
abend_cve_9999_0001
Your hash is.
by
abend_cve_9999_0001
Burpで指定文字列を検索
by
abend_cve_9999_0001
ポートスキャンを擬人化してみた
by
abend_cve_9999_0001
Nmap 9つの真実
by
abend_cve_9999_0001
Nmap 9 truth "Nothing to say any more"
by
abend_cve_9999_0001
Bypassing Windows Security Functions(ja)
by
abend_cve_9999_0001
Bypassing Windows Security Functions(en)
by
abend_cve_9999_0001
バックアップファイルの管理
by
abend_cve_9999_0001
Burp Suite Japanユーザグループ紹介
by
abend_cve_9999_0001
The vulnerabilities never bothered me anyway
by
abend_cve_9999_0001
ハニーポットで見る攻撃手法(特に結論はありません)
by
abend_cve_9999_0001
おちこんだりもしたけど、私は元気です。
by
abend_cve_9999_0001
Recently uploaded
PDF
krsk_aws_re-growth_aws_devops_agent_20251211
by
uedayuki
PDF
音楽アーティスト探索体験に特化した音楽ディスカバリーWebサービス「DigLoop」|Created byヨハク技研
by
yohakugiken
PDF
ソフトとハードの二刀流で実現する先進安全・自動運転のアルゴリズム開発【DENSO Tech Night 第二夜】 ー高精度な画像解析 / AI推論モデル ...
by
dots.
PPTX
君をむしばむこの力で_最終発表-1-Monthon2025最終発表用資料-.pptx
by
rintakano624
PDF
ソフトウェアエンジニアがクルマのコアを創る!? モビリティの価値を最大化するソフトウェア開発の最前線【DENSO Tech Night 第一夜】
by
dots.
PDF
2025/12/12 AutoDevNinjaピッチ資料 - 大人な男のAuto Dev環境
by
Masahiro Takechi
krsk_aws_re-growth_aws_devops_agent_20251211
by
uedayuki
音楽アーティスト探索体験に特化した音楽ディスカバリーWebサービス「DigLoop」|Created byヨハク技研
by
yohakugiken
ソフトとハードの二刀流で実現する先進安全・自動運転のアルゴリズム開発【DENSO Tech Night 第二夜】 ー高精度な画像解析 / AI推論モデル ...
by
dots.
君をむしばむこの力で_最終発表-1-Monthon2025最終発表用資料-.pptx
by
rintakano624
ソフトウェアエンジニアがクルマのコアを創る!? モビリティの価値を最大化するソフトウェア開発の最前線【DENSO Tech Night 第一夜】
by
dots.
2025/12/12 AutoDevNinjaピッチ資料 - 大人な男のAuto Dev環境
by
Masahiro Takechi
もしWebセキュリティのエンジニアがRFC7540の「HTTP/2アプリ」をWeb診断したら
1.
もしWebセキュリティのエンジ ニアがRFC7540の「HTTP/2ア プリ」をWeb診断したら 略して「もしR」
2.
自己紹介 Twitter: abend@number3to4 Webセキュリティエンジニア
3.
宣伝 7/26(日) に開催されるJULY TECH
FESTAにて、 「フリーでできるセキュリティチェック」という タイトルにて、プレゼンをさせていただきます。 ”無料”のツールを利用して、ラクにセキュリティ チェックを行うためのノウハウをご紹介いたし ます。 インフラエンジニア、運用を担当されている エンジニア向けの内容となっています。 http://2015.techfesta.jp/
4.
HTTP/2って HTTP(HyperperText Transfer Protocol)の最新バージョンにあたり、HTTP/1.1 から16年ぶりのアップデート。HTTP/2についてはRFC7540、関連するHPACKは RFC7541でリリースされました。 HTTP/1.1と比較するとHTTP/2は複雑になっています。 HTTP/1.1との違いはこんな感じ。 ①
多重化 ② バイナリメッセージ ③ ヘッダ圧縮(HPACK) ④ フロー制御 ⑤ 優先度 ⑥ 依存関係 ⑦ Server Push
5.
nghttp2って HTTP/2に対応したWebサーバ、Webクライアント、Proxy機能を有する。 通信内容の確認は、hexdumpオプションを指定することで確認することが可能。 https://nghttp2.org/
6.
① 多重化 HTTP/1.Xでは、1つのTCPコネクションで1つのリクエストおよびレスポンスを やりとりしていた。HTTP/2では、streamという概念により1つのTCPコネクション で複数のリクエストおよびレスポンスをやりとりできるようなった。 stream Stream_id:偶数 Stream_id:奇数 Stream_id:0 クライアント サーバ StreamID 0:コネクション制御用 奇数:クライアントが開始 偶数:サーバが開始 コネクション
7.
② バイナリメッセージ HTTPフレームが新たに定義され、stream上でやりとりをする。 フレームタイプによってFrame Payloadのフォーマットが変わる。フレームヘッダ は9byte。 フレームヘッダ HEADERSフレーム
8.
② バイナリメッセージ リクエスト、レスポンスヘッダがバイナリベースとなっている。 Nghttpでアクセスした際のdump結果。赤枠箇所がリクエストのHEADERSフレーム。
9.
② バイナリメッセージ リクエストのHEADERSフレーム。 00 00
26 01 25 00 00 00 0d 00 00 00 0b 0f 82 84 87 41 8b 0b e2 5c 2e 3c b8 5b 7d 70 b2 cf 53 03 2a 2f 2a 90 7a 89 aa 69 d2 9a c4 c0 57 02 e0 緑箇所の3byte「00 00 26」がフレームサイズで38byte(0x26) 最初の9byte(固定長)は、フレームヘッダ。 青箇所の「01」がフレームタイプを表しており、0x01はHEADERSフレーム。 黄色箇所の「25」はFlagで詳細はRFC7540へ。 茶色箇所の4byte(正確には31bit分)はStream IDで、この場合は13。
10.
② バイナリメッセージ リクエストのHEADERSフレームペイロード(赤箇所) 00 00
26 01 25 00 00 00 0d 00 00 00 0b 0f 82 84 87 41 8b 0b e2 5c 2e 3c b8 5b 7d 70 b2 cf 53 03 2a 2f 2a 90 7a 89 aa 69 d2 9a c4 c0 57 02 e0 青箇所は依存先のStream IDを指している。 白箇所でPriorityフラグ(0x20)がセットされた場合にのみ、青箇所と 緑箇所が出力される。 緑箇所はweightで、「0f」の場合、15+1=16となる。
11.
③ ヘッダ圧縮(HPACK) HTTP/2はヘッダ圧縮のためにHPACK(RFC7541)を採用しています。 ハフマン符号や静的テーブルと動的テーブルを用いて、圧縮しています。 Indexの場合、7bitの値がリクエスト・レスポンスヘッダのヘッダ名、値を 指している。「:」から始まるヘッダ名はHTTP/2のために作られた疑似 ヘッダフィールドです。
12.
③ ヘッダ圧縮(HPACK) さっきのHeader Blockの場合 00
00 26 01 25 00 00 00 0d 00 00 00 0b 0f 82 84 87 41 8b 0b e2 5c 2e 3c b8 5b 7d 70 b2 cf 53 03 2a 2f 2a 90 7a 89 aa 69 d2 9a c4 c0 57 02 e0 0x82(1000 0010)でIndexの2を指しており、「:method: GET」を意味します。 同様に0x84、0x87は、それぞれIndexが4、7を指しています。 Index 4 ・・・ :path: / Index 7 ・・・ :scheme: https
13.
③ ヘッダ圧縮(HPACK) bitにより、どういう意味なのか変わってくる。 Indexは事前に定義されたヘッダ名の 値をセットする。0x41の場合、Index が1である:authorityを指す。 2byte目(緑箇所)は、上位bitがハフ マンエンコーディングの有無を指定 し、値長を指定している(11byte)。 00 00
26 01 25 00 00 00 0d 00 00 00 0b 0f 82 84 87 41 8b 0b e2 5c 2e 3c b8 5b 7d 70 b2 cf 53 03 2a 2f 2a 90 7a 89 aa 69 d2 9a c4 c0 57 02 e0
14.
③ ヘッダ圧縮(HPACK) :authority:ヘッダの値は、赤箇所のbyte列(11byte分)になる。 このbyte列はハフマンエンコーディングされているため、このままでは 可視できるものではないので、ハフマンでコーディングを行う必要が ある。 00 00
26 01 25 00 00 00 0d 00 00 00 0b 0f 82 84 87 41 8b 0b e2 5c 2e 3c b8 5b 7d 70 b2 cf 53 03 2a 2f 2a 90 7a 89 aa 69 d2 9a c4 c0 57 02 e0
15.
③ ヘッダ圧縮(HPACK) まずは、11byteを2進数に変換し、結合する。 RFC7541で定義されているテーブルから 戻してあげればいい。赤箇所の 「00001」は1を意味しており、白は9、 青は2を意味する。 これを繰り返すと「 192.168.159.133
」 となる。緑箇所は余りで1でpaddingされ ている。 00001011111000100101110000101110001111001011100001011011011111010111000010 11001011001111
16.
④ フロー制御 HTTP/2では1つのコネクションで複数のstreamが通信できる。複数のstreamが 一斉に大量の通信をはじめたら・・・。 俺、通信するっ!! じゃ、俺も俺も。
じゃ、俺も俺も。 誰も「どうぞ、どうぞ」を言わないと、重要な通信が行えなくなってしまう。 どうぞ、そうぞ どうぞ、そうぞ えっ!?
17.
④ フロー制御 ウィンドウサイズによるフロー制御が存在しており、優先度にも応じて通信 を行う。ただし、フロー制御の対象となるのは、DATAフレームのみ。 コネクションの使用可能なウィンドウサイズ:65535 Streamごとの使用可能なウィンドウサイズ:65535 使用可能な量を使い切ってしまった場合、受信者側からWINDOW_UPDATE を受け取ることで、使用可能な量を追加することができる。 クライアント サーバ
18.
④ フロー制御 たとえば、237byteのデータをStreamIDが1のウィンドウサイズ127byteの設定 で通信した場合・・・ 2. サーバが237byteのデータのうち、127byteをsend クライアント サーバ コネクション
ウィンドウサイズ:65535 StreamID:1 ウィンドウサイズ:127 1. クライアントがInitial Window Sizeを127byteへ変更をsend コネクション ウィンドウサイズ:65535 StreamID :1 ウィンドウサイズ:127 クライアント サーバ
19.
④ フロー制御 4. サーバが残りの110byteをsend クライアント サーバ コネクション
ウィンドウサイズ:65408 StreamID:1 ウィンドウサイズ:127 3. クライアントがWINDOW_UPDATE(StreamID:1)127byteをsend コネクション ウィンドウサイズ: 65408 StreamID:1 ウィンドウサイズ:0 クライアント サーバ
20.
④ フロー制御 Initial Window
Sizeは、SETTINGフレームで指定します。 00 00 0c 04 00 00 00 00 00 00 03 00 00 00 64 00 04 00 00 00 7f 赤箇所9byteはフレームヘッダ。黄色箇所以降がSETTINGフレームのペイロード。 2byteの識別子と4byteの値の計6byte単位で構成される。 黄色箇所0x03は、SETTINGS_MAX_CONCURRENT_STREAMS を意味し、値は緑箇所 の0x64(100)。0x04がSETTINGS_INITIAL_WINDOW_SIZEで、0x07(127)。 ※ SETTINGS_INITIAL_WINDOW_SIZEはオプションで強制的に0x07に指定してます。
21.
④ フロー制御 WINDOW_UPDATEは、WINDOW_UPDATEフレームで実行されます。 00 00
04 08 00 00 00 00 0d 00 00 00 1f WINDOW_UPDATEは、「コネクションに対して」と「Streamに対して」行うこと が可能で、フレームヘッダで指定するStream IDが0の場合、「コネクションに 対して」、指定するWindow Sizeが追加される。「Streamに対して」行う場合は 該当するStream IDを指定する必要がある。両方に対して行う必要がある場合は それぞれのWINDOW_UPDATEフレームを送信する必要がある。
22.
⑤ 優先度 各StreamがWindow Sizeの上限まで使い切ることがないように、Streamに対して 優先度(Wight)をつけて、その割合に応じて通信を行う。 値は1から256の整数で指定することが可能です。Defaultは16です。 StreamID:1
Wight:12 StreamID:3 Wight:3 この場合、StreamID:1は全体の5分の4の割合で通信を行います。 非常に参考になりました。 HTTP/2 Deep Dive: Priority & Server Push by Moto Ishizawa https://speakerdeck.com/summerwind/2-deep-dive-priority-and-server-push
23.
⑤ 優先度 優先度の指定は、PRIORITYフレームを用いて行うことが可能です。 00 00
05 02 00 00 00 00 03 00 00 00 00 c8 赤箇所はフレームヘッダ。 青箇所は依存するStreamIDを指定し、この場合は0を指していている。 緑箇所が該当Stream(StreamID:3)の優先度で、0xc8(200)+1=201が優先度となる。
24.
⑥ 依存関係 各Streamは、他のStreamと依存関係を持ちます。 ルートにはStreamID:0がセットされ、依存されるStreamIDのほうが優先して リソースの割り当てを行われます。 StreamID:0 StreamID:1 StreamID:3 StreamID:5
StreamID:7
25.
⑦ Server Push 通常、クライアントからリクエストを送信し、それに対してレスポンスを 返すが、Server
Pushはクライアントからのリクエストを受けずにサーバが レスポンスを返す。 クライアント サーバ リクエスト レスポンス Server Pushのレスポンスは、クライアントが送信すると予定されるリクエスト とデータを返します。データはクライアントでキャッシュされます。
26.
⑦ Server Push Server
Pushするために、サーバからクライアントにPUSH_PROMISEフレームで 通知しておく必要があります。 Promissed Stream IDは、Server PushされStreamIDがセットされる。サーバが 起点となるため、この値は偶数となる。また、Header Block Fragmentには 予定されるリクエストをセットされます。
27.
⑦ Server Push Server
Pushするために、サーバからクライアントにPUSH_PROMISEフレームで 通知しておく必要があります。 00 00 18 05 04 00 00 00 0d 00 00 00 02 82 04 87 61 09 f5 41 57 22 11 87 41 87 08 9d 5c 0b 81 70 ff 赤箇所はフレームヘッダ。緑箇所は、Server PushするStreamIDでID:2を指定。 水色箇所は、予定されるリクエストヘッダになっており、HEADERSフレーム と同様にデコード可能。
28.
Web診断って Webアプリケーションの脆弱性の有無を検査することをWeb診断としています。 Web診断では、基本的にProxyツールを用いて行います。 Proxyツールで検査パターンを付加してリクエストし、そのレスポンスの内容 によって脆弱性の有無を判断します。 リクエスト Webサーバクライアント 検査パターンを 付加する。 Proxyツール レスポンス
29.
Web診断って Proxyツールを使う理由は、ブラウザで操作できる内容が限られているためです。 都道府県: 性別: 男 女 東京都
(ブラウザ上で)入力形式が固定化されている 場合にProxyツールを用いて、入力値を変更します。
30.
Web診断って ProxyツールのひとつにBurp Suiteがあります。 Javaで動作し、一部の機能は有償版のみとなりますが、基本的にフリーで使える ツールです。 リクエストをInterceptして 変更することで、ブラウザ では変更できないパラメー タも変更可能となります。
31.
結論 HTTP/2のアプリに対して、Burp Suiteでアクセスしてみた。 Burp Suiteは、HTTP/2に対応していないのでできなかった。
32.
じゃあ、どうすんの ソースとか見てたら、nghttpxというProxy機能があることに気づいたので これを活用することに。 クライアント Proxyツール HTTP/1.1 HTTP/2 nghttpx HTTP/1.1 こうすれば既存の仕組みのまま、HTTP/2アプリにも接続可能。 HTTP/2アプリ
33.
試してみた Nghttp2をProxyとして動作させることで、Burp Suiteでもアクセスできるよう になった。 nghttpx --client
-f0.0.0.0,8080 –b[HTTP2サーバのIP],443 -k -o -LINFO
34.
これで脆弱性見つけられる nghttp2には、アプリケーションサーバとしての機能がないため、以下、構成で 診断が行えるか確認することに。 クライアント Proxyツール HTTP/1.1 HTTP/2 nghttpx HTTP/1.1 Webアプリ HTTP/1.1 nghttpx
35.
当然見つかる HTTP/1.Xと同様に何も変わることなく、XSSを見つけることができた。
36.
じゃあ、すべての脆弱性も? HTTPヘッダインジェクションはどうなるのだろうか。 脆弱なサイト一般利用者 Proxy Server 攻撃者 キャッシュが 汚染される メールやページ 書込みによるリンク XSSと同じ被害
37.
なぜ、HTTPヘッダインジェクションなのか HTTP/2だとレスポンスヘッダ(リクエストヘッダもだけど)はバイナリになる ため、以下の行為ができないのではないかと考えた。 ① 任意のヘッダ挿入 勝手にSet-Cookieとセットされる可能性がある。 ② レスポンススプリッティング Proxyサーバに不正な内容をキャッシュさせられる可能性がある。
38.
なぜ、HTTPヘッダインジェクションなのか 検証するにあたり、脆弱なソースを用意した。 ※オープンリダイレクタも存在します。 #!/usr/bin/perl use utf8; use strict; use
CGI; my $cgi = new CGI; my $url = $cgi->param('url'); print "Status: 302 Movedn"; print "Content-Type: text/html; charset=UTF-8n"; print "Location: $urln"; print "n"; print "<hmtl>n"; print "<body>n"; print "redirect done!!n"; print "</body>n"; print "</hmtl>n"; exit;
39.
① 任意のヘッダ挿入 HTTP/2の場合、HPACKを用いてヘッダの圧縮を行っているため、脆弱性を悪用 してヘッダにインジェクトしようとしても、ただの文字列として処理されて しまうのではないかと推測した。 <レスポンス> HTTP/1.1 302
Found Date: Thu, 25 Jun 2015 00:17:28 GMT Set-Cookie: a=a Location: http://www.yahoo.co.jp 以下略 <リクエスト> GET http://192.168.159.152:8433/redirect.cgi?url=http://www.yahoo.co.jp%0a%0dSet- Cookie:a=a HTTP/1.1 以下略 脆弱だった。。。
40.
① 任意のヘッダ挿入 なぜこうなったのか。 <推測です> 今回の構成の場合、バックエンドサーバである脆弱サーバで改行が評価され ヘッダに挿入されたレスポンスをそのままHTTP/2へ返すために、HTTP/2には まったく関係がなく、とめることはできないのではないかと推測しています。
41.
② レスポンススプリッティング HTTP/2では、レスポンスヘッダとレスポンスボディはそれぞれ違うフレーム として送信されるため、レスポンスを分割したとしてもキャッシュされない のではないかと推測。 <リクエスト> GET http://192.168.159.152:8433/redirect.cgi?url=http://www.yahoo.co.jp%0a%0dContent- Length:0%0a%0d%0a%0dHTTP/1.1%20200%20OK%0a%0d%0a%0d<html><body>inject</body></htm l>
HTTP/1.1 Host: 192.168.159.152:8433 以下略 <赤字箇所のURLデコード結果> 改行 Content-Length:0 改行 改行 HTTP/1.1 200 OK <html><body>inject</body></html>
42.
② レスポンススプリッティング 結果は・・・。 HTTP/1.0 302
Moved Temporarily Date: Thu, 25 Jun 2015 16:57:28 GMT Location: http://www.yahoo.co.jp Content-Length: 100 Content-Type: text/html; charset=UTF-8 Connection: keep-alive HTTP/1.1 200 OK <html><body>inject</body></html> <hmtl> <body> redirect done!! </body> </hmtl> プログラムがそもそも意図した通りになっていなかった。。。
43.
② レスポンススプリッティング ※20015/6/27に内容を追加してます。 意図した通りのレスポンスになっていないため、pythonで強制的にレスポンス スプリッティングした結果がHTTP/2(nghttpx)ではどのように評価されるか検証 してみた。 参考 http://qiita.com/otoyo/items/98098e927797272d0a39 プログラムは一部抜粋 self.wfile.write("HTTP/1.1 302
Foundrn") self.wfile.write("Content-Type: text/html; charset=utf-8rn") self.wfile.write("Location: http://www.yahoo.co.jprn") self.wfile.write("Content-Length:0rn") self.wfile.write("rn") self.wfile.write("HTTP/1.1 200 OKrn") self.wfile.write("rn") self.wfile.write("<html><body>inject</body></html>rn")
44.
② レスポンススプリッティング Pythonサーバにアクセスすると以下のレスポンスが常に返される。 HTTP/1.1 302
Found Content-Type: text/html; charset=utf-8 Location: http://www.yahoo.co.jp Content-Length: 0 HTTP/1.1 200 OK <html><body>inject</body></html> ※20015/6/27に内容を追加してます。 青字箇所がレスポンススプリッティングされることを想定したレスポンス。
45.
② レスポンススプリッティング ブラウザ →
Burp Suite → フォワードプロキシ(nghttpx) → リバースプロキシ(nghttpx) → Pythonサーバという順でアクセスした結果。 HTTP/1.1 302 Found Date: Sat, 27 Jun 2015 08:10:08 GMT Location: http://www.yahoo.co.jp Vary: Accept-Encoding Content-Length: 0 Content-Type: text/html; charset=UTF-8 Server: nghttpx nghttp2/1.0.4 Via: 1.1 nghttpx, 2 nghttpx 2つ目のレスポンスがなくなっている。 ※20015/6/27に内容を追加してます。
46.
② レスポンススプリッティング リバースプロキシ(nghttpx)のログは、大きく4つのポイントがあります。 1. フォワードプロキシ(nghttpx)からのHTTP/2のGETリクエスト 2.
PythonサーバへのHTTP/1.1のGETリクエスト 3. PythonサーバからのHTTP/1.1のレスポンス 4. フォワードプロキシ(nghttpx)へのHTTP/2のレスポンス ※20015/6/27に内容を追加してます。
47.
② レスポンススプリッティング 1.フォワードプロキシ(nghttpx)からのHTTP/2のGETリクエスト :method: GET :scheme:
http :authority: リバースプロキシのIP :path: / user-agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0 accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 accept-language: ja,en-US;q=0.7,en;q=0.3 accept-encoding: gzip, deflate x-forwarded-proto: http via: 1.1 nghttpx ※20015/6/27に内容を追加してます。
48.
② レスポンススプリッティング 2. PythonサーバへのHTTP/1.1のGETリクエスト GET
http://リバースプロキシのIP/ HTTP/1.1 Host:リバースプロキシのIP User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ja,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate Via: 1.1 nghttpx, 2 nghttpx ※20015/6/27に内容を追加してます。
49.
② レスポンススプリッティング 3. PythonサーバからのHTTP/1.1のレスポンス :status:
302 content-type: text/html; charset=utf-8 location: http://www.yahoo.co.jp content-length: 0 via: 1.1 nghttpx ※20015/6/27に内容を追加してます。 ※疑似ヘッダフィールド「:status」が出力されている。理由は不明。
50.
② レスポンススプリッティング 4.フォワードプロキシ(nghttpx)へのHTTP/2のレスポンス [2805.766] send
HEADERS frame <length=27, flags=0x04, stream_id=5> ; END_HEADERS (padlen=0) ; First response header :status: 302 content-type: text/html; charset=utf-8 location: http://www.yahoo.co.jp content-length: 0 via: 1.1 nghttpx [2805.766] send DATA frame <length=0, flags=0x01, stream_id=5> ; END_STREAM ※20015/6/27に内容を追加してます。 レスポンスは、HEADERSフレームとDATAフレームのみで、DATAフレームの サイズも0となっている。
51.
② レスポンススプリッティング レスポンススプリッティングした「HTTP/1.1 200
OK」のレスポンス自体は 認識されずに、破棄されていると思われる。 ※20015/6/27に内容を追加してます。 Nghttpxを介すことで、レスポンススプリッティングされる可能性は減る と思うが、実装状況にも依存すると思われるため、HTTP/2だからセキュア になるということではないと思う。
52.
まとめ
53.
大事なことなので2度言います。
54.
宣伝 7/26(日) に開催されるJULY TECH
FESTAにて、 「フリーでできるセキュリティチェック」という タイトルにて、プレゼンをさせていただきます。 ”無料”のツールを利用して、ラクにセキュリティ チェックを行うためのノウハウをご紹介いたし ます。 インフラエンジニア、運用を担当されている エンジニア向けの内容となっています。 http://2015.techfesta.jp/
55.
・HTTP/2は以前のバージョンと比較すると複雑になり、telnetとかで試すことが できなくなった。 まとめ ・HTTP/2を使えば安全というわけではなく、Webアプリケーションはこれまで 通りセキュリティ対策はとる必要はある。 ・hexdumpした結果を何度も見ていると、だんだんフレームが見えてくる。
56.
ちなみに 前から疑問だったのだが・・・。 HTTP/2コネクションの初期設定確立のために、24byteの固定されたコネクション プリフェイスをサーバが送信する。 「HTTP/2.0」だと!? 正式名称は「HTTP/2」or「HTTP2」じゃないのか。って、前から??でした。
57.
参考資料 RFC7540 https://http2.github.io/http2-spec/ http://summerwind.jp/docs/rfc7540/ (日本語訳) RFC7541 http://www.rfc-editor.org/rfc/rfc7541.txt http://syucream.github.io/hpack-spec-ja/rfc7541-ja.html (日本語訳) HTTP/2
Frequently Asked Questions http://http2.info/faq.html#why-is-http2-multiplexed HTTP2 Advent Calendar 2014 http://qiita.com/advent-calendar/2014/http2 HTTP/2.0のインパクト https://www.janog.gr.jp/meeting/janog32/doc/janog32-http2.0-shimizu-01.pdf HTTP/2 入門 http://www.slideshare.net/techblogyahoo/http2-35029629 HTTP/2 Deep Dive: Priority & Server Push https://speakerdeck.com/summerwind/2-deep-dive-priority-and-server-push
Download