OWASP Testing Guide v2

http://www.owasp.org/index.php/OWASP_Testing_Project

ざっと中身を見てみました。270ページもあるので、読み終わる頃には目がしょぼしょぼになります。

SDLC全体でセキュリティ対策をする・・・というように書かれていますが、内容的にはPenetration Testの方法(というよりも攻撃方法かな)がメインです。

あと記述レベルにばらつきがあるなぁとも思いました。

とりあえず、メモを貼り付けておきます。斜め読みだったこともあり、間違っているところもあるかもしれません。


1.Frontispiece
・本文書について(略)

2.Introduction
・SDLC全体で標準・ポリシー・ガイドラインを作ってセキュリティを高める。
・一般的には、技術的な欠陥やPenetrationテストに偏っていることが多い。
・以下をバランスよく。
  MANUAL INSPECTIONS & REVIEWS
  THREAT MODELING
  SOURCE CODE REVIEW
  PENETRATION TESTING

3.OWASP Testing Framework
・SDLC全体でセキュリティを高める。
・開発開始前
  適切なSDLC、ポリシー、標準があるか
  metricsの作成
・要件定義・設計
  セキュリティ要求のレビュー
    ユーザ管理
    認証・認可
    機密性・完全性
    アカウンタビリティ
    セッション管理
    転送セキュリティ
    プライバシー
  設計・アーキテクチャレビュー
  UML作成・レビュー
  脅威モデル作成・レビュー
・実装
  コードウォークスルー・レビュー
    チェックリスト(下記)
    CIA要求との合致
    OWASP Top10
    言語・フレームワーク特有
    業界特有のガイドライン
・ディプロイ
  Penetrationテスト
  設定の確認
・運用
  (APとインフラ)
  運用管理の確認
  定期的なヘルスチェック
  構成管理

4.Penetrationテスト
・これがメイン。
・OWASPのは基本的にblack boxに基づく。
・INFORMATION GATHERING
  TESTING FOR WEB APPLICATION FINGERPRINT
    Webサーバなどの種類・バージョンを調べる。
    HTTPレスポンスヘッダのバナー、レスポンスヘッダの順番、細工されたリクエストへのレスポンスが手掛かり。
    ツール:httprint、Netcraft
  APPLICATION DISCOVERY
    WebAPを発見する。
    DNS逆引き、portスキャン、ググるなど。
    完全なBlackBoxの場合や、隠されたAP探索に使う。
    ツール:nslookup、dig、nmap、wikto、Google、Nessus
  SPIDERING AND GOOGLING
    ページを発見する。
    SpiderツールやGoogleを使う。
    まずい情報が公開されている場合もある。
    ツール:Googlewget、SiteDigger、NTOInsight、BurpSpider、Wikto、Googlegath
  TESTING FOR ERROR CODE
    APやWebサーバ、DB、FWなどのエラーより、構成情報を収集。
  INFRASTRUCTURE CONFIGURATION MANAGEMENT TESTING
    様々なリクエストを投げて、リバースプロキシ、LB、FireWall、WAFなどの存在を調べる。
    これらの脆弱性や管理ツールを通じた攻撃がありうる。
  SSL/TLS TESTING
    脆弱な暗号方式、不正な証明書。
    ツール:Nessus、SSL Digger、nmap
  DB LISTENER TESTING
    Oracleの場合のみ。Portが開いていれば。
    ツール:Integrigy Oracle Listener Security Check、TNS Listener tool、Toad for Oracle
  APPLICATION CONFIGURATION MANAGEMENT TESTING
    サンプルAPなどが残っていないか、HTMLコメント内にまずい情報が出てないか。
    ログは取るべき(ログ内の機密情報、保存場所、ローテート、監視について記述されている)
  FILE EXTENSIONS HANDLING
  OLD, BACKUP AND UNREFERENCED FILES
    拡張子やディレクトリ名から、言語などが判る。
    非公開のファイル(.asa、.ini、.tgz、.bakなど)は、外部から見えない場所に置き、表示しないように設定する。ディレクトリリスティング不可。
    robot.txtも攻撃の参考になる。
    ツール:Nessus、Nikto、wgetcurlGoogle、Sam Spade
・BUSINESS LOGIC TESTING
  金額の改竄、権限外操作、異常なデータ登録など。
  自動検出は困難。仕様の理解が必要。
・AUTHENTICATION TESTING
  DEFAULT OR GUESSABLE (DICTIONARY) USER ACCOUNT
    管理系システムでのデフォルト又はありふれたID/PWの使用
  BRUTE FORCE
    辞書、全探索、ルールベースがある。
    コンパイル済み辞書攻撃(ハッシュを事前取得できる場合)
    ツール:THC Hydra、John the RipperBrutus
  BYPASSING AUTHENTICATION SCHEMA
    認証のすり抜け。
    強制ブラウズ、パラメータ改竄、セッションID推測、(ログインフォームでの)SQLインジェクション
    GrayBoxではソースから攻撃方法が見付かることもある。
    ツール:WebScarab、WebGoat
  DIRECTORY TRAVERSAL/FILE INCLUDE
    挿入箇所を探す(変数名・値など)。
    ../、..\、URL、NUL文字、二重URLエンコードなどを挿入。
    GrayBoxではソースから攻撃対象が探しやすい(ググる方法も)。
    ツール:WebProxy系(Burp Suite、Paros、WebScarab)、grep
  VULNERABLE REMEMBER PASSWORD AND PWD RESET
    パスワードリマインダ機能
      高いセキュリティが要求されるシステムでは、メールアドレスの真正性やメールの機密性のみに依存したの手順を使うべきではない。
      秘密の質問の数、内容、ロックアウトの有無
      パスワード表示の有無、変更の方法
    パスワード記憶機能
      オートコンプリートがOFFになっているか。
      Cookieを使う場合はCookieにパスワードが含まれていないか。
  LOGOUT AND BROWSER CACHE MANAGEMENT TESTING
    どの程度のidle時間で自動ログアウトするか。
    ログアウト後に、SessionIDを再利用できないようになっているか。
    ブラウザキャッシュに重要なデータが含まれていないか。
    ログアウトボタンの配置箇所
・SESSION MANAGEMENT TESTING
  ANALYSIS OF THE SESSION MANAGEMENT SCHEMA
  COOKIE AND SESSION TOKEN MANIPULATION
    パスワードリマインダ、自動ログイン、タイムアウトなどの方式。
    サイトで扱うデータ内容やユーザの使用状況(公共の端末)に照らし合せて適切か?
    セッションID自体の完全性(耐改竄性)・予測困難性。
    セッションIDの構造を調べる(ソースIP、ユーザID/パスワード、時刻などを変えて大量のIDを収集)
    セッションIDのブルートフォース(セッションID有効期間とID空間サイズによっては可能)
    セッションID Cookieの属性(Expires、Secureフラグ、HTTPOnly)
    Cookie種類の洗い出し・役割分析、リバースエンジニアリング、改竄の手順。
    意味がありそうなCookie(IDやFailedLoginAttemptsのような名前の)値の改竄
    値が正の整数値であるCookieを、負の値や上限を超えた値に改竄
    Cookieの期限(expiresや日時と思しき値)の改竄
    ツール:WebScarab、CookieDigger
  EXPOSED SESSION VARIABLES
    セキュア/非セキュア用途で別個のセッションIDが使われているか。
    プロキシ、クライアントキャッシュの制御
    セッションIDの引継ぎ方法(GETじゃない方がよい)
    プロトコルや引継ぎ方法のデグレード攻撃(HTTPS->HTTP、POST->GET)
  TESTING FOR CSRF
    対策(URLにセッションID由来情報を含める、リファラチェック)を紹介。
    ※ その他、ダメダメな記述(テスト方法についての記述が無い!)。
  HTTP EXPLOIT
    HTTP splitting、HTTP smuggling。
    splittingの方は、Location、Set-Cookie等へのCR+LFの挿入を試みる。
・DATA VALIDATION TESTING
  CROSS SITE SCRIPTING
    DOM-Based、Reflected、Stored(Persistent)に分類。
    テスト方法についての記述は無し。
    ツール:CAL9000
  HTTP METHODS AND XST
    許可しているHTTPメソッド(TRACE、PUT、etc.)を調べる。
    ツール:NetCat、OPTIONメソッド
  SQL INJECTION
    Inband、Out-of-band、Inferentialに分類。
    SQLに挿入される変数の洗い出し。
    特殊文字などを挿入しエラー発生が無いか調べる。
    必要ならBlind SQL Injection。SUBSTRING()、ASCII()、LENGTH()などを使用。
    ツール:SQLiX、SQL Power Injector、sqlmap、sqlbftools、SqlDumper、sqlninja
    ORACLE TESTING
      PL/SQL GATEWAYが使用されている場合。
      ResponseのServerヘッダ、NULLテスト、既知のパッケージへのアクセスで見分ける。
      製品そのものに様々な欠陥がある(あった)。
      ツール:SQLInjector、Orascan、NGSSQuirreL
    MYSQL TESTING
      4.0以降 UNION、4.1以降 サブクエリ、5.0以降 Stored Procedure、5.02以降 Triggers
      /*! xxx*/形式のコメントでMySQLであることを識別可能
      \でエスケープ、通常は複数クエリを一度に実行できない。
      @@version、VERSION()、USER()、CURRENT_USER()、DATABASE()などで情報収集。
      5.0以降では、INFORMATION_SCHEMAが利用可能。
      into outfileでSQL実行結果をファイルに落とし、load_file()でそれを読み込むなどの攻撃方法がある(Out-of-band手法)。
      Blind SQL Injectionでは、LENGTH()、SUBSTRING()、BENCHMARK()などを使用。
      ツール:SQL Power Injector、sqlbftools、sqlmap、SqlDumper
    SQL SERVER TESTING
      xp_cmdshell、xp_regread、xp_regwrite、sp_makewebtask、xp_sendmailなどが危険。
      db_name()、@@versionなどで情報収集。
      xp_cmdshellが無効になっていても、有効化できる場合がある。
      OPENROWSETはport scan、saパスワードのクラックなどに使える。
      xp_cmdshellによって、DBサーバにファイルをアップロードできる場合がある。
      Blind SQL Injectionでは、waitforなどを使用。
      ツール:SQL Power Injector、Bobcat、sqlninja、sqlmap
  LDAP INJECTION
    ( | & * などを挿入する。
    ツール:Softerra LDAP Browser
  ORM INJECTION
    Object Relational Mapping Tool。
    HibernateJava)、NHibernate(.NET)、RailsRuby)、EZPDO(PHP)など。
    ORMツールが提供するエスケープ関数を使用していない場合に脆弱。
    SQLインジェクションと同じ。
  XML INJECTION
    XMLのメタ文字(' " < > &)をエスケープしていない場合に脆弱。
    これらのメタ文字を挿入する。
    XMLデータをHTMLに挿入する場面で、XSSを起こさせる攻撃もある。
  SSI INJECTION
    HTTPボディーだけではなくヘッダにも挿入可能。
    HTMLコメントのエスケープをしていない場合に脆弱。
  XPATH INJECTION
    XPATHではACLによる制御がないため、文書全体の検索が可能。
    メタ文字は ' などがある。
    (洗練されたBlind XPath Injection手法がある)。
  IMAP/SMTP INJECTION
    Webmail APに対する攻撃。
    SMTP/IMAPの特定。
    メタ文字は \ ' " @ # ! | CRLF などがある。
  CODE INJECTION
  OS COMMANDING
    system()やServer.Execute()に外部からの変数が挿入される場合。
    Perlのopenでは |(pipe)。
  BUFFER OVERFLOW TESTING
    heap、stack、format string。
    バイナリorソースコードがある場合。
    ツール:OllyDbg、Spike、Brute Force Binary Tester、Metasploit、Stack、ITS4、IDA Pro、
  INCUBATED VULNERABILITY TESTING
    PersistentなXSSのように、システムに永続的にデータを仕込む。
    ファイルアップロード、掲示板など。データの仕込みに、SQLインジェクションや管理ツールが使われることもある。
・DENIAL OF SERVICE TESTING
  NWレベルで対処すべきものだけでなく、APの欠陥が関わっているものがある。
  LOCKING CUSTOMER ACCOUNTS
    ロックアウトはセキュリティと利便性のトレードオフ
    ロックアウト関連の動作により、アカウントの存在が判るか。
    パスワードリマインダ機能でも同じ。
    オンラインでの会員登録が可能で、ユーザがアカウントを選べる場合は、会員登録機能によってアカウントの存否が判るか。
  BUFFER OVERFLOWS
    脆弱性を突いてプロセスを終了させる。
  USER SPECIFIED OBJECT ALLOCATION
    サーバのメモリを大量消費するようなオブジェクト生成処理を実行する。
    AP内部で生成するオブジェクト数を、外部入力変数で制御できる場合や、無制限に商品を格納できるショッピングカートなどが危険。
    数を増やしながら、レスポンスタイムを見る。
  USER INPUT AS A LOOP COUNTER
    ループ処理の実行回数を外部入力変数で制御できる場合などが危険。
    数を増やしながら、レスポンスタイムを見る。
  WRITING USER PROVIDED DATA TO DISK
    APログに外部入力データを記録している場合、大量データを送りつけて、ディスクをパンクさせる。
    リクエストを送りつけて、ディスク空き容量の変化を見る。
    BlackBox手法では、この種のテストは困難。
  FAILURE TO RELEASE RESOURCES
    ファイル(ロック)、メモリ、DB接続などのリソース。
    例外発生時のリソース開放漏れが危険。
    リクエストを送りつけて、リソース使用状況の変化を見る。
    BlackBox手法では、この種のテストは困難。
  STORING TOO MUCH DATA IN SESSION
    非ログイン状態でセッションを利用したり、大量データをセッションに保存するAPでは危険。
    BlackBox手法では、この種のテストは困難。
・WEB SERVICES TESTING
  他のAPと同じだが、WebサービスではXML関連の攻撃が特徴的。
  XML STRUCTURAL TESTING
    Well-formedでないメッセージを利用して、エラーを起こさせる。
    DOM Parserなどリソースを食う処理を利用したDoS攻撃
    巨大なデータを送る(Binary添付なども利用)。
  XML CONTENT-LEVEL TESTING
    Webサービスを利用したSQL/XPathインジェクション、バッファオーバフロー、コマンドインジェクションなど。
    ツール:WebScarab(Web Services Plugin)、MetaSploit
  HTTP GET PARAMETERS/REST TESTING
    上記と同じ(形式がSOAPでないだけ)。
  NAUGHTY SOAP ATTACHMENTS
    SOAP with Attachments、DIME、WS-Attachmentなどで危険なファイルを送り込む。
  REPLAY TESTING
    正規ユーザのWebサービスへのアクセスを、攻撃者がReplayする。
    SSL通信や、Nonce・タイムスタンプによるReplay防止策があるか。
    ツール:Wireshark、TCPReplay、Ethereal
AJAX TESTING
  Attack Surfaceの拡大、内部機能の外部露出、第三者サイトへのアクセス、認証の欠陥、複雑性(C/S両方が絡む)などをもたらす。
  従来型のWebAPと同じ攻撃方法だが、特にCSRFなどに脆弱な場合がある。
  XHRはJavaScript Wormにも使われる。
  HOW TO TEST AJAX
    AJAXでは従来型のWebAPのようなSpideringが困難。
    Proxyツールによる検査が有効。
    AJAX用URLの発見は、HTML/JSのParse、Proxyによる通信監視による。
    JSのデバッグツールも検査に使用できる(FirefoxIE用あり)。
    ツール:Sprajax、VenkmanFireBugScriptaculous's Ghost Train、Squish、JsUnit、MS script Debugger

5.レポーティング(リスクの見積り)
・組織に合せてやり方をカスタマイズすべき。
・Risk = Likelihood * Impact
・STEP 1: IDENTIFYING A RISK
  リストアップ
・STEP 2: FACTORS FOR ESTIMATING LIKELIHOOD
  脆弱性が発見され悪用される可能性。
  攻撃者(Threat Agent)と、脆弱性の分析を行なう。
  Threat Agent Factors
    最悪のケースを想定する。
    スキル、動機、機会、集団の規模のレベル評価
  Vulnerability Factors
    発見の容易さ、悪用の容易さ、脆弱性の認知度合い、攻撃監視のレベル評価
・STEP 3: FACTORS FOR ESTIMATING IMPACT
  技術的、ビジネス上の影響
  ビジネス上の影響の見積りに必要な情報が無い場合、技術的な影響を詳細に見積る。
  Technical Impact Factors
    機密性、完全性、可用性、説明可能性の喪失レベル評価
  Business Impact Factors
    金銭的損失、信用失墜、法律違反、プライバシ侵害のレベル評価
・STEP 4: DETERMINING THE SEVERITY OF THE RISK
  LIKELIHOODとIMPACTをそれぞれ三段階(高中低)評価。
  ビジネス上の影響が見積れれば、技術的な影響よりもビジネス上の影響を用いる。
  最終的に、Critical、High、Medium、Low、Noteの5段階で評価。
・STEP 5: DECIDING WHAT TO FIX
  基本的にはリスクの高い順に対策を講じる。
  対策コストとリスクのバランスを考慮して、対策を講じないものもありうる。
・STEP 6: CUSTOMIZING YOUR RISK RATING MODEL
  factorの追加、レベル評価オプション・点数の変更、factorの重み付けなど。
・レポートの書き方
  以下の構成
  Executive Summary
    経営層向け、リスクレベルを視覚的に示す。
    結論、アクション。
  Technical Management Overview
    技術責任者向け。
    技術的な詳細、評価のスコープ、注意事項、評価方法、脆弱性の要約など。
  Assessment Findings
    技術担当者向け。
    発見された脆弱性の詳細、対策の方法など。
    スクリーンショット、影響を受ける事柄、技術的な説明、解決方法、リスク評価結果などを含む。
  Toolbox
    使用したツール、手法の記述。