エンジニアのためのセキュリティ攻略:共有&学習シリーズ - アクセス制御の不備

ビジネスアプリケーションを構築する際、それが社内用であれ顧客向けの外部用であれ、すべてのユーザーにすべての機能を使わせることはまずないでしょう。もしそうしているなら、アクセス制御の不備という脆弱性を抱えている可能性があります。
アクセス制御の不備とは何か、なぜそれが危険なのか、そしてどのように修正すべきかを見ていきましょう。
アクセス制御の不備を理解する
アクセス制御の不備は、アプリケーションのコードに適切なセキュリティチェックやアクセス制限が組み込まれていない場合に発生します。また、アプリケーションの設定ミスにより、本来アクセスすべきでない機能やページにユーザーがアクセスできてしまう場合にも起こります。
例えば、経理担当者であれば、特定の口座への入金や社内口座間の資金移動を行う権限があるかもしれません。しかし、それらの口座から現金を引き出したり、外部の口座へ送金したりする権限までは不要なはずです。適切なアクセスチェックが行われていなければ、従業員が必要以上の操作を行えてしまう恐れがあります。
こうしたチェックは、コード内で行うことも、設定ファイルで行うことも可能です。例えば、どのユーザーがどのページにアクセスできるかをWebアプリケーションフレームワークに指示するXML設定ファイルなどが挙げられます。これにより、ユーザーは許可された機能にのみアクセスできるようになります。
なぜアクセス制御の不備が危険なのか
次のような例を考えてみましょう。攻撃者がユーザー作成コードの操作方法を見つけ出し、単純なPOSTリクエストで管理者ユーザーを作成できるようになったとします。攻撃者はユーザー名とパスワードを送信し、通信の途中でURLパラメータやリクエストボディに「admin」というロール(役割)を追加するように改ざんします。その結果、攻撃者はアプリケーションにログインし、即座に管理者権限を手に入れてしまいます。
必ずしも悪意のある攻撃者がシステムに侵入するとは限りません。適切なアクセス制御がなければ、本来部署間で共有されるべきではない機密情報が漏洩する可能性があります。もし社内の全従業員が人事給与データや財務データを見ることができたらどうなるでしょうか。会社の経営難による人員削減の計画を全従業員が知ってしまったらどうなるでしょう。これは従業員の士気を下げ、会社の評判を大きく損なうことになりかねません。
顧客の機密情報が失われる可能性もあります。企業はサービスを利用する顧客の個人情報を保管していることが多く、アクセス制御の欠如によってこれらが意図せず流出しないよう注意が必要です。例えば、システムでユーザーが自分の健康記録を照会できる場合、他人の健康情報まで照会できてしまわないでしょうか。URLに顧客IDが含まれていると、攻撃者はそのIDを順番に書き換えていくことで、他人の個人情報にたどり着いてしまう可能性があります。
アクセス制御の不備を克服する
ロールベースアクセス制御(RBAC)は、堅牢なアクセス制御を実装するための非常に効果的なツールです。Active Directoryを利用している方なら、グループを作成し、個人ではなくグループ単位で特定の項目へのアクセス権を付与するという考え方に馴染みがあるでしょう。アプリケーションも同様で、ロール(役割)を使って誰が何を見られるかを定義します。
これには2つの利点があります。第一に、誰かが管理者ロールから外れるたびに機能を変更する必要がないことです。以前は管理者だったが今はその権限を持つべきではないという場合、新しい人を管理者ロールに割り当て、前の人をそのロールから外すだけで済みます。コード側では、個々のユーザーが特定のページや機能にアクセスできるかをチェックするのではなく、ユーザーが管理者ロールを持っているかどうかを確認するだけでよくなります。
第二の利点は、メンテナンスの悪夢を回避できることです。すべての個人とすべての機能やページを紐付けるような細かすぎるアクセス制御は、時間が経つにつれて管理不能になります。ロールを使えば、複数の人を一つのロールに追加できるため、管理が非常に楽になります。全社員を含むロールもあれば、わずか5人だけのロールもあるでしょう。管理すべきロールの数が減るため、運用効率が向上します。1万人の会社であっても、アプリケーションの機能数に1万を掛けた数ではなく、わずか100個程度のロールで管理できるかもしれません。利用しているアプリケーションフレームワークで、堅牢なアクセス制御のためにどのようなオプションが用意されているか調べてみてください。
機能レベルでのアクセス制御を行うことも極めて重要です。すべての機能へのアクセスを保護し、ユーザーが特定のアクセス制御チェックを通過することを必須とします。最小権限の原則に従い、デフォルトではアクセスを拒否し、必要な場合にのみ許可を与えるようにします。機能ごとにアクセス制御を実装し忘れることは起こり得ます。アクセス制御を一元管理し、強制するための中心的なコンポーネントを利用しましょう。
機密機能を保護する
アクセス制御の不備は、データやアプリケーションを攻撃や悪用に対して無防備な状態にします。適切に保護されていない顧客データは大規模な情報漏洩につながり、会社の評判と収益を大きく損なう恐れがあります。
アクセス制御の不備は、攻撃者が本来アクセスすべきでない機能にアクセスできてしまうことで、アカウント乗っ取りにつながる恐れがあります。適切な機能レベルのアクセス制御を実装することで、悪意のある攻撃者だけでなく、内部関係者による誤操作からもアプリケーションを保護できます。
機能レベルのアクセス制御は完璧ですか?今すぐアクセス制御の不備を修正する課題に挑戦してみましょう: [ここから開始]
AI主導の開発をリリース前にガバナンスする
AIを活用したリスク測定、コミット時のセキュアコーディングポリシーの強制、そしてSDLC全体を通じたセキュアなデリバリーの加速を実現します。
他のブログ記事を見る
セキュアコーディング、AIガバナンス、ソフトウェアリスク管理に関する専門的なコンテンツをご覧ください。
%252520%252520(3).avif)
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.

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
AIを活用した開発をリリース前にセキュアに
開発者のリスクを可視化し、ポリシーを適用することで、ソフトウェア開発ライフサイクル全体における脆弱性を未然に防ぎます。



.avif)