SQLインジェクションからみるWebアプリケーションセキュリティ入門/sqlinjection

A05d29437a1abc5946ba2bf904dd2441?s=47 fnya
February 21, 2020

 SQLインジェクションからみるWebアプリケーションセキュリティ入門/sqlinjection

A05d29437a1abc5946ba2bf904dd2441?s=128

fnya

February 21, 2020
Tweet

Transcript

  1. SQLインジェクションからみる Webアプリケーションセキュリティ⼊⾨ 2020/2/21

  2. アジェンダ u脆弱性とは uSQLインジェクション基礎知識 uSQLインジェクションで注⽬すべき判例 u必須⽂献 uDemo uおわりに

  3. 脆弱性とは

  4. 脆弱性とは 突然ですが 脆弱性とは なんでしょう︖

  5. 脆弱性とは 脆弱性とは のことです 悪⽤できるバグ 『体系的に学ぶ 安全なWebアプリケーションの作り⽅ 第2版』より

  6. 脆弱性とは u 脆弱性はバグであるため開発者にとって⾝近なもの u しかし、あってはいけないバグ u 経済的損失が⼤きい u⾦銭的補填、迷惑料、機会損失、売上減少、賠償請求 u 法的な要求に違反

    u個⼈情報保護法など u 攻撃インフラ(ボットネット)構築に荷担してしまう u被害者から攻撃者に変わってしまう
  7. SQLインジェクションの基礎知識

  8. SQLインジェクションの基礎知識 n SQLインジェクションとは u データベース呼び出しのプログラム不備による脆弱性のこと n SQLインジェクションは⼤変危険な脆弱性 u 情報漏えい、データの改ざん、任意のコマンドの実⾏等 n

    SQLインジェクションは対策が公開され周知されている u SQLインジェクションの脆弱性は開発者の恥レベル
  9. SQLインジェクションの基礎知識 n SQLインジェクションの仕組み u SQLの標準規格では⽂字列はシングルクォートで囲みます u 以下のSQLで社員番号をパラメータで指定するとします u パラメータに 「1’;DELETE

    FROM 社員 --」を指定すると、 DELETE ⽂が実⾏されてしまいます SELECT * FROM 社員 WHERE 社員番号 =‘パラメータ’ SELECT * FROM 社員 WHERE 社員番号 =‘1’;DELETE FROM 社員 --’
  10. SQLインジェクションの基礎知識 n SQLインジェクションの対策 u 要はSQL⽂を⽂字列連結ではなく、データベースの機能を使⽤ してSQLを組み⽴てます。バインド機構とも⾔います。 u プレースホルダとは以下のSQLの ‘?’ のことです

    対策︓プレースホルダによりSQL⽂を組み⽴てる SELECT * FROM 社員 WHERE 社員番号 = ?
  11. SQLインジェクションの基礎知識 n SQLインジェクションの対策(PHP) <?php try { $dsn = "mysql:host=localhost;dbname=DBName;charset=utf8“; $dbh

    = new PDO($dsn, “user”, ”password”); // 静的プレースホルダを指定 $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); // エラー発⽣時に例外を投げる $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //プリペアドステートメント $sql = “SELECT * FROM 社員 WHERE 社員番号 = ?”; $stmt = $dbh->prepare($sql); //パラメータ $id = “A003”;’ //パラメータのバインド $stmt->bindParam(1, $id, PDO::PARAM_STR); $stmt->execute(); //取得した値の出⼒ while ($row = $stmt->fetch()) { for ($col = 0; $col < 4; $col++) { echo $row[$col]; } echo “¥n”; } } catch (PDOException $e) { echo $e->getMessage(); }
  12. SQLインジェクションの 注⽬すべき判例

  13. SQLインジェクションの注⽬すべき判例① u 概要 X社が運営するECサイトに対して、外部からの不正アクセスにより、最⼤7316件のクレジッ トカード情報が漏洩した。X社は謝罪、対応、調査等の費⽤、売上減少による損害等に関して、 システム開発をしたY社に対して、委託契約の債務不履⾏にもとづき1億円余りの損害賠償を 請求、東京地裁に起訴した。結果、原告が勝訴し、東京地裁は約2262万円の損害賠償⾦を⽀ 払うよう被告に命じた。 u ポイント

    u X社(原告)はセキュリティ対策について特に指⽰はしていなかった u SQLインジェクション対策を怠ったことは重過失であると認定 u 損害賠償について個別契約に定める契約⾦額の範囲内とする損害賠償責任制限があった u Y社(被告)は 約2262万円の損害賠償⾦を⽀払うことになった(売上は約900万円) ・SQLインジェクション対策もれの責任を開発会社に問う判決 | 徳丸浩の⽇記 https://blog.tokumaru.org/2015/01/sql.html ・クレジットカード情報の漏えい事故の責任 東京地判平26.1.23判時2221-71 https://itlaw.hatenablog.com/entry/20141026/1414327403
  14. SQLインジェクションの注⽬すべき判例② u 概要 X社(原告)は,Y社(被告)に対し,Xの提供する⾞・バイクの⼀括査定システムの開発を約 320万円で委託し,平成24年9⽉に納品を受けた。その後Xは,平成28年12⽉に,IPAから,中 国のサイトにシステムの脆弱性に関する情報が掲載されているという指摘を受けた。Y社の調査 の結果,システムにSQLインジェクションの脆弱性が判明。X社は合計923万1600円の 損害賠償を請求し東京地裁に起訴した。結果、X社が勝訴し、東京地裁は約95万円の損害賠償⾦ を⽀払うよう被告に命じた。 u

    ポイント u 実際に被害があった訳でなく、脆弱性があったことに使⽤者責任(不法⾏為)が認められた u X社とY社との「確認書」にセキュリティ対策を⾏う記載があった u 納品から4年も経ち瑕疵担保期間が過ぎているのに責任を認められている ・ SQLインジェクション対策不備の責任 東京地判平30.10.26(平29ワ40110) https://itlaw.hatenablog.com/entry/2019/08/30/221450
  15. 必須⽂献

  16. 必須⽂献 u 以下の資料はWebアプリケーション開発者は必読です u 安全なウェブサイトの作り⽅ 第7版 u https://www.ipa.go.jp/security/vuln/websecurity.html u IPAが無料で公開しているWebアプリケーションセキュリティの⼊⾨書(PDF,

    115⾴) u 別冊「安全なSQLの呼び出し⽅」も必読です u 「徳丸本」として親しまれている以下の書籍も必読でしょう(667⾴) u 体系的に学ぶ 安全なWebアプリケーションの作り⽅ 第2版 u https://www.amazon.co.jp/dp/4797393165/ 画像はAmazonより
  17. Demo

  18. おわりに

  19. おわりに n SQLインジェクション対策は必須です u できていないと常識を疑われます u 被害にあってからでは遅いです n Webアプリケーションの脆弱性対策は他にもあります n

    必須⽂献を参考にして対策を学びましょう u 「安全なウェブサイトの作り⽅」は最低限必須です