第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記事一覧 |
- Windows起動前後にデバイスを守る工夫、ルートキットを防ぐ (2017/7/24)
Windows 10が備える多彩なセキュリティ対策機能を丸ごと理解するには、5つのスタックに分けて順に押さえていくことが早道だ。連載第1回は、Windows起動前の「デバイスの保護」とHyper-Vを用いたセキュリティ構成について紹介する。 - WannaCryがホンダやマクドにも。中学3年生が作ったランサムウェアの正体も話題に (2017/7/11)
2017年6月のセキュリティクラスタでは、「WannaCry」の残り火にやられたホンダや亜種に感染したマクドナルドに注目が集まった他、ランサムウェアを作成して配布した中学3年生、ランサムウェアに降伏してしまった韓国のホスティング企業など、5月に引き続きランサムウェアの話題が席巻していました。 - Recruit-CSIRTがマルウェアの「培養」用に内製した動的解析環境、その目的と工夫とは (2017/7/10)
代表的なマルウェア解析方法を紹介し、自社のみに影響があるマルウェアを「培養」するために構築した動的解析環境について解説する - 侵入されることを前提に考える――内部対策はログ管理から (2017/7/5)
人員リソースや予算の限られた中堅・中小企業にとって、大企業で導入されがちな、過剰に高機能で管理負荷の高いセキュリティ対策を施すのは現実的ではない。本連載では、中堅・中小企業が目指すべきセキュリティ対策の“現実解“を、特に標的型攻撃(APT:Advanced Persistent Threat)対策の観点から考える。
|
|