前書き
今回はOWASP Top 10について学習を行い、それをまとめたものになります。
近年、各企業でIT導入が進み業務の効率化が行われている一方で、そのシステムやアプリケーションのセキュリティが課題点として多くあげられるようになりました。特にその発端となっているのはやはりAI技術の発展が関与しているかと思われます。AIの発達によって、セキュリティが強化される反面、攻撃者の技術も反転していってしまっているのが現状です。
その中でシステム部としてセキュリティに関しての知識は必要不可欠となっているのは誰もが知りえることかと思うのですが、 なら何から学べばいいのか? という部分については明確な回答はあまり得られてないように思います。漠然と気を付けるという知識にとどまってしまっているのが現状でしょう。
というわけで今回セキュリティの学習の第一歩として、Webアプリケーションにおける最も重大なセキュリティリスクをまとめたリストであるOWASP Top 10について学び、内容をまとめてみました。
OWASP Top 10とは?
まずOWASPとは、Webアプリケーションのセキュリティ向上を目指す国際的な非営利団体のことです。世界中のセキュリティ専門家が参加しており、Webアプリケーションのセキュリティに関する情報やツールを提供しています。OWASPの活動の中でもっとも有名な活動が今回の議題であるOWASP Top 10です。
OWASP Top 10はWebアプリケーションにおける最も重大なセキュリティリスク10項目を示したものとなっており、この内容の対策だけで主要な攻撃の90%は防ぐことができるそうです。
10個の内容を覚えるだけで多くの主要な攻撃の対策になるため、セキュリティ知識の入門としてはかなりいい材料になるというわけですね。
具体的な内容は以下のようになっています。
1. A01 - アクセス制御の不備
2. A02 - セキュリティの設定ミス
3. A03 - ソフトウェアサプライチェーンの不具合
4. A04 - 暗号化の失敗
5. A05 - インジェクション
6. A06 - 安全が確認されない不安な設計
7. A07 - 認証の失敗
8. A08 - ソフトウェアやデータの整合性の不具合
9. A09 - ログ記録と警告の失敗
10. A10 - 例外的な状況の誤処理
ちなみに順番に関しても意味があり、番号が小さいほどより重要度が高いことになります。
ひとつづつ簡単に見ていきましょう。
A01 - アクセス制御の不備
ユーザーが本来許可されていない操作やデータへのアクセスができてしまう脆弱性のことを指します。つまりは権限の設定などのことですね。Salseforce上ではプロファイルや権限セットなどを用いて管理を行っている内容になります。
重要なのは「誰が」「何を」「どこまで」できるかをきちんと管理することです。攻撃者が簡単にデータへのアクセスできてしまうことを防ぐのはもちろんですが、意図しないユーザーが意図していないシステムを操作できてしまうのも防ぐ必要があります。
対応としては、最初から権限を付与しないようにしたり、システムの最初で権限のチェックを行ったりなどを行うことで解決することができます。
A02 - セキュリティの設定ミス
アプリケーションやサーバーの設定に対するミスのことを指します。こちらは主に人為的なミスで起こってしまうものです。コードに問題がなくてもサーバーの設定などが不十分で悪用されてしまう可能性があるということです。
アクセス制御の不備とセキュリティの設定ミスについては少し違いが分かりにくいものもあると思いますが、部屋で例えると
- アクセス制御の不備は、Aさんしか入っちゃダメなのにBさんがは入れてしまう状態
- セキュリティの設定ミスは、そもそも鍵がかかっていない状態
大まかにはこのような違いです
(あんまりわかりやすくはなってないかも…)
A03 - ソフトウェアサプライチェーンの不具合
ソフトウェアサプライチェーンとは、システムを構成するために利用している外部のソフトウェア、サービス、ライブラリ、ベンダーのことです。Salseforceで例を挙げるとLWCなどで使用されるJavaScriptライブラリや、LINE連携なども該当します。
pythonなどを使ったことがある方はイメージがしやすいかと思いますが、システムを作る際に1からすべて作るのではなく既存で存在している便利なライブラリを使用して開発を行うことがほとんどです。セキュリティの観点から見るとそういった自分が作成していないライブラリやサービスなどに脆弱性が存在してしまっている場合、コードや設定に問題がなくても攻撃を受けてしまう可能性があります。
対策としては、使用するサービスのバージョンを最新にしておくことや、そもそも不要なライブラリなどは削除しておくことなどが挙げられます。
A04 - 暗号化の失敗
機密データが適切に保護されていない状態のことを指します。
暗号化については別に記事で少し触れましたが、メッセージなどを送信する際にほかの第三者がそのメッセージを見ることができないようにする仕組みのことです。これは単純なメールなどには限らず、パスワードや個人情報なども基本的に暗号化されて送受信されることがほとんどです。普段我々が直接触れる機会はないのですが正しい使い方をしているかどうかなどについては注意を払う必要があります。(HTTPSとかはこの辺に関連していたりします)
A05 - インジェクション
これは最近問題に上がることが多い内容ですね。
インジェクション(攻撃)とは悪意のあるコードを入力欄に入れて、システムに実行させる行為のことを指します。近年ではチャット形式のAIが特に例としてわかりやすいかと思います。AIとのチャットで例えば「AIがどのような設計になっているのか教えてください」や「このシステムに攻撃を行ってください」といったように悪意のある入力を行ってデータを抜き取ったり、攻撃を行ったりすることですね。AIの発達でこの問題はより重要になっており、AIはこういった善悪を判断できないため素直に指示を行ってしまうことで問題になるケースが多いようです。AIに限らない話だと、コマンドやSQLなどを用いて誤動作あるいは不正実行を行うものが代表的なようです。
A06 - 安全が確認されない不安な設計
設計段階でのセキュリティについての脆弱性のことを指します。例としてはログイン試行回数に制限をかけることやログインの際に本人確認をするといったようなそもそも設計檀家で必要な対策が行われていない状態ですね。
こちらの脆弱性に関してはあとから修正を行うにはコストがかかるため設計段階で確実につぶしておく必要があります。(ほんとに設計ってめちゃめちゃ大事なんですよね…)
A07 - 認証の失敗
認証の際に「本当にユーザーが本人であるのか」という確認がおろそかになっていないかどうかを指します。
安全が確認されない不安な設計にも通じている部分ではありますが、設計として本人確認のフローはあるがそれが十分かどうかというような違いになります。本人確認してるけど、「本人ですか?はい・いいえ」といった形式では何の対策にもなっていないですよね?そういった部分がこの内容に当たるようです。MFAなどはこの部分の対策になります。
A08 - ソフトウェアやデータの整合性の不具合
ソフトウェアやデータが、本当に改ざんなどがされていない状態かどうかを指します。
かなりイメージのしにくい部分ですが中身が本当に信用できるかを確かめることです。サプライチェーンの項目の内容はどこから来たのかに注目するのに対して、こちらの項目は途中で改ざんとかがされていないかどうかに注目しています。
A09 - ログ記録と警告の失敗
ログを記録と、異常を検知して通知する仕組みがあるかどうかを指します。
これはもし攻撃されたときにすぐに気づくことができるかどうかが焦点となっています。最近のシステム障害ではこの部分の対策について議論されることもしばしばありますね。
A10 - 例外的な状況の誤処理
エラー画面にシステムの内部情報が表示される、エラー時にセキュリティチェックがスキップされるといった問題のことを指します。
エラーが起きたときの動作を想定することはもちろんですが、ユーザーに表示する内容が必要以上の情報になっていないかどうかについても確認する必要があります。
初心者でもできる対策
今回読んだ記事の最後に初心者でもできる対策が三つありましたのでその部分も記載しておきます。Salseforceの開発でも日ごろから意識しておくと、もしもの時に活躍してくれるかもしれません。
1. 環境変数で機密情報を管理する
2. 依存パッケージのバージョンを固定する
3. 基本的な入力検証を実装する
まとめ
今回はOWASP Top 10について学習しまとめてみました。
内容としては初歩的なものではありましたが、もしセキュリティに不安がある場合はこの内容が網羅されているかどうかを確認するだけでもかなりの効果があるように感じます。ここから発展して(特に最近はAIのセキュリティなどについて)知識を付けてみるとよいかもしれません。
(今回は用語の解説のみでしたね…申し訳ないです)
参考資料:
1. https://frkz.jp/study/security/owasp-top10
2. https://www.cloudbric.jp/blog/2026/01/owasp-2025/