コーダーはセキュリティを制す。シェアして学ぶシリーズ 壊れたアクセスコントロール

2019年5月09日発行
ジャープ・カラン・シン著
ケーススタディ

コーダーはセキュリティを制す。シェアして学ぶシリーズ 壊れたアクセスコントロール

2019年5月09日発行
ジャープ・カラン・シン著
リソースを見る
リソースを見る

ビジネスアプリケーションを構築する際、社内向けであれ、顧客向けであれ、すべてのユーザーにすべての機能を実行させることはないでしょう。そうすると、アクセスコントロールが機能しなくなる恐れがあります。

壊れたアクセスコントロールとは何か、なぜそれが危険なのか、そしてそれを修正する方法を見てみましょう。

壊れたアクセスコントロールの理解

アクセスコントロールの破綻は、アプリケーションコードに適切なセキュリティチェックやアクセスチェックが行われていない場合に発生します。また、アプリケーションが何らかの形で誤設定され、ユーザがアクセスしてはいけない機能やページへのアクセスを許してしまう場合にも発生します。

会社の財務を担当している方は、特定の口座にお金を預けたり、会社の口座間でお金を移動したりすることができます。しかし、それらの口座から現金を引き出したり、他の口座に送金したりするためのアクセス権は持ってはいけません。適切なアクセスチェックが行われていない場合、従業員が必要以上の機能を実行できてしまう可能性があります。

これらのチェックは、コードの中で行われる場合と、設定ファイルの中で行われる場合があります。例えば、ウェブアプリケーションフレームワークに、どのユーザがどのページへのアクセスを許可されているかを伝えるXML設定ファイルがある場合があります。これにより、ユーザは自分が使用することを許可された機能にのみアクセスすることができます。

壊れたアクセスコントロールが危険な理由

次のような例を考えてみましょう。攻撃者は、ユーザアカウント作成コードが操作可能であることに気づき、単純な投稿リクエストで管理者ユーザを作成できるようになりました。攻撃者は、ユーザ名とパスワードを指定してリクエストを送信し、途中で変更して、パラメータとしてのURLやリクエストの本文にadminの役割を含めることができます。攻撃者はアプリケーションにログインし、即座に管理者権限を与えられます。

システムに侵入するのは、悪意のある攻撃者とは限りません。適切なアクセスコントロールがなければ、部門間で共有されるべきではない機密情報が流出する可能性があります。想像してみてください。社内のどの社員も人事の給与データや財務データを見ることができるとしたら。会社の財務状況が悪いためにレイオフが行われることを、どの従業員も知ることができたらどうなるでしょうか。士気や会社の評判にダメージを与えかねません。

また、お客様の機密情報も失われる可能性があります。企業は、自社のサービスを利用するお客様の個人情報を保管していることがあります。アクセスコントロールができていないために、誤ってこれを公開してしまわないように注意してください。例えば、ユーザーが自分の健康記録を請求できるシステムの場合、ユーザーは他の人の健康情報を請求したり、見たりすることもできますか?URLに顧客ID番号が含まれている場合、攻撃者はその顧客ID番号を、他の顧客と一致するものが見つかるまで何度も増分して、顧客の個人情報を公開することができます。

壊れたアクセスコントロールの克服

ロールベースアクセスコントロール(RBAC)は、健全なアクセスコントロールを実現するための非常に有効なツールである。Active Directoryを使用している人は、グループを作成し、個人ではなくグループ全体に特定のアイテムへのアクセス権を与えるというアイデアに慣れているかもしれない。アプリケーションも同様に、ロールを使って誰が何を見ることができるかを定義する。

これには2つの利点があります。まず、管理者を辞めるときに機能を変更する必要がありません。誰かが以前は管理者だったが、今はもう管理者である必要がない場合、新しい人を管理者ロールに入れて、以前の人をロールから外すだけです。このコードでは、個々のユーザーが特定のページや機能へのアクセス権を持っているかどうかをチェックする代わりに、ユーザーが管理者ロールを持っているかどうかをチェックします。

2つ目の利点は、メンテナンスの悪夢を回避できることです。すべての人がすべての機能やページに関連づけられているような細かいアクセスコントロールは、長期間にわたって管理することは不可能です。ロールでは、1つのロールに複数の人を追加することができるため、管理が非常に容易になります。あるロールには会社全体が含まれていますが、別のロールには5人しか含まれていないかもしれません。これにより、管理する役割が少なくなり、効率的に管理できるようになります。10,000人の会社であれば、アプリケーションの機能数が10,000倍になる代わりに、ロールの数が100個で済むことになります。堅牢なアクセスコントロールのためにどのようなオプションがあるか、選択したアプリケーションフレームワークを調査してください。

また、機能レベルのアクセス制御を行うことも重要です。すべての機能へのアクセスを保護するために、ユーザーは特定のアクセス制御チェックに合格する必要があります。最小限の特権の原則を用いて、デフォルトではアクセスを拒否し、必要に応じてのみアクセスを許可する。機能ごとにアクセスコントロールを実施することを忘れないようにする。アクセスコントロールの管理と実施には、中央のコンポーネントを使用する。

デリケートな機能を守る

アクセスコントロールが機能していないと、データやアプリケーションが攻撃や搾取の対象となってしまいます。適切に保護されていない顧客データは、大規模なデータ侵害につながり、企業の評判や収益に悪影響を及ぼす可能性があります。

また、アクセスコントロールがうまくいかないと、攻撃者がアクセスすべきでない機能にアクセスできてしまい、アカウントの乗っ取りにつながる可能性があります。適切な機能レベルのアクセスコントロールを使用することで、悪意のある攻撃者や偶発的なインサイダーからもアプリケーションを安全に保つことができます。

ファンクショナルレベルのアクセスはもういいと思っていませんか?壊れたアクセスコントロールの修理に今すぐチャレンジしてみませんか? [Start Here] (ここからスタート)

リソースを見る
リソースを見る

著者

Jaap Karan Singh

もっと知りたい?

セキュアコーディングに関する最新の知見をブログでご紹介しています。

当社の豊富なリソースライブラリは、安全なコーディングアップスキルに対する人間的なアプローチを強化することを目的としています。

ブログを見る
もっと知りたい?

開発者主導のセキュリティに関する最新の研究成果を入手する

ホワイトペーパーからウェビナーまで、開発者主導のセキュアコーディングを始めるために役立つリソースが満載のリソースライブラリです。今すぐご覧ください。

リソース・ハブ

コーダーはセキュリティを制す。シェアして学ぶシリーズ 壊れたアクセスコントロール

2024年1月22日発行
Jaap Karan Singh著

ビジネスアプリケーションを構築する際、社内向けであれ、顧客向けであれ、すべてのユーザーにすべての機能を実行させることはないでしょう。そうすると、アクセスコントロールが機能しなくなる恐れがあります。

壊れたアクセスコントロールとは何か、なぜそれが危険なのか、そしてそれを修正する方法を見てみましょう。

壊れたアクセスコントロールの理解

アクセスコントロールの破綻は、アプリケーションコードに適切なセキュリティチェックやアクセスチェックが行われていない場合に発生します。また、アプリケーションが何らかの形で誤設定され、ユーザがアクセスしてはいけない機能やページへのアクセスを許してしまう場合にも発生します。

会社の財務を担当している方は、特定の口座にお金を預けたり、会社の口座間でお金を移動したりすることができます。しかし、それらの口座から現金を引き出したり、他の口座に送金したりするためのアクセス権は持ってはいけません。適切なアクセスチェックが行われていない場合、従業員が必要以上の機能を実行できてしまう可能性があります。

これらのチェックは、コードの中で行われる場合と、設定ファイルの中で行われる場合があります。例えば、ウェブアプリケーションフレームワークに、どのユーザがどのページへのアクセスを許可されているかを伝えるXML設定ファイルがある場合があります。これにより、ユーザは自分が使用することを許可された機能にのみアクセスすることができます。

壊れたアクセスコントロールが危険な理由

次のような例を考えてみましょう。攻撃者は、ユーザアカウント作成コードが操作可能であることに気づき、単純な投稿リクエストで管理者ユーザを作成できるようになりました。攻撃者は、ユーザ名とパスワードを指定してリクエストを送信し、途中で変更して、パラメータとしてのURLやリクエストの本文にadminの役割を含めることができます。攻撃者はアプリケーションにログインし、即座に管理者権限を与えられます。

システムに侵入するのは、悪意のある攻撃者とは限りません。適切なアクセスコントロールがなければ、部門間で共有されるべきではない機密情報が流出する可能性があります。想像してみてください。社内のどの社員も人事の給与データや財務データを見ることができるとしたら。会社の財務状況が悪いためにレイオフが行われることを、どの従業員も知ることができたらどうなるでしょうか。士気や会社の評判にダメージを与えかねません。

また、お客様の機密情報も失われる可能性があります。企業は、自社のサービスを利用するお客様の個人情報を保管していることがあります。アクセスコントロールができていないために、誤ってこれを公開してしまわないように注意してください。例えば、ユーザーが自分の健康記録を請求できるシステムの場合、ユーザーは他の人の健康情報を請求したり、見たりすることもできますか?URLに顧客ID番号が含まれている場合、攻撃者はその顧客ID番号を、他の顧客と一致するものが見つかるまで何度も増分して、顧客の個人情報を公開することができます。

壊れたアクセスコントロールの克服

ロールベースアクセスコントロール(RBAC)は、健全なアクセスコントロールを実現するための非常に有効なツールである。Active Directoryを使用している人は、グループを作成し、個人ではなくグループ全体に特定のアイテムへのアクセス権を与えるというアイデアに慣れているかもしれない。アプリケーションも同様に、ロールを使って誰が何を見ることができるかを定義する。

これには2つの利点があります。まず、管理者を辞めるときに機能を変更する必要がありません。誰かが以前は管理者だったが、今はもう管理者である必要がない場合、新しい人を管理者ロールに入れて、以前の人をロールから外すだけです。このコードでは、個々のユーザーが特定のページや機能へのアクセス権を持っているかどうかをチェックする代わりに、ユーザーが管理者ロールを持っているかどうかをチェックします。

2つ目の利点は、メンテナンスの悪夢を回避できることです。すべての人がすべての機能やページに関連づけられているような細かいアクセスコントロールは、長期間にわたって管理することは不可能です。ロールでは、1つのロールに複数の人を追加することができるため、管理が非常に容易になります。あるロールには会社全体が含まれていますが、別のロールには5人しか含まれていないかもしれません。これにより、管理する役割が少なくなり、効率的に管理できるようになります。10,000人の会社であれば、アプリケーションの機能数が10,000倍になる代わりに、ロールの数が100個で済むことになります。堅牢なアクセスコントロールのためにどのようなオプションがあるか、選択したアプリケーションフレームワークを調査してください。

また、機能レベルのアクセス制御を行うことも重要です。すべての機能へのアクセスを保護するために、ユーザーは特定のアクセス制御チェックに合格する必要があります。最小限の特権の原則を用いて、デフォルトではアクセスを拒否し、必要に応じてのみアクセスを許可する。機能ごとにアクセスコントロールを実施することを忘れないようにする。アクセスコントロールの管理と実施には、中央のコンポーネントを使用する。

デリケートな機能を守る

アクセスコントロールが機能していないと、データやアプリケーションが攻撃や搾取の対象となってしまいます。適切に保護されていない顧客データは、大規模なデータ侵害につながり、企業の評判や収益に悪影響を及ぼす可能性があります。

また、アクセスコントロールがうまくいかないと、攻撃者がアクセスすべきでない機能にアクセスできてしまい、アカウントの乗っ取りにつながる可能性があります。適切な機能レベルのアクセスコントロールを使用することで、悪意のある攻撃者や偶発的なインサイダーからもアプリケーションを安全に保つことができます。

ファンクショナルレベルのアクセスはもういいと思っていませんか?壊れたアクセスコントロールの修理に今すぐチャレンジしてみませんか? [Start Here] (ここからスタート)

弊社製品や関連するセキュアコーディングのトピックに関する情報をお送りする許可をお願いします。当社は、お客様の個人情報を細心の注意を払って取り扱い、マーケティング目的で他社に販売することは決してありません。

フォームを送信するには、「Analytics」のCookieを有効にしてください。完了したら、再度無効にしてください。