11月3日、「PHPカンファレンス2016に行ってきた!」つづき
安全なPHPアプリケーションの作り方2016
講師:徳丸先生
をメモメモ
・自己紹介
・最近のPHP関連の脆弱性の話題
Joomla(じゅーむら)のけんげん昇格の脆弱性
CVE-2016-8869等はどういう問題か
ユーザー登録できてしまう
管理者権限作れてしまう
→攻撃コードは公開されている
デモ(すこしふるめ)
フォーム1枚
your token nameにトークン設定
ユーザーできている
管理者としてはいれる
何が原因
チェック入っていないものがあった
教訓
使わないコードは削除しましょう
類似の脆弱性
Joomla2.5.2
わざとバリデーションでエラーを起こす
→セッション汚染
・セッション汚染脆弱性
phpMyAdmin CVS2011-2505
セッション変数を外部から変更
・セッション汚染でセッション変数にオブジェクトを突っ込む
parse_strではオブジェクトはできないが
出来る場合がある
・CVE-2016-7125による、オブジェクト・インジェクション脆弱性
デモ
オブジェクトを作る
いつかはデストラクタが実行される
そのデストラクタに悪いコードを書く
PHPスクリプトを書き出す
ディレクトリトラバーサル
→できるかもしれないとおもってやられてしまう
PHPの最新版では直っている(Redhat5,6,7ではアプリで)
・ケータイキットfor Movable type
ゼロデイ脆弱性
日本テレビ個人情報不正アクセスに関する調査報告書
perlからphpスクリプトを生成する
エスケープで対処
・OSコマンドインジェクション対策の決定版はない
PHPの場合 シェルのエスケープ関数 2種類
対策
そもそも使わない
パラメータを直接わたさない
もっとよいほうほう→環境変数けいゆ
ラッパーを作る→引数に攻撃文字列が入ったら? ドゥルーパゲドン→サニタイズする
・正規表現インジェクション
phpMyAdmin CVE 2015-3238
from プリフィックスにNULL文字を入れる
→問題:エスケープしてなかった
バックスラッシュのエスケープが漏れている→手作り危ない
・SQLインジェクション
ZendFramework:1,2,3まで
1はEOLその1の話題
ZendDB 式も書ける→左括弧と右括弧があれば式(^^;)
修正される→仕様の問題
括弧のネスト許容
→再帰的な無限ネスト
最終バージョンでEOLになった
例
PPAPテーブルに
I HAVE A PEN
I HAVE AN APPLE
a を付けて攻撃 20ではエラー
あるもじれつ 実行できる
ZendFramework2には、この問題はない
・XSS
Javascriptの文字列リテラル
イベントハンドらとスクリプト要素でやりかたちがう
対策
過剰エスケープ
HTMLノード
インラインJSONP
関数呼び出しの後にJSON
→動的生成をさげるべき
・安全なWebアプリケーションの作り方
総論は役に立たない
分かりやすく囲う
局所的に解消
防御的プログラミング
引数が想定ない
安全なPHPアプリケーションの作り方2016
講師:徳丸先生
をメモメモ
・自己紹介
・最近のPHP関連の脆弱性の話題
Joomla(じゅーむら)のけんげん昇格の脆弱性
CVE-2016-8869等はどういう問題か
ユーザー登録できてしまう
管理者権限作れてしまう
→攻撃コードは公開されている
デモ(すこしふるめ)
フォーム1枚
your token nameにトークン設定
ユーザーできている
管理者としてはいれる
何が原因
チェック入っていないものがあった
教訓
使わないコードは削除しましょう
類似の脆弱性
Joomla2.5.2
わざとバリデーションでエラーを起こす
→セッション汚染
・セッション汚染脆弱性
phpMyAdmin CVS2011-2505
セッション変数を外部から変更
・セッション汚染でセッション変数にオブジェクトを突っ込む
parse_strではオブジェクトはできないが
出来る場合がある
・CVE-2016-7125による、オブジェクト・インジェクション脆弱性
デモ
オブジェクトを作る
いつかはデストラクタが実行される
そのデストラクタに悪いコードを書く
PHPスクリプトを書き出す
ディレクトリトラバーサル
→できるかもしれないとおもってやられてしまう
PHPの最新版では直っている(Redhat5,6,7ではアプリで)
・ケータイキットfor Movable type
ゼロデイ脆弱性
日本テレビ個人情報不正アクセスに関する調査報告書
perlからphpスクリプトを生成する
エスケープで対処
・OSコマンドインジェクション対策の決定版はない
PHPの場合 シェルのエスケープ関数 2種類
対策
そもそも使わない
パラメータを直接わたさない
もっとよいほうほう→環境変数けいゆ
ラッパーを作る→引数に攻撃文字列が入ったら? ドゥルーパゲドン→サニタイズする
・正規表現インジェクション
phpMyAdmin CVE 2015-3238
from プリフィックスにNULL文字を入れる
→問題:エスケープしてなかった
バックスラッシュのエスケープが漏れている→手作り危ない
・SQLインジェクション
ZendFramework:1,2,3まで
1はEOLその1の話題
ZendDB 式も書ける→左括弧と右括弧があれば式(^^;)
修正される→仕様の問題
括弧のネスト許容
→再帰的な無限ネスト
最終バージョンでEOLになった
例
PPAPテーブルに
I HAVE A PEN
I HAVE AN APPLE
a を付けて攻撃 20ではエラー
あるもじれつ 実行できる
ZendFramework2には、この問題はない
・XSS
Javascriptの文字列リテラル
イベントハンドらとスクリプト要素でやりかたちがう
対策
過剰エスケープ
HTMLノード
インラインJSONP
関数呼び出しの後にJSON
→動的生成をさげるべき
・安全なWebアプリケーションの作り方
総論は役に立たない
分かりやすく囲う
局所的に解消
防御的プログラミング
引数が想定ない