LIDSとは
LIDSとは
次に、LIDS(Linux Intrusion Detection System)の紹介を行います。LIDSは、Linux上でのroot権限に制限を加える、フリーのセキュアOSの一種です。
LIDSは、1999年にLinux Kernel 2.2用のものが、Huagang Xie氏とPhilippe Biondi氏によってリリースされ、その後、Xie氏を中心にコミュニティベースで開発が進められています。
LIDSの特徴
LIDSの特徴を説明するのであれば、次の一言に尽きるでしょう。
「とにかく、設定が直感的である」
その理由は、LIDSとその他のセキュアOSとの違いにも繋がっています。
LIDSでは、他のセキュアOS製品のように「ロール」を用いたユーザごとの権限付与などを考慮していません。これは、LIDSがもともと「rootの強大な権限を分割して削減していこう」ということを主目的に生まれたものだからです。
そのため、LIDSでは「/etcディレクトリ以下はシステム全体で書き込み禁止である」というように権限を与えていきます。つまり、rootを含むユーザすべてに対して、ファイル・ディレクトリへの絶対的な制限をかけていくことになります。
LIDSで与えられたアクセス権は、Linuxの伝統的なrwxアクセス権の次に参照されます。つまり、LIDSを導入したシステム上でファイル・ ディレクトリにアクセスを行った際には、通常のrwxでのアクセス権チェックをへて、そこで承認されたもののみが、LIDSでのアクセス権をチェックされ ることになります。
また、LIDSでは「あるプロセスには、このような権限のみを与える」という最小特権の付与を行い、プロセスに対して制限をかけていきます。この設定方法も非常に直感的になっています。
ファイルに対するアクセス権
LIDSではファイル・ディレクトリに対して、以下の4つのアクセス権を付与することができます。
- DENY(拒否)
- READONLY(読み込みのみ)
- APPEND(追記可能)
- WRITE(書き込み可能)
「DENY(拒否)」というアクセス権を与えられたファイル・ディレクトリにはアクセスすることができなくなります。lsコマンドでディレクトリの中を見ようとしても、「アクセス不可」である旨のログが表示されるだけになります。
「READONLY(読み込みのみ)」のアクセス権を与えられたファイル・ディレクトリに関しては、読み込みのみが許可されます。
「APPEND(追記可能)」のアクセス権を与えられたファイル・ディレクトリに関しては、読み込みと追記のみが許可されます。ファイルの変更などは許可されません。
「WRITE(書き込み可能)」のアクセス権を与えられたファイル・ディレクトリに関しては、読み込みと追記、及び書き込みが許可されます。この場合は、LIDSで制限をかけていない場合と同じになります。
プロセスに対するケーパビリティ
プロセスに対しての特権の制御に関しては、LIDSではLinuxケーパビリティ(Linux capability)を用いています。Linuxケーパビリティとは、通常のLinux上の特権を29種類に細分割したものになります。このケーパビリティという考え方は、LinuxではKernel 2.4から標準で組み込まれていたものですが、LIDSでは標準のLinuxの場合よりも使いやすい形で、プロセスのケーパビリティをコントロールすることができます。
例えばLIDS導入以前の通常のLinuxでは、1024番以下のポートをプロセスに使用させるためには特権を付与しなくてはなりませんでした。そ のため、システム時間の変更やネットワーク操作などのその他の特権も含めて、すべての権限をそのプロセスに付与していた形になっていました。したがって、 そのプロセスの脆弱性を突かれた場合には、それらの特権が悪用されてしまいます。
しかし、LIDSではCAP_NET_BIND_SERVICEというケーパビリティのみをそのプロセスに与えることにより、1024番以下のポー トを使用させて、その他の権限を与えないということが可能になりました。そのため攻撃者がそのプロセスの脆弱性を突いたとしても、 CAP_NET_BIND_SERVICEというケーパビリティしか持っていないため、ネットワーク設定などその他の特権を悪用することができなくなって います。
ACLの設定方法
LIDSでは、すべてのACL(Access Control List)を「lidsconf」というコマンドを用いて設定します。構文は次のようになります。
lidsconf -A -s 「Subject」 -o 「Object」 -j 「権限」
「Subject」はそのままの意味で主語のこと、「Object」とは目的語の意味になり、「"Subject"は、"Object"に対して、"権限"ができる」という意味になります。
実際に設定をする場合、「Subject」にはプログラムが入り、「Object」には通常、ファイル・ディレクトリやケーパビリティが入ります。「Subject」を省略した場合には、そのファイル・ディレクトリに対するデフォルトの権限が設定されます。