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
EN
Uploaded by
Hiroshi Tokumaru
549 views
introduction to unsafe deserialization part1
安全でないデシリアライゼーション入門基礎編です。PHPを前提として、クラスのコンストラクタ・デストラクタ、シリアライズ・デシリアライズから、脆弱なスクリプトと攻撃方法までを解説します
Technology
◦
Read more
0
Save
Share
Embed
Embed presentation
1
/ 19
2
/ 19
3
/ 19
4
/ 19
5
/ 19
6
/ 19
7
/ 19
8
/ 19
9
/ 19
10
/ 19
11
/ 19
12
/ 19
13
/ 19
14
/ 19
15
/ 19
16
/ 19
17
/ 19
18
/ 19
19
/ 19
More Related Content
PPTX
Sslp101
by
stebee19
PDF
2019年度若手技術者向け講座 インデックス
by
keki3
PPTX
Salome-Meca簡単な例題:水圧を受ける軸対称円筒の弾性解析
by
stebee19
PDF
Elastic Cloudを活用!!ゼロトラストセキュリティの「はじめの一歩」
by
Hibino Hisashi
PPTX
Css2014 ruo ando_2014-10-23-01
by
Ruo Ando
PPTX
PHP Object Injection入門
by
Yu Iwama
PPTX
脆弱性は誰のせい? PHP、MySQL、Joomla! の責任やいかに
by
Hiroshi Tokumaru
PDF
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
by
JPCERT Coordination Center
Sslp101
by
stebee19
2019年度若手技術者向け講座 インデックス
by
keki3
Salome-Meca簡単な例題:水圧を受ける軸対称円筒の弾性解析
by
stebee19
Elastic Cloudを活用!!ゼロトラストセキュリティの「はじめの一歩」
by
Hibino Hisashi
Css2014 ruo ando_2014-10-23-01
by
Ruo Ando
PHP Object Injection入門
by
Yu Iwama
脆弱性は誰のせい? PHP、MySQL、Joomla! の責任やいかに
by
Hiroshi Tokumaru
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
by
JPCERT Coordination Center
Similar to introduction to unsafe deserialization part1
PDF
PHPにないセキュリティ機能
by
Yasuo Ohgaki
PPTX
PHPにないセキュリティ機能
by
Yasuo Ohgaki
PPTX
PHPにないセキュリティ機能
by
Yasuo Ohgaki
PDF
PHPの今とこれから2019
by
Rui Hirokawa
PDF
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
by
Hiroshi Tokumaru
PPTX
Phpのinterfaceを使う
by
Hidetaka Okamoto
PDF
PHPカンファレンス2014セキュリティ対談資料
by
Yasuo Ohgaki
PPTX
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
by
Hiroshi Tokumaru
PPTX
XXE、SSRF、安全でないデシリアライゼーション入門
by
Hiroshi Tokumaru
PDF
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
by
Hiroshi Tokumaru
PDF
ソースコード検査に耐えるコードとは?
by
Yasuo Ohgaki
PPTX
安全なPHPアプリケーションの作り方2016
by
Hiroshi Tokumaru
PPTX
安全なPHPアプリケーションの作り方2014
by
Hiroshi Tokumaru
PDF
Javaにおけるデータシリアライズと圧縮
by
moai kids
PDF
GC in C++0x
by
yak1ex
PDF
PHPの今とこれから2017
by
Rui Hirokawa
PDF
PHPの今とこれから2025 (PHP Conference Japan 2025)
by
Rui Hirokawa
PPTX
安全なWebアプリケーションの作り方2018
by
Hiroshi Tokumaru
PPTX
Php5 4勉強会
by
Yuji Otani
PPTX
セキュアコーディング方法論再構築の試み
by
Hiroshi Tokumaru
PHPにないセキュリティ機能
by
Yasuo Ohgaki
PHPにないセキュリティ機能
by
Yasuo Ohgaki
PHPにないセキュリティ機能
by
Yasuo Ohgaki
PHPの今とこれから2019
by
Rui Hirokawa
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
by
Hiroshi Tokumaru
Phpのinterfaceを使う
by
Hidetaka Okamoto
PHPカンファレンス2014セキュリティ対談資料
by
Yasuo Ohgaki
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
by
Hiroshi Tokumaru
XXE、SSRF、安全でないデシリアライゼーション入門
by
Hiroshi Tokumaru
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
by
Hiroshi Tokumaru
ソースコード検査に耐えるコードとは?
by
Yasuo Ohgaki
安全なPHPアプリケーションの作り方2016
by
Hiroshi Tokumaru
安全なPHPアプリケーションの作り方2014
by
Hiroshi Tokumaru
Javaにおけるデータシリアライズと圧縮
by
moai kids
GC in C++0x
by
yak1ex
PHPの今とこれから2017
by
Rui Hirokawa
PHPの今とこれから2025 (PHP Conference Japan 2025)
by
Rui Hirokawa
安全なWebアプリケーションの作り方2018
by
Hiroshi Tokumaru
Php5 4勉強会
by
Yuji Otani
セキュアコーディング方法論再構築の試み
by
Hiroshi Tokumaru
More from Hiroshi Tokumaru
PPTX
SPAセキュリティ入門~PHP Conference Japan 2021
by
Hiroshi Tokumaru
PPTX
ウェブセキュリティのありがちな誤解を解説する
by
Hiroshi Tokumaru
PPTX
脅威分析の手法によりウェブサーバーにウイルス対策ソフトが必要かを検証する
by
Hiroshi Tokumaru
PPT
SQLインジェクション再考
by
Hiroshi Tokumaru
PPTX
徳丸本VMに脆弱なWordPressを導入する
by
Hiroshi Tokumaru
PPTX
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方
by
Hiroshi Tokumaru
PPTX
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
by
Hiroshi Tokumaru
PPTX
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
by
Hiroshi Tokumaru
PPTX
Railsエンジニアのためのウェブセキュリティ入門
by
Hiroshi Tokumaru
PPTX
秀スクリプトの話
by
Hiroshi Tokumaru
PPTX
デバッガでWordPress本体やプラグインの脆弱性を追いかけてみよう
by
Hiroshi Tokumaru
PPTX
若手エンジニアのためのセキュリティ講座
by
Hiroshi Tokumaru
PPTX
ウェブセキュリティの常識
by
Hiroshi Tokumaru
PDF
ウェブアプリケーションセキュリティ超入門
by
Hiroshi Tokumaru
PPTX
ウェブセキュリティの最近の話題早分かり
by
Hiroshi Tokumaru
PPTX
セキュリティの都市伝説を暴く
by
Hiroshi Tokumaru
PPTX
CMS四天王への攻撃デモを通じて、WordPressの効果的な防御法を学ぼう
by
Hiroshi Tokumaru
PPTX
Webサイトをめぐるセキュリティ状況と効果的な防御方法(WordPress編)
by
Hiroshi Tokumaru
PPTX
Phpcon2015
by
Hiroshi Tokumaru
PPTX
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
by
Hiroshi Tokumaru
SPAセキュリティ入門~PHP Conference Japan 2021
by
Hiroshi Tokumaru
ウェブセキュリティのありがちな誤解を解説する
by
Hiroshi Tokumaru
脅威分析の手法によりウェブサーバーにウイルス対策ソフトが必要かを検証する
by
Hiroshi Tokumaru
SQLインジェクション再考
by
Hiroshi Tokumaru
徳丸本VMに脆弱なWordPressを導入する
by
Hiroshi Tokumaru
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方
by
Hiroshi Tokumaru
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
by
Hiroshi Tokumaru
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
by
Hiroshi Tokumaru
Railsエンジニアのためのウェブセキュリティ入門
by
Hiroshi Tokumaru
秀スクリプトの話
by
Hiroshi Tokumaru
デバッガでWordPress本体やプラグインの脆弱性を追いかけてみよう
by
Hiroshi Tokumaru
若手エンジニアのためのセキュリティ講座
by
Hiroshi Tokumaru
ウェブセキュリティの常識
by
Hiroshi Tokumaru
ウェブアプリケーションセキュリティ超入門
by
Hiroshi Tokumaru
ウェブセキュリティの最近の話題早分かり
by
Hiroshi Tokumaru
セキュリティの都市伝説を暴く
by
Hiroshi Tokumaru
CMS四天王への攻撃デモを通じて、WordPressの効果的な防御法を学ぼう
by
Hiroshi Tokumaru
Webサイトをめぐるセキュリティ状況と効果的な防御方法(WordPress編)
by
Hiroshi Tokumaru
Phpcon2015
by
Hiroshi Tokumaru
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
by
Hiroshi Tokumaru
introduction to unsafe deserialization part1
1.
安全でないデシリアライゼーション(CWE-502)入門 ~基礎編~ EGセキュアソリューションズ株式会社 代表取締役 徳丸 浩
2.
2
3.
OWASP Top 10
– 2017 の内容 3 項番 内容 A1 インジェクション A2 認証の不備 A3 機微な情報の露出 A4 XML外部エンティティ参照(XXE) A5 アクセス制御の不備 A6 不適切なセキュリティ設定 A7 クロスサイトスクリプティング(XSS) A8 安全でないデシリアライゼーション A9 既知の脆弱性のあるコンポーネントの使用 A10 不十分なロギングとモニタリング New
4.
安全でないデシリアライゼーション(CWE-502)とは 4 • クッキー等からシリアライズデータを送り込み、任意のオブジェクトを メモリ内に生成 • オブジェクトが破棄されるタイミングでデストラクタが実行される •
オブジェクトを巧妙に組み合わせることにより、攻撃を実行 © 2016-2020 Hiroshi Tokumaru
5.
PHPのコンストラクタ・デストラクタ超入門 © 2016-2020 Hiroshi
Tokumaru 5
6.
クラス・コンストラクタ・デストラクタ <?php class A { public
function __construct() { // コンストラクタ echo "** コンストラクタ実行n"; // コンストラクタはnewの際に呼ばれる } public function __destruct() { // デストラクタ echo "** デストラクタ実行n"; // デストラクタはオブジェクトが開放された } // 際に呼ばれる } echo "** プログラム開始n"; $a = new A(); echo "** プログラム終了n"; © 2016-2020 Hiroshi Tokumaru 6
7.
クラス・コンストラクタ・デストラクタ <?php class A { public
function __construct() { echo "** コンストラクタ実行n"; } public function __destruct() { echo "** デストラクタ実行n"; } } echo "** プログラム開始n"; $a = new A(); echo "** プログラム終了n"; © 2016-2020 Hiroshi Tokumaru 7 ** プログラム開始 ** コンストラクタ実行 ** プログラム終了 ** デストラクタ実行 実行結果 オブジェクトが参 照されなくなると デストラクタが実 行される
8.
シリアライズ入門 © 2016-2020 Hiroshi
Tokumaru 8
9.
シリアライズとは? • serializeは「一列にする」という意味 • シリアライズは、オブジェクトや配列など、構造を持ったデータを 「バイト列」に変換して、伝送や蓄積しやすい形式にすること •
デシリアライズは、シリアライズしたバイト列を元に戻すこと © 2016-2020 Hiroshi Tokumaru 9
10.
以下のクラスをシリアライズしてみる <?php class B { public
$name; public function __construct($name) { $this->name = $name; // オブジェクトに名前をつける } public function __destruct() { echo "** {$this->name}は破棄されましたn"; // デストラクタを確認 } } $b = new B('hoge'); echo serialize($b), PHP_EOL; © 2016-2020 Hiroshi Tokumaru 10 O:1:"B":1:{s:4:"name";s:4:"hoge";} ** hogeは破棄されました 実行結果 シリアライズ結果
11.
先の結果をデシリアライズする <?php class B { public
$name; public function __construct($name) { $this->name = $name; } public function __destruct() { echo "** {$this->name}は破棄されましたn"; } } $s = 'O:1:"B":1:{s:4:"name";s:4:"hoge";}'; var_dump(unserialize($s)); © 2016-2020 Hiroshi Tokumaru 11 object(B)#1 (1) { ["name"]=> string(4) "hoge" } ** hogeは破棄されました 実行結果 デストラクタが実行された 生成されたオブジェクト
12.
デシリアライズの問題点 • 振り返り – シリアライズ:
オブジェクトや配列などをバイト列に変換する – デシリアライズ: シリアライズ結果から元の形式に戻すこと • 外部から受け取ったバイト列をデシリアライズすると、任意のクラス のオブジェクトが作れる • ただし、クラスは既存のものに限る • オブジェクトをデシリアライズすると、最終的にオブジェクトのデス トラクタが呼ばれる • デストラクタによって悪いことができる場合がある • 攻撃にあたっては、既存のクラス定義の中で「どこまでできるか」が 問題になる © 2016-2020 Hiroshi Tokumaru 12
13.
<?php class C {
// 指定したメールアドレスにデストラクタでメール送信する public $mail; public function __construct($mail) { $this->mail = $mail; } public function __destruct() { system("/usr/sbin/sendmail {$this->mail} < ./template.txt"); } } $c = new C('alice@example.jp'); echo serialize($c), PHP_EOL; 脆弱なスクリプト例(極端な例…まずはシリアライズ側) © 2016-2020 Hiroshi Tokumaru 13 O:1:"C":1:{s:4:"mail";s:16: "alice@example.jp";} 実行結果 シリアライズ結果
14.
<?php class C { public
$mail; public function __construct($mail) { $this->mail = $mail; } public function __destruct() { system("/usr/sbin/sendmail {$this->mail} < ./template.txt"); } } // $s は実際には外部からの文字列 $s = 'O:1:"C":1:{s:4:"mail";s:16:"alice@example.jp";}'; var_dump(unserialize($s)); 脆弱なスクリプト例(デシリアライズ側:正常系) © 2016-2020 Hiroshi Tokumaru 14 object(C)#1 (1) { ["mail"]=> string(16) "alice@example.jp" } 実行結果 デシリアライズ結果 このメールアドレスにメール送信される
15.
<?php class C { public
$mail; public function __construct($mail) { $this->mail = $mail; } public function __destruct() { system("/usr/sbin/sendmail {$this->mail} < ./template.txt"); } } // $s は実際には外部からの文字列 $s = 'O:1:"C":1:{s:4:"mail";s:17:"; cat /etc/passwd";}'; var_dump(unserialize($s)); 脆弱なスクリプト例(デシリアライズ側: 攻撃例) © 2016-2020 Hiroshi Tokumaru 15 object(C)#1 (1) { ["mail"]=> string(17) "; cat /etc/passwd" } 実行結果 デシリアライズ結果。この結果が下記 が実行される system("/usr/sbin/sendmail ; cat /etc/passwd < ./template.txt
16.
/etc/passwd が表示された object(C)#1 (1)
{ ["mail"]=> string(17) "; cat /etc/passwd" } sendmail: fatal: ockeghem(1000): Recipient addresses must be specified on the command line or via the -t option root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync # 以下略 © 2016-2020 Hiroshi Tokumaru 16
17.
安全でないデシリアライゼーション(CWE-502)とは(再掲) 17 • クッキー等からシリアライズデータを送り込み、任意のオブジェクトを メモリ内に生成 • オブジェクトが破棄されるタイミングでデストラクタが実行される •
オブジェクトを巧妙に組み合わせることにより、攻撃を実行 © 2016-2020 Hiroshi Tokumaru
18.
次のステップに向けて • 安全でないデシリアライゼーションの攻撃方法をわかりやすい例で説 明しました • わかりやすい代わりに、ちょっと「わざとらしい」ですね! わざとらしくない例は次回説明する予定です •
チャンネル登録してお待ち下さい (_ _) 徳丸浩のウェブセキュリティ講座 https://j.mp/web-sec-study © 2016-2020 Hiroshi Tokumaru 18
19.
徳丸浩へのお仕事の依頼は EGセキュアソリューションズ株式会社まで https://www.eg-secure.co.jp/ チャンネル登録お願いします 徳丸浩のウェブセキュリティ講座 https://j.mp/web-sec-study © 2020 Hiroshi
Tokumaru 19