• 検索結果がありません。

セキュリティポリシーの妥当性確認

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 特権を利用する。これにより外部 と内部に対して異なるラベルを割り当てた高度なラベル構成のネットワークアクセス 対してプロセスが対応することが可能となる。