OWASP トップ10とは何ですか?
最も重大な Web アプリケーション セキュリティ リスク上位 10 件の順位付けと修正ガイダンスを提供する参照標準である OWASP トップ10 は、開発者やセキュリティ担当者が脅威の状況をより深く理解し、対処するうえで役立ちます。OWASP Foundationの最終的な目標は、安全なソフトウェア開発の文化を育むことを支援することです。Web アプリケーションの開発者と管理者にとって、OWASP トップ10は重要な基本的なセキュリティの参照資料です。これは、より安全な Web アプリを構築するための基盤となります。
OWASP とは?
OWASP(別名OWASP は、ソフトウェアセキュリティの向上を目的とする非営利団体です。OWASP は、教育やトレーニングの提供に加えて、次のようなさまざまな有用な情報セキュリティツールも提供しています:
Zed Attack Proxy (ZAP)– 脆弱性スキャンやペネトレーションテストで広く利用されている、人気の高いオープンソースの Dynamic Application Security Testing(DAST)ツールです。
Dependency-Check– 依存関係内の脆弱性の検出に役立つ、ソフトウェア構成分析(SCA)ツールです。
Dependency-Track– 継続的インテグレーション/継続的デリバリー(CI/CD)環境に統合するよう設計されたサプライチェーン・コンポーネント分析プラットフォームであり、ソフトウェア部品表(SBOM)に基づいてオープンソースおよびサードパーティ・コンポーネントに関連するリスクを特定します。
OWASP の上位 10 のリスクとは何ですか?
OWASP トップ10は、Web アプリケーションにとって最も深刻な10件のセキュリティリスクの一覧です。これは、開発者やセキュリティの専門家向けの啓発文書として作成されています。 Web アプリケーションが直面する脅威と同様に、このリスト自体も随時変化します。たとえば、2013年版のリストは2017年に更新され、OWASP は次回の更新に向けて 2020年3月~5月にデータを収集しました。
では、現在のOWASP トップ10はどのようなリスクで構成されているのでしょうか?以下のとおりです:
1. インジェクション
インジェクション攻撃は、Webアプリの入力フィールド(例:フォームやログイン)を使用してデータがインタープリターに送信されると発生します。インジェクションの最も一般的な形式の1つは、SQLインジェクションです。SQLインジェクション攻撃が発生する典型的な例は次のとおりです。
ログインプロンプトが、ユーザー名の入力を適切に検証またはサニタイズしていません。
データベースにユーザー名とパスワードが平文で保存されており(これはしないでください!)、SQL LIMIT などのコントロールがありません。
通常、Webアプリのログインプロンプトは、次のようなSQLステートメントを実行します
SELECT * FROM Users WHERE name = 'someuser' AND password = 'passwd'
悪意のあるユーザーが、ユーザー名に「user OR 1 = 1」と入力し、任意のパスワードを入力します。
SQL ステートメントは次のようになります
SELECT * FROM Users WHERE name = 'ユーザー' OR 1 = 1 --' AND password = 'passwd'
悪意のあるユーザーが、パスワードで保護されたコンテンツにアクセスします
現在では多くのアプリがその単純なケースを防いでいますが、入力パラメータを受け付けるウェブアプリのあらゆる領域がインジェクション攻撃の対象となる可能性があることを覚えておくことが重要です。
2. 認証の不備
Broken authentication とは、認証メソッドとセッション管理の安全でない実装を指します。Broken 認証 の兆候には、次のようなものがあります。
ブルートフォース攻撃を許可すること
「password」のような脆弱なパスワードを許可すること
平文のパスワード、または脆弱もしくは破られたハッシュ関数でハッシュ化されたパスワードを保存すること
セッション ID と認証トークンの不適切な処理、ローテーション、および無効化
セキュリティ侵害によって認証情報が漏えいするリスクを抑えるために、ユーザーがパスワードを作成する際は、保存する前にソルトを追加し、ハッシュ化する必要があります。パスワードを平文で保存することは、このベストプラクティスに従っていない典型例であり、Google のような大手パブリッククラウド企業でさえこの誤りを犯したことがあります。
さらに、多要素認証(MFA)とレート制限は、総当たり攻撃を受けやすいことなど、不適切な認証に関連するいくつかの問題に対処するのに役立ちます。
3. 機密データの露出
この広範なカテゴリには、保存中またはトランジット中の機密データの不正な露出が含まれます。多くの場合、APIはパスワード、アカウント番号、医療データ、その他の個人を特定できる情報(PII)などの機密データを適切に暗号化して送信しておらず、その結果、侵害のリスクにつながります。
SSL stripingを使用したBasic man-in-the-middle(MITM)攻撃は、機密データのセキュリティ侵害がどのように発生するかを示す例です:
攻撃者がWiFiホットスポットを侵害します
ユーザーが侵害されたホットスポットに接続します
ユーザーはhttps://someinsecuresite.netへの接続を試みます。
攻撃者はプロキシを使用して、ユーザーのリクエストを HTTPS 経由でサーバーに転送します
攻撃者は暗号化を取り除き、HTTP 経由でユーザーに応答を返します。
これで攻撃者は、ユーザーがsomeinsecuresite.netに送信するすべての内容を平文で確認できます。somesecuresite.netのWeb サーバーは、攻撃者のサーバーから受信したリクエストがHTTPSを使用しているため、トラフィックが侵害されていることを認識できません。レスポンスがsomeinsecuresite.netから直接送信されているように見えるため、ユーザーは攻撃に気付きません。
機密データを扱うページを含むすべてのページに HTTP Strict Transport Security(HSTS)を適用することは、機密データの露出のリスクを軽減する1つの方法です。同様に、SSL v3.0 や TLS 1.0 のような脆弱な暗号化の使用を避けることで、ユーザーのセキュリティ向上に役立ちます。さらに、保存データを強力に暗号化することで、データベースが侵害された場合の個人を特定できる情報の漏えいを軽減できます。
4. XML 外部エンティティ(XXE)
Extensible Markup Language(XML)は一般的なデータ構造であり、多くの Web アプリは XML 入力を解析できます。XXE 攻撃は、その解析がどのように行われるかに関連しています。攻撃者は、外部エンティティを指す XML データを送信します。
脆弱な XML パーサーは、その後、外部エンティティに応答を送信し、機密データが公開される可能性があります。たとえば、攻撃者が脆弱な XML パーサーを備えた Web サーバー上の/path/to/super/secret/file.txtにアクセスしたいとします。攻撃は次のようになります。
攻撃者は、この XML を含むリクエストを送信します
<?xml version="1.0"encoding="UTF-8"?>
<!DOCTYPE eggs[ <!ENTITY weakparser SYSTEM "file:///path/to/super/secret/file.txt"> ]> <movies><filmId>&weakparser;</filmId></movies>
2. サーバーはエラーと /path/to/super/secret/file.txt の内容を返します。
5. アクセスコントロールの不備
OWASP トップ10の2番目は認証を扱っていますが、5番目はその後に何が起こるかに関連しています。アクセスコントロールとは、特定の一連のユーザー権限に関連付けられた制限を指します。
OWASP が挙げているアクセスコントロールの不備の具体例には、次のようなものがあります。
アクセス・コントロールを回避するために変更された URL を使用すること。たとえば、userA が net/myapp/myaccount?user=userA
から someinsecuresite.net/myapp/myaccount?user=userB にリンクを変更するだけで userB のアカウント情報にアクセスできる場合です。権限昇格。たとえば、脆弱性や設定ミスによって、ユーザーが管理者アクションを実行できる場合です。
認証されていない状態での特権ページへのアクセス。たとえば、認証されていないユーザーが
net/myapp/super-secret-admin-page
を参照して、通常は認証が必要な特権情報を閲覧できる場合です。メタデータの操作。例としては、アクセス コントロール トークンや Cookie の再利用または改ざん、ならびに JSON Web Token の無効化の悪用が含まれます。
CORS(Cross-Origin Resource Sharing)の設定ミス。CORS の設定ミスの一般的な例として、「localhost」からのリクエストが本番環境の Web アプリケーションとやり取りできるようにしてしまうことが挙げられます。
6. セキュリティ設定のミス
OWASP は、セキュリティの設定ミスがリスト内で最も一般的な問題であると報告しています。デフォルトでは、多くのパッケージが安全でない初期設定で提供されるため、Web 開発者と管理者はそれらを強化する必要があります。さらに、特定の機能を動作させるために設定を変更すると、意図しないセキュリティ上の欠陥につながる可能性があります。
たとえば、デフォルトのパスワードで管理者パネルへのアクセスをデフォルトで許可している場合は、本番環境へのデプロイ前に認証情報を変更する必要があります。同様に、不要なサービスとポートは無効化またはブロックする必要があります。
この OWASP トップ10 の重要なポイントは次のとおりです。アプリのコンポーネントを安全に設定し、セキュリティパッチとアップグレードの適用を確実に行ってください。
7. クロスサイトスクリプティング (XSS)
クロスサイトスクリプティング(別名XSS は、Web アプリが直面する一般的なセキュリティ上の問題です。XSS 攻撃は、クライアント側のスクリプトを Web コンテンツに埋め込みます。これにより、攻撃者がデータを盗んだり、ユーザーのセッションを乗っ取ったり、Web ページに改変されたコンテンツを表示したりできるようになる可能性があります。XSS 攻撃にはいくつかの異なる種類があり、次のものが含まれます。
Reflected XSS - この単純な形式の XSS 攻撃は、非永続型 XSS 攻撃とも呼ばれます。一般的には、正規のサイトを指す悪意のある URL を使用します。この攻撃では、URL に特殊文字(例:HTML コントロール文字)が含まれ、脆弱なページがそれを実行します。
Stored XSS - これらの攻撃は、stored XSS とも呼ばれます。stored XSS の場合、攻撃者によって提供された悪意のあるデータはサーバー側に保存されます。その結果、侵害されたコンテンツがそのページを訪問するすべてのユーザーに表示されます。
Document Object Model(DOM)- based XSS– DOM-based XSS 攻撃は、一般的にエクスプロイトがサーバーに一切触れないという点で独特です。JavaScript のようなフロントエンドコードが悪意のあるスクリプトを実行するために悪用されます。
8. 安全でないデシリアライゼーション
シリアル化は、ストリーミングやデータストレージなどの目的のために、データオブジェクトを特定の形式に変換するために使用されるプロセスです。シリアル化されたデータは、バイナリデータまたはプレーンテキストデータ(JSONやXMLなど)です。デシリアル化は、シリアル化を逆にして、シリアル化されたデータをデータオブジェクトに戻すプロセスです。
シリアル化/デシリアル化プロセスでは、信頼できないソースからのシリアル化データが混在すると問題になる可能性があります。攻撃者はシリアル化データに特定のオペレーションを含める可能性があり、攻撃が成功すると、サーバーはデシリアル化プロセスでそれらを実行します。これは、安全でないデシリアル化が DDoS から権限昇格に至るまでの攻撃に悪用される可能性があることを意味します。
OWASP は、脆弱な PHP ベースのフォーラムアプリケーションを例として使用し、安全でないデシリアライゼーションの良い例を示しています。アプリが、ユーザー ID、ユーザーの役割、およびパスワードハッシュ情報を保存するスーパー Cookie を使用しているとします。攻撃者はCookieを改変して、次のように自身に昇格された権限を付与する可能性があります:
導入前:
a:1:{s:1:"MalicousUser";i:1;s:2:"guest"; i:1;s:1:" fe7pmk43i1wstgqvsyask27g44yxn7qhl6zgkr7ivho1e6lv903xc9sbiq4b6mtx";}
導入後:
a:1:{s:1:"SuperAdmin";i:1;s:2:"admin"; i:1;s:1:" fe7pmk43i1wstgqvsyask27g44yxn7qhl6zgkr7ivho1e6lv903xc9sbiq4b6mtx";}
9. 既知の脆弱性が存在するコンポーネントの使用
このリスクは、その名前が示すとおり、Webアプリ内で脆弱なコンポーネントを使用することです。最新のWebアプリは、さまざまなフレームワーク、ライブラリ、モジュールに依存しています。これらの基盤となるコンポーネントのいずれかにセキュリティ脆弱性がある場合、アプリ全体がリスクにさらされる可能性があります。OWASP トップ10の6番目と同様に、セキュリティパッチとアップグレードを適用することで、ここでも大きな効果が得られます。
10. 不十分なログとモニタリング
試みられた脅威や確認済みの検出 セキュリティ侵害を迅速に検出することは、被害の防止または軽減において重要な要素です。悪意のあるアクティビティには多くの場合固有のパターンがあり、効果的な監視はそれを迅速に検出するのに役立ちます。多くの場合、検出されないセキュリティ侵害はより広範な被害につながるため、このリスクがリストに含まれています。実際、OWASPによると、ほとんどの調査では、データセキュリティ侵害の検出にかかる時間は200日を超えることが示されています。
不十分なロギングとモニタリングの一般的な例には、次のようなものがあります。
ログインやログイン失敗などの重要度の高いイベントを記録しないこと
警告レベル以上のイベントに対するメッセージング、または曖昧なエラーやログメッセージがないこと
サーバー上にのみログをローカルに保存する
セキュリティスキャンでは通知やAlertsはトリガーされません。
攻撃に対するリアルタイムアラートなし
WAF が OWASP トップ10 への対策にどのように役立つか
OWASP トップ10の脅威から Web アプリケーションを安全に保つための万能な解決策は1つではありません。コード、インフラストラクチャの設定、および使用するサードパーティコンポーネントにおいて、セキュリティが考慮されていることを確認する必要があります。
とはいえ、Web アプリケーションファイアウォールを使用すると、Web アプリのセキュリティ保護に伴う手間を大幅に軽減できます。OWASPによるWAFの定義では、XSSやSQL Injectionsのような攻撃を軽減する一般的なユースケースが挙げられています。
では、このような場合に WAF は具体的にどのように役立つのでしょうか?適切に設定された WAF は、悪意がある可能性のあるリクエストを検出してブロックできます。Fastly’s Next-Gen WAF などのソリューションで、デフォルトの検出機能とカスタマイズ可能な機能を組み合わせ、さらに Edge Cloud Platform の機能を活用することで、OWASP トップ10に対する強力なカバレッジを実現できます。
OWASP の脅威を Fastly で解決するためのより詳細なガイダンスと実際の事例については、ホワイトペーパーをご覧ください。




