3. 構築
3.5. セキュリティポリシーの定義
3.5.5. セキュリティポリシーの妥当性確認
Ⅰ‑168 Copyright © 2003 IPA, All Rights Reserved.
Ⅰ‑169 Copyright © 2003 IPA, All Rights Reserved.
バと同様のセキュリティ属性値を付与することで同等の環境をつくることができる。
今回は、/bin/sh を/tmp/sh にコピー後、新規プロファイル testprofile を作成し、そ れぞれ以下の特権を付与した。また、同時にテスト役割である testrole を作成しプロ ファイル testprofile を割当てた。
表 3‑99 ファイル属性値
ファイル名 ラベル 強制特権 許容特権
/tmp/sh ADMIN̲LOW file̲dac̲write file̲mac̲write
all
表 3‑100 プロセス属性値
ファイル名 user group label clearance 特権
/tmp/sh www www public service
public service
net̲privaddr
以上の設定が完了すると、testrole になり以下のコマンドを実行してみる。
リスト 3‑125 id コマンドの実行
$ /tmp/sh
$ id
uid=80(www) gid=80(www) ←実行ユーザが www であることがわかる。
次に現在の機密ラベルを確認してみると、[PUBLIC Service]であることも確認できる。
リスト 3‑126 plabel コマンドの実行
$ plabel
16300: [PUBLIC WEB] ← 現在の SL は[PUBLIC Service]
リストに示すのは、ppriv コマンドを実行した結果である。実行結果より、この sh は net̲privaddr 特権を持っていることがわかる。この特権は、プロセス属性値より継承可能 特権より継承されたものである。
リスト 3‑127 ppriv コマンドの実行
$ ppriv
16301: net̲privaddr ← 継承可能特権である net̲privaddr を継承 していることを確認できる。
次に、apache のログファイルを参照してみる。
Ⅰ‑170 Copyright © 2003 IPA, All Rights Reserved.
リスト 3‑128 ディレクトリの参照
$ cd /usr/local/apache
$ ls ‑l total 22
drwxr‑xr‑x 2 root other 512 1 月 7 16:08 bin drwxr‑xr‑x 2 root other 512 12 月 26 14:34 cgi‑bin drwxr‑xr‑x 1 root other 0 1 月 1 1970 conf drwxr‑xr‑x 3 root other 1024 12 月 26 14:34 htdocs drwxr‑xr‑x 3 root other 3584 1 月 7 16:09 icons drwxr‑xr‑x 3 root other 1024 12 月 26 14:34 include drwxr‑xr‑x 2 root other 512 12 月 26 14:34 libexec drwxr‑xr‑x 1 root other 0 1 月 1 1970 logs drwxr‑xr‑x 4 root other 512 12 月 26 14:34 man drwxr‑xr‑x 2 root other 512 12 月 26 14:34 proxy
すべてのディレクトリ及びファイルは、機密ラベルが[ADMIN̲LOW]であるため参照するこ とが可能である。
3.5.5.3. まとめ
本節では、Web サーバに関してポリシーの検証をおこなった。Web サーバは、ユーザ www で動作しているため DAC のアクセス制御も有効になっていた部分もある。しかし、root で 動作させても MAC に関するアクセス制御は同様に機能するため機密ラベルが[ADMIN̲LOW]で ある設定ファイル、ログファイルは参照することは可能だが書込みができないため保護さ れている。本ポリシーは、Web サーバのみならず他のアプリケーションでも同様に定義する ことができる。サーバが動作する、機密ラベルと設定ファイル、コンテンツ等を隔離する ことが重要である。また、その際に必要になる、特権は極力最小限に抑える。どうしても 必要になる特権に関しては、特権の組み合わせを有効に活用し設定する必要があると考え られる。
3.5.5.4. インターネットサーバーの要塞化
これまでは、外部からのアクセスを許可するサービスに対して、設定ファイルやコンテ ンツファイルおよびログファイル等について、機密ラベルを分けることにより、それらの 保護を実現することを説明した。
ここでは、サーバの要塞化を実現する、より高度なセキュリティが要求される場合の、
内部からのアクセスと外部からのアクセスの隔離、およびサービスと他のプロセスまたは ファイル等の隔離をすることによる、その実現方法について説明する。
なお、表 3‑101 はここで解説するラベル定義の例である。また、リスト 3‑21 はこれに 対応するラベル構成を定義した label̲encodings ファイルの完全な例である。
Ⅰ‑171 Copyright © 2003 IPA, All Rights Reserved.
表 3‑101 ラベル構成
# ラベル 種別 主な割り当て対象 設定値
1 ADMIN̲LOW 格付け システムのアプリケーションおよび定義 ファイル
標準 2 ADMIN̲HIGH 格付け システムのログファイルや監査ファイル 標準 3 PUBLIC 格付け 外部向けのサービスおよび定義ファイル 50 4 PRIVATE 格付け 内部向けのサービスおよびデータファイ
ル
70 5 services コンパートメント サービス全体を表す 51‑80
6 web コンパートメント httpd プロセス用 51,56
7 script コンパートメント CGI プロセス用 61,56 8 mail コンパートメント SMTP および DNS サービス用 71,76 9 contents コンパートメント Web および FTP の定義ファイルやコンテン
ツ
56 10 mailconf コンパートメント SMTP および DNS の定義ファイルやデータ
ベース
76
高度なラベル構成のネットワークでは、アクセスを許可するサービスは独立したコン パートメントに隔離され、また各コンパートメント内では定義ファイルやコンテンツまた データベースなどのサービスの提供に必要となるファイルに対して、サービスを提供する プロセスが優位なラベルで実行されるものとする。
さらに、外部のアクセスに対して内部のアクセスが優位なラベルを取得できるようにし、
各サービスに対する外部からのアクセスによる派生プロセス対して、内部のアクセスによ る派生プロセスが優位なラベルで実行されるものとする。
これにより、外部に公開しているサービスのセキュリティ上の問題により、仮に不正な プロセスが派生することがあった場合において、そのようなプロセスは外部に公開してい るサービスと同一のラベルとなることが考えられるが、内部のアクセスによる派生するプ ロセスや内部のネットワークアクセス自体に対して直接的な参照を困難にすることが可能 となる。
Ⅰ‑172 Copyright © 2003 IPA, All Rights Reserved.
ADMIN_LOW PUBLIC ADMIN_HIGH
優位度
低 高
services
web script
PRIVATE
mail mailconf contents
services
web mail
図 3‑33 マルチラベルのラベル空間
参考として、apache、bind、sendmail については、このラベル構成における設定の例を 示す。
(1) apache
マルチラベルを考慮したネットワークを構成した際のポリシーを以下のように定義 する。
Ⅰ‑173 Copyright © 2003 IPA, All Rights Reserved.
ADMIN_LOW PUBLIC ADMIN_HIGH
services PRIVATE
web script
contents
services
web
logfile httpd
html,CGI Files 外部からの
ネットワークアクセス に対する許可範囲
内部からの ネットワークアクセス
に対する許可範囲
suEXEC
conf Files
図 3‑34 マルチラベル構成時のイメージ図
httpd の SL は[PUBLIC WEB]とし、CGI は Apache の機能である suEXEC を利用す る。また、その際の SL は[PUBLIC SCIRPT]とし httpd の SL とは隔離する。
コンテンツファイルの SL は[PUBLIC CONTENTS]とし、CGI ファイルも同様とす る。
apache に関する設定ファイルは、[ADMIN̲LOW]としログファイルは[PUBLIC web]
として保存する。
(A) ファイル属性値
httpd プロセスの uid が www であるため、ログファイルに書き込むためには file̲dac̲write および file̲mac̲write の特権が必要になる。そこで、ファイル及 びディレクトリのパーミッション、機密ラベルを変更し、これらの特権を不要とす る。以下のコマンドは、secadmin によって実行する。
リスト 3‑129 ファイル属性値設の定(secadmin 役割)
$ chown www /usr/local/apache/logs
$ setlabel public web /usr/local/apache/logs
Ⅰ‑174 Copyright © 2003 IPA, All Rights Reserved.
(B) プロセス属性値
次の属性をサービス用の webservice プロファイルに追加する。
表 3‑102 プロセス属性
# ファイル名 User Group Label Clearance 特権
1 /usr/local/apache/
bin/apachectl
www www PUBLIC web
PUBLIC web script
net̲privaddr
リスト 3‑130 機密ラベルの設定(secadmin 役割)
$ setlabel ‑s public contents /export/contents /export/cgi‑bin
次に、Apache のログファイルおよび設定ファイルのディレクトリとファイルの SL を変更する。この作業も secadmin で行う。
リスト 3‑131 機密ラベルの設定(secadmin 役割)
$ find /usr/local/apache/logs /usr/local/apache/conf ‐exec ¥n
> setlabel ‑s private web {} ¥;
(C) プログラムの修正(suEXEC)
CGI スクリプトは、Apache の機能である suEXEC を利用してスクリプトの所有者 で実行するすることはできる。これにより、悪意のあるものや記述を間違ったスク リプトによって他のユーザのファイルおよびディレクトリに影響を及ぼすことはな い。しかし、Web サーバーと CGI が同じ SL で実行されているため、CGI スクリプト の所有者のコンテンツは保護することはできない。そこで、suEXEC を httpd とは別 の コ ン パ ー ト メ ン ト で 動 作 す る よ う に 変 更 す る 。 変 更 に あ た っ て は 、 src/support/suexec.c のソースファイルを編集し再コンパイルする必要がある。作 業は特権シェル環境でおこなう。編集する部分をリスト 3‑132 および
リスト 3‑133 に示す。
Ⅰ‑175 Copyright © 2003 IPA, All Rights Reserved.
リスト 3‑132 suexec.c:header
#include "suexec.h"
#ifndef TSOL
#define TSOL
#endif
#ifdef TSOL
#include <tsol/label.h>
#include <tsol/priv.h>
#endif /* TSOL */
Ⅰ‑176 Copyright © 2003 IPA, All Rights Reserved.
リスト 3‑133 suexec.c:main() /*
* Error out if attempt is made to execute as root group
* or as a GID less than GID̲MIN. Tsk tsk.
*/
if ((gid == 0) ││ (gid < GID̲MIN)) {
log̲err("crit: cannot run as forbidden gid (%d/%s)¥n", gid, cmd) exit(108);
} /*
* Change UID/GID here so that the following tests work over NFS.
*
* Initialize the group access list for the target user,
* and setgid() to the target group. If unsuccessful, error out.
*/
#ifdef TSOL {
bclabel̲t label;
int p;
log̲err("changing process label¥n");
getcmwplabel(&label); /* get current process label */
if (stobsl("‑ Services", bcltosl(&label), 0, &p) != 1) { log̲err("unrecognized label at %d¥n", p);
exit(109);
}
if (stobsl("+ CGI", bcltosl(&label), 0, &p) != 1) { log̲err("unrecognized label at %d¥n", p);
exit(109);
}
if (setcmwplabel(&label, SETCL̲SL) != 0) { log̲err("unable to set label¥n");
exit(109);
}
if (set̲inheritable̲priv(PRIV̲SET, NULL) != 0) { log̲err("unable to clear privilege set¥n");
exit(109);
} }
#endif /* TSOL */
変更の際に利用したシステムコールの説明は以下のとおりである。
getcmwplabel() 現在の CMW ラベルを取得する。
bcltosl() CMW ラベルのバイナリを SL にする。
stobsl() ASCII 表示の SL をバイナリに変換する。
setcmwplabel() プロセスの CMW ラベルをセットする。
set̲inheritable̲priv() 現在のプロセスの privilege をセットする。
また、これをコンパイルするために Makefile を修正する。次のオプションを修
Ⅰ‑177 Copyright © 2003 IPA, All Rights Reserved.
正する。
リスト 3‑134 Makefile の変更 suexec: suexec.o
$(CC) $(CFLAGS) ‑ltsol ‑o suexec $(LDFLAGS) suexec.o $(LIBS)
以上の変更が終わったら、configure を行った場所に移動し再コンパイルを行う。
リスト 3‑135 再コンパイル
# cd ../..
# make
# cp src/support/suexec /usr/local/apache/bin
ま た 、 変更し た suexec を 実 行 する 際 に は、compartments を 変 更 する た め proc̲setsl と proc̲tranquil の特権が必要になる。また、それぞれの uid で実行す るので proc̲setid も併せて必要になる。この作業は、secadmin によっておこなう。
表 3‑103 ファイル属性値
# ファイル名 ラベル 強制特権 許容特権
1 /usr/local/apache/bin/suexec ADMIN̲LOW proc̲setsl proc̲tranquil proc̲setid
all
リスト 3‑136 ファイル属性値の設定
$ setfpriv ‑s ‑f proc̲setsl,proc̲tranquil,proc̲setid /usr/local/apache/bin/suexec
(2) BIND
この構成では、F/W 内に存在する内部 DNS の cache サーバとしても利用することが できる。
ここでは、net̲mac̲read 特権と net̲reply̲equal 特権を利用する。これにより外部 と内部に対して異なるラベルを割り当てた高度なラベル構成のネットワークアクセス 対してプロセスが対応することが可能となる。