Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Webキャッシュポイズニング
Search
shunaroo
April 27, 2022
Technology
0
530
Webキャッシュポイズニング
Webのキャッシュを悪用することで、攻撃を行うWebキャッシュポイズニングとその対策を紹介します。
shunaroo
April 27, 2022
Tweet
Share
More Decks by shunaroo
See All by shunaroo
Browser In The Browserの紹介
shunaroo
0
110
Other Decks in Technology
See All in Technology
エンジニアが組織に馴染むために勉強会を主催してチームの壁を越える
ohmori_yusuke
2
120
Devin&Cursor、それぞれの「本質」から導く最適ユースケース戦略
empitsu
8
2.5k
Java 30周年記念! Javaの30年をふりかえる
skrb
1
1.1k
OTel meets Wasm: プラグイン機構としてのWebAssemblyから見る次世代のObservability
lycorptech_jp
PRO
1
300
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
740
大事なのは、AIの精度だけじゃない!〜1円のズレも許されない経理領域とAI〜
jun_nemoto
11
5.2k
Azure Developer CLI と Azure Deployment Environment / Azure Developer CLI and Azure Deployment Environment
nnstt1
1
130
ソフトウェアテストのAI活用_ver1.10
fumisuke
0
240
toittaにOpenTelemetryを導入した話 / Mackerel APM リリースパーティ
cohalz
1
490
Eight Engineering Unit 紹介資料
sansan33
PRO
0
3.2k
ゴリラ.vim #36 ~ Vim x SNS ~ スポンサーセッション
yasunori0418
1
360
KMP導⼊において、マネジャーとして考えた事
sansantech
PRO
1
210
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
52
2.8k
A Tale of Four Properties
chriscoyier
159
23k
How to Think Like a Performance Engineer
csswizardry
23
1.6k
Rebuilding a faster, lazier Slack
samanthasiow
81
9k
How to Ace a Technical Interview
jacobian
276
23k
Building Better People: How to give real-time feedback that sticks.
wjessup
368
19k
Music & Morning Musume
bryan
47
6.6k
Designing for Performance
lara
608
69k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.6k
Balancing Empowerment & Direction
lara
1
89
How STYLIGHT went responsive
nonsquared
100
5.6k
Transcript
Web キャッシュ ポイズニング ~Webのキャッシュを使った攻撃と対策~ @shunaroo
自己紹介 @shunaroo ▪ 経歴 (重複あり) ▪ Webアプリ開発 5~6年 ▪ Web/NW脆弱性診断
3~4年 ▪ コンサルもどき 1~2年 ▪ 趣味 ▪ 犬を愛でる ▪ ゴルフ
Web キャッシュ ポイズニングとは? ▪ 攻撃者が用意した悪意のあるWebキャッシュに被害者がアクセスすることで発生する攻撃 攻撃者 被害者 悪意のある Webキャッシュ 攻撃者に利用された
サーバ キャッシュサーバ
Web キャッシュとは? ▪ Webコンテンツを一時的に保存(キャッシュ)しておくこと。 ▪ キャッシュ専用のサーバを用意しておくことで、Webコンテンツの応答速度や効率を上げること ができる 利用者A キャッシュされた コンテンツ
キャッシュサーバ 利用者B キャッシュサーバからコンテンツを取得できるので、 利用者Bはその分早く受け取れるし、 元のサーバの負荷も減る 同じWebコンテンツにアクセスする場合 キャッシュがない場合は 元のサーバまで取りに行く
キャッシュキーとアンキャッシュキー ▪ キャッシュサーバが、リクエストを受けた際に、「何をもって同じリクエストか」を判断する目印が必要 ▪ その目印を「キャッシュキー(Cache Key)」と呼ぶ ▪ 少なくとも、どのサイト(Hostヘッダ)のどのコンテンツ(リクエストライン)かを識別する値は、 キャッシュキーの一部となる ▪
キャッシュキーにならないリクエストの部分を「アンキャッシュキー(Uncache Key)」と呼ぶ キャッシュキー例 アンキャッシュキー例
Webキャッシュポイズニングの主な条件 ①元のサイトから悪意のあるレスポンスを引き出せる ▪ 本来アクセスしたいサイト以外にリダイレクトされる ▪ 不正なスクリプトが動作する など ②攻撃が悪用できる状態でキャッシュできる 元のサイト 悪意のある
Webキャッシュ キャッシュサーバ 被害者
攻撃のステップ ①攻撃に使えるアンキャッシュキーを特定する キャッシュキーに、攻撃用のペイロードを載せられたとしても、 攻撃するためには、被害者も同様に攻撃用のペイロードを載せたリクエストを送る必要がある(影響小) アンキャッシュキーを用いて、攻撃することができれば、 被害者はサイトにアクセスするだけで、攻撃が成立するようになる(影響大) 特定方法としては、Burp SuiteのプラグインParam Minerが有名 ②キャッシュさせる
すぐにキャッシュされなかったり、短期間で消えてしまう可能性があるので、注意深く観察する
学習用サイト Web Security Academy ▪ Lab: Web cache poisoning with
an unkeyed header <https://portswigger.net/web-security/web-cache-poisoning/exploiting-design- flaws/lab-web-cache-poisoning-with-an-unkeyed-header> ▪ アンキャッシュキーに含まれる値を用いてJSの読み込み先を変更していることを利用して、 読み込み先を攻撃者が用意してるサーバに変更し、攻撃する
解法例 ステップ① ▪ Param Minerでアンキャッシュキーを探索
解法例 ステップ② ▪ 「x-forwarded-host」がアンキャッシュキーとして悪用できそうであるとわかる
▪ リクエストレスポンスを確認してみる 解法例 ステップ③
解法例 ステップ④ ▪ リクエストレスポンスを確認してみる JSの読み込み先が「x-forwarded-host」で指定したドメインに変わっている。 悪意のあるレスポンスを引き出せることがわかる
解法例 ステップ⑤ ▪ 攻撃用サーバの準備 このURLにアクセスすると、 alert(document.cookie)が返却される
解法例 ステップ⑥ ▪ JSの読み込み先を攻撃用サーバに変え、かつキャッシュされるようにリクエストを数回送信 キャッシュキー 攻撃用サーバのドメイン
解法例 ステップ⑦ ▪ JSの読み込み先を攻撃用サーバに変え、かつキャッシュされるようにリクエストを送信 キャッシュから取得 読み込み先が攻撃者のサーバに変わっている
解法例 ステップ⑧ 検証完了 ▪ トップページアクセスすることで、攻撃者が用意したスクリプトが作動
対策 ▪ キャッシュさせない ←難しい ▪ キャッシュキー/アンキャッシュキーをきっちり把握し、悪意のあるレスポンスを発生させない 魔法のような対策はない。地道な情報収集と検証が大事
参考 ▪ Web cache poisoning ▪ https://portswigger.net/web-security/web-cache-poisoning