カジュアルにセキュリティテスト
はじめよう2016-07-16
Aki@nekoruriXtone ピザ会
qpstudy 2016.07
とは言ったけど
• まあ人として普通 SQL インジェクション対策とかはしてるよね。• 「ふつー Prepared Statement だし」• 「ふつー ORM だし」• 「ふつー NoSQL だし」?
動的クエリからは逃げられない
• テーブル名• 時系列データ
• カラム名• 検索条件• ソート条件
• IN 句• 数が変わる
• 複雑な複合クエリの高速化
人はミスをする
• どの ORM/DB ライブラリでも両方を用意している• パラメータ化される変数• パラメータ化されず展開される変数
人はミスをする
• どの ORM/DB ライブラリでも両方を用意している• パラメータ化される変数• パラメータ化されず展開される変数
• MyBatis3 の場合• #{absolutelySafeValue} ──── パラメータ化• ${absolutelySafeValue} ──── 直接展開
人はミスをする
• どの ORM/DB ライブラリでも両方を用意している• パラメータ化される変数• パラメータ化されず展開される変数
• MyBatis3 の場合• #{absolutelySafeValue} ──── パラメータ化• ${absolutelySafeValue} ──── 直接展開• どっちがどっちかわかるかぼけー! ( ノ `Д´) ノ彡┻━┻
それテストできるよ
• まあ人として普通テスト書いてるよね。• 自動テストしよう• 自動 CI しよう
「うっかり」から人類を守る 4 文字
• 以下の 4 文字をテストデータの末尾に入れるだけ!かんたん!
'"\;Special thanks to securitytesting slack #sqli members.
テストデータにこの 4 文字を入れる事で
• 基本的に例外でこけます。• 例外に落ちなくても結果が変わってテストがこけます。• 手間はほとんど掛かりません。
どうせテストデータなんてコピペでしょ?• 考えることが減りストレスも減って健康になります。
テストデータにこの 4 文字を入れる事で
• 基本的に例外でこけます。• 例外に落ちなくても結果が変わってテストがこけます。• 手間はほとんど掛かりません。 ← 重要
どうせテストデータなんてコピペでしょ?• 考えることが減りストレスも減って健康になります。
世の中 SQL インジェクションだけじゃない
• はい
セキュリティテスト CI• サービスの力を借りる• VAddy
http://vaddy.net/ja/• Walti
https://walti.io/• 自前できちんとセキュリティテスト• Selenium 等のエンドツーエンドテスト書いていれば、
OWASP ZAP 等の Proxy を挟んで脆弱性診断• Selenium と OWASP ZAP を使った自動脆弱性検査への道
http://www.pupha.net/archives/2467/※ 今自分のところでできているとは言っていない
まとめ
• テストデータの末尾に以下の 4 文字を入れよう
• カジュアルに外部サービスや診断ツールも使おう
'"\;