🦔

Day 33: OWASP Top 10 入門 - OWASP

2024/11/27に公開

はじめに

Webアプリケーションの開発やセキュリティ対策を考える上で、OWASP Top 10は知っておきたいリストです。OWASP(Open Web Application Security Project)は、組織が信頼できるアプリケーションや API を開発、購入、維持できるよう支援することに専念する、オープンなコミュニティで、沢山のコントリビューターにより支えられています。Top 10はその中で特に注目すべき脆弱性のリストです。このリストは定期的に更新され、最新の2021年版では最新の脅威やトレンドを反映した内容が含まれています。

この投稿では、2021年版をベースに以下の内容を通してOWASP Top 10について知っていきます。

  • 公式サイトとリソース
  • OWASP Top 10 とは?
  • Top 10の概要と防止策について

前提:公式サイトとリソース

OWASP Top 10は、Webアプリケーションセキュリティにおける最新の脅威を反映するよう定期的に更新されています。そのため、正確な情報を知るためには公式リソースを活用することが大切です。

以下の公式リンクから、最新のOWASP Top 10や関連ドキュメントを確認できます:

公式OWASP Top 10ページ

OWASPの公式サイトで最新のTop 10リストや詳細な解説を見ることができます。

GitHubリポジトリ

OWASP Top 10のソースや、最新の変更点、コミュニティの議論内容が公開されています。

これらの公式リソースでは、以下のような情報を確認することができます:

  • 各脆弱性の詳細な説明と対策について
  • バージョンごとの変更履歴
  • 翻訳版や補足資料

公式情報を定期的にチェックすることで、セキュリティ対策の精度をさらに高めることができます。公開されているコミュニティでやり取りされる情報の共有を見て調べてみることはセキュリティ学習にも最適です。


OWASP Top 10 とは?

OWASP Top 10 は、Webアプリケーションに影響を与える最も重大なセキュリティリスクをリストアップしたものです。2021年版では、以下の10項目が挙げられています:

  1. A01: Broken Access Control(アクセス制御の欠如)
  2. A02: Cryptographic Failures(暗号化の失敗)
  3. A03: Injection(インジェクション)
  4. A04: Insecure Design(安全でない設計)
  5. A05: Security Misconfiguration(セキュリティ設定ミス)
  6. A06: Vulnerable and Outdated Components(脆弱なコンポーネントの利用)
  7. A07: Identification and Authentication Failures(認証の失敗)
  8. A08: Software and Data Integrity Failures(ソフトウェアとデータの完全性の失敗)
  9. A09: Security Logging and Monitoring Failures(セキュリティログとモニタリングの失敗)
  10. A10: Server-Side Request Forgery(サーバーサイドリクエストフォージェリ:SSRF)

以下では、それぞれのリスクを簡単に解説し、実際の被害例や防止策を見ていきましょう。


1. Broken Access Control(アクセス制御の欠如)

概要

不適切なアクセス制御により、ユーザーが本来アクセスすべきでないデータや機能にアクセスできてしまう脆弱性です。

  • : 管理者ページに通常ユーザーがアクセスできてしまう。

防止策

  • ユーザーごとにアクセス権限を正しく設定。
  • テスト環境で役割に応じたアクセス権限を確認。

2. Cryptographic Failures(暗号化の失敗)

概要

機密情報を適切に暗号化しない場合に発生するリスクです。

  • : パスワードを平文で保存していたため、データ漏洩時に直接読まれる。

防止策

  • パスワードは必ずハッシュ化(例: bcrypt)して保存。
  • 強力な暗号化プロトコル(例: AES-256)を使用。

3. Injection(インジェクション)

概要

攻撃者が入力フィールドやクエリに悪意のあるコードを挿入し、システムを不正操作する攻撃です。

  • : SQLインジェクションによるデータベース操作。

防止策

  • ユーザー入力を常にサニタイズ(無害化)。
  • プリペアドステートメントを使用してクエリを実行。

4. Insecure Design(安全でない設計)

概要

セキュリティを考慮せずに設計されたシステムやアプリケーションに起因するリスクです。設計段階でセキュリティを軽視すると、後の段階で脆弱性が見つかる可能性が高まり、対応コストやリスクが増加します。

  • : ユーザーごとのセッション管理を実装しない設計。

防止策

  • 設計段階でセキュリティレビューを実施。
  • OWASP ASVS(Application Security Verification Standard)やIPAが公表する「安全なWEBサイトの作り方」などを用いて、設計の安全性の基準を参考にする。

5. Security Misconfiguration(セキュリティ設定ミス)

概要

設定ミスにより、システムのセキュリティが脆弱になるリスクです。

  • : 管理者インターフェースがインターネット上で公開されている。

防止策

  • デフォルト設定を見直し、不要な機能やポートを無効化。
  • 自動化された設定のレビューを定期的に実施。

6. Vulnerable and Outdated Components(脆弱なコンポーネントの利用)

概要

使用しているフレームワークやライブラリに脆弱性が含まれているリスクです。

  • : 古いバージョンのLog4jを使用していたため、攻撃を受けた。

防止策

  • 使用中のコンポーネントを常に最新バージョンに更新。
  • DependabotやSnykなどの脆弱性スキャンツールを活用。

7. Identification and Authentication Failures(認証の失敗)

概要

認証やセッション管理の欠陥により、攻撃者が不正にアクセスできるリスクです。

  • : セッションIDが予測可能な値だったため、攻撃者に乗っ取られる。

防止策

  • セッションIDをランダムな値にする。
  • MFA(多要素認証)を導入。

8. Software and Data Integrity Failures(ソフトウェアとデータの完全性の失敗)

概要

信頼できないソースからのデータやソフトウェアを使用するリスクです。

  • : 改ざんされたアップデートをインストールしてしまう。

防止策

  • ソフトウェア更新にデジタル署名を使用。
  • 信頼できるリポジトリのみを使用。

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

概要

セキュリティイベントを適切にログ記録・監視できないリスクです。

  • : 不正アクセスの試行が検知されないまま成功する。

防止策

  • 全ての重要なアクションをログに記録。
  • SIEM(セキュリティ情報イベント管理)を活用して監視を強化。

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

概要

攻撃者がサーバーを利用して内部システムに不正リクエストを送信する攻撃です。

  • : SSRFを利用してAWSメタデータを取得。

防止策

  • 外部リクエストを制限。
  • ホワイトリスト方式でアクセス可能なリソースを制御。

小テスト


Q1: OWASP Top 10の目的は何ですか?

a) Webアプリケーションの主要なデザインパターンをリストアップする
b) Webアプリケーションで特に重要なセキュリティリスクをリストアップする
c) ソフトウェア開発のトレンドを分析する
d) データベース管理のベストプラクティスを示す


Q2: 以下のうち、A01: Broken Access Control(アクセス制御の欠如)の例はどれですか?

a) 管理者ページに通常ユーザーがアクセスできてしまう
b) ユーザー入力を正しくサニタイズしていない
c) 古いライブラリを使用している
d) セッションIDが予測可能な値になっている


Q3: A02: Cryptographic Failures(暗号化の失敗)に対する適切な対策はどれですか?

a) 使用しているライブラリを最新バージョンに保つ
b) 強力な暗号化プロトコル(例: AES-256)を使用する
c) 外部からのリクエストをホワイトリスト方式で制限する
d) セキュリティログをすべて記録する


Q4: A09: Security Logging and Monitoring Failures(セキュリティログとモニタリングの失敗)に該当する問題はどれですか?

a) 脆弱なセッション管理
b) 不正アクセスが検知されないまま成功する
c) 不正なデータが暗号化されずに保存される
d) 改ざんされたアップデートが適用される


Q5: SSRF(サーバーサイドリクエストフォージェリ)の防止策として適切なのはどれですか?

a) ユーザー入力を適切にサニタイズする
b) 外部リクエストを制限し、ホワイトリスト方式でリソースを制御する
c) コンポーネントを最新バージョンに更新する
d) デジタル署名を使用してソフトウェア更新を確認する


解答

  1. b) Webアプリケーションで特に重要なセキュリティリスクをリストアップする

    • OWASP Top 10は、Webアプリケーションの最も重大なセキュリティリスクをリストアップし、開発者やセキュリティ担当者が重点的に対応すべき内容を示しています。
  2. a) 管理者ページに通常ユーザーがアクセスできてしまう

    • アクセス制御の欠如により、本来権限のないユーザーが重要なリソースやデータにアクセスできる例です。
  3. b) 強力な暗号化プロトコル(例: AES-256)を使用する

    • 暗号化の失敗を防ぐためには、強力な暗号化アルゴリズムを使用し、適切に実装することが必要です。
  4. b) 不正アクセスが検知されないまま成功する

    • ログが記録されていない、またはモニタリングが不十分である場合、攻撃が発見されずに成功する可能性が高まります。
  5. b) 外部リクエストを制限し、ホワイトリスト方式でリソースを制御する

    • SSRF攻撃を防ぐためには、アクセスを許可するリソースを限定し、不正なリクエストが内部ネットワークに影響を与えないように制御することが重要です。

まとめ

セキュリティ分野では、攻撃手法の多様化や情報の更新が日々進んでおり、すべての情報を網羅的に把握するのは非常に難しいと思います。その点を踏まえると時間が限られる中で効果的に対策を講じるには、最新の脅威やトレンドを把握することが重要です。
ポイントを押さえることで、膨大な情報の中から必要なものを取捨選択し、効果的なセキュリティ対策を実施することができます。

Discussion