Fukuoka.go#13 + Okayama.goでLTをした

Fukuoka.go#13 + Okayama.goでLTをして(もう1ヶ月前),その時の質問や感想をメモしていたので,ブログに書いておきます. 発表内容は以前のエントリに関するものです.

発表資料

作ったソフトウェア

github.com

いただいた質問・コメント

ブラックリスト方式では,既知の不正クエリのパターンを登録し,パターンに一致したものが検知されます.具体的な不正クエリのパターンとしては,TRANCATEALTER TABLEUNION SELECTなどが挙げられると思います.ブラックリスト方式は定義されたパターンに一致するものが検知されるので,定義から外れた未知のパターンを持つ不正クエリを検知することができません.一方で,ホワイトリスト方式では,Webアプリケーションが発行し得るクエリなどの正常なパターンを定義して,パターンと一致しないものが検知されます.そのため,未知のパターンを持った不正クエリも検知することができます. 今回の方法は未知のパターンを持った不正クエリにも対応し,不正クエリの検知漏れを引き起こさないために,ホワイトリスト方式を採用しました.

テストカバレッジが68.97%でSQLインジェクション脆弱性を持たせた,小規模なWebアプリケーションを実験対象にしました.まず,Webアプリケーションに対してsqlmapを用いてSQLインジェクション攻撃を行い,攻撃の過程で発行された265個の不正クエリを検知できるかの実験を行いました.実験の結果,全ての不正クエリを検知することができました.次に,Webアプリケーションを網羅的に操作して発行された17個の正常なクエリを誤検知しないかの実験を行いました.実験の結果,3個(全体の17.65%)を誤検知しました. このことから,不正クエリの検知精度は高いものの,正常なクエリの一部を誤検知してしまうことがわかりました.

上述したように,正常なクエリの一部を誤検知してしまうことがわかっており,正常なクエリをブロッキングしてしまう可能性があるため,ホワイトリスト方式でのブロッキングは難しいと考えています.そこで,ブロッキングを考えた場合は,ブラックリスト方式とホワイトリト方式の併用を考えています. これは,ブラックリストホワイトリストを両方定義しておき,ブラックリストで検知されたものはブロッキングを行い,ホワイトリストで検知されたものはWarningのクエリとして通知を行うような方法です.

発表しての感想

Fukuoka.goには,これまで何回か参加してきましたが,参加者も多く議論が活発なコミュニティだと感じています.今回の勉強会はOkayama.goとリモートでつないでの同時開催ということで,岡山側からの発表もあり,より議論が盛り上がったように感じました. さて,僕はFukuoka.go,ひいては勉強会での発表は初めてで不安だったのですが,発表後にはたくさんの質問やコメントをいただき,大変勉強になりましたし嬉しかったです.発表を聞いてくださった方々,質疑をしてくださった方々ありがとうございました.

第2回WSA研で「Webアプリケーションテストを用いたSQLクエリのホワイトリスト自動作成」について発表してきました

こちらのエントリは第2回Web System Architecture研究会の予稿です.

著者

  • 野村 孔命, GMOペパボ株式会社 ペパボ研究所
  • 力武 健次, 力武健次技術士事務所
  • 松本 亮介, GMOペパボ株式会社 ペパボ研究所

1. はじめに

Webアプリケーションの脆弱性を利用した攻撃は後を絶たず,Webサービス保有する機密情報を漏洩させるようなセキュリティインシデントが発生している. このような攻撃は,Webアプリケーションが利用するデータベースに対して不正クエリを発行し実行することで行われ,1つの不正クエリの実行が大規模な情報漏洩を引き起こす可能性がある. そのため,不正クエリをデータベースで実行される前に検知し,実行を停止する対策が必要となる. しかし,仕様変更により頻繁にWebアプリケーションの改修が行われるWebサービスにおいて,不正クエリの対策を導入することは機密情報を保護するために重要であるが,対策の導入によって開発やサービスの運営に影響を与えることは本末転倒となるため避けたい. そのため,対策導入時には,開発プロセスやシステム構成への影響を考慮する必要がある. また,Webサービスの実装には,RubyPHPなどの様々なプログラミング言語が用いられることから,Webアプリケーションの実装に依存せず汎用的に利用できる不正クエリへの対策が求められている.

本研究では,開発プロセスやシステム構成への影響を考慮し,Webアプリケーションの実装に依存せずに,データベースに発行される不正クエリを検知する手法の検討を行う.

続きを読む