この文書は2016年以降更新されていません

OWASP トップ 10 チートシート

OWASP 作成
ジャンプ先: 移動検索
Cheatsheets-header.jpg

はじめに

これは、2013 年版の OWASP トップ 10 プロジェクトに対する開発者向け対策チートシートです。リスクの特定方法を調べられるように、OWASP テストプロジェクトに基づくクイックリファレンスも掲載しています。

OWASP トップ 10 チートシート

プレゼンテーション コントローラー モデル テスト (OWASP テストガイド V4)
A1 インジェクション

レンダー:

  • 適切なコンテンツタイプを設定する。
  • 安全な文字セット (UTF-8) を設定する。
  • 適切なロケールを設定する。

On Submit:

  • 入力フィールドの型と長さを強制する。
  • フィールドを検証し、フィードバックを提供する。
  • オプション選択肢とラジオに含まれているのが送信された値だけであることを確認する。
適切な文字セットを使用して正規化する

適切な文字セットを使用してポジティブ入力値検証を行う

(NR) ネガティブ入力値検証。 (LR) 入力をサニタイズする。

ヒント: ネガティブリスト (たとえば、"script"、"sCrIpT"、"ßCrîpt" などを検索) の更新は、コストの高い常時展開が必要であり、"有害な" 文字列のリストが攻撃者に見破られるため、必ず失敗します。ポジティブ検証は、より簡単で、より速く、一般により安全であるほか、他のどの入力メカニズムよりも更新がはるかに少なくてすみます。

*パラメーター化されたクエリ
  • オブジェクトリレーショナルモデル (休止状態)
  • アクティブレコード設計パターン
  • ストアドプロシージャ
  • エスケープメカニズム (ESAPI のエンコーダーなど)
    • EncodeForLDAP()
    • Encoder.EncodeforOS()

ヒント: すべての SQL インジェクションは、動的 SQL クエリに原因があります。組織内での動的 SQL クエリの禁止を真剣に検討してください。

SQL Injection (OTG-INPVAL-005) LDAP Injection (OTG-INPVAL-006) ORM Injection (OTG-INPVAL-007) XML Injection (OTG-INPVAL-008) SSI Injection (OTG-INPVAL-009) XPath Injection (OTG-INPVAL-010) IMAP/SMTP Injection (OTG-INPVAL-011) Code Injection (OTG-INPVAL-012) Command Injection (OTG-INPVAL-013) Buffer Overflow (OTG-INPVAL-014)

A2 認証とセッション管理の不備 レンダー:
  • ユーザーが認証されていることを確認する。
  • ロールがこのビューに十分であることを確認する。
  • セッション Cookie に "secure" フラグと "HttpOnly" フラグを設定する。
  • CSRF トークンをフォームと一緒に送信する。
設計:
  • 組み込みのセッション管理のみを使用する。
  • セカンダリ SSO / フレームワーク / カスタムセッション ID をネイティブセッションオブジェクトに格納する (追加ヘッダーや Cookie として送信しない)。
  • ユーザーが認証されていることを確認する。
  • ロールがこのアクションの実行に十分であることを確認する。
  • CSRF トークンを検証する。
ロールがデータの作成、読み取り、書き込み、更新、または削除に十分であることを確認する。

ヒント: ユーザーが 1 秒、1 分、または 1 時間あたりに実行できる最大リクエスト数を規制する "governor" の使用を検討してください。たとえば、一般的なバンキングユーザーが 1 分間に 10 件を超える取引を実行するはずはありません。1 秒間に 100 件は危険であり、禁止する必要があります。

Test Role Definitions (OTG-IDENT-001) Test User Registration Process (OTG-IDENT-002) Test Account Provisioning Process (OTG-IDENT-003) Testing for Account Enumeration and Guessable User Account (OTG-IDENT-004) Testing for Weak or unenforced username policy (OTG-IDENT-005) Testing for Credentials Transported over an Encrypted Channel (OTG-AUTHN-001) Testing for default credentials (OTG-AUTHN-002) Testing for Weak lock out mechanism (OTG-AUTHN-003) Testing for bypassing authentication schema (OTG-AUTHN-004) Test remember password functionality (OTG-AUTHN-005) Testing for Browser cache weakness (OTG-AUTHN-006) Testing for Weak password policy (OTG-AUTHN-007) Testing for Weak security question/answer (OTG-AUTHN-008) Testing for weak password change or reset functionalities (OTG-AUTHN-009) Testing for Weaker authentication in alternative channel (OTG-AUTHN-010) Testing for bypassing authorization schema (OTG-AUTHZ-002) Testing for Privilege Escalation (OTG-AUTHZ-003) Testing for Bypassing Session Management Schema (OTG-SESS-001) Testing for Cookies attributes (OTG-SESS-002) Testing for Session Fixation (OTG-SESS-003) Testing for Exposed Session Variables (OTG-SESS-004) Testing for Cross Site Request Forgery (CSRF) (OTG-SESS-005) Testing for logout functionality (OTG-SESS-006) Test Session Timeout (OTG-SESS-007) Testing for Session puzzling (OTG-SESS-008)

A3 クロスサイトスクリプティング (XSS)

レンダー:

  • 適切なコンテンツタイプを設定する。
  • 安全な文字セット (UTF-8) を設定する。
  • 適切なロケールを設定する。
  • すべてのユーザーデータを出力コンテキストに従って出力エンコードする。
  • 入力制約を設定する。

On Submit:

  • 入力フィールドの型と長さを強制する。
  • フィールドを検証し、フィードバックを提供する。
  • オプション選択肢とラジオに含まれているのが送信された値だけであることを確認する。
適切な文字セットを使用して正規化する

適切な文字セットを使用してポジティブ入力値検証を行う

(NR) ネガティブ入力値検証 (LR) 入力をサニタイズする

ヒント: 100% 信用できるデータだけを処理します。それ以外はすべて悪意のあるデータとして拒否してください。

ヒント: HTML エンコードされたデータをデータベースに格納しないでください。これにより、データが別の用途 (Web サービス、RSS フィード、FTP バッチ、データウェアハウス、クラウドコンピューティングなど) に使用されるのを防止できます。

ヒント: OWASP Scrubbr を使用すると、汚染されたデータや敵意のあるデータをレガシデータから消去できます。

Testing for Reflected Cross Site Scripting (OTG-INPVAL-001) Testing for Stored Cross Site Scripting (OTG-INPVAL-002) Testing for DOM based Cross Site Scripting (OTG-CLIENT-001) Testing for JavaScript Execution (OTG-CLIENT-002) Testing for HTML Injection (OTG-CLIENT-003) Testing for Cross Site Flashing (OTG-CLIENT-008)

A4 安全でない直接オブジェクト参照 データが内部の信頼できるソースのものである場合は、データを送信しない。

または

レンダー:

  • 間接ランダムアクセス参照マップ値を送信する。
内部の信頼できるソースからデータを取得する。

または

ランダムアクセス参照アクセスマップから直接値を取得する。

ロールがデータの作成、読み取り、書き込み、更新、または削除に十分であることを確認する。

Testing Directory traversal/file include (OTG-AUTHZ-001) Testing for Insecure Direct Object References (OTG-AUTHZ-004) Testing for Local File Inclusion Testing for Remote File Inclusion

A5 セキュリティ設定のミス Web サーバーとアプリケーションサーバーが強固であることを確認する。

PHP: php.ini で allow_url_fopen と allow_url_include が両方とも無効になっていることを確認する。Suhosin エクステンションの使用を検討する。

Web サーバーとアプリケーションサーバーが強固であることを確認する。

XML: XML スタックによって一般的な Web 攻撃 (リモート XSLT 変換、悪意のある XPath クエリ、再帰的 DTD など) が防止されていることを確認する。XML ドキュメントやクエリを手作業で作成しない。XML レイヤーを使用する。

データベースサーバーが強固であることを確認する。

Fingerprint Web Server (OTG-INFO-002) Fingerprint Web Application Framework (OTG-INFO-008) Fingerprint Web Application (OTG-INFO-009) Test Network/Infrastructure Configuration (OTG-CONFIG-001) Test Application Platform Configuration (OTG-CONFIG-002) Test File Extensions Handling for Sensitive Information (OTG-CONFIG-003) Review Old, Backup and Unreferenced Files for Sensitive Information (OTG-CONFIG-004) Enumerate Infrastructure and Application Admin Interfaces (OTG-CONFIG-005) Test HTTP Methods (OTG-CONFIG-006) Test RIA cross domain policy (OTG-CONFIG-008) Analysis of Error Codes (OTG-ERR-001) Analysis of Stack Traces (OTG-ERR-002)

A6 機密データの露出 設計:
  • 強力な暗号 (AES 128 またはそれ以上) を安全なオペレーションモードで使用する (ECB は使用しない)。
  • パスワードに強力なハッシュ (SHA 256 またはそれ以上) と salt を使用する。
  • 鍵を他のどの資産よりも強力に保護する。
  • すべての Web 通信に TLS 1.2 以上を使用する。
  • 公開 Web サーバーに EV (Extended Validation) 証明書を購入する。

ヒント: 内部でも必ず TLS 1.2 を使用してください。ほとんどのスヌーピングは社内ネットワークの内側で行われます。これは、ダイナマイト漁と同じくらい簡単で反倫理的です。

レンダー:

  • 鍵やハッシュをブラウザーに送信しない。
設計:
  • 強力な暗号 (AES 128 またはそれ以上) を安全なオペレーションモードで使用する (ECB は使用しない)。
  • パスワードに強力なハッシュ (SHA 256 またはそれ以上) と salt を使用する。
  • 鍵を他のどの資産よりも強力に保護する。
  • Web サーバー、データベースサーバー、その他のサーバー、管理ユーザーの間の通信に強力な暗号化を徹底する。

ヒント: 特定の個人情報と機密データだけを必ず暗号化します。漏えいしたり盗まれたりしたら困るか損害が大きいデータを暗号化します。

ヒント: データベースサーバーではなくアプリケーションサーバーでデータを暗号化するのが最善です。

設計:
  • アプリケーションサーバーとその他のサーバー、または管理ユーザーとの通信に強力な暗号化を徹底する。

ヒント: RDBMS データベースの row レベルまたはテーブルレベルの暗号化は使用しないでください。サーバーへの直接アクセスや、アプリケーションの資格情報を使用したネットワーク経由で、何者かにデータがクリアテキストで取得されるおそれがあります。ディスク上では "暗号化" されているにもかかわらず、データがネットワーク上をクリアテキストで流れる可能性さえあります。

Testing for Weak SSL/TLS Ciphers, Insufficient Transport Layer Protection (OTG-CRYPST-001) Testing for Padding Oracle (OTG-CRYPST-002) Testing for Sensitive information sent via unencrypted channels (OTG-CRYPST-003) Test HTTP Strict Transport Security (OTG-CONFIG-007) Testing for Credentials Transported over an Encrypted Channel (OTG-AUTHN-001)

A7 機能レベルのアクセス制御の欠落 設計:
  • すべての非 Web データが Web ルートの外にあることを確認する (ログ、構成など)。
  • PDF や CSV などの実際のファイルへのアクセスを提供するのではなく、オクテット (バイト) ストリーミングを使用する。
  • "guest" の場合も、すべてのページでロールを要求するようにする。

レンダー前:

  • ユーザーが認証されていることを確認する。
  • ロールがセキュリティで保護された URL の表示に十分であることを確認する。

レンダー:

  • CSRF トークンを送信する。
  • ユーザーが認証されていることを確認する。
  • ロールがセキュリティで保護されたアクションの実行に十分であることを確認する。
  • CSRF トークンを検証する。

ヒント: セキュリティで保護されたリソースでも、その Web アプリケーションサーバーが直接提供しないリソースについては、アクセスを制御できません。このため、バイナリオクテットストリーミングを使用して Web アプリケーションサーバーから PDF レポートなどを提供することをお勧めします。

ヒント: "隠し" ディレクトリや "ランダムな" ファイル名がある場所を攻撃者が必ず突きとめると想定して、これらのファイルを、直接リンクされていなくても Web ルート内に保存しないでください。

ロールがデータの作成、読み取り、書き込み、更新、または削除に十分であることを確認する。

Testing Directory traversal/file include (OTG-AUTHZ-001) Testing for bypassing authorization schema (OTG-AUTHZ-002) Testing for bypassing authentication schema (OTG-AUTHN-004)

A8 クロスサイトリクエストフォージェリ (CSRF) レンダー前:
  • ユーザーが認証されていることを確認する。
  • ロールがこのビューに十分であることを確認する。

レンダー:

  • CSRF トークンを送信する。
  • セッション Cookie に "secure" フラグと "HttpOnly" フラグを設定する。
  • CSRF トークンを検証する。
  • ロールがこのアクションの実行に十分であることを確認する。
  • ロールが十分であることを確認する。

ヒント: XSS がある限り、CSRF は常に可能です。必ずアプリケーションから XSS を排除してください。

ロールがデータの作成、読み取り、書き込み、更新、または削除に十分であることを確認する。

Testing for Cross Site Request Forgery (CSRF) (OTG-SESS-005)

A9 既知の脆弱性を持つコンポーネントの使用




Enumerate Applications on Webserver (OTG-INFO-004)

A10 未検証のリダイレクトとフォワード
  • URL リダイレクトパラメーターを使用しないアプリケーションを設計する。

または

レンダー:

  • リダイレクトパラメーターにランダム間接オブジェクト参照を使用する。
  • URL リダイレクトパラメーターを使用しないアプリケーションを設計する。

または

  • ランダム間接参照アクセスマップから直接リダイレクトパラメーターを取得する。
  • (LR) リダイレクトパラメーターのポジティブ検証。
  • (NR) Java – SSO アクセス制御メカニズムが阻害されるので、リクエストをフォワードしない。
  • ロールがデータの作成、読み取り、書き込み、更新、または削除に十分であることを確認する。

Testing for Client Side URL Redirect (OTG-CLIENT-004)

Authors and Primary Editors

Andrew van der Stock vanderaj[at]owasp.org

Ismael Rocha Gonçalves ismaelrg[at]gmail.com

Jorge Correa jacorream@gmail.com

Other Cheatsheets

Developer Cheat Sheets (Builder)

Assessment Cheat Sheets (Breaker)

Mobile Cheat Sheets

OpSec Cheat Sheets (Defender)

Draft Cheat Sheets