第8回 Multi Level Securityで機密ファイルを管理する
古田 真己サイオステクノロジー株式会社
インフラストラクチャービジネスユニット
Linuxテクノロジー部
OSSテクノロジーグループ
2006/11/28
実際の動作をテストする
クライアントであるWindows機にはVNCをインストールしてください。今回はRealVNCを使用します。downloadページからvnc-4_1_2-x86_win32.exeを入手し、インストールします。
RealVNCをインストールしたら、早速接続してみます。接続先には「(サーバのIPアドレス):3」を指定してみてください。 まずは、インストール時に設定した一般ユーザーでログインしてみましょう。FC6の標準的なGNOMEデスクトップが表示されたらGNOME端末から自分のセキュリティコンテキストを確認してみます。
[user@localhost ~]# id -Z system_u:system_r:initrc_t:SystemLow-SystemHigh [user@localhost ~]# newrole -r user_r Authenticationg user. パスワード(P): system_u:user_r:user_t:SystemLow-SystemHigh is not a valid context |
図8 ログイン後のセキュリティコンテキストの確認と変更 |
gdmからログインするとセキュリティコンテキストは本来「user_u:user_r:user_t:SystemLow」となるはずが、「system_u:system_r:initrc_t:SystemLow-SystemHigh」となってしまい、正しくひも付かないようです。
いったんログアウトして、rootユーザーでログインし直し、この問題の修正を行います。
[root@localhost selinux]# sestatus SELinux status: enabled SELinuxfs mount: /selinux Current mode: permissive Mode from config file: permissive Policy version: 21 Policy from config file: mls [root@localhost ~]# newrole -r secadm_r Authenticationg root. パスワード(P): [root@localhost ~]# getenforce [root@localhost ~]# Permissive |
図9 rootユーザーでsecadm_rにロール変更しモードを確認する |
セキュリティコンテキストを調整する
ログインコンテキストが正しくひも付かない理由は、実はFC6のMLSポリシーのコンパイル時の設定に起因しています。
前回まで、リファレンスポリシーのレイヤ構造、ポリシーモジュールの構成などについて触れてきました。思い出していただきたいのは次の2点です。
- FC5から採用されたバージョン2系のリファレンスポリシーは、「admin」「apps」「kernel」「services」「system」の5つのレイヤ構造になっており、それぞれにアプリケーションやカーネルのポリシー定義が分けられている
- それぞれのポリシー定義はバイナリポリシーモジュールと呼ばれる「*.pp」ファイルとして別々にコンパイルすることもできるし、ベースモジュールである「base.pp」に含めておくこともできる
今回の問題はFC6のMLSで2.にxserverのポリシーが含まれていないことで発生しています。gdm実行時のセキュリティコンテキスト(ドメイン)を調べると「system_u:system_r:initrc_t:SystemLow-SystemHigh」になっていることが分かります。これは本来なら「system_u:object_r:xdm_t:SystemLow-SystemHigh」になるべきものです。
[root@localhost~]# ps awwxZ|grep Xorg|grep -v grep system_u:system_r:initrc_t:SystemLow-SystemHigh 2373 tty7 Ss+ 0:01 /usr/bin/Xorg :0 -br -audit 0 -auth /var/gdm/:0.Xauth vt7 |
図10 gdmプロセスのセキュリティコンテキスト |
gdmは「xdm_t」ドメインでは動作していません。そのため、ログインしたユーザーに適切なドメインをひも付けてセッションを開始するという、ログイン認証プログラムとしての役割が果たせません【注2】。
【注2】 SELinuxのログインは、「sshd_t」(sshd)や「xdm_t」(gdm、xdm)、「local_login_t」(login)といったログイン認証プログラムが/etc/selinux/(ポリシー名)/contexts/default_contexts ファイルを参照してログインするユーザーを取り扱うため、「initrc_t」や「unconfined_t」などログイン認証プログラムに相応しくないドメインでは正常に動作しません |
前回までの手順を参考に、MLSのポリシーソースをインストールしてこの問題を解決します。
●ポリシーソースのインストール
まず、インストールされているポリシーのソースRPMを調べ、同じものをダウンロードします。
[root@localhost ~]# rpm -q --qf '%{sourcerpm}\n' selinux-policy-mls selinux-policy-2.4.3-10.src.rpm [root@localhost ~]# wget ftp://download.fedora.redhat.com/pub/fedora/linux/core/development/ source/SRPMS/selinux-policy-2.4.3-12.src.rpm |
図11 ポリシーソースのダウンロード |
さらに、ポリシーを再コンパイルするために必要なパッケージを追加します。
[root@localhost ~]# yum -y install gcc rpm-build checkpolicy selinux-policy-devel |
図12 必要なパッケージのダウンロード |
実際の作業は前回までに触れていますが、以下の手順を踏めばOKです。
- 「/usr/src/redhat/SOURCES」ディレクトリに「selinux-policy」のソースRPMを展開します
[root@localhost ~]# cd /usr/src/redhat/SOURCES [root@localhost ~]# rpm2cpio selinux-policy-2.4.3-10.src.rpm | cpio -ivmd |
図13 ソースRPMの展開 |
- SPECファイルである「selinux-policy.spec」のselinux-policy-devel用の記述を修正して、「install-src」を付け加え、そのほか細かな修正をします。筆者の環境では以下のように修正しています
[root@localhost SOURCES]# diff -u selinux-policy.spec.orig selinux-policy.spec --- selinux-policy.spec.orig 2006-11-14 20:55:36.000000000 +0900 +++ selinux-policy.spec 2006-11-14 22:39:04.000000000 +0900 @@ -2,13 +2,13 @@ %define polyinstatiate n %define monolithic n %if %{?BUILD_STRICT:0}%{!?BUILD_STRICT:1} -%define BUILD_STRICT 1 +%define BUILD_STRICT 0 %endif %if %{?BUILD_TARGETED:0}%{!?BUILD_TARGETED:1} -%define BUILD_TARGETED 1 +%define BUILD_TARGETED 0 %endif %if %{?BUILD_MLS:0}%{!?BUILD_MLS:1} -%define BUILD_MLS 1 +%define BUILD_MLS 0 %endif %define POLICYVER 21 %define libsepolver 1.12.26-1 @@ -180,9 +180,10 @@ # Install devel make clean -make NAME=targeted TYPE=targeted-mcs DISTRO=%{distro} DIRECT_INITRC=y MONOLITHIC=%{monolithic} DESTDIR=%{buildroot} PKGNAME=%{name}-%{version} POLY=%4 MLS_CATS=1024 MCS_CATS=1024 install-headers install-docs +make NAME=mls TYPE=strict-mls DISTRO=%{distro} DIRECT_INITRC=y MONOLITHIC=%{monolithic} DESTDIR=%{buildroot} PKGNAME=%{name}-%{version} POLY=%4 MLS_CATS=1024 MCS_CATS=1024 install-headers install-docs install-src +mkdir -p %{buildroot}%{_sysconfdir}/selinux/mls/src/policy mkdir %{buildroot}%{_usr}/share/selinux/devel/ -mv %{buildroot}%{_usr}/share/selinux/targeted/include %{buildroot}%{_usr}/share/selinux/devel/include +mv %{buildroot}%{_usr}/share/selinux/mls/include %{buildroot}%{_usr}/share/selinux/devel/include install -m 755 ${RPM_SOURCE_DIR}/policygentool %{buildroot}%{_usr}/share/selinux/devel/ install -m 644 ${RPM_SOURCE_DIR}/Makefile.devel %{buildroot}%{_usr}/share/selinux/devel/Makefile install -m 644 doc/example.* %{buildroot}%{_usr}/share/selinux/devel/ |
図14 unified diff形式によるselinux-policy.specの変更内容 |
- 「rpmbuild -bi selinux-policy.spec」を実行し、「/var/tmp/selinux-policy-2.4.3-10-root-root/etc/selinux/mls/src」以下にソースファイルを仮インストールします
[root@localhost SOURCES]# rpmbuild -bi selinux-policy.spec |
図15 ソースファイルのインストール |
- 「/var/tmp/selinux-policy-2.4.3-10-root-root/etc/selinux/mls/src」ディレクトリを「/etc/selinux/mls/」以下に移動します
[root@localhost SOURCES]# mv /var/tmp/selinux-policy-2.4.3-10-root-root/etc/selinux/mls/src /etc/selinux/mls/ |
図16 ソースディレクトリの移動 |
- 再コンパイル用にMLS用の「build.conf」「modules.conf」「booleans.conf」を用意します
[root@localhost SOURCES]# cp /usr/src/redhat/SOURCES/booleans-mls.conf /etc/selinux/mls/src/policy/policy/booleans.conf [root@localhost SOURCES]# cp /usr/src/redhat/SOURCES/modules.conf /etc/selinux/mls/src/policy/policy/modules.conf |
図17 コンフィギュレーションファイルのコピー |
[root@localhost policy]# cat /etc/selinux/mls/src/policy/build.conf TYPE=strict-mls NAME=mls DISTRO=redhat MONOLITHIC=n DIRECT_INITRC=y MLS_SENS=16 MLS_CATS=1024 MCS_CATS=1024 |
図18 build.confの内容 |
ここまでくれば、あとは修正、再コンパイルとポリシーの再読み込みです。
●ポリシーソースの修正と再コンパイル・インストール
いよいよ、FC6標準のMLSポリシーを修正します。先にお伝えしたとおり、標準MLSポリシーパッケージではxserver関連のポリシー記述がまったくない状態でコンパイルされています。これは/etc/selinux/mls/src/policy/policy/modules.confを調整することで、簡単に修正できます。
# Layer: services # Module: xserver # # X windows login display manager # xserver = base ← 「off」から「base」へ変更する(573行目) |
図19 modules.confの修正 |
修正するのはたったこれだけです。そして、ポリシーの再コンパイルとインストールを行います。
[root@localhost ~]# cd /etc/selinux/mls/src/policy [root@localhost policy]# make install [root@localhost policy]# make load |
図20 ポリシーを反映する |
作業が終わったら念のため、再起動してください。
3/4 |
Index | |
Multi Level Securityで機密ファイルを管理する | |
Page1 FC6のリリースとSELinux |
|
Page2 社内機密ファイルの運用・管理をMLSで実現 インストールとRaw Hideへのアップデート サーバ側接続環境のセットアップ |
|
Page3 実際の動作をテストする セキュリティコンテキストを調整する |
|
Page4 システムへのログインと実行ドメインの確認 運用に合わせたポリシーの修正と変更 重要ドキュメントとユーザーの管理 |
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)対策の観点から考える。
|
|