OWASP Top 10 A5_2017 アクセス制御の不備

OWASP Top 10 A5_2017 アクセス制御の不備

2019/03/07(木)に開催した OWASP Evening Okinawa #11 の発表資料です。
Speaker: シーエー・アドバンス 稲福 真悟様
https://owasp-okinawa.doorkeeper.jp/events/87084

30378bb847308912c4727c8a8d6c8cf3?s=128

OWASP Okinawa

March 07, 2019
Tweet

Transcript

  1. OWASP Top 10 A5_2017 アクセス制御の不備 どうしてアクセス制御の不備を気にしないといけないんですか…? 1 OWASP Evening Okinawa

    #11
  2. 自己紹介 名前:稲福 真悟 所属:株式会社シーエー・アドバンス 技術統括本部 業務:脆弱性診断 2

  3. 想像してみてください。 3

  4. ECサイトを使っていたとして、 勝手に住所を書き換えられたら嫌ですよね…! 4

  5. 管理しているサービスで、 いつのまにか知らない人が管理権限を持っていたり… 機密情報を勝手に取られたりしたら嫌ですよね…! 5

  6. OWASP Top 10 の5番目に設定されている アクセス制御の不備 とは、 攻撃者が不備を突いてリソースや管理者権限を奪取する、 サービス内のユーザー情報を取られたり書き換えられたりするなど、 アクセス制御に不備があることについて説明しています。 6

  7. https://www.owasp.org/images/2/23/OWASP_Top_10-2017%28ja%29.pdf A5_2017 アクセス制御の不備 7

  8. 「アクセス制御の不備」はOWASP Top 10 2013の下記がマージされた内容です。 A4 - 安全でないオブジェクトへの直接参照 A7 - 機能レベルのアクセス制御の不足

    8
  9. 安全でないオブジェクトへの直接参照とは、 ・いわゆる認可制御の不備 ・権限を持たないユーザーが情報を参照したり、機能を実行したりできる状態 ・ユーザーが入力するパラメータを改変することにより、利用できないはずの機 能が利用できてしまう 9

  10. 機能レベルのアクセス制御の不足とは、 ・リクエストに対する適切なアクセス制御処理を実施していない ・ログインしていないユーザーが機能を利用可能 ・機微な情報を取得される ※下記のスライドから引用させていただきました。  今だからこそ振り返ろう!OWASP Top 10  https://www.slideshare.net/DaiIcn/owasp-top-10-72778895 10

  11. 脆弱性対策情報のデータベースJVN iPedia https://jvndb.jvn.jp/ にて 「アクセス制御」を検索すると直近では下記の件数が公表されていました。 11

  12. アクセス制御の不備は特別な脆弱性ではなく、 どんなサービスでも作り込んでしまう危険性があります。 https://www.owasp.org/images/2/23/OWASP_Top_10-2017%28ja%29.pdf OWASP Top 10 A5:2017 アクセス制御の不備 のpdfには 次の防止方法が紹介されています。

    12
  13. アクセス制御の不備 防止方法(1/3) 攻撃者がアクセス制御のチェックやメタデータを変更することができず、 信頼できるサーバサイドのコードまたはサーバレスAPIで実施される場合にのみ、 アクセス制御は機能します。 •公開リソースへのアクセスを除いて、アクセスを原則として拒否する。 •アクセス制御メカニズムをいったん実装すると、アプリケーション全体でそれを 再利用する。CORSの使用などは最小限にすること。 13

  14. アクセス制御の不備 防止方法(2/3) •アクセス制御モデルは、ユーザがどのようなレコードでも作成、読取、更新、ま たは削除できるようにするのではなく、レコードの所有権があることを前提とし なければならない。 •アプリケーション独自のビジネス上の制約要求はドメインモデルに表現される必 要がある。 •Webサーバのディレクトリリスティングを無効にし、ファイルのメタデータ (.gitなど)とバックアップファイルがウェブルートに存在しないことを確認す る。

    14
  15. アクセス制御の不備 防止方法(3/3) •アクセス制御の失敗をログに記録し、必要に応じて管理者に警告する(繰返して 失敗しているなど)。 •レート制限するAPIとコントローラは自動攻撃ツールによる被害を最小限に抑え るための手段である。 •JWTトークンはログアウト後にはサーバー上で無効とされるべきである。 •開発者とQAスタッフは、アクセス制御に関する機能面での単体及び結合テストを 取り入れるべきである。 15

  16. くわしくは、OWASP Top 10 2017 のpdfをご確認ください! 16

  17. よくあるアクセス制御の不備の一例をシナリオ形式で紹介いたします。 1.URLの値を操作する 2.URLを書き換える 3.パラメータの値を操作する 4.一般ユーザーが管理ユーザーのリクエストを送る 5.レスポンスに秘密の値が入っていた 6.レスポンスに他のユーザーの機密情報が入っていた 17

  18. 登場人物は、色々なサービスを利用している一般ユーザーAさん。 サービスを利用中に気になるところを見つけます。 18 このURLをいじってアクセスしたらどうなるんだろう…

  19. 1.URLの値を操作する 画像投稿サイトを利用中の一般ユーザーAさん       AさんがアクセスしたときのURL       https://example.com/app/users/99/private/images/ 19 非公開画像の一覧ページのURLに番号が入っているなぁ…

  20. 1.URLの値を操作する 99 がちょっと気になって、 100 に書き換えてアクセスしてみたAさん https://example.com/app/users/100/private/images/ 他のユーザーの非公開画像が表示されてしまった! 20

  21. 2.URLを書き換える 画像投稿サイトを利用中の一般ユーザーAさん https://example.com/app/admin_getappInfo 画像投稿サイトの管理画面にアクセスできてしまった! 21 admin_getappInfo をつけてアクセスするとどうなるんだろう…

  22. 3.パラメータの値を操作する 画像投稿サイトを利用中の一般ユーザーAさん POST /app/users/images/ HTTP/1.1 〜略〜 image_id=1999&action=delete 22 画像を消したときのリクエストに気になる数字があるなぁ…

  23. 3.パラメータの値を操作する POST /app/users/images/ HTTP/1.1 〜略〜 image_id=2000&action=delete 他のユーザーが投稿した画像が消えてしまった! 23 image_idを2000にして送ってみよう…

  24. 4.一般ユーザーが管理ユーザーのリクエストを送る ユーザー同士が交流するサイトを利用中の一般ユーザーAさん 24 昔はサークルの管理人をしていたけど今はもうやめた… あのころはサークルの設定を変えたりできたんだよな… 今、設定を変えるリクエストを送ったらどうなるかな…

  25. 4.一般ユーザーが管理ユーザーのリクエストを送る POST /app/circle/admin/ HTTP/1.1 〜略〜 circle_id=123&action=hidden サークル管理者じゃないユーザーにサークルの設定を変えられてしまった! 25

  26. 5.レスポンスボディに秘密の値が入っていた ユーザー同士が交流するサイトを利用中の一般ユーザーAさん {"user_name": "owatarou", "id": 100, "token": "3kS85den5UQGaMi", "role": "member",

    "mailaddres": "owatarounomail@xxx.co.jp", "birthday": "19660101"} 26 外ユーザーのデータを取ってくるレスポンスの中に… よく見たら、他メンバーのtoken値が入っている… この値を使って退会リクエストを送るとどうなるかな…
  27. { "user_name": "owatarou", "id": 100, "token": "3kS85den5UQGaMi", "role": "member", "mailaddres":

    "owatarounomail@xxx.co.jp", "birthday": "19660101" } 27
  28. 5.レスポンスボディに秘密の値が入っていた POST /app/circle/member/ HTTP/1.1 〜略〜 action=unsubscribe&token=3kS85den5UQGaMi 他ユーザーを退会させることができてしまった! 28

  29. 6.レスポンスボディに機微な情報が入っていた ユーザー同士が交流するサイトを利用中の一般ユーザーAさん {"user_name": "owatarou", "id": 100, "token": "3kS85den5UQGaMi", "role": "member",

    "mailaddres": "owatarounomail@xxx.co.jp", "birthday": "19660101"} 29 よく見たらメールアドレスや生年月日が入っている…?
  30. { "user_name": "owatarou", "id": 100, "token": "3kS85den5UQGaMi", "role": "member", "mailaddres":

    "owatarounomail@xxx.co.jp", "birthday": "19660101" } 30
  31. 6.レスポンスボディに機微な情報が入っていた メールアドレス owatarounomail@xxx.co.jp 生年月日 19660101 他ユーザーの機微な情報が漏れてしまった! 31

  32. さきほどの例はどれもリクエスト/レスポンス上では正常な挙動と同じであるとい うことです。 XSS(クロスサイトスクリプティング)などの場合は、 リクエストに含めたスクリプトタグがレスポンスでエスケープされていないなど の挙動で検出することができます。 32

  33. アクセス制御の不備は、 サービスの仕様と照らし合わせて確認する必要があります。 たとえば、例をもとにテストをする場合はこのような観点になります。 33

  34. URLの値を操作する ・URLの値を操作されても  他ユーザーの情報が表示されないようになっているか? URLを書き換える ・URLを書き換えても管理画面にアクセスできないようになっているか? 34

  35. パラメータの値を操作する ・パラメータの値を操作されても  他ユーザーの画像が削除されないようになっているか? 一般ユーザーが管理ユーザーのリクエストを送る ・一般ユーザーが管理ユーザーのリクエストを送っても  処理が通らないようになっているか? 35

  36. レスポンスに秘密の値が入っていた ・レスポンスに不要な値が入っていないか? レスポンスに他のユーザーの機密情報が入っていた ・レスポンスに他のユーザーの機微な情報が入ってないか? 36

  37. アクセス制御を一つずつ確認していくことは大変かもしれませんが、 不備があるとサービスやユーザーに直接影響が出てきます。 OWSP TOP 10 のpdfには詳細が書かれていますので、こちらもぜひ参考に! https://www.owasp.org/images/2/23/OWASP_Top_10-2017%28ja%29.pdf 37

  38. アイコンは下記を使用させていただきました。 https://qiita.com/tamura__246/items/95fbed927d1c5718d636#fn1 38