Upgrade to Pro — share decks privately, control downloads, hide ads and more …

学生から見たOWASP Top10 A1:2017-インジェクション

学生から見たOWASP Top10 A1:2017-インジェクション

OWASP To10 A1

4b5243b5d5f3e18ccc48a1d063adb768?s=128

Koishikura

June 01, 2018
Tweet

More Decks by Koishikura

Other Decks in Technology

Transcript

  1. 学生から見た OWASP Top10 A1:2017-インジェクション 2018/06/01

  2. 自己紹介 • 小石倉 広樹(こいしくら ひろき) • Facebook: https://www. facebook.com/hiroki.koishikura •

    Twitter : @crazytoto795 • メール : crazytoto795@gmail.com ➢ 名古屋工学院専門学校 情報総合学科 4年 ➢ OWASP Nagoya Board Member
  3. WHO is • これからセキュリティを学びたい方 • セキュリティに興味が出てきた方 Webアプリケーションの脆弱性のうち、OWASP Top10で常に1位をキープしている 「インジェクション」について、学生の目線で解説します。

  4. Agenda 1.インジェクションとは? 2.OWASP Top10 A1:2017-インジェクション 3.学生が活用した OWASP Top10 A1:2017 4.SQLインジェクションのデモ

    5.おわりに
  5. 注意事項 • 脆弱性テストは、インターネットに接続していないロ ーカル環境で⾏ってください。 特に、インターネット上のサイトに対し、興味本位で の脆弱性テストは、絶対にしないでください。

  6. Agenda 1.インジェクションとは? 2.OWASP Top10 A1:2017-インジェクション 3.学生が活用した OWASP Top10 A1:2017 4.SQLインジェクションのデモ

    5.おわりに
  7. 1.インジェクションとは インジェクション攻撃とは、コンピュータプログラムが無効なデータを処理し た場合に出現するバグを、攻撃者が悪用し不正な命令を実行する攻撃手法であ る。 出典:Wikipedia SQLインジェクション、NoSQLインジェクション、OSコマンドインジェクシ ョン、LDAPインジェクションといったインジェクションに関する脆弱性は、 コマンドやクエリの一部として信頼されないデータが送信される場合に発生し ます。攻撃コードはインタープリタを騙し、意図しないコマンドの実行や、権 限を有していないデータへのアクセスを引き起こします。

    出典:OWASP Top10 【インジェクション攻撃とは】 【インジェクションの影響】
  8. 対策がされていない世界だったら・・・? • 学生証を出したら名前が違う • ツイッターで勝手にツイートされていた • あなたの戸籍が無くなっていた • おにぎりの値段が5000兆円になっていた •

    学校が全日数欠席になっていた 1.インジェクションとは
  9. Agenda 1.インジェクションとは? 2.OWASP Top10 A1:2017-インジェクション 3.学生が活用した OWASP Top10 A1:2017 4.SQLインジェクションのデモ

    5.おわりに
  10. 2.OWASP Top10 A1:2017-インジェクション

  11. 2.OWASP Top10 A1:2017-インジェクション

  12. 2.OWASP Top10 A1:2017-インジェクション

  13. 2.OWASP Top10 A1:2017-インジェクション

  14. Agenda 1.インジェクションとは? 2.OWASP Top10 A1:2017-インジェクション 3.学生が活用した OWASP Top10 A1:2017 4.SQLインジェクションのデモ

    5.おわりに
  15. 3.学生が活用した OWASP Top10 A1:2017 • 会社で作ったツールが、「このままではSQLインジェ クションを受ける可能性がある」と指摘された。 • 学校で、簡単なログインして認証するユーザーデータ ベースを保持するチャットツールを公開した所、何者

    かによってデータベースを改変されてしまった。 こんなシチュエーションで活用できます!
  16. 3.学生が活用した OWASP Top10 A1:2017 課題 SQLインジェクションが可能 なサービスがある。こいつを セキュアなサービスにして提 出しろ。 プリペアードステートメント

    (静的プレースホルダ)を理解する!
  17. 3.学生が活用した OWASP Top10 A1:2017 STEP 1 OWASP Top10 A1:2017の分割 ①脆弱性の

    ポイント ②攻撃シナリオ の例 ④参考資料 ③防止方法
  18. 3.学生が活用した OWASP Top10 A1:2017 STEP 2 ①脆弱性発見のポイント:解読 また、組織は静的ソースコード解析ツール (SAST)と動的アプリケー ションテストツール

    (DAST)をCI/CDパイプラインに導入できます。こ れにより、新たに作られてしまったインジェクション欠陥を稼働環境に 展開する前に検出できます。 次のような状況では、アプリケーションはこの攻撃に対して脆弱です: • ユーザが提供したデータが、アプリケーションによって検証、フィ ルタリング、またはサニタイズされない。 • コンテキストに応じたエスケープが行われず、動的クエリまたはパ ラメータ化されていない呼出しがインタープリタに直接使用される。 • オブジェクト・リレーショナル・マッピング(ORM)の検索パラ メータ に悪意を持ったデータが使用され、重要なレコードを追加で 抽出し てしまう。 • 悪意を持ったデータを直接または連結して使う。例えば、動的クエ リ、コマンド、ストアド・プロシージャにおいて構文に悪意を持っ た データを組み合わせる形でSQLやコマンドが組み立てられる。 より一般的なインジェクションとしては、SQL、NoSQL、OSコマンド、 オブジェクト・リレーショナル・マッピング(ORM)、LDAP、および EL 式(Expression Language)またはOGNL式(Object Graph Navigation Library)のインジェクションがあります。コンセプトはすべ てのインタープリタで同じです。ソースコードをレビューすれば、イン ジェクションに対してアプリケーションが脆弱であるか最も効果的に検 出できます。そして、すべてのパラメータ、ヘッダー、URL、Cookie、 JSON、SOAP、およびXMLデータ入力の完全な自動テストも効果 的です。 A.脆弱なケース B.インジェクションの種類 C.テストツール
  19. 3.学生が活用した OWASP Top10 A1:2017 STEP 3 ①脆弱性発見のポイント:脆弱性の特定 A.脆弱なケース 次のような状況では、アプリケーションはこの攻撃に対して脆弱です: •

    ユーザが提供したデータが、アプリケーションによって検証、フィルタリング、 またはサニタイズされない。 • コンテキストに応じたエスケープが行われず、動的クエリまたはパラメータ化され ていない呼出しがインタープリタに直接使用される。 • オブジェクト・リレーショナル・マッピング(ORM)の検索パラメータに悪意を 持ったデータが使用され、重要なレコードを追加で抽出し てしまう。 • 悪意を持ったデータを直接または連結して使う。例えば、動的クエリ、コマンド、 ストアド・プロシージャにおいて構文に悪意を持ったデータを組み合わせる形で SQLやコマンドが組み立てられる。 ここら辺の用語の内容ができてないから攻撃で きちゃうんじゃね?
  20. 3.学生が活用した OWASP Top10 A1:2017 STEP 4 ②攻撃シナリオの例:SQLインジェクションの想定 “where uid =

    ‘or ‘1’ = ‘1’ -- ’ and pw = ‘ ’“ 大変なことになってしまうのでは?
  21. STEP 5 ③防止方法、④参考資料:SQLインジェクションの防止 3.学生が活用した OWASP Top10 A1:2017

  22. STEP 5 ③防止方法、④参考資料:SQLインジェクションの防止 3.学生が活用した OWASP Top10 A1:2017 【要約】 ①プリペアードステートメント(静的プレースホルダ )

    を使用する。 ②ストアドプロシージャを使用する。 ③エスケープする。 ④バリデーション(妥当性検査)を実施する。 ただし、あくまでも保険と考える。
  23. STEP 5 ③防止方法、④参考資料:SQLインジェクションの防止 3.学生が活用した OWASP Top10 A1:2017 Parameterized Query Examples

    SQL Injection is best prevented through the use of parameterized queries. The following chart demonstrates, with real-world code samples, how to build parameterized queries in most of the common web languages. The purpose of these code samples is to demonstrate to the web developer how to avoid SQL Injection when building database queries within a web application. パラメータ化されたクエリの例 SQLインジェクションは、 パラメータ化されたクエリを使用するこ とで最も効果的に防止されます 。 次の図は、実際のコードサンプ ルを使用して、一般的なWeb言語のほとんどでパラメータ化された クエリを構築する方法を示しています。 これらのコードサンプルの 目的は、Webアプリケーション内でデータベースクエリを構築する 際にSQLインジェクションを回避する方法をWeb開発者に実証する ことです。
  24. STEP 6 対策の実施 3.学生が活用した OWASP Top10 A1:2017 $sql = “select

    email from account_t where uid = :userid and pw = :password ”; $st->bindValue(“:userid”,$uid); $st->bindValue(“:password”,$pw); $st->execute();
  25. Agenda 1.インジェクションとは? 2.OWASP Top10 A1:2017-インジェクション 3.学生が活用した OWASP Top10 A1:2017 4.SQLインジェクションのデモ

    5.おわりに
  26. 4.SQLインジェクションのデモ OWASP BWA デモ • OWASP BWA(Broken Web Application)とは •

    “既知の脆弱性を持ったいろいろなアプリケーションを稼働させる仮想マ シンを提供します。” • ようするに、意図的に脆弱性を持たせたWebアプリケーションを複数導入 した状態のUbuntu(Linuxのディストリビューションの1つ)を仮想マシン イメージにしたものです。 • https://www.owasp.org/index.php/OWASP_Broken_Web_Applications_Project
  27. Agenda 1.インジェクションとは? 2.OWASP Top10 A1:2017-インジェクション 3.学生が活用した OWASP Top10 A1:2017 4.SQLインジェクションのデモ

    5.おわりに
  28. 3.おわりに • OWASP Top10 A1:2017-インジェクションを活用すると、 「とりあえずこれをやっておけ」という指針が示されてい るため、何をすべきか容易に分かる。 • ただ、学生の立場で読むと、カタカナ多すぎて目が回って しまった。

    • しかし、セキュリティに楽しさを見いだすことができた。