著者:gentle_zhou
元のリンク: OWASP トップ 10 脆弱性分析 (1) - A1: 壊れたアクセス制御アクセス制御の失敗 - クラウド コミュニティ - Huawei Cloud
Web アプリケーションのセキュリティは常に重要なテーマであり、ネットワーク ユーザーのプライバシーと財産に関係するだけでなく、プログラムにおけるユーザーの新しいエクスペリエンスにも関係します。Web アプリケーションの機能と複雑さが増し続けるにつれて、これらのプログラムは増加するセキュリティ上の脅威や課題に直面しています。
これらのアプリケーションの開発チームとセキュリティ担当者がこれらの脅威を理解して防止し、セキュリティ意識を高め、より安全なコードを作成できるようにするために、OWASP (Open Web Application Security Project、Open Web Application Security Project) と呼ばれる標準ガイドをリリースしました。 OWASPトップ10。
これは、Web アプリケーションのセキュリティ リスクに関する標準的なガイドであり、世界中のセキュリティ専門家とデータ プロバイダーの合意に基づいて、現在最も深刻かつ重大な 10 の Web アプリケーション セキュリティ リスクをリストし、対応する予防策と推奨事項を提供します。OWASP Top10 は数年ごとに更新されます (これまでに 2004、2007、2010、2013、2017、2021 の 6 つのバージョンがリリースされています)。最新バージョンは 2021 年にリリースされた OWASP Top10 です。:2021
今日は最初の欠陥について説明します: Broken Access Control アクセス制御が無効です. 2017 年版の 5 位から現在の 1 位に上昇しました。
アクセス制御が壊れているとは、アクセス制御ポリシーが適切に適用されず、ユーザーが意図した権限を超えて操作を実行できることを意味します。この欠陥により、通常、不正な情報が漏洩、変更、破壊されたり、ユーザーが権限の制限を超えてビジネス機能を実行できたりする結果になります。
一般的なタイプのアクセス制御障害
一般的なアクセス制御エラーには次のようなものがあります。
- 最小特権またはデフォルトによる拒否の原則に違反します。つまり、アクセスは限られた機能、役割、またはユーザーにのみ許可されるべきですが、誰でもアクセスできます。
- 権限昇格とは、ログインしていないときにユーザー権限を取得したり、ユーザーとしてログインしたときに管理者権限を取得したりするなど、ユーザーが元のアイデンティティを超えた権限を使用することを意味します。
- パラメータの改ざんや強制ブラウジングによって URL、アプリケーションのステータス、HTML ページを変更するか、攻撃ツールを使用して API リクエストを変更してアクセス制御チェックをバイパスします。
- 一意の識別子 (安全でない直接オブジェクト参照) を変更します。つまり、アプリケーションでユーザーが制御可能な値 (パラメーターなど) を変更してオブジェクトにアクセスしますが、プログラムは適切な承認チェックを実行しないため、他のユーザーがそれらを表示または編集できるようになります。 。
- コントロール トークンにアクセスするための JSON Web トークン (JWT) の再生や改ざん、Cookie や隠しフィールドの変更による権限の昇格などのメタデータ操作。
- CORS 構成エラー、つまり、クロスドメイン リソース共有 (CORS) メカニズムが正しく設定されていないため、ブラウザーがさまざまなソースからのリソースにアクセスできなくなり、アクセス制御チェックがバイパスされ、サーバー情報の漏洩やデータの改ざんが発生します。 。
- API にはアクセス制御が設定されていません。
この不具合の発生を防ぐ方法
アクセス制御は、攻撃者によるアクセス制御チェックやメタデータの変更を防ぐため、信頼できるサーバー側のコードまたは API 内でのみ有効になります。同時に、次の点を行う必要があります。
- パブリック リソースを除き、他のすべてのアクセスはデフォルトで拒否されます。
- アクセス制御メカニズムを一度実装すると、Cross-Origin Resource Sharing (CORS) の使用を最小限に抑えるなど、アプリケーション全体で再利用できます。
- モデルのアクセス制御では、ユーザーがレコードを作成、読み取り、更新、または削除できることを認めるのではなく、ユーザーによるレコードの所有権を強制する必要があります。
- 一部のアプリケーション固有のビジネス制約は、ドメイン モデルによって強制される必要があります。
- Web サーバーのディレクトリ一覧を無効にし、ファイルのメタデータ (.git など) とバックアップ ファイルが Web ルートにないことを確認します。
- アクセス制御エラーの発生を記録し、必要に応じて管理者に警告します (例: 失敗が X 回繰り返された場合)。
- 自動攻撃ツールによる被害を最小限に抑えるため、API とコントローラーのアクセスをレート制限します。
- ステートフル セッション ID は、ユーザーがログアウトした後、サーバー上で無効にする必要があります。ステートレス JWT トークンは、攻撃者の機会を最小限に抑えるために、有効期間を短くする必要があります。有効期間の長い jwt の場合は、OAuth 標準に従ってアクセスを取り消すことを強くお勧めします。
開発者およびセキュリティ品質担当者は、アクセス制御機能モジュールの統合テストを日常的に実施する習慣を身に付ける必要があります。
栗をあげる
アプリケーションは、アカウント情報にアクセスする SQL ステートメントで未検証のデータを使用しました。
pstmt.setString(1, request.getParameter("acct"));
ResultSet results = pstmt.executeQuery( );
その後、攻撃者はパラメータ情報「acct」を任意の情報に変更し、知りたいアカウントを追加することができます。プログラムがこの情報を適切に検証しない場合、攻撃者はその情報を使用して、任意のユーザーのアカウント情報を知ることができますhttps://example.com/app/accountInfo?acct=notmyacct
。
参考リンク
- https://owasp.org/Top10/A01_2021-Broken_Access_Control/
Huawei Cloud CodeArts Checkコード検査サービスを体験してください: Code Check CodeArts Check_Precise Positioning_Code Defects_Security Check_HUAWEI Cloud