ブログ

Coders Conquer Security OWASP Top 10 APIシリーズ - 認証の不備

September 16, 2020
マティアス・マドゥ博士

認証の不備がOWASPのAPIセキュリティリスクリストに挙げられているのも不思議ではありません。認証メカニズムを正しく実装するのは非常に困難だからです。また、認証の仕組みは本質的にユーザーに公開しなければならないため、攻撃者はそれを観察し、悪用可能なパターンや脆弱性を探す機会を得られるという点で、攻撃者側に多少の優位性があります。

最後に、認証はアプリケーションやネットワーク全体への入り口となることが多いため、攻撃者にとって格好の標的となります。認証プロセスに不備や脆弱性があると、攻撃者にその弱点を見つけられ、悪用される可能性が高まります。

そこで本章では、認証に関する問題を解決し、悪意のある攻撃者を締め出す方法を学びます。まずは自分のスキルを試してみたいという方は、ぜひゲーミフィケーション形式のチャレンジに挑戦してみてください。

スコアを上げたいですか?このまま読み進めて、詳細を確認していきましょう。

認証の不備や設定ミスには、どのような例があるのでしょうか?

一見すると問題が分かりにくい例として、認証メソッドがクレデンシャルスタッフィング(既知のユーザー名とパスワードのリストを使用してセキュリティを突破する手法)に対して脆弱な場合があります。多要素認証のように通常は非常に安全な認証方法であっても、リクエストの制限やスロットリング、その他の監視が行われていなければ、脆弱になる可能性があります。

例えば、攻撃者が /api/system/verification-codes に対してPOSTリクエストを送信し、リクエストボディにユーザー名を含めることで、パスワード復旧リクエストをトリガーできるとします。もしアプリがSMSで6桁のコードを送信する認証方式を採用しており、かつ入力フィールドに制限が設けられていなければ、わずか数分でアプリケーションに侵入される恐れがあります。攻撃者は、正しいコードにたどり着くまで、考えられるすべての6桁の組み合わせを送信するだけでよいからです。

このシナリオでは、表面上は二要素認証があるためアプリケーションは安全に見えます。しかし、ユーザー入力に対してレート制限がかかっていないため、認証は不備があり脆弱な状態と言えます。

別の例として、アプリケーションがエンコードされたユーザーオブジェクトを認証クッキーとして使用している場合を考えます。もし、低い権限しか持たない攻撃者がBase64でそのクッキーをデコードできれば、アプリケーションがどのようにセッションやユーザーを定義しているかを知ることができます。例えば、デコード後に以下のようなJSONが見つかるかもしれません。

{
"username" : "ShadyGuy",
"role" : "user"
{

その時点で、悪意のあるユーザーは自分のユーザー名やロール、あるいはその両方を変更できてしまいます。値をいくつか書き換えるだけで、より高い権限を持つ別のユーザーになりすますことが可能です。

{
"username" : "GoodGuy",
"role" : "admin"
{

この時点で、攻撃者が情報を再エンコードしてクッキーの値として設定すれば、実質的に高い権限を持つ新しいユーザーになりすますことができます。このような変更を防ぐ手段が講じられていない限り、アプリケーションがその改ざんを受け入れてしまう可能性は非常に高いでしょう。

認証の不備や設定ミスの排除

認証が失敗すると、システム全体のセキュリティが侵害される可能性が高まります。しかし、アプリケーションのコーディング時にいくつかの重要なガイドラインに従うことで、全体を安全に保つことができます。

まず、ユーザーがプログラムの機能にアクセスするすべての箇所に、必ず認証チェックを組み込んでください。認証チェックが全く存在しなければ、その時点でセキュリティ対策は失敗したも同然です。

ベストプラクティスとして、ユーザーがアクセス可能なURLにセッションIDを露出させないようにすることが重要です。前述の認証の不備に関する2つ目の例のように、セッションクッキーを攻撃者に決して見せないようにすれば、デコードを試みられるリスクを大幅に減らすことができます。

多要素認証の導入も推奨されます。ハードウェアトークンを使用して、アルゴリズムに基づき短時間でパスワードを生成する方法が安全です。専用デバイスの配布が難しい場合は、SMS認証も有効です。ただし、30秒間に3〜4回までといった試行回数の制限を設け、コードの有効期限を数分以内に設定することが不可欠です。また、英数字を組み合わせたコードを採用することで、セキュリティをさらに強化できます。

最後に、可能であればユーザー名や推測可能な連番をセッションIDとして使用することは避けてください。代わりに、安全なサーバーサイドのセッションマネージャーを利用し、毎回ランダムなセッションIDを生成するようにしましょう。

安全な認証の実装は、一般的な脆弱性対策よりも少し複雑です。しかし、認証はあらゆるアプリケーション、プログラム、APIにおいて極めて重要な要素であるため、時間をかけて確実に構築する価値があります。

この脆弱性に関する詳細や、その他のセキュリティ上の欠陥から組織や顧客を守る方法については、Secure Code Warriorのブログをご覧ください。また、デモを試して、Secure Code Warriorのトレーニングプラットフォームでサイバーセキュリティスキルを常に最新の状態に保つことも可能です。


タグライン

AI主導の開発をリリース前にガバナンスする

AIを活用したリスク測定、コミット時のセキュアコーディングポリシーの強制、そしてSDLC全体を通じたセキュアなデリバリーの加速を実現します。

デモを予約する
リソースライブラリ

他のブログ記事を見る

セキュアコーディング、AIガバナンス、ソフトウェアリスク管理に関する専門的なコンテンツをご覧ください。

すべて表示
導入事例
フィルターラベル
これはdivブロック内のテキストです。

Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

詳細はこちら
導入事例
フィルターラベル
これはdivブロック内のテキストです。

Security as culture: How Blue Prism cultivates world-class secure developers

Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed

詳細はこちら
導入事例
フィルターラベル
これはdivブロック内のテキストです。

セキュリティ文化の統一:Sageはいかにしてチャンピオンプログラムを構築したか

Sageがどのようにして柔軟かつ関係性を重視したアプローチでセキュリティを強化し、200名以上のセキュリティチャンピオンを育成して、目に見えるリスク低減を実現したのかをご紹介します。

詳細はこちら
ブログ
フィルターラベル
これはdivブロック内のテキストです。

2026年サイバーセキュリティ意識向上月間:企業防衛に不可欠なAIセキュリティの理解

主要なAI企業の多くが、安全対策が追いつくまでの間、AI開発を世界的に減速させるよう公に呼びかける事態となっています。しかし現実には、深刻なセキュリティ問題はすでに顕在化しています。AI導入に伴う金銭的コストやリスクが増大し続ける中、多くのセキュリティリーダーや経営陣は差し迫った状況に追い込まれています。

詳細はこちら
ブログ
フィルターラベル
これはdivブロック内のテキストです。

イネーブラー8:プログラムのブランディング

セキュアコーディングプログラムを成功させるには、優れたコンテンツ以上のものが必要です。イネーブラー8では、ブランディングによって参加を「憧れのステータスを得る体験」へと変える方法を解説します。

詳細はこちら
ブログ
フィルターラベル
これはdivブロック内のテキストです。

すべての従業員が今、AIサイバーセキュリティの最前線に立っている

エンタープライズテクノロジーの状況は、手遅れになるまで誰も予測できなかったほどの速さで変化しています。私たちは今、人間が書いたコードと基本的なコパイロット支援の時代から、エージェント型開発ライフサイクル(ADLC)の時代へと正式に足を踏み入れました。自律型AIエージェントは、複数の機能にわたってかつてない効率性をもたらす一方で、全く新しい種類のセキュリティリスクや規制リスクも引き起こしています。

詳細はこちら

AIを活用した開発をリリース前にセキュアに

開発者のリスクを可視化し、ポリシーを適用することで、ソフトウェア開発ライフサイクル全体における脆弱性を未然に防ぎます。

デモを予約する
該当する項目が見つかりません。