OWASP Top10 脆弱性とは?

Tech

2024.12.2

Topics

この記事はNHN テコラス Advent Calendar 2024の2日目の記事です。

はじめに

こんにちは、Jineerです。
今回の記事では、Webアプリケーションのセキュリティを強化するにあたって、重要なガイダンスを提供している「OWASP Top 10」と呼ばれるセキュリティ脅威リストについて説明します。

OWASP Top10とは

OWASP Top10は、OWASP(Open Web Application Security Project)で行われているプロジェクトです。
このプロジェクトは主に悪性ファイルやセキュリティ脆弱性などを研究し、定期的に10大Webアプリケーション脆弱性を選定しています。

つまり、Webアプリケーション脆弱性の中でも悪用されやすい、かつセキュリティ上の影響が大きい脆弱性のリストを選定して、公開するといったプロジェクトです。

OWASP Top10は、以前のプロジェクトで識別されたセキュリティリスクを最新の技術動向に応じて提供するように定期的に更新されます。

公開された脆弱性リストは、Webアプリケーションのセキュリティを向上させるための基準を提示し、Web開発者とセキュリティの専門家がWebアプリケーション上で発生し得るセキュリティ問題を理解するにあたって役に立ちます。
参考:OWASP Top10 – 2021へようこそ

OWASP Top10 脆弱性リスト

 

概要

A01 : Broken Access Control (アクセス制御の不備)

この脆弱性はユーザー、またはシステムが許可されていない方式でリソースにアクセスができる状況を意味します。
アクセスの制御はユーザーに必要な機能とリソースだけを提供するようにするための、重要なセキュリティ原則です。この原則が守られてない状態が「アクセス制御の不備」脆弱性です。

この脆弱性を防御・予防するには、「最小権限の原則」を遵守し、正しい認証・認可の設定を適用してアクセス制御の不備を防ぎましょう!
※最小権限の原則は、ユーザーアカウントに対して、そのユーザーにとって必要な権限だけを与えることを意味します。
参考: アクセス制御や認可制御の欠落

A02 : Cryptographic Failures(暗号化失敗)

この脆弱性は、適切な暗号化が行われていないことにより、機密データが露出されてしまう状況を意味します。
機密データの漏えいやシステム侵害に多く関連する、暗号技術に焦点を当てています。

クレジットカード番号や個人識別情報(PII)などの機微情報に関しては、特に強力な暗号化による保護が必要です。
ただし、これは弱い暗号化アルゴリズムや短い暗号化キーなどによって失敗する可能性があり、これにより攻撃者が機密データを解読しやすくなる可能性があります。

この脆弱性を防御・予防するには、まず、安全な暗号化ライブラリを使用しているか確認しましょう!
また、暗号化の弱点を識別して、修正するために定期的なセキュリティテストの実施を考慮しましょう!
参考: 暗号利用に関するガイドライン・ガイダンス

A03: Injection (インジェクション)

この脆弱性は、ユーザーが入力した値を基にSQLなどの動的クエリを実行するWebアプリケーションにおいて、不正な値を入力されることにより、本来想定していない操作が実行できてしまうことを意味します。

攻撃者は、Webアプリケーションに悪意のある動的クエリやOSコマンドなどを注入することで機密データにアクセスしたり、アプリケーション上で想定していない操作ができます。

インジェクション攻撃の例としては、次のような攻撃があります。
・SQL Injection : SQLクエリを注入することで、データベースを操作することが可能です。
・Cross-Site Scripting(XSS) : 主にJavaScriptベースのブラウザ攻撃で、脆弱なWebページを通じてセッション奪取、クッキー盗用、またはユーザーに対して攻撃を行います。
・Command Injection : OSコマンド等のシステムコマンドを注入することで、サーバーを制御する攻撃です。
・XML Injection : XMLデータに悪意のある内容を挿入し、アクセス権限を得ることが可能です。

この脆弱性を防御・予防するには、サーバー側での入力値の検証及び、プレースホルダによるSQL文の組立てを考慮しましょう!
※プレースホルダとは、正式な値が入るまで一時的に場所を確保しておくために仮に入れておく値を意味します。
参考:安全なSQLの呼び出し方

A04: Insecure Design (安全が確認されない不安な設計)

この脆弱性は、攻撃者が悪用できる不適切なアプリケーションの設計やアーキテクチャの欠陥が存在することを意味します。

例としては、あまりにも詳細なエラーメッセージが生成するアプリケーションがある場合、メッセージの内容によってアプリケーションの環境、またはその他のデータから攻撃者に手がかりを提供してしまい、攻撃に有用な情報を露出させてしまいます。

攻撃者はこういった情報を悪用して、パストラバーサル、またはSQLインジェクションのような他の攻撃を実行することができます。

この脆弱性を防御・予防するには、アプリケーションの設計の初期段階でセキュリティを考慮し、既知の攻撃手法を予防しましょう。
参考:セキュリティ・バイ・デザイン導⼊指南書

A05: Security Misconfiguration (セキュリティの設定ミス)

この脆弱性は、サーバーなどのセキュリティ構成に不適切な設定が施されていることを意味します。
セキュリティの設定ミスには様々な潜在的な脆弱性が含まれていますが、最も一般的なものは下記となります。
・デフォルト設定をそのまま使用する
・アプリケーション上で未使用ページが露出している
・システムで不要なサービス、または機能が有効になっている
・アプリケーションで脆弱なXMLファイルを使用している
・システムでセキュリティパッチが適用されていない

この脆弱性を防御・予防するには、Webサーバーに対して安全な設定をチェックし、セキュリティを強化しましょう!
参考:セキュリティ対策のチェックポイント

A06: Vulnerable and Outdated Components (脆弱で古くなったコンポーネント)

この脆弱性は、フレームワーク、ライブラリ、拡張プログラム、プラグインのようなコンポーネントが最新の状態ではなく、脆弱性が存在することを意味します。

攻撃者は、脆弱な要素があるWebサイトを見つけてマルウェアを伝播したり、フィッシング攻撃を行うなどの攻撃に悪用するため、アップデートは必ず常時行うことが大事です。

この脆弱性を防御・予防するには、Webサイトで使用しているすべてのコンポーネントをリストアップし、各コンポーネントの更新を徹底的に行うとともに、不要なコンポーネントは削除しましょう!

A07: Identification and Authentication Failures (識別と認証の失敗)

この脆弱性は、Webアプリケーションにおける認証に不備が存在することを意味します。
アプリケーション上で悪意のあるユーザーが実際のユーザーになりすますリスクがあります。

例としては、有効期限が設定されていないセッションIDは引き続き実行されるため、セッションIDが漏えい・奪取された場合に攻撃者より正規ユーザーとしてなりすまして悪用される可能性があります。
また、ログインの試行に制限が設定されない場合、自動化された攻撃が成功するまで試行される可能性があります。

この脆弱性を防御・予防するには、セッションの有効期限設定、そして多重認証(MFA)の実装を検討しましょう!
また、適切なパスワードポリシーを設定し遵守することを認識しましょう。

参考:
セッション管理の不備
不正ログイン対策特集ページ

A08: Software and Data Integrity Failures (ソフトウェアとデータの整合性の不具合)

この脆弱性は、色んなリソースから取得したプラグインやライブラリ等を使用しているシステムで、ソフトウェアやデータの整合性を検証しない場合に発生します。

整合性の検証がされていないプラグインやライブラリを使用している場合、攻撃者がそのリスクを悪用して、悪意のあるコードを挿入したり、システムに侵入したりするリスクがあります。

この脆弱性を防御・予防するには、オープンソースのプラグイン・ライブラリなどのインベントリに対して継続的なチェックを行いましょう!

A09: Security Logging and Monitoring Failures (セキュリティログとモニタリングの失敗)

この脆弱性は、監視システムの欠陥によりインシデントのような攻撃活動の認知ができない状況を意味します。
不完全なロギング及び、モニタリング機能はインシデントを見逃してしまい、深刻な被害が発生するまで気づかない可能性があります。

ログインの試行と失敗の履歴は保存する必要があり、サーバーの故障時に備えてログをバックアップする必要があります。

また、ログは正確性が大事なため、監視システムが疑わしいアクティビティを検出したら警告を発生させる等、ログの改ざんに対する保護も必要です。

この脆弱性を防御・予防するには、すべてのログイン履歴(失敗も含む)を記録し、ログのコピーを保持し、監視システムを定期的に確認しましょう!

A10: Server-Side Request Forgery (サーバーサイドリクエストフォージェリ(SSRF))

この脆弱性は、攻撃者がサーバーから内部、または外部リソースに無断でリクエストを送ることができてしまうことを意味します。

SSRF攻撃は、脆弱性があるWebアプリケーションを悪用して、攻撃者がサーバー側のリクエストを利用して意図しない処理を実行させてしまう攻撃です。

攻撃者は、脆弱性のあるサーバーを経由して、普段アクセスができないターゲットシステムに対して、リクエストを送信することで、機微情報にアクセスしたり内部システムに侵入することが可能です。

最近、クラウドサービスとアーキテクチャの複雑さにより、SSRFの深刻度が高まっています。
この脆弱性が悪用された場合、機密データの漏えいや、アプリケーションまたはそのインフラストラクチャへの侵害につながるリスクがあります。

この脆弱性を防御・予防するには、WhiteListを実装して、安全なリソースへのリクエストだけを許可するように制限しましょう!

まとめ

今回の記事では、OWASP Top10についてざっくりと紹介しました。
OWASP Top10は、本文でも説明した通りWebアプリケーションのセキュリティを強化するために重要なガイドであります。

Web開発やセキュリティ分野で従事している方々は、ぜひ最新のセキュリティ脆弱性に対する認識を高め、これらの脆弱性を把握しておきましょう。

また、この他にもWebアプリケーションには様々な脆弱性が存在しております。
まずは、本記事で紹介した上記のTop10のセキュリティ脆弱性について、各環境のWebアプリケーションにおいて上の項目と一致する脆弱性が存在するかを確認し、セキュリティをもっと徹底的に意識していきましょう。

最後に

NHN テコラスでは「セキュリティ脆弱性診断サービス」を提供しています。
サービスで提供する診断項目には今回の記事で紹介したOWASP Top10を含めて、様々な外部基準を活用した診断を実施しています。
参考:NHN Techorus|セキュリティ脆弱性診断サービス

テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!

Jineer

2021年新卒入社のセキュリティエンジニアとして働いております。 よろしくお願いします。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら