【図解】アクセス制御の種類,モデル/方式(任意/強制/RBAC)と実装例〜ネットワークシステムセキュリティの基礎〜

アクセス制御とは

IT にはセキュリティが欠かせませんが、そのセキュリティの基本的な要素の 1 つがアクセス制御です。

アクセス制御は、『誰から (From) 何へ (To) アクセスができるかを定義したルールのことですが、アクセス制御には多くの種類があり、その種類によって From や To の内容が異なります。

例えば NW 機器のアクセスリストによるアクセス制御は From や To が IPアドレスですが、Windows や Linux のファイルシステムへのアクセス制御は、From がユーザ、To はファイルです。

概念はよく使われますが、体系的に整理された資料があまり見当たらなかったので整理してみました。

アクセス制御の種類

アクセス制御は大きく以下の3種類に分かれます。

  1. ネットワークレベルのアクセス制御
  2. サービスレベルのアクセス制御
  3. アプリケーションレベルのアクセス制御

1. ネットワークレベルのアクセス制御

ネットワークレベルのアクセス制御は、経路途中のネットワーク機器の設定や経路終着点のホスト(サーバ)のファイアウォールの設定等により通信許可拒否を制御するものです。最近では許可・拒否に加えて『認証』という制御もあります。

許可・拒否については、ルータや L3 スイッチスイッチのアクセスリストによる送信元/宛先 IP や TCP/UDP ポートによるものが代表的です。また、ファイアウォールのアクセスリストの場合は、ステートフルインスペクションにより『通信の始まりがこちらの場合は許可するけど逆から始めた場合は拒否する』といった、さらに細かな制御ができます。ステートフル・インスペクションの詳細については下記ページも併せてご参照下さい。

【図解】ステートフル・インスペクションの仕組み〜TCP/UDPの状態を監視するファイアウォール機能〜
【図解】ステートフル・インスペクションの仕組み〜TCP/UDPの状態を監視するファイアウォール機能〜
ステートフル・インスペクションとは ステートフル・インスペクション(State...

認証については、代表的なものは IEEE802.1x 認証です。これは認証が成功した(例えば ID パスワードを入力し、合っていた)ら以降の通信を許可するけど認証に失敗したらすべて拒否する、といったアクセス制御です。IEEE802.1x 認証は Radius サーバおよびサーバ証明書が必須です。

それ以外にも "CaptivePortal" という『Web で認証させて成功した場合のみ通信を許可する』という機能が、無線コントローラや UTM で実装されてます。認証情報は Radius に限らず、LDAP や NW 機器内部のローカルユーザ情報等が使えることが多いです。

2. サービスレベルのアクセス制御

サービスレベルのアクセス制御は、サービス (アプリケーション) の設定によってネットワーク経由でそのサービスを使わせたり使わせなかったりするものです。例えば OpenLDAP では BIND 処理によってユーザを識別し、『その BIND ユーザはどのような検索ができるか』というユーザレベルの制御を行います。

OpenLDAP のケースでは IP を対象にした制御は行いませんが、例えば postfix では mynetworks の設定で『どのIPからの SMTP 接続をリレー(転送)するか』という IP を対象にした制御を行うこともあります。何を対象にするかはそのサービスによってまちまちです。

ネットワークレベルのアクセス制御との境はどこにあるかというと、受信したパケットを OS がサービス (httpd, slapd, postfix 等) へ渡すかどうか、です。

3. アプリケーションレベルのアクセス制御

ネットワーク経由ではなく、アプリケーションの内部でアクセス制御が為されることもあります。例えば Java や C++ 等のオブジェクト指向プログラミング言語では、あるオブジェクトクラス内の関数や変数を、別のオブジェクトクラスの関数から呼び出せるように作ることが可能ですが、その際にどのクラスから呼び出せるかを制御することができます。これにより意図せぬ誤動作(アプリケーションのバグによる被害)を防ぐことができるのです。

アクセス制御方式(モデル)

アクセス制御方式、あるいはアクセス制御モデルは大きく 3 つに分かれます。1 つ目は DAC、2 つ目は MAC、3 つ目は RBAC です。

任意アクセス制御: DAC (Discretionary Access Control)

任意アクセス制御 (DAC) は、あるシステム上に一般ユーザが入り乱れ、自身の管理下にあるリソースへのアクセス制御を自身が決定できる方式のことです。

例えば Windows や Linux にログインしたユーザは、自身が作成したファイルは「誰に読み取り、書き込み、実行をさせてよいか」といったアクセス制御を自身で設定することができます。以下の例では、Linux のファイルシステムで一般ユーザがアクセス権を変えている様子を示しています。

強制アクセス制御: MAC (Mandatory Access Control)

強制アクセス制御 (MAC) は、唯一のルール定義者がアクセス制御のルールを決定する方式のことです。つまり、他の何者もこのルールを変更できないということです。

NW機器のアクセス制御を始め、多くのアクセス制御方式がこれにあたります。以下ではMACの実装で有名な SELinux によるアクセス制御を例に示します。

SELinux は OS インストール時から10万以上のアクセス制御ルールが適用されており、一般的な使い方をする上では原則、設定変更は必要ありません。SELinux では OS リソースに「コンテキスト」と呼ばれるラベルを付与し、どのラベルからどのラベルへのアクセスを許可するかが決められています。

SELinux のもう少し詳しい仕組みについては以下を参照下さい。

【図解/初心者向け】SELinuxとは?〜仕組みやメリット・効果の基礎入門解説〜
【図解/初心者向け】SELinuxとは?〜仕組みやメリット・効果の基礎入門解説〜
SELinuxとは ~概要と仕組み~ SELinux とはSecure-Enha...

役割ベースアクセス制御: RBAC (Role-Based Access Control)

DAC と MAC の中間的なアクセス制御役割ベースアクセス制御 (RBAC) です。

この RBAC のモデルは例えば Cisco 等の NW 機器の管理コンソールへのログイン時に使われたりします。つまり、全ての操作が可能なユーザとは別のユーザを作成し、そのユーザに showコマンドと clear コマンドのみを使わせる、等の一部の管理権限のみを渡すような仕組みが可能となります。

その他にも例えば Web サーバの管理において、システム管理者が全権を担うが、コンテンツの差し替えが頻繁にあるようなケースでは実務上毎回システム管理者が実施するのも大変です。そんなときは実務の中の責任者を「サイト管理者」と定め、FTP で特定ディレクトリのみを自由に差し替える権限を与えるような構成を組むことも考えられます。この構成も RBAC モデルです。

この定義からも分かる通り、実はアクセス制御方式が MAC であるか RBAC であるかは結構曖昧です。一般的に NW 機器等の管理コンソールの初期設定は root や administrator といったアカウントでログインすることが可能で、この初期状態においては MAC になりますが、その後それよりも少し権限を減らした管理アカウントを作ると RBAC になります。

また、Linux においても root でログインすることはあまりされず、一般ユーザが su や sudo を使って一時的に管理者権限となって設定変更を行うことが多いです。この場合は MAC なのか RBAC なのかは解釈次第です。

ですが DAC/MAC/RBAC はあくまでモデル (理想) であり、実装 (現実) はそこから離れることは当然起こりうるので、このモデルと実装の乖離については深く考える必要はありません。

アクセス制御の実装例の種類・方式の分類

一例ではありますが、アクセス制御の実装例の種類や方式がどうなっているかを分類してみました。(諸説あり)

種類実装例方式FromTo主な操作
Network
Level
Access
Control
NW機器(ルータやFW等)の ACLMAC or
RBAC
IP + { tcp | udp }IP + { tcp | udp }許可/拒否/認証
Windows FW の ACLMAC or
RBAC
IP + { tcp | udp }
+ Program
IP + { tcp | udp }
+ Program
許可/拒否
firewalld の ACLMAC or
RBAC
IP + { tcp | udp }IP + { tcp | udp }許可/拒否
Service
Level
Access
Control
httpd の<Directory>MAC or
RBAC
IP-許可/拒否/認証
postfix の mynetworksMAC or
RBAC
IP-許可/拒否
slapd の ACLMAC or
RBAC
Bind DN
(ログインユーザ)
LDAPユーザおよび属性許可/拒否
NTFS の PermissionDACWindowsユーザファイル/ディレクトリ許可/拒否
XFS の PermissionDACLinuxユーザファイル/ディレクトリ許可/拒否
App.
Level
Access
Control
SELinux の AV ruleMACSource Context
(プロセスにラベル付けされる)
Target Context
(fileやtcp/udp port 等のOS管理リソースにラベル付けされる)
許可/拒否
Java のアクセス制限MACPackage/ClassClass内の変数/関数許可/拒否