エンジニアKのセキュリティ日誌(OWASP ZAP , BurpSuite -> BadStore)

2017年11月13日

こちらは、Webに関連するエンジニア向けの記事です。
当社のWeb関連技術の公開と採用活動のために掲載しています。

(2017年11月13日更新)

皆さんはじめまして。新人エンジニアのKと申します。
9月からWebアプリケーションセキュリティについて勉強しています。
こちらでは、BurpSuiteを使用してサンプルWebアプリケーションの脆弱性診断を
行った時の内容を日誌としてまとめております。
稚拙ではありますが、ご一読いただければ幸いです。

  • 実行環境
    - Windows 10 Home 64bit … ホストOS
    - Oracle VM VirtualBox … 仮想化ソフト
    - BadStore 2.1.2 … ゲストOS (練習用Webアプリケーション同梱)
    - BurpSuite … 脆弱性診断ツール (手動)
    - OWASP ZAP … 脆弱性診断ツール (自動)

  • 参考書籍 (著者敬称略)
    - 徳丸 浩
    『体系的に学ぶ安全なWebアプリケーションの作り方』(SBクリエイティブ, 2011)
    - 上野 宣
    『Webセキュリティ担当者のための脆弱性診断スタートガイド』(翔泳社, 2016)

2017年9月27日

  • 作業内容
    - 体系的に学ぶ安全なWebアプリケーションの作り方 P.456~467
    - Vagrant + CentOS + Apache(httpd) で構築したサーバと
     FireFoxブラウザ間の通信をOWASP ZAP で監視
    - 脆弱性診断スタートガイド P.122~202
    - BadStore へのOWASP ZAP による監視、攻撃

  • 作業メモ
    - VirtualBoxからBadStore起動
     -> Linux2.4ベース?
    - Firefox
     ・「接続設定」-> 「手動でプロキシを設定」(ポート番号を80以外に)
     ・OWASP ZAPで証明書生成
      -> 「証明書マネージャ」で認証局証明書としてインポート
    - OWASP ZAPでは診断結果をレポート形式で出力できる
     -> 誤って検知されているものもあるため要精査
    - 動的スキャン
     インジェクション、ディレクトリブラウジング等
    - 静的スキャン
     ヘッダ不備、Cookieのsecure属性不備等

  • 感想
    - 利便性・簡便さばかりに目が行ってしまうと、安全性が皆無になってしまう
     おそれがあることを改めて知った
     個人情報を扱う者として、何事も安全性を優先して考えていきたい
    - 今朝健康診断を受けてきたが、体重が入社時に比べて少し増加していた。
     食べすぎと運動不足に注意していきたいと思った

2017年9月28日

  • 作業内容
    - Webセキュリティ担当者のための脆弱性診断スタートガイド P.203~231
    - OWASP ZAP, BurpSuiteによるbadstoreの脆弱性テスト

  • 学習内容
    - OWASP ZAPでのパラメータ操作
    - 診断リスト作成

  • 作業メモ
    - 診断リスト
     ・項番(No.)
     ・名称(タイトルや画面)
     ・URL,クエリ
     ・パラメータのタイプ
     ・脆弱性

  • 感想
    - badstoreのヒントに即して脆弱性を試してみたが、文字列を入力するたびに
     DBアクセスする部分があり、大量に文字列を入力していくと途中で
     badstoreサーバのプロセスがキルされ始め、応答が返らなくなった
     いわゆるバッファオーバーフロー攻撃である
     入力値の制限やチェックを怠っていると、サービスに大きな影響が
     出かねないということを実感した
    - 診断項目が多く、検出パターンも資料に頼る必要があった
     まとめ方も模索している状態で、慣れるまで少し時間が掛かりそうだ

2017年9月29日

  • 作業内容
    - Webセキュリティ担当者のための脆弱性診断スタートガイド P.231~247
    - OWASP ZAP, BurpSuiteによるbadstoreの脆弱性テスト

  • 作業メモ
    - ペイロード
     -> パラメータの挿入位置を指定
    - Attack type
     ・Sniper … 一つ一つ指定
     ・Battering ram … 指定箇所に同時挿入
     ・PitchFork … ペイロードの全組み合わせ
     ・Cluster Bomb … ペイロードセット^ペイロードの数

  • 感想
    - ペイロードとリクエスト送信タイプ(Attack type)の扱いが難しかった
     Interruptも関係のないリクエストまで止めてしまうため、
     逐次有効・無効を切り替える必要があった
     実際に使用していく中で応用的な使い方も身に付けていきたい

2017年10月2日

  • 作業内容
    - Webセキュリティ担当者のための脆弱性診断スタートガイド P.248~266
    - OWASP ZAP, BurpSuiteによるbadstoreの脆弱性テスト
    - 脆弱性診断リストの作成

  • 作業メモ
    - 診断方法は別途資料を参考とする
     ・スタートガイド内記載URLの遷移先
      -> 書籍内記載のため詳しい所在は控えさせていただく
     ・Webアプリケーション脆弱性診断ガイドライン
      -> GitHubの上野宣氏のリポジトリに置かれている
    - マークダウン記法の注意点
     #1つ -> 大見出し(月)
     #2つ -> 中見出し(日付)
     #3つ -> 小見出し(‘作業内容’ , ‘診断メモ’ 等)
     __(半角スペース2つ) -> 改行

  • 感想
    - 脆弱性へのアプローチが多く、自分でパターンを考えると絶対に抜けが出ると感じた
     今は資料の内容を一通り試し、慣れてきたら少し方法を変えて試行してみたい

2017年10月3日

  • 作業内容
    - Webセキュリティ担当者のための脆弱性診断スタートガイド P.232~266
    - OWASP ZAP, BurpSuiteによるbadstoreの脆弱性テスト
    - 脆弱性診断リストの作成
    - Wiresharkを用いたパケットの監視

  • 作業メモ
    - ターゲットとなるネットワークアダプタを指定
     -> キャプチャスタート
     -> ある程度取ったら停止し内容を確認

  • 感想
    - TCPやTTLという単語自体は専門学校時代に情報処理試験の勉強で何度か
     見たことはあったが、実際に監視ソフトなどを用いてパケットを
     見たことはなかった。
     最初は少し手間取ったが、徐々にパケットの見方が理解できた。
     TCP/IPのハンドシェイクについても習ってはいたが、実際のパケットを見ると
     別の種類のパケットも大量に流れていて、対応させるのが非常に難しかった。
     Webアプリケーションを扱う上では避けて通れない箇所なので、不明な点は
     一つ一つ確実に潰していきたい。

2017年10月4日

  • 作業内容
    - Webセキュリティ担当者のための脆弱性診断スタートガイド P.248~288
    - BurpSuite,WiresharkによるBadStoreの監視

  • 作業メモ
    - WiresharkでBadStore側からのSYN-ACKパケットやACKパケットは取得できたが、
     本体側からのSYNパケットが取得できなかった
     -> プロキシ(Burp,ZAP)経由の有無に拘らず同様の事象が発生
      原因は後ほど調査予定

  • 感想
    - 脆弱性をいくつか発見できたものの、それをどのようにまとめるかが難しい
     脆弱性報告診断書の書式はSymantec等でサンプルが出ているためそれらを
     参考にしたいと考えているが、経営サイド、開発サイド向けの両方を作成する
     必要があるため、情報の粒度の選定に時間が掛かりそうだと感じた

2017年10月5日

  • 作業内容
    - Webセキュリティ担当者のための脆弱性診断スタートガイド P.248~288
    - BurpSuite,WiresharkによるBadStoreの監視

  • 作業メモ
    - WiresharkでSYNパケットが取れない -> 原因はまだ不明
    - セッションフィクセーションを実行した際、BurpSuiteで
     リクエストを確認
     -> Set-Cookieヘッダフィールドがない
     => Cookieヘッダフィールドはあった -> 同義?

  • 感想
    - テキストに載っているパラメータと実際のパラメータで、名称などに
     微妙な差異があった。
     すぐには分からなかったが、状況等から判断して同一の内容であると
     推測してリクエストを編集・送信してレスポンスを確かめた。
     想定されていた脆弱性が出ず、影響を確認できないことが稀にあるので
     注意深くレスポンスを見ていきたい。

2017年10月6日

  • 作業内容
    - Webセキュリティ担当者のための脆弱性診断スタートガイド P.248~288
    - BurpSuite,WiresharkによるBadStoreの監視

  • 作業メモ
    - Ajax使用箇所(発送先の国名)
     -> 文字列長のチェックをしていない
     => でたらめな文字列を打ち込むことで動作を停止できる -> DoS攻撃

  • 感想
    - Ajaxでは画面の遷移なしに通信が可能だが、想定外の値を入れ続けられる
     仕組みになっていると停止してしまう可能性がある。
     想定外の値を入れられないよう、文字数制限やエスケープなどの対策を
     施す必要がある。
     また、文字列を入力する項目は特に攻撃対象になりやすいので、自分が
     Webアプリケーションを作る際には一番気を付けたいと思う。

2017年10月10日

  • 作業内容
    - Webセキュリティ担当者のための脆弱性診断スタートガイド P.248~288
    - BurpSuite,WiresharkによるBadStoreの監視
    - O’REILLY 『Web API: The Good Parts』 P.1~18

  • 作業メモ
    - ログイン/アウト機能がに不備があるため、全体的にアクセスしづらい
    - OSコマンドインジェクション脆弱性がある部分には基本的に
     XSS脆弱性も存在する?

  • WiresharkでSYNパケットが取れない原因は現時点でまだ不明
     -> PCもう一台必要?
      おそらくホスト側で取れていない

  • 感想
    - 最初にbadstoreを動かした時には全く気付かなかった脆弱性や、
     不必要な情報の公開などに気が付けるようになってきた。
     このペースで今週末、長引いても来週水曜日までに脆弱性報告書を
     まとめられるようにしたい。
    - 脆弱性の学習が終わった後、フレームワークやAPIについての
     学習があるため、予習としてWebAPIのテキストを読み始めた。
     APIについては言葉だけ知ってはいたが、実際どのようなものか
     把握していないので、まずはしっかりテキストを読み進めていきたい。

2017年10月11日

  • 作業内容
    - Webセキュリティ担当者のための脆弱性診断スタートガイド P.248~288
    - BurpSuite,WiresharkによるBadStoreの監視
    - O’REILLY 『Web API: The Good Parts』 P.19~29

  • 作業メモ
    - SYNパケットは同一端末から送られているため、キャッチできない可能性が濃厚
    - BadStoreの全ページにおいて、HTTPSのページにHTTPでアクセス可能

  • 感想
    - 今回はほとんど脆弱性を発見することができなかった
     脆弱性が多く、埋もれてしまっている脆弱性があるかもしれない
     もう少し詳細にURLやパラメータを探っていきたい

2017年10月12日

  • 作業内容
    - Webセキュリティ担当者のための脆弱性診断スタートガイド P.248~288
    - BurpSuite,WiresharkによるBadStoreの監視
    - O’REILLY 『Web API: The Good Parts』 P.29~42

  • 作業メモ
    - セッションIDのうち1個が他のパラメータから推測可能
    - BurpのRepeaterから、改行文字をパラメータに投入
     -> 一部の処理において、エラーメッセージにperser.pmのフルパスが出力
     => ディレクトリトラバーサル等に利用可能

  • 感想
    - クリックの繰り返しや改行文字の挿入など、思わぬところで気付いた
     脆弱性が多かった
     また、すでに把握している脆弱性についても、前回とは異なる箇所で
     発見することができた
     この調子で残りの脆弱性も見つけていきたい

2017年10月13日

  • 作業内容
    - Webセキュリティ担当者のための脆弱性診断スタートガイド P.248~288
    - BurpSuite,WiresharkによるBadStoreの監視
    - O’REILLY 『Web API: The Good Parts』 P.42~57

  • 作業メモ
    - SQLインジェクションを利用してパスワード入力を回避した上で管理者権限を取得
     -> 管理者専用メニューを発見

入力文字列

[ユーザID]'--

=> select x,y,z from xxxdb where userid = ' [ユーザID]'-- AND passwd = '';
                                                       ^
                                                       ここでコメントアウト

=> select x,y,z from xxxdb where userid = '[ユーザID]' -- ユーザIDのみで検索
  • 感想
    - 発見数自体は少なかったが、致命的な脆弱性を見つけることができた
     今回は練習用のプログラムであるため、実際に被害が出ることはないが、
     もし本番環境で今回のような脆弱性が見つかるようなことがあった場合は
     命取りになると感じた
     Webアプリケーションを作る際には、今回発見したような脆弱性への対策は
     確実に行いたい

2017年10月16日

  • 作業内容
    - Webセキュリティ担当者のための脆弱性診断スタートガイド P.276~297
    - BurpSuite,WiresharkによるBadStoreの監視
    - 脆弱性診断報告書の作成(エグゼクティブサマリー)

  • 学習内容
    - CVSSv3 (共通脆弱性評価システム)
    - CWE (共通脆弱性タイプ一覧)

  • 作業メモ
    - IPA「共通脆弱性評価システムCVSS v3概説」より引用

    ・基本評価基準 (BM : Base Metirics)
     1. 攻撃元区分 (AV: Attack-Vector)
     2. 攻撃条件の複雑度 (AC: Attack-Complexity)
     3. 必要な特権レベル (PR: Privileges-Required)
     4. ユーザ関与レベル (UI: User-Interaction)
     5. スコープ (S: Scope)
     6. 機密性への影響 (C: Confidentiality-Impact)
     7. 完全性への影響 (I: Integrity-Impact)
     8. 可用性への影響 (A: Availability-Impact)

  • 感想
    - テキストおよびSymantecのサンプル等を参考に報告書の作成を開始したが、
     CVSSの評価基準やスコア、CWEなど重要なポイントを逐一参照して
     進めているため、作成に時間が掛かっている。
     解説もスクリーンショットをとる、個別の対策を考えるなど、方法を
     模索しているが、今回のサンプルWebアプリの脆弱性の総数が多いため、
     こちらもかなり時間が掛かると見込まれる。

2017年10月17日

  • 作業内容
    - Webセキュリティ担当者のための脆弱性診断スタートガイド P.276~297
    - BurpSuite,WiresharkによるBadStoreの監視
    - 脆弱性診断報告書の作成(エグゼクティブサマリー)

  • 作業メモ
    - スコープ : Authorization Scope
     脆弱性の影響が及ぶ範囲
     当該スコープで発生した影響が他のスコープに影響を及ぼす
     (例: SQLインジェクション,XSS)場合、
     「スコープ変更あり」となり、変更なしの場合と比べてスコアが上昇する。

  • 感想
    - テキストや報告書のサンプルを元に目次や文章構成を整えることができたが、
     CVSSv3のスコアを出す際にスコープがどの程度の範囲に及ぶか事例別に
     把握する必要があるため、算出に時間が掛かっている。
     また、脆弱性について解説する際に、まだ十分に理解できていない部分も
     あるため、逐時テキストやJVNのサイト等を調べつつ自分なりに分かりやすくした
     説明文を作っている。

2017年10月18日

  • 作業内容
    - Webセキュリティ担当者のための脆弱性診断スタートガイド P.276~297
    - BurpSuite,WiresharkによるBadStoreの監視
    - 脆弱性診断報告書の作成(エグゼクティブサマリー)

  • 作業メモ
    - Markdownで画像表示

    ![タイトル](画像のパス,URL)
    

    - SQLインジェクション
     ->CWE-89 : Improper Neutralization of Special Elements
      used in an SQL Command (‘SQL Injection’)
      => 『 SQLコマンドに使用される特殊文字の不適切な中和[不活化]
      (‘SQLインジェクション’) 』

  • 感想
    - 報告書の作成にMarkDownを使用しているが、解説のためにスクリーンショットを
     載せたほうが分かりやすく解説できると思い、画像を載せる方法を調べた。
     スクリーンショットがうまく表示できるかわからなかったが、PDFに変換するツール
     ではきれいに縮小して画像を表示することができた。

2017年10月19日

  • 作業内容
    - Webセキュリティ担当者のための脆弱性診断スタートガイド P.276~297
    - BurpSuite,WiresharkによるBadStoreの監視
    - 脆弱性診断報告書の作成(エグゼクティブサマリー)

  • 学習内容
    - CWE (共通脆弱性タイプ一覧)
    - CVSSv3 (共通脆弱性評価システム)

  • 作業メモ
    - OSコマンドインジェクション
     -> CWE-78 『Improper Neutralization of Special Elements
      used in an OS Command (‘OS Command Injection’)』

  • 感想
    - CVSSスコアをIPAの概説を参考にして算出したものをExcelの
     ワークシートにまとめているが、各判断基準別、脅威の度合いで値が大きく
     異なっており、概説のページとExcelのワークシートを交互に確認するのに
     時間がかかった。
     まだスコアを出せていない脆弱性が残っているので、しばらくはスコアのまとめに
     時間を費やすことになるかもしれない。

2017年10月20日

  • 作業内容
    - Webセキュリティ担当者のための脆弱性診断スタートガイド P.276~297
    - BurpSuite,WiresharkによるBadStoreの監視
    - 脆弱性診断報告書の作成(エグゼクティブサマリー)

  • 学習内容
    - CWE (共通脆弱性タイプ一覧)
    - CVSSv3 (共通脆弱性評価システム)

  • 作業メモ
     - ディレクトリリスティング
      -> CWE-538 『File and Directory Information Exposure』
      -> CWE-548 『Information Exposure Through Directory Listing』

  • 感想
    - ディレクトリリスティングをhttpd.confや.htaccessで’Indexes’の設定を
     変えて抑えようと試みたが、BadStoreのhttpdの再起動ができず、有効性を検証
     できなかった。
     通常であれば動作するはずなので、対策として報告書に記入したが、本来であれば
     十分検証したうえで載せるべきであるため、以後同様の事例があった場合には気を
     付けたいと思う。

2017年10月23日

  • 作業内容
    - Webセキュリティ担当者のための脆弱性診断スタートガイド P.276~297
    - BurpSuite,WiresharkによるBadStoreの監視
    - 脆弱性診断報告書の作成(エグゼクティブサマリー)

  • 学習内容
    - CWE (脆弱性タイプ一覧)
    - CVSSv3 (共通脆弱性評価システム)

  • 作業メモ
    - エラーメッセージからの情報露出
     -> CWE-209 『Information Exposure Through an Error Message』

  • 感想
    - 先日Google Chromeがバージョン62になり、非HTTPSページでのテキスト入力に
     警告が出るようになったとのことで、試しにいくつかのサイトのサイト内検索を
     やってみた。すると、検索欄に文字を入れようとしたところでURL表示欄のところに
     「保護されていません」という警告が出てきた。
     Googleの公式ブログでも、「保護された通信(HTTPS通信)の利用率が高い」ことを
     理由に、今回のアップデートで警告表示をデフォルトにした旨が書かれていたので、
     HTTPSがもう標準になりつつあると感じた。
     証明書についてはまだ理解できていない点も多々あるが、セキュリティを学ぶ中で
     確実に覚えていきたい。

2017年10月24日

  • 作業内容
    - Webセキュリティ担当者のための脆弱性診断スタートガイド P.276~297
    - BurpSuite,WiresharkによるBadStoreの監視
    - 脆弱性診断報告書の作成(エグゼクティブサマリー)
    - 体系的に学ぶ 安全なWebアプリケーションの作り方

  • 学習内容
    - CWE (共通脆弱性タイプ一覧)
    - CVSSv3 (共通脆弱性評価システム)

  • 作業メモ
    - CWE
     CWE-264 『Permissions, Privileges, and Access Controls』
     CWE-307 『Improper Restriction of Excessive Authentication Attempts』
     CWE-613 『Insufficient Session Expiration』
     CWE-640 『Weak Password Recovery Mechanism for Forgotten Password』
    - Markdown
     表で画像を整列可能

  • 感想
    - 先日から探していたCVSSのスコア算出ツールがIPAのサイト内にあったので
     利用したところ、ブラウザとExcelの切り替えが少なくなった分報告書をまとめる
     スピードが上がった。
    - 今回はセッションやパスワードの管理に関する脆弱性についてまとめたが、普段
     通販サイトなどを見ていてもログアウト機能のないものを見かけることが無いため
     事例がほぼ皆無であり、解説や対策をまとめるのに時間がかかっている。
     普段何気なく利用できている機能が、いかに複雑な状態のもとで管理できているかを
     実感できた。

2017年10月25日

  • 作業内容
    - Webセキュリティ担当者のための脆弱性診断スタートガイド P.276~297
    - BurpSuite,WiresharkによるBadStoreの監視
    - 脆弱性診断報告書の作成(エグゼクティブサマリー)
    - 体系的に学ぶ 安全なWebアプリケーションの作り方

  • 学習内容
    - CWE (共通脆弱性タイプ一覧)
    - CVSSv3 (共通脆弱性評価システム)

  • 作業メモ
    - CWE
     CWE-334 『Small Space of Random Values』
     CWE-384 『Session Fixation』
     CWE-1004 『Sencitive Cookie Without ‘HttpOnly’ Flag』

  • 感想
    - 今回はクッキーやセッションIDの脆弱性についてまとめたが、この問題は
     先月からセキュリティについて学んでいる中で最も苦手だと感じていた部分
     であった。
     特にセッションIDについては、具体的にどのような値を利用すれば安全か、
     セッションIDに乗せるべきでない情報は何か、という点について確実な情報が
     なく、自分なりに対策を考えてみたものの、よく考えると対策としてどうなのか
     というものばかりになってしまった。
     簡単に対策の取れる部分と取れない部分の差が大きく、実装をどれだけ確実に
     行えるかが、問題が起きた際の対処に大きく影響すると感じた。

2017年10月26日

  • 作業内容
    - Webセキュリティ担当者のための脆弱性診断スタートガイド P.276~297
    - BurpSuite,WiresharkによるBadStoreの監視
    - 脆弱性診断報告書の作成(エグゼクティブサマリー)
    - 体系的に学ぶ 安全なWebアプリケーションの作り方

  • 学習内容
    - CWE (共通脆弱性タイプ一覧)
    - CVSSv3 (共通脆弱性評価システム)

  • 作業メモ
    - CWE-620 『Unverified Password Change』

  • 感想
    - 発見された脆弱性についてほぼ報告書にまとめ終わり、表記ゆれや抜け漏れが
     無いかを最後に確認した。
    - 脆弱性の研修を始めてまもなく2か月になるが、今回こうして報告書にまとめていく
     作業の中で、ある程度の対策を立てられるレベルまで脆弱性を理解することが
     できるようになったと感じている。
     今後は本格的にWebアプリケーションを作っていくことになるが、今回学習した
     内容を活かし、安全に作りこめるようにしていきたい。

あとがき

セキュリティ学習の成果物として、脆弱性報告書のサンプルを作成しております。
以下のリンクから閲覧できますので、ご参考にしていただければ幸いです。

脆弱性報告書サンプル


フォームズ編集部
オフィスで働く方、ネットショップやホームページを運営されている皆様へ、ネットを使った仕事の効率化、Webマーケティングなど役立つ情報をお送りしています。