第6回 TDEポリシーとアプリケーションのサンドボックス化

面 和毅
サイオステクノロジー株式会社
インフラストラクチャービジネスユニット
Linuxテクノロジー部
OSSテクノロジーグループ
シニアマネージャ
2006/5/9

 サンドボックス化の例

 サンドボックス化の例として、/bin/bashをコピーして、サンドボックス化されたbashを作ってみましょう。

 まず、/bin/bashを/opt以下にコピーし、この/opt/bashプログラムをサンドボックス化して隔離します。POSTBOOTステート(通常運用状態)でサンドボックス化することにしましょう。

# cp -p /bin/bash /opt/bash
# lidsconf -A -o /opt/mybash -j READONLY
# lidsconf -A POSTBOOT -s /opt/mybash -o LIDS_SANDBOX -j ENABLE

 /opt/mybashを/opt/testdirディレクトリの中だけに閉じ込めて、さらにそのディレクトリ内では読み込み以外ができないようにします。

# lidsconf -A POSTBOOT -s /opt/mybash -o /opt/testdir -j READONLY

 このままでは本当に何もできませんので、/opt/mybashプログラムでも/bin/lsプログラムだけは使用できるようにします。

# lidsconf -A POSTBOOT -s /opt/mybash -o /bin/ls -j READONLY

 「mybash」が動作するために必要なライブラリを読み込むためのACLを加えていきます。

#!/bin/sh

/sbin/lidsconf -A POSTBOOT -s /opt/mybash -o LIDS_SANDBOX -j ENABLE
/sbin/lidsconf -A POSTBOOT -s /opt/mybash -o /opt/testdir -j READONLY
/sbin/lidsconf -A POSTBOOT -s /opt/mybash -o /bin/ls -j READONLY
/sbin/lidsconf -A POSTBOOT -s /opt/mybash -o /lib/libnss_compat-2.3.2.so -j READONLY
/sbin/lidsconf -A POSTBOOT -s /opt/mybash -o /lib/libnss_nis-2.3.2.so -j READONLY
/sbin/lidsconf -A POSTBOOT -s /opt/mybash -o /lib/libnss_files-2.3.2.so -j READONLY
/sbin/lidsconf -A POSTBOOT -s /opt/mybash -o /lib/libnsl-2.3.2.so -j READONLY
/sbin/lidsconf -A POSTBOOT -s /opt/mybash -o /lib/libncurses.so.5 -j READONLY
/sbin/lidsconf -A POSTBOOT -s /opt/mybash -o /lib/libdl.so.2 -j READONLY
/sbin/lidsconf -A POSTBOOT -s /opt/mybash -o /lib/libacl.so.1 -j READONLY
/sbin/lidsconf -A POSTBOOT -s /opt/mybash -o /lib/libattr.so.1 -j READONLY
/sbin/lidsconf -A POSTBOOT -s /opt/mybash -o /lib/librt-2.3.2.so -j READONLY
/sbin/lidsconf -A POSTBOOT -s /opt/mybash -o /lib/libpthread.so.0 -j READONLY
/sbin/lidsconf -A POSTBOOT -s /opt/mybash -o /lib/libc.so.6 -j READONLY
/sbin/lidsconf -A POSTBOOT -s /opt/mybash -o /lib/ld-linux.so.2 -j READONLY
/sbin/lidsconf -A POSTBOOT -s /opt/mybash -o /etc/passwd -j READONLY
/sbin/lidsconf -A POSTBOOT -s /opt/mybash -o /etc/group -j READONLY
/sbin/lidsconf -A POSTBOOT -s /opt/mybash -o /etc/terminfo/l/linux -j READONLY
/sbin/lidsconf -A POSTBOOT -s /opt/mybash -o /etc/inputrc -j READONLY
/sbin/lidsconf -A POSTBOOT -s /opt/mybash -o /etc/mtab -j READONLY
/sbin/lidsconf -A POSTBOOT -s /opt/mybash -o /etc/nsswitch.conf -j READONLY
/sbin/lidsconf -A POSTBOOT -s /opt/mybash -o /etc/ld.so.cache -j READONLY
/sbin/lidsconf -A POSTBOOT -s /opt/mybash -o /usr/lib/libtermcap.so -j READONLY
/sbin/lidsconf -A POSTBOOT -s /opt/mybash -o /usr/lib/locale/locale-archive -j READONLY
/sbin/lidsconf -A POSTBOOT -s /opt/mybash -o /usr/lib/gconv/gconv-modules -j READONLY
/sbin/lidsconf -A POSTBOOT -s /opt/mybash -o /usr/lib/gconv/ISO8859-1.so -j READONLY
/sbin/lidsconf -A POSTBOOT -s /opt/mybash -o /proc/meminfo -j READONLY

 VMwareイメージに、上記の手順で作成した/opt/mybashとそのACLが入っています。さっそくテストしてみましょう。なお、それぞれのステップでエラーメッセージがたくさん表示されますが、これはプログラムがACLでアクセス権を与えられていないファイルに対してアクセスをしたため表示されるものです。

 まず、root権限で/opt/testdirに移動して/opt/mybashを実行してみましょう。アクセス違反のエラーがいくつか出てくると思います。lsプログラムを実行すると、/opt/testdir以下のファイルやディレクトリが表示されます。

画面6 /opt/testdir以下のファイルやディレクトリ

 /opt/mybashから、ほかのディレクトリに移動(cd)しようとすると、「/opt/mybashがほかのディレクトリにアクセスしようとした」というアラートが表示され、

mybash: cd: /root: No such file or directory

というエラーになり、移動できません。

画面7 /opt/mybashから外へ出られない

 このディレクトリ内でls以外のコマンドを使用しようとすると、「/opt/mybashから、XXXのコマンドを使用しようとした」というアラートが表示され、

mybash: XXX: command not found

というエラーになります。

画面8 ls以外のコマンドを使用できない

 一般的なアプリケーションも同様にサンドボックス化して隔離できます。例として、Debian(sarge)でのbind-9をサンドボックス化するACLを示します。

#!/bin/sh

/sbin/lidsconf -A -s /usr/sbin/named -o LIDS_SANDBOX -j ENABLE
/sbin/lidsconf -A -s /usr/sbin/named -o /etc/ld.so.cache -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /usr/lib/liblwres.so.1.1.2 -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /usr/lib/libdns.so.16.0.0 -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /usr/lib/i686/cmov/libcrypto.so.0.9.7 -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /usr/lib/i686/cmov/libnss_files.so.2 -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /usr/lib/i686/libnss_files.so.2 -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /usr/lib/libnss_files.so.2 -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /usr/lib/libisccfg.so.0.0.11 -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /usr/lib/libisccc.so.0.1.0 -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /usr/lib/libisc.so.7.1.5 -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /usr/share/zoneinfo/Asia/Tokyo -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /lib/libnsl-2.3.2.so -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /lib/libnss_nis-2.3.2.so -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /lib/libnss_files-2.3.2.so -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /lib/tls/libnss_files-2.3.2.so -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /lib/libnss_compat-2.3.2.so -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /lib/libnis_compat-2.3.2.so -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /lib/libpthread-0.10.so -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /lib/libc-2.3.2.so -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /lib/libdl-2.3.2.so -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /lib/ld-2.3.2.so -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /etc/nsswitch.conf -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /etc/passwd -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /etc/group -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /etc/mtab -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /etc/fstab -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /proc/stat -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /dev/null -j WRITE
/sbin/lidsconf -A -s /usr/sbin/named -o /dev/random -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /dev/log -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /sbin/insmod -j READONLY

/sbin/lidsconf -A -s /usr/sbin/named -o /etc/bind -j READONLY
/sbin/lidsconf -A -s /usr/sbin/named -o /var/cache/bind -j READONLY

/sbin/lidsconf -A -s /usr/sbin/named -o CAP_NET_BROADCAST 53.953 -j GRANT

/sbin/lidsconf -A -s /usr/sbin/named -o CAP_NET_BIND_SERVICE 53,953 -j GRANT
/sbin/lidsconf -A -s /usr/sbin/named -o CAP_SETGID -j GRANT
/sbin/lidsconf -A -s /usr/sbin/named -o CAP_SETUID -j GRANT
#/sbin/lidsconf -A -s /usr/sbin/named -o LIDS_SOCKET_BIND -j DISABLE
/sbin/lidsconf -A -s /usr/sbin/named -o /var/log/ksymoops -j APPEND
/sbin/lidsconf -A -s /usr/sbin/named -o /var/run -j WRITE
/sbin/lidsconf -A BOOT -s /bin/chmod -o /var/run -j WRITE

 このようなACLの実例は、LIDS本家やLIDS-JPからダウンロードできます。

【LIDS本家】
http://www.lids.org

【LIDS-JP】
http://www.selinux.gr.jp/LIDS-JP

 これまでLIDSの諸機能を説明してきましたが、次回からはlidsconfコマンドの説明や、ACLの作成について説明します。

3/3
 

Index
TDEポリシーとアプリケーションのサンドボックス化
  Page1
Trusted Domain Enforcementとは何か
すべてのプロセスに強制されるTDEポリシー
TDEポリシーの例
  Page2
アプリケーションのサンドボックス化
LIDSでのサンドボックス化のアプローチ
Page3
サンドボックス化の例


Profile
面 和毅(おも かずき)

サイオステクノロジー株式会社
インフラストラクチャービジネスユニット Linuxテクノロジー部
OSSテクノロジーグループ
シニアマネージャ

 学生時代よりUNIXに親しむ。1997年からサーバ構築およびセキュリティ全般を扱う仕事に従事、Linuxを使い始める。

 現在はLIDSの普及活動に注力。LIDSユーザ会(LIDS-JP)の立ち上げやLIDS関連文書の日本語化、LIDSを用いたシステム構築の紹介などを行っている。また、サイオステクノロジーでビジネス面でのLIDSの普及活動に注力している。

 2005年12月より、LIDS Teamに参加し、LIDSの公式な開発チームの一員として活動している。

Security&Trust記事一覧


Security&Trust フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Security & Trust 記事ランキング

本日 月間