Submit Search
SSRF基礎
1 like
325 views
Yu Iwama
SSRFについて社内で発表した際の資料です。 本資料は、作成者の勉強の一環として調査・検証したものになります。間違った解釈をしている場合は、ご指摘いただければ幸いです。
Technology
Related topics:
Information Security
Read more
1 of 26
Download now
Download to read offline
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
More Related Content
PDF
フリーでやろうぜ!セキュリティチェック!
zaki4649
PDF
Twitterのsnowflakeについて
moai kids
PDF
徳丸本ができるまで
Hiroshi Tokumaru
PPTX
Nmapの真実(続)
abend_cve_9999_0001
PDF
SSRF workshop
Ivan Novikov
PPTX
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
Hiroshi Tokumaru
PDF
体系的に学ばないXSSの話
Yutaka Maehira
PDF
DVGA writeup
Yu Iwama
フリーでやろうぜ!セキュリティチェック!
zaki4649
Twitterのsnowflakeについて
moai kids
徳丸本ができるまで
Hiroshi Tokumaru
Nmapの真実(続)
abend_cve_9999_0001
SSRF workshop
Ivan Novikov
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
Hiroshi Tokumaru
体系的に学ばないXSSの話
Yutaka Maehira
DVGA writeup
Yu Iwama
What's hot
(20)
PPTX
CyberChefの使い方(HamaCTF2019 WriteUp編)
Shota Shinogi
PPTX
フリーでできるWebセキュリティ(burp編)
abend_cve_9999_0001
PPTX
Guide to GraalVM (JJUG CCC 2019 Fall)
Koichi Sakata
PPTX
ウェブセキュリティの常識
Hiroshi Tokumaru
PDF
XSS再入門
Hiroshi Tokumaru
PPTX
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
PDF
Amazon EKS上の開発体験を最大化するプレビュー環境の作り方
理弘 山崎
PDF
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
健人 井関
PPTX
PenTesterが知っている危ないAWS環境の共通点
zaki4649
PDF
Spring Boot × Vue.jsでSPAを作る
Go Miyasaka
PDF
とある診断員とSQLインジェクション
zaki4649
PPTX
Cross Site Request Forgery (CSRF) Scripting Explained
Valency Networks
PDF
Burp Suite 2.0触ってみた
Yu Iwama
PDF
Defending against Java Deserialization Vulnerabilities
Luca Carettoni
PDF
ASP.NETの進化とASP.NET Core Blazorの凄さ
Sho Okada
PDF
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
iFunFactory Inc.
PDF
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
PDF
Proxy War
zaki4649
PDF
katagaitai CTF勉強会 #5 Crypto
trmr
PPTX
安全なWebアプリケーションの作り方2018
Hiroshi Tokumaru
CyberChefの使い方(HamaCTF2019 WriteUp編)
Shota Shinogi
フリーでできるWebセキュリティ(burp編)
abend_cve_9999_0001
Guide to GraalVM (JJUG CCC 2019 Fall)
Koichi Sakata
ウェブセキュリティの常識
Hiroshi Tokumaru
XSS再入門
Hiroshi Tokumaru
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
Amazon EKS上の開発体験を最大化するプレビュー環境の作り方
理弘 山崎
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
健人 井関
PenTesterが知っている危ないAWS環境の共通点
zaki4649
Spring Boot × Vue.jsでSPAを作る
Go Miyasaka
とある診断員とSQLインジェクション
zaki4649
Cross Site Request Forgery (CSRF) Scripting Explained
Valency Networks
Burp Suite 2.0触ってみた
Yu Iwama
Defending against Java Deserialization Vulnerabilities
Luca Carettoni
ASP.NETの進化とASP.NET Core Blazorの凄さ
Sho Okada
NDC14 범용 게임 서버 프레임워크 디자인 및 테크닉
iFunFactory Inc.
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
Proxy War
zaki4649
katagaitai CTF勉強会 #5 Crypto
trmr
安全なWebアプリケーションの作り方2018
Hiroshi Tokumaru
Ad
Similar to SSRF基礎
(16)
PDF
クロスサイトリクエストフォージェリ(CSRF)とその対策
JPCERT Coordination Center
PPTX
Aws security ssrf
隆博 田中
PPTX
Aws security ssrf_update
隆博 田中
PPTX
XXE、SSRF、安全でないデシリアライゼーション入門
Hiroshi Tokumaru
PDF
Web担当者が知っておくべきPHPとセキュリティ
Yasuo Ohgaki
PPTX
20161114 よくわかるcsrf
Yoshiki TAKADA
PDF
Azureの上におとりを置いて、世界中から攻撃される様子を観察した話
Ryuki Yoshimatsu
PPT
20090218 第5回「PhpによるWebアプリケーションのセキュリティ入門」
Hiromu Shioya
PPTX
Pythonを使った簡易診断スクリプトの作り方
Yuichi Hattori
PDF
WPSCanによるWordPressの脆弱性スキャン
OWASP Nagoya
PPTX
安全なPHPアプリケーションの作り方2014
Hiroshi Tokumaru
PPTX
クラック・サイト改ざんが発覚!被害の実例・事後対処は?
knowledge_sakura
PDF
Railsやるやる_セキュリティ小話
Naoki Ishibashi
PDF
Cross-Origin Resource Sharing
Hiyou Shinnonome
PDF
CSRF脆弱性について
Masaaki Kakimoto
PDF
TAM 新人ディレクター システムスキルアップ プログラム第1回「サーバ概要」
(株)TAM
クロスサイトリクエストフォージェリ(CSRF)とその対策
JPCERT Coordination Center
Aws security ssrf
隆博 田中
Aws security ssrf_update
隆博 田中
XXE、SSRF、安全でないデシリアライゼーション入門
Hiroshi Tokumaru
Web担当者が知っておくべきPHPとセキュリティ
Yasuo Ohgaki
20161114 よくわかるcsrf
Yoshiki TAKADA
Azureの上におとりを置いて、世界中から攻撃される様子を観察した話
Ryuki Yoshimatsu
20090218 第5回「PhpによるWebアプリケーションのセキュリティ入門」
Hiromu Shioya
Pythonを使った簡易診断スクリプトの作り方
Yuichi Hattori
WPSCanによるWordPressの脆弱性スキャン
OWASP Nagoya
安全なPHPアプリケーションの作り方2014
Hiroshi Tokumaru
クラック・サイト改ざんが発覚!被害の実例・事後対処は?
knowledge_sakura
Railsやるやる_セキュリティ小話
Naoki Ishibashi
Cross-Origin Resource Sharing
Hiyou Shinnonome
CSRF脆弱性について
Masaaki Kakimoto
TAM 新人ディレクター システムスキルアップ プログラム第1回「サーバ概要」
(株)TAM
Ad
SSRF基礎
1.
SSRF 基礎 2020/11/4 (社内公開) 2021/5/24
(外部公開) iwama
2.
目次 ● はじめに ● SSRFとは ●
SSRFの脅威 ● SSRFの対策 ● ハンズオン (CTF) 2
3.
はじめに この資料で取り扱うのはSSRFの基礎です。 業務的観点、AWS以外のクラウド、WAFバイパスには触れませ ん。 ハンズオンにはDocker+Burp(or Fiddler)が必要です。 是非TRYしてみてね! 3
4.
SSRFとは Server-Side-Request-Forgery(SSRF)とは、 標的サーバから、攻撃者の指定した宛先にリクエスト を送信させることを可能にする脆弱性。 4
5.
OWASP Night SSRF基礎より https://speakerdeck.com/hasegawayosuke/ssrfji-chu?slide=6
5
6.
OWASP Night SSRF基礎より https://speakerdeck.com/hasegawayosuke/ssrfji-chu?slide=7
6
7.
SSRFの脅威 ● 本来外部からアクセスできない内部ネットワークに 対するアクセス ● 内部ネットワークに存在するサーバやクライアント への攻撃 ●
(環境がクラウドにある場合)クラウドインスタンス への不正ログイン 7
8.
クラウドメタデータが特に狙われる 8 OWASP Night SSRF基礎より https://speakerdeck.com/hasegawayosuke/ssrfji-chu?slide=7
9.
SSRFの攻撃事例(多数あり) Capital One 個人情報漏えい -
https://piyolog.hatenadiary.jp/entry/2019/08/06/062154 WYSIWYG型エディタのビデオ挿入でSSRF - https://hackerone.com/reports/643622 oEmbedの機能からSSRF - https://hackerone.com/reports/793704 shopify SSRFからインスタンスのルート取得 - https://hackerone.com/reports/341876 米国国防総省 ポートスキャニング - https://hackerone.com/reports/326040 shopify 細工したSVGで内部サーバに保存されている画像ファイルをリーク - https://hackerone.com/reports/223203 9
10.
SSRFに発展する主な脆弱性 ● LFI,RFI ○ 外部ファイルをインクルード出来る場合、SSRFの脆弱性がある。 ●
パストラバーサル ○ ファイルパスだけでなくURLもパース出来る場合、SSRFに発展する。 ● XXE ○ 外部実体参照を利用してSSRFに発展する。 10
11.
コラム: RFIとSSRFの違い ● RFIは外部ファイルをプログラムコードとしてインクルー ドできてしまう。 ●
RFIはSSRFの脆弱性を悪用した結果だが、SSRFがRFIになる わけではない。 ● SSRFはサーバにリクエストを送信させることが可能だが、 リクエストによってコード実行させるという意味ではな い。 11
12.
脆弱なコード例(PHP) <?php $ch = curl_init(); curl_setopt($ch,
CURLOPT_URL, $_GET[“url”]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); $res = curl_exec($ch); curl_close($ch); $doc = new DOMDocument(); $doc->loadHTML($res); $anchors = $doc->getElementsByTagName('a'); foreach($anchors as $anchor) { echo "[-] ".$anchor->nodeValue, PHP_EOL; } ?> 12
13.
脆弱なコード例(PHP) <?php $ch = curl_init(); curl_setopt($ch,
CURLOPT_URL, $_GET[“url”]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); $res = curl_exec($ch); curl_close($ch); $doc = new DOMDocument(); $doc->loadHTML($res); $anchors = $doc->getElementsByTagName('a'); foreach($anchors as $anchor) { echo "[-] ".$anchor->nodeValue, PHP_EOL; } ?> 13 URLを外部から受け取っている。 url=http://127.0.0.1を送信する とサーバ自身にリクエストを送 る。 ※ 後続のloadHTML関数により HTMLコンテンツを返さない場合は エラーになる
14.
脆弱なコード例(Python) 14 import urllib3 from lxml
import etree from flask import Flask, request # 省略 @app.route("/", methods=["GET"]) def index(): url = request.args.get("url", type=str) or None if url: http = urllib3.PoolManager() res = http.request('GET', url) root = etree.HTML(res.data) anchors = root.findall(".//a") for anchor in anchors: print("[-] %s" % anchor.text)
15.
脆弱なコード例(Python) 15 import urllib3 from lxml
import etree from flask import Flask, request # 省略 @app.route("/", methods=["GET"]) def index(): url = request.args.get("url", type=str) or None if url: http = urllib3.PoolManager() res = http.request('GET', url) root = etree.HTML(res.data) anchors = root.findall(".//a") for anchor in anchors: print("[-] %s" % anchor.text) PHPと同じ
16.
SSRFの間違った対策 <?php function validate_url($url) { $parse_url
= parse_url($url); if ($parse_url["host"] !== '169.254.169.254') { print("pass"); return $url; } else { print("block"); } } $url = validate_url($_GET["url"]); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); #... 16 内部IPアドレスをブロックリス トに指定する
17.
SSRFの間違った対策 <?php function validate_url($url) { $parse_url
= parse_url($url); if ($parse_url["host"] !== '169.254.169.254') { print("pass"); return $url; } else { print("block"); } } $url = validate_url($_GET["url"]); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); #... 17 簡単に回避される # validate_url("http://169.254.169.254"); # block # validate_url("http://2852039166"); # pass
18.
SSRFの間違った対策 <?php function validate_url($url) { $parse_url
= parse_url($url); if ($parse_url["host"] !== '169.254.169.254') { print("pass"); return $url; } else { print("block"); } } $url = validate_url($_GET["url"]); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); #... 18 ワイルドカードDNSサービス nip.io など # validate_url("http://magic-169-254-169-254. nip.io"); # pass
19.
SSRFの間違った対策 <?php function validate_url($url) { $parse_url
= parse_url($url); if ($parse_url["host"] !== '169.254.169.254') { print("pass"); return $url; } else { print("block"); } } $url = validate_url($_GET["url"]); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); #... 19 リダイレクトさせる ※ リダイレクト追従する場合のみ # validate_url("https://evil.example.com"); # pass HTTP/2 302 … location: http://169.254.169.254 他にもDNS Rebindingなどがある
20.
SSRFの対策 ● (SSRFに限った話じゃないけど・・・)SSRFに発展する脆 弱性はちゃんと対策する ○ XXE,
パストラ―バサル, LFI, RFIなど ● 外部からURLを受け取らない ○ URLに対応するIDの組み合わせをサーバ側にて保持し、パラメー タに渡される値はIDのみを受け付けるようにする 20
21.
任意のURLを受け取る場合 根本的な対策は難しい。以下の方法が緩和策 ● (ネットワークレベルで)ネットワーク保護 ○ 内部ネットワークやホストは参照できないようにする ●
AWSならIMDSv2を利用する ○ https://dev.classmethod.jp/articles/ec2-imdsv2-release/ ○ 任意のHTTPヘッダーやリクエストメソッドが送れる状況では根本的 対策にはならない。 ■ gopher プロトコル使ったバイパス ■ https://speakerdeck.com/hasegawayosuke/ssrfji-chu?slide= 18 21
22.
SSRFの対策はなぜ難しい? ● URLのパースは難しい。 ○ 過去にバイパスできるケースが報告されている。 ○
A New Era of SSRF - Exploiting URL Parser in Trending Programming Languages! ○ https://gist.github.com/mala/f86a849d15b2d60d7119e05f33b4 b885 22
23.
もっとSSRFを知る ● AWS以外のクラウドメタデータの取得方法を知る ● blind
SSRFの手法を知る ● フィルターバイパスの手法を知る ● URLやファイルパスなどのパス構造やパス解析処理 (パーサー)を知る 23
24.
参考リンク ● payload チートシート ○
https://github.com/swisskyrepo/PayloadsAllTheThings/ tree/master/Server%20Side%20Request%20Forgery ● Cloud metadata URL リスト ○ https://gist.github.com/mrtc0/60ca6ba0fdfb4be0ba499c 65932ab42e 24
25.
ハンズオン環境を用意しました https://github.com/wild0ni0n/ssrf-practice 25 必要環境 ● Docker ● docker-compose 動かし方 $
git clone https://github.com/wild0ni0n/ssrf-practice.git $ cd ssrf-practice $ docker-compose up -d
26.
ハンズオン F&Q Q なにするの? A
Aboutを見てください。FLAGを5つ探してください。 Q FLAGが分からない・・・。 A Hintを用意してます Q クラウドメタデータを窃取してもいいの? A コンテナ内に同じ構成を作ってるだけだから問題ないです! 26
Download