Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Webアプリのセキュリティ対策入門(仮)
目次
1.はじめに
2.SQLインジェクション
3.クロスサイトスクリプティング(XSS)
4.クロスサイトリクエストフォージェリ(CSRF)
5.今回のまとめ
1.はじめに
今回攻撃対象とするデモアプリ紹介
個人商店のお手軽通販サイトを想定
クオリティについてはお察しください(作成3時間程度)
ログイン機能
レビューを商品別に
書き込み
商品詳細画面
構成:JDK1.7 + Tomcat6.0 + HSQLDB
商...
2.SQLインジェクション
2.SQLインジェクション
システムとして意図しないSQLが実行され、データベースの
内容の盗難・改ざんが行われることを言う。
SQLインジェクション デモンストレーション
想定される被害
1.データベース内の情報改ざん
2.不正ログイン
3.データベース内情報の漏えい(個人情報など)
などなど・・・
SQLインジェクションが発生する仕組み
アプリ
パスワード
ID
DB
ログイン認証
SELECT COUNT(*) FROM USERS WHERE USERID=‘
‘ AND PASSWORD=‘
‘;
ユーザが入力したID
ユーザが入力...
SQLインジェクションが発生する仕組み
アプリ
パスワード
hogePASS ’ OR ‘A’ = ‘A
ID
hogeID
DB
ログイン認証
SELECT COUNT(*) FROM USERS WHERE USERID=‘
‘ AND P...
実際にあったSQLインジェクション
2005年5月に「価格.com」で発生。
・商品情報を管理するデータベースに対してSQLインジェクションが行われた。
・これにより、ホームページの改ざん、メールアドレスが流出し、閉鎖騒動ま
で発展した。
国内...
対策方法
(方法1) 入力された値からクオートなど、SQLインジェクションとなり得る値を
除去する
実装次第で除去漏れが発生するし、何より毎回仕組みを作るのは面倒
(方法2) 先人たちが作った仕組みを使う
実績があり、仕組みを作らなくて済む!楽...
具体的な対策方法
Javaでの例(大体の言語で同等の仕組みがあるので利用すること)
修正前
String sql= “ SELECT COUNT(*) FROM USERS WHERE USERID=‘ “ + userId + “‘ AND ...
3.クロスサイトスクリプティング
3.クロスサイトスクリプティング
入力値をそのまま画面上に出力する事により、意図しない
コードを画面上に出力させること。
XSSと略されることが多い。
クロスサイトスクリプティングデモンストレーション
想定される被害
1.セッションハイジャック(不正ログインなどが可能)
2.ページ書き換えによる不正サイトの構築
3.不正プログラムの強制的なダウンロード
などなど・・・
クロスサイトスクリプティングが発生する仕組み
アプリ
入力値
例えばこんなアプリ
入力値
入力された値を
画面に出力
クロスサイトスクリプティングが発生する仕組み
アプリ
例えばこんなアプリ
ほげ
JavaScriptコードがそのま
ま解釈され、「ほげ」とい
うアラートが出力される
<script>alert(“ほげ”);</script>
画面の書き換えが可...
対策方法
(方法1) 入力された値からHTMLやJavaScriptとして解釈される文字を独力で
除去する
実装次第で除去漏れが発生するし、何より毎回仕組みを作るのは面倒
(方法2) 先人たちが作った仕組みを使う
実績があり、仕組みを作らなくて...
具体的な対策方法
Strutsを使った例
<bean:write name=“hoge” />
4.クロスサイトリクエストフォージェリ
4.クロスサイトリクエストフォージェリ
とりあえずデモンストレーションを見よう!
CSRFやXSRFと略されることが多い。
クロスサイトスクリプティングデモンストレーション
想定される被害
1.意図しない犯行声明の書き込みによる冤罪
などなど・・・
クロスサイトリクエストフォージェリが発生する仕組み
デモンストレーションを用いて説明
実際にあったクロスサイトリクエストフォージェリ
2012年に発生したPC遠隔操作事件の1つ
・小学校への無差別殺人予告が横浜市の意見投稿コーナーに書き込まれ
た事件。
・クロスサイトリクエストリクエストフォージェリで他人に犯行予告を行わせた。
対策方法
・別サイトからのリクエストは受け付けないようにチェックする。
(リファラのドメインチェック、トークンチェックなど)
5.今回のまとめ
5.今回のまとめ
自分で処理を作りこまない事が大事。
先人達が作ったものを利用しよう。
Upcoming SlideShare
Loading in …5
×

Webアプリのセキュリティ対策入門(仮)

@pinebber
社内勉強会用資料

  • Login to see the comments

Webアプリのセキュリティ対策入門(仮)

  1. 1. Webアプリのセキュリティ対策入門(仮)
  2. 2. 目次 1.はじめに 2.SQLインジェクション 3.クロスサイトスクリプティング(XSS) 4.クロスサイトリクエストフォージェリ(CSRF) 5.今回のまとめ
  3. 3. 1.はじめに
  4. 4. 今回攻撃対象とするデモアプリ紹介 個人商店のお手軽通販サイトを想定 クオリティについてはお察しください(作成3時間程度) ログイン機能 レビューを商品別に 書き込み 商品詳細画面 構成:JDK1.7 + Tomcat6.0 + HSQLDB 商品情報は DBで管理
  5. 5. 2.SQLインジェクション
  6. 6. 2.SQLインジェクション システムとして意図しないSQLが実行され、データベースの 内容の盗難・改ざんが行われることを言う。
  7. 7. SQLインジェクション デモンストレーション
  8. 8. 想定される被害 1.データベース内の情報改ざん 2.不正ログイン 3.データベース内情報の漏えい(個人情報など) などなど・・・
  9. 9. SQLインジェクションが発生する仕組み アプリ パスワード ID DB ログイン認証 SELECT COUNT(*) FROM USERS WHERE USERID=‘ ‘ AND PASSWORD=‘ ‘; ユーザが入力したID ユーザが入力したPASS 文字列を連結してSQLを 生成し、DBに対して発行 例えばこんなアプリ
  10. 10. SQLインジェクションが発生する仕組み アプリ パスワード hogePASS ’ OR ‘A’ = ‘A ID hogeID DB ログイン認証 SELECT COUNT(*) FROM USERS WHERE USERID=‘ ‘ AND PASSWORD=‘ ‘; hogeID hogePASS’ OR ‘A’=‘A パスワード部分にインジェクショ ンされたSQLによりPASSWORDの 部分は常にTRUE パスワード認証を回避!
  11. 11. 実際にあったSQLインジェクション 2005年5月に「価格.com」で発生。 ・商品情報を管理するデータベースに対してSQLインジェクションが行われた。 ・これにより、ホームページの改ざん、メールアドレスが流出し、閉鎖騒動ま で発展した。 国内外問わず頻繁に発生しており、直近のIPAへの届出状況(※)によると、未だ にソフトウェアの脆弱性として届出が行われている状況。 ※ソフトウェア等の脆弱性関連情報に関する届出状況[2014年第1四半期(1月~3月)] http://www.ipa.go.jp/security/vuln/report/vuln2014q1.html
  12. 12. 対策方法 (方法1) 入力された値からクオートなど、SQLインジェクションとなり得る値を 除去する 実装次第で除去漏れが発生するし、何より毎回仕組みを作るのは面倒 (方法2) 先人たちが作った仕組みを使う 実績があり、仕組みを作らなくて済む!楽で確実! 却下
  13. 13. 具体的な対策方法 Javaでの例(大体の言語で同等の仕組みがあるので利用すること) 修正前 String sql= “ SELECT COUNT(*) FROM USERS WHERE USERID=‘ “ + userId + “‘ AND PASSWORD=‘ “ + password + “’”; SQLの実行 修正後 String sql = “ SELECT COUNT(*) FROM USERS WHERE USERID= ? AND PASSWORD= ?”; PreparedStatement pst = conn..prepareStatement(sql); 入力値の埋め込み、SQLの実行 PreparedStatementを使用することで、JDBC ドライバによって自動的にエスケープが行 われる!
  14. 14. 3.クロスサイトスクリプティング
  15. 15. 3.クロスサイトスクリプティング 入力値をそのまま画面上に出力する事により、意図しない コードを画面上に出力させること。 XSSと略されることが多い。
  16. 16. クロスサイトスクリプティングデモンストレーション
  17. 17. 想定される被害 1.セッションハイジャック(不正ログインなどが可能) 2.ページ書き換えによる不正サイトの構築 3.不正プログラムの強制的なダウンロード などなど・・・
  18. 18. クロスサイトスクリプティングが発生する仕組み アプリ 入力値 例えばこんなアプリ 入力値 入力された値を 画面に出力
  19. 19. クロスサイトスクリプティングが発生する仕組み アプリ 例えばこんなアプリ ほげ JavaScriptコードがそのま ま解釈され、「ほげ」とい うアラートが出力される <script>alert(“ほげ”);</script> 画面の書き換えが可能!
  20. 20. 対策方法 (方法1) 入力された値からHTMLやJavaScriptとして解釈される文字を独力で 除去する 実装次第で除去漏れが発生するし、何より毎回仕組みを作るのは面倒 (方法2) 先人たちが作った仕組みを使う 実績があり、仕組みを作らなくて済む!楽で確実! 却下
  21. 21. 具体的な対策方法 Strutsを使った例 <bean:write name=“hoge” />
  22. 22. 4.クロスサイトリクエストフォージェリ
  23. 23. 4.クロスサイトリクエストフォージェリ とりあえずデモンストレーションを見よう! CSRFやXSRFと略されることが多い。
  24. 24. クロスサイトスクリプティングデモンストレーション
  25. 25. 想定される被害 1.意図しない犯行声明の書き込みによる冤罪 などなど・・・
  26. 26. クロスサイトリクエストフォージェリが発生する仕組み デモンストレーションを用いて説明
  27. 27. 実際にあったクロスサイトリクエストフォージェリ 2012年に発生したPC遠隔操作事件の1つ ・小学校への無差別殺人予告が横浜市の意見投稿コーナーに書き込まれ た事件。 ・クロスサイトリクエストリクエストフォージェリで他人に犯行予告を行わせた。
  28. 28. 対策方法 ・別サイトからのリクエストは受け付けないようにチェックする。 (リファラのドメインチェック、トークンチェックなど)
  29. 29. 5.今回のまとめ
  30. 30. 5.今回のまとめ 自分で処理を作りこまない事が大事。 先人達が作ったものを利用しよう。

×