最小権限の具体的な実現方法のメモ

- 情報・データ起点権限設計をしよう -

テーマの対象

WEBアプリケーションの権限設定

最小権限とは

ユーザやシステム・コンポーネントごとに操作の実行に要求される最低限の権限を、 最低限の期間だけ割り当てる

最小権限の権限設定と難しさ

  • ビジネスとの結びつきが強い
    • 失敗した際、利用プラン自体を見直す必要がある
  • 見つけにくい
    • ツールで見つからない → 人の目(+スキル)が必要
  • 見つけても修正しづらい
    • リリース直前に脆弱性診断して、ミスを見つけたら修正したくない
    • 代行ユーザが動きづらい

最小権限を実現するために公開されている情報

  • IPA
    • 安全なWEBサイトの作り方
      • 外部のパラメータを利用したアクセス制御をしちゃダメ
  • OWASP
    • すべてのリクエストがアクセス制御を通るようにする
    • アクセス制御のリクエストは「拒否」
    • 最小権限の原則
    • アクセス制御をプログラムにハードコーティングしない
    • アクティビティに基づいて記述する
    • アクセス制御には、サーバ側の信頼できるデータを使う

何を守ろうとしているのか

どんな攻撃が…?

  • 認証後の画面に未認証でアクセス
    • 直接URL踏むと入れるとか
  • 認証後のみコンテンツを未認証状態でダウンロードする
    • 直接URL踏むと入れるとか
  • 別の権限を持つユーザように用意した画面にアクセスする
    • 特定の認証されたユーザのみが見れる閲覧可能な情報を、別の認証されたユーザが見れる
  • 権限を設計をするパラメータを改ざんする
    • 特定の認証されたユーザのみが見れる閲覧可能な情報を、別の認証されたユーザが見れる
  • 別のユーザのデータが取得される
    • 設計ミス、実装ミス

守りたいのはデータデータ中心にアクセス権限を考える

ちなみにリスクアセスメントでは

  • 情報資産の特定
  • 誰がアクセス可能か
  • 脅威や脆弱性を探る ↓
  • 権限設計
    • システムで扱うデータを特定して、誰がアクセスしていいかを探る

権限設計をするには

データとその特性の洗い出し

  • 扱うデータの特定
    • データベースに格納するデータ、ストレージに格納するデータそれぞれ洗い出す
      • ER図の作成
      • 扱うファイルの洗い出し
  • データのライフサイクルの検討
    • 考えること
      • 作成契機
      • 消去契機
    • 対象
      • アカウント関連データの検討
      • その他のデータの検討
  • データの操作権の特定
    • 認証が必要なデータ
      • 公開領域に設定してはいけない
    • レコードの操作を把握する→操作権限を渡す対象を把握する

操作方法の検討

  • Howを考える
    • こんな画面を出す
    • こんなバッチだす
  • シーケンス図を書いて検証

実装するには

フレームワークのアクセス制御機能を利用

  • アクセス制御機能を利用するとこんなのが簡単に
    • ログインによる制限
    • ページ単位のアクセス許可・禁止

その他参考となる文献

  • IPA セキュアプログラミング講座
  • OWASP Top 10 ProactiveControl2016
  • 12事例に学ぶWebアプリケーションのアクセス制御
    • 攻撃方法も書いている

どのように検証すべきか

テストコードに含める

  • 設計者や判断者のみが判断可能

コードから権限表を生成する

最小権限を維持する

  • 権限表を作る
  • データ視点とユーザ視点双方から作成