「最小権限の原則」の版間の差分
(同じ利用者による、間の2版が非表示) | |||
行7: | 行7: | ||
== 概要 == | == 概要 == | ||
− | |||
[[最小権限の原則]] は、障害や悪意のある挙動からデータと機能を保護する場合に、考慮するべき重要な設計観点です。 | [[最小権限の原則]] は、障害や悪意のある挙動からデータと機能を保護する場合に、考慮するべき重要な設計観点です。 | ||
[[最小権限の原則]] は、セキュリティが突破された場合の被害を局限化するための発想です。 | [[最小権限の原則]] は、セキュリティが突破された場合の被害を局限化するための発想です。 | ||
行16: | 行15: | ||
# [[最小権限の原則]] は、漠然としており、「最小」は、「主観的なもの」です。企業環境においては、利害関係やニーズで変わってきます。 | # [[最小権限の原則]] は、漠然としており、「最小」は、「主観的なもの」です。企業環境においては、利害関係やニーズで変わってきます。 | ||
# ニーズは変化していき、場合によっては、この原則は、破綻します。 | # ニーズは変化していき、場合によっては、この原則は、破綻します。 | ||
− | |||
== ユーザーの権限 == | == ユーザーの権限 == | ||
− | + | ユーザーに対して、[[最小権限の原則]] を適用する場合には、 最低限のユーザーアクセス ( least user access, LUA ) や 最小権限のユーザーアカウント (least-privileged user account, LUA ) と呼ばれます。 | |
− | ユーザーに対して、[[最小権限の原則]] を適用する場合には、 最低限のユーザーアクセス ( least user access, | + | |
ユーザーには、必要最低限の権限を与えます。 | ユーザーには、必要最低限の権限を与えます。 | ||
行25: | 行22: | ||
[[システム管理者]] の権限が不要なユーザーには、[[root]] のような権限は必要ありません。 | [[システム管理者]] の権限が不要なユーザーには、[[root]] のような権限は必要ありません。 | ||
コンピュータリソースを利用するために、不必要なコマンドの実行を許可する必要はありません。 | コンピュータリソースを利用するために、不必要なコマンドの実行を許可する必要はありません。 | ||
− | |||
== ネットワークセグメントの分離と制限 == | == ネットワークセグメントの分離と制限 == | ||
サーバーは、そのサーバーが果たすべきサービスに不要なサーバーやネットワークへアクセスできる必要はありません。サーバーがサービスを提供したいサーバーやネットワーク以外にアクセスを許可する必要はありません。 | サーバーは、そのサーバーが果たすべきサービスに不要なサーバーやネットワークへアクセスできる必要はありません。サーバーがサービスを提供したいサーバーやネットワーク以外にアクセスを許可する必要はありません。 | ||
行37: | 行33: | ||
フロントエンド、ミドルエンド、バックエンド、オペレーションツールなどをコンポーネントごとにわけ、それぞれ、別のネットワーク([[VLAN]]) にし、必要最低限のアクセス(ポートを解放する)を許可することで、それぞれのコンポーネントに侵入された場合の汚染範囲や被害の範囲を最小化したり、切り離しが容易になります。 | フロントエンド、ミドルエンド、バックエンド、オペレーションツールなどをコンポーネントごとにわけ、それぞれ、別のネットワーク([[VLAN]]) にし、必要最低限のアクセス(ポートを解放する)を許可することで、それぞれのコンポーネントに侵入された場合の汚染範囲や被害の範囲を最小化したり、切り離しが容易になります。 | ||
− | |||
== OS での実装 == | == OS での実装 == | ||
− | + | [[OS]] での権限コントロールは、[[setuid]] や パーミッション などで行われます。 | |
− | [[OS]] での権限コントロールは、[[setuid]] や | + | * [[setuid]] / setgid |
− | + | ||
− | * [[setuid]] / | + | |
* [[任意アクセス制御]] (DAC) | * [[任意アクセス制御]] (DAC) | ||
− | ** | + | ** パーミッション |
* [[セキュアOS]] | * [[セキュアOS]] | ||
** [[SELinux]] | ** [[SELinux]] | ||
− | [[Webサーバ]] の [[Apache HTTP Server]] ([[httpd]]) では、HTTP のポート 80 を | + | [[Webサーバ]] の [[Apache HTTP Server]] ([[httpd]]) では、HTTP のポート 80 を bind しますが、1024 以下の[[TCP]] のポートを bind するには、 [[root]] の権限を必要とします。 |
− | [[httpd]] | + | [[httpd]] は、起動時に80ポートをbind するために[[root]] のユーザーの権限を必要ですが、ウェブコンテンツの配信に[[root]]の権限が必要ではありません。また、[[httpd]] のプロセスの[[脆弱性]]などをつく [[エクスプロイト]] によって、乗っ取られる可能性がありますが、[[root]] ユーザーで [[httpd]] が動作している場合、影響範囲が大きくなってしまいます。 |
− | [[httpd]] は、デフォルトで、[[httpd]] | + | [[httpd]] は、デフォルトで、[[httpd]] の最初のプロセスは[[root]]で動作しますが、実際にクライアントに対応する子プロセスは、は、www ([[OS]]によってユーザーが変わるかもしれません) というユーザーで実行されます。 |
− | + | ||
− | + | ||
+ | [[httpd]] の子プロセスは、www のユーザーで実行されるため、www ユーザーの持つ権限でしか、[[ファイルシステム]]やリソースにアクセスができません。 | ||
== 歴史 == | == 歴史 == | ||
− | |||
[[最小権限の原則]] は、 1975 年に The Protection of Information in Computer Systems (コンピュータシステムにおける情報保護)の論文で Jerome Saltzer, Michael Schroeder が提唱した概念です。 | [[最小権限の原則]] は、 1975 年に The Protection of Information in Computer Systems (コンピュータシステムにおける情報保護)の論文で Jerome Saltzer, Michael Schroeder が提唱した概念です。 | ||
− | |||
== 関連項目 == | == 関連項目 == | ||
* [[多層防御]] | * [[多層防御]] | ||
行66: | 行56: | ||
* [[root]] | * [[root]] | ||
* [[sudo]] | * [[sudo]] | ||
− | <!-- | + | <!-- vim: filetype=mediawiki |
− | vim: filetype=mediawiki | + | |
--> | --> |
2015年9月22日 (火) 20:44時点における最新版
最小権限の原則 (Principle of least privilege) とは、情報セキュリティ において、ユーザーやプロセス、プログラムが正当な目的に必要とされる情報やリソースにのみアクセスを許可する制限をする設計原則です。
読み方
- 最小権限の原則
- Principle of least privilege
- ぷりんしぷる おぶ りーすと ぷりびれっじ
概要
最小権限の原則 は、障害や悪意のある挙動からデータと機能を保護する場合に、考慮するべき重要な設計観点です。 最小権限の原則 は、セキュリティが突破された場合の被害を局限化するための発想です。
セキュアOS の SELinux などは、最小権限の原則 をアーキテクチャレベルで実装したものです。
最小権限の原則の有効性を損なう要因を2つ挙げます。
- 最小権限の原則 は、漠然としており、「最小」は、「主観的なもの」です。企業環境においては、利害関係やニーズで変わってきます。
- ニーズは変化していき、場合によっては、この原則は、破綻します。
ユーザーの権限
ユーザーに対して、最小権限の原則 を適用する場合には、 最低限のユーザーアクセス ( least user access, LUA ) や 最小権限のユーザーアカウント (least-privileged user account, LUA ) と呼ばれます。
ユーザーには、必要最低限の権限を与えます。
システム管理者 の権限が不要なユーザーには、root のような権限は必要ありません。 コンピュータリソースを利用するために、不必要なコマンドの実行を許可する必要はありません。
ネットワークセグメントの分離と制限
サーバーは、そのサーバーが果たすべきサービスに不要なサーバーやネットワークへアクセスできる必要はありません。サーバーがサービスを提供したいサーバーやネットワーク以外にアクセスを許可する必要はありません。
インターネットに対して、ウェブサイトを提供するときに、HTTP のアクセスを許可する必要がありますが、sshd に対して、インターネット からのアクセスを許可する必要はありません(オペレーション・メンテナンスのために、アクセスが必要な構成になっているかもしれません)。
システムに侵入された場合、影響範囲は、そのシステムが属するネットワークに波及する恐れがあります。 お互いに関連性のないサーバーは、同じネットワークに属する理由はありません。
フロントエンド(Webサーバ) と バックエンドの データベース があるとき、フロントエンドは、データベース に対するアクセスは必要ですが、データベース の sshd にアクセスする必要はありません。
フロントエンド、ミドルエンド、バックエンド、オペレーションツールなどをコンポーネントごとにわけ、それぞれ、別のネットワーク(VLAN) にし、必要最低限のアクセス(ポートを解放する)を許可することで、それぞれのコンポーネントに侵入された場合の汚染範囲や被害の範囲を最小化したり、切り離しが容易になります。
OS での実装
OS での権限コントロールは、setuid や パーミッション などで行われます。
Webサーバ の Apache HTTP Server (httpd) では、HTTP のポート 80 を bind しますが、1024 以下のTCP のポートを bind するには、 root の権限を必要とします。 httpd は、起動時に80ポートをbind するためにroot のユーザーの権限を必要ですが、ウェブコンテンツの配信にrootの権限が必要ではありません。また、httpd のプロセスの脆弱性などをつく エクスプロイト によって、乗っ取られる可能性がありますが、root ユーザーで httpd が動作している場合、影響範囲が大きくなってしまいます。 httpd は、デフォルトで、httpd の最初のプロセスはrootで動作しますが、実際にクライアントに対応する子プロセスは、は、www (OSによってユーザーが変わるかもしれません) というユーザーで実行されます。
httpd の子プロセスは、www のユーザーで実行されるため、www ユーザーの持つ権限でしか、ファイルシステムやリソースにアクセスができません。
歴史
最小権限の原則 は、 1975 年に The Protection of Information in Computer Systems (コンピュータシステムにおける情報保護)の論文で Jerome Saltzer, Michael Schroeder が提唱した概念です。