Fedora Core 5の新機能 ~MCS(Multi Category Security)~ NEC OSS

Fedora Core 5の新機能
~MCS(Multi Category Security)~
NEC OSS推進センタ
海外 浩平
Agenda
FedoraとSELinuxの歴史
MCSによるアクセス制御
MCSの設定方法
MCSのデモ
MCSの実現する世界
2
SELinuxの特徴(1)
利用者
セキュリ
ティ管理者
利用者
root
r-x
root
rw-
所有者
任意アクセス制御
SELinux
セキュリ
ティポリシ
強制アクセス制御
ポリシに基づく集中管理されたアクセス制御
rootでも回避不可能なアクセス制御
3
SELinuxの特徴(2)
共有メモリ
ソケット
sigkill
unconfined_t
connect
create
read
read
/etc/shadow
shadow_t
bashプロセス
unconfined_t
read
write
execute
vi
bin_t
HTTPdプロセス
httpd_t
read
write
postgresql_tmp_t
append
read
access.log
httpd_log_t
index.html
httpd_sys_content_t
OSリソースに「タイプ」と呼ばれる識別子を付与
セキュリティポリシには、「どのタイプが」「どの
タイプに」「何をできるか」を延々と記述する
TE(Type Enforcement)と呼ばれるアクセス制御
4
FedoraとSELinuxの歴史(1)
Fedora Core 2
(’04/05)
初めてSELinuxがバンドルされた。
標準のセキュリティポリシは、全てのプロセスを
SELinuxの管理下に置くもの。(Strictポリシ)
「どうやってこれをDisableにしたらいいの?」
ポリシーの編集&再ビルドを前提とする設定
Fedora Core 3
(’04/11)
SELinuxがデフォルトで有効になった。
SELinuxが関与するのは十数個の特定のアプリだけ。そ
れ以外は全て許可。(Targetedポリシ)
条件変数(Boolean)機能により、ポリシの編集なしに一
部のカスタマイズが可能になった。
5
FedoraとSELinuxの歴史(2)
Fedora Core 4
(’05/06)
Targetedポリシの拡充、約120種類のアプリ向けにポリ
シが用意された。
Fedora Core 5
(’06/03)
Binary Policy Moduleや、semanageコマンドの追加に
よって、ポリシの編集なしにカスタマイズ可能なオプ
ションが増加した。
Targetedポリシがカバーする範囲は、FC4の延長で保護
することができる。しかし、”それ以外”の部分に対する
アクセス制御も必要だ…。
MCS(Multi Category Security)の開発へ
6
FedoraとSELinuxの歴史(3)
∼ 歴史的に見たSELinuxの開発の流れ ∼
一.標準のセキュリティポリシでは対象を限定してアクセ
ス制御を行う。(Targetedポリシを軸とする開発)
二.ユーザがセキュリティポリシを編集することなく、
SELinuxをカスタマイズ可能にする。
∼ MCS(Multi Category Security)開発の背景 ∼
目的:Targetedポリシが関与しない範囲に対する
アクセス制御の提供
条件:ユーザがポリシを編集することなく、設定
をカスタマイズすることができる
7
Agenda
FedoraとSELinuxの歴史
MCSによるアクセス制御
MCSの設定方法
MCSのデモ
MCSの実現する世界
8
MCSによるアクセス制御(1)
カテゴリ
営業部門
コンサル部門
{営業部門、
コンサル部門}
開発部門
サポート部門
{開発部門}
スタフ部門
{サポート部門、
スタフ部門}
{営業部門}
プロセスとファイルにそれぞれ、カテゴリを関連付ける
カテゴリ = 論理的な情報の区分
ファイル/プロセスは複数のカテゴリを持つことができる
MCSとはカテゴリを使ったアクセス制御のこと!
9
MCSによるアクセス制御(2)
カテゴリ
営業部門
コンサル部門
開発部門
サポート部門 スタフ部門
{コンサル部門、開発部門}
{プロセスの属するカテゴリの集合}が、
{ファイルの属するカテゴリの集合}を、
完全に包含している場合 ⇒ アクセスが許可される
10
MCSによるアクセス制御(3)
カテゴリ
営業部門
コンサル部門
{コンサル部門}
開発部門
サポート部門
スタフ部門
{サポート部門、
スタフ部門}
{プロセスの属するカテゴリの集合}が、
{ファイルの属するカテゴリの集合}を、
完全に包含している場合 ⇒ アクセスが許可される
11
MCSによるアクセス制御(4)
カテゴリ
営業部門
コンサル部門
開発部門
サポート部門
スタフ部門
{コンサル部門、
開発部門}
{カテゴリ無し}
ファイルがカテゴリに属していない場合、無条件に許可
12
MCSによるアクセス制御(5)
{全カテゴリ}
ログイン
カテゴリを追加
しようとした
SSHd/
Logind 営業/開発以外のカ
{営業部門、
開発部門、
スタフ部門}
テゴリを外してユー
ザシェルを起動
emacs
{営業部門、
開発部門}
bash
runcon
コマンド
{営業部門}
runcon
コマンド
vi
プロセスのカテゴリは縮小方向にのみ変更可能
ログイン時設定のカテゴリを越えることはできない
(※カテゴリを拡大できるのは一部のプロセスに限定)
13
Fedora Core 5でのデフォルト設定
c0∼c255の256個のカテゴリが定義済み
最初はファイルにカテゴリは付与されていない
保護が必要なファイルにユーザがカテゴリを設定
rootユーザ
{c0,…,c255}
○
一般ユーザ
{カテゴリ無し}
全てのファイル
全てのファイル
○
{カテゴリ無し}
{カテゴリ無し}
14
ファイルを新規作成した場合(1)
プロセス
高位カテゴリ集合
= {c0, c1, c2}
(Higher Category Set)
低位カテゴリ集合
= {c0}
(Lower Category Set)
ファイル
カテゴリ集合
= {c0}
プロセスは、高位/低位の2つのカテゴリ集合を持つ
高位カテゴリ集合
ファイルへのアクセス可否を判定するために使用
低位カテゴリ集合
新規生成ファイルの初期設定カテゴリとして使用
(アクセス制御には使用しない)
ファイルは、常に高位/低位カテゴリが等しい
15
ファイルを新規作成した場合(2)
高位カテゴリ集合
= {c0,c1,c2}
低位カテゴリ集合
= {c0}
高位カテゴリ集合
={c0}
={カテゴリ無し}
低位カテゴリ集合
={カテゴリ無し}
A
B
新規作成
新規作成
カテゴリ = {c0}
高位カテゴリ集合
低位カテゴリ集合
={カテゴリ無し}
C
{カテゴリ無し}
16
ファイルを新規作成した場合(3)
低位カテゴリ:{c0}
高位カテゴリ:{c0,c1}
[tak@saba ~]$ id -Z
user_u:system_r:unconfined_t:s0:c0-s0:c0,c1
[tak@saba ~]$ ls -Z
user_u:object_r:user_home_t:s0:c1 SecretFile.txt
user_u:object_r:user_home_t:s0:c1,c2 TopSecretFile.txt
[tak@saba ~]$ cat SecretFile.txt
This is Secret File
[tak@saba ~]$ cat TopSecretFile.txt
cat: TopSecretFile.txt: Permission denied
[tak@saba ~]$ touch NewFile.txt
[tak@saba ~]$ ls -Z
user_u:object_r:user_home_t:s0:c0
NewFile.txt
user_u:object_r:user_home_t:s0:c1
SecretFile.txt
user_u:object_r:user_home_t:s0:c1,c2 TopSecretFile.txt
[tak@saba ~]$
17
MCSによるアクセス制御・まとめ
プロセスには高位/低位の2つのカテゴリ集合
ファイルにはカテゴリ集合を一個だけ
{プロセスの高位カテゴリ集合}が、{ファイルの
カテゴリ集合}を包含する時、アクセスを許可
新規生成ファイルには、プロセスの低位カテゴリ
集合が付与される
プロセスのカテゴリは、縮退方向にのみ動かせる
FC5のデフォルト設定では、全てのファイルは
{カテゴリ無し}に設定されている。
18
Agenda
FedoraとSELinuxの歴史
MCSによるアクセス制御
MCSの設定方法
MCSのデモ
MCSの実現する世界
19
カテゴリの書式(1)
カテゴリの表記ルール
<機密レベル>[:<カテゴリ集合>][-<機密レベル>[:<カテゴリ集合>]]
低位カテゴリ
高位カテゴリ
MCSでは機密レベル’s0’だけ使用 ⇒ 常に’s0’
カテゴリ集合の表記
カテゴリに属していない場合 ⇒ 省略可能
複数のカテゴリに属している場合
⇒ 「c0,c1,c3」のように、‘,’で区切る
連続した複数のカテゴリに属している場合
⇒ 「c0.c4」 のように、’.’で区切る
低位カテゴリと、高位カテゴリが同一の場合は省略可能
⇒ 「s0:c0.c2」のような形式
20
カテゴリの書式(2)
【 クイズ 】
以下の表記では、低位カテゴリ・高位カテゴリの
集合はそれぞれどうなっているでしょうか?
s0:c0-s0:c0.c3
21
カテゴリの書式(2)
【 クイズ 】
以下の表記では、低位カテゴリ・高位カテゴリの
集合はそれぞれどうなっているでしょうか?
s0:c0-s0:c0.c3
正解
低位カテゴリ:{c0}
高位カテゴリ:{c0, c1, c2, c3}
22
カテゴリの書式(3)
【 クイズ 】
以下の表記では、低位カテゴリ・高位カテゴリの
集合はそれぞれどうなっているでしょうか?
s0:c1,c2
23
カテゴリの書式(3)
【 クイズ 】
以下の表記では、低位カテゴリ・高位カテゴリの
集合はそれぞれどうなっているでしょうか?
s0:c1,c2
正解
低位カテゴリ:{c1, c2}
高位カテゴリ:{c1, c2}
24
ファイルへのカテゴリの設定
chcat コマンドの利用
(書式1) chcat <CATEGORY> <FILE> ...
ファイルに指定のカテゴリを付与する
(書式2) chcat [+│-]<CATEGORY> <FILE> ...
指定のカテゴリを追加/削除する
(書式3) chcat -d <FILE> ...
ファイルからカテゴリを取り去る
使用例
% chcat s0:c0.c2 MySecretFile.txt
% chcat ---s0:c1 MySecretFile.txt
% chcat -d MySecrefFile.txt
25
プロセスへのカテゴリの設定
ユーザとカテゴリを関連付ける。
ログイン時に反映される。
semanage コマンドの利用
(書式1) semanage login [-a│-m] -r <CATEGORY> <user>
ユーザのログイン時のカテゴリを設定する
(書式2) semanage login -d <user>
ユーザのカテゴリの設定を削除する
(書式3) semanage login -l
ユーザ/カテゴリの対応一覧を表示する
使用例
% semanage login -a -r s0:c0.c3 kaigai
% semanage login -d omok
% semanage login -l
26
カテゴリの設定例(1)
# echo 'This is a Public File'
> Public.txt
# echo 'This is a Secret File.'
> Secret.txt
# echo 'This is a Top Secret File.' > TopSecret.txt
# chcat s0:c0
Secret.txt
# chcat s0:c0,c1 TopSecret.txt
# ls -Z
user_u:object_r:tmp_t:s0
Public.txt
user_u:object_r:tmp_t:s0:c0
Secret.txt
user_u:object_r:tmp_t:s0:c0,c1
TopSecret.txt
# semanage login -a -r s0-s0:c0 tak
# semanage login -a -r s0-s0:c0,c1 ymj
# semanage login -l
Login Name
SELinux User
MLS/MCS Range
__default__
user_u
s0
root
system_u
s0-s0:c0.c255
tak
user_u
s0-s0:c0
ymj
user_u
s0-s0:c0,c1
[root@saba work]#
27
カテゴリの設定例(2)
# ssh tak@localhost
[tak@saba work]$ id -Z
user_u:system_r:unconfined_t:s0-s0:c0
[tak@saba work]$ cat *
This is a Public File
This is a Secret File.
cat: TopSecret.txt: Permission denied
[tak@saba work]$
# ssh ymj@localhost
[ymj@saba work]$ id -Z
user_u:system_r:unconfined_t:s0-s0:c0,c1
[ymj@saba work]$ cat *
This is a Public File
This is a Secret File.
This is a Top Secret File.
[ymj@saba work]$
28
別名の設定(1)
カテゴリには別名を付けることができる
“s0:c0,c1” ⇒ 意味がわかりにくい、間違えやすい
“SecretFile” ⇒ 意味がわかりやすい、間違えにくい
別名を設定するには
/etc/selinux/targeted/setrans.conf を編集
semanage コマンドを使う
こんな風に反映される
[ymj@saba work]$ id -Z
user_u:system_r:unconfined_t:PowerUser
[ymj@saba work]$ ls -Z
user_u:object_r:tmp_t
Public.txt
user_u:object_r:tmp_t:SecretFile
Secret.txt
user_u:object_r:tmp_t:TopSecretFile TopSecret.txt
29
別名の設定(2)
semanageコマンドの利用
semanage translation [-a│-m] -T <別名> <category>
<category> に対応する <別名> を設定する
semanage translation [-d] category
<category> に対応する <別名> を削除する
semanage translation -l
<category> の <別名> 一覧を表示する
使用例
%
%
%
%
semanage translation -a -T SecretFile s0:c0
semanage translation -m -T PowerUser s0-s0:c0,c1
chcat SecretFile ‾/secret/*
semanage login -a -r PowerUser tak
30
別名の設定(3)
別名を使用する/使用しないの設定
/etc/selinux/targeted/setrans.conf 内の
「# disable = 1」行を有効にする。
デフォルト定義
デフォルトでは別名を利用する設定
以下の別名が定義済みとなっている
s0:c0.c255
SystemHigh
s0-s0:c0.c255 SystemLowSystemHigh
対応コマンド
ls,ps,id,chcon,chcat,runcon など、libselinuxを
使っているものは対応しているはず。
newroleは別名を扱えなかった
31
Agenda
FedoraとSELinuxの歴史
MCSによるアクセス制御
MCSの設定方法
MCSのデモ
MCSの実現する世界
32
実際にFedora Core 5を操作してみます
実 演
33
Agenda
FedoraとSELinuxの歴史
MCSによるアクセス制御
MCSの設定方法
MCSのデモ
MCSの実現する世界
34
MCSの実現する世界(1)
役割ベース管理者
OWNERはユーザA
一般ユーザA
{MailAdmin}
/etc/postfix/* MailFile
sudo
/etc/init.d/postfix
/etc/httpd/*
一般ユーザB
{WebAdmin}
一般ユーザC
{DbAdmin}
sudo
rootユーザ
{カテゴリ無し}
/etc/init.d/httpd
/var/lib/pgsql/*
sudo
WebFile
DbFile
/etc/init.d/postgresql
非rootユーザに管理権限を分割
rootを奪われても、サーバ設定の変更は不可能
35
MCSの実現する世界(2)
トロイの木馬対策
Trusted
openofficeプロセス
openofficeプロセス
{c0}
{c0}
/usr/bin/openoffice
/usr/bin/openoffice
実行
/usr/bin/thunderbird
/usr/bin/thunderbird
ユーザプロセス
ユーザプロセス
カテゴリ
カテゴリ == {c0}
{c0}
機密ファイル
{c0}
共有ファイル
{カテゴリ無し}
全カテゴリを外す
実行
Untrusted
/tmp/a.out
/tmp/a.out
$HOME/.spyware
$HOME/.spyware
.spywareプロセス
.spywareプロセス
{カテゴリ無し}
{カテゴリ無し}
素性の定かでないプログラムから、権限を剥奪する
もしWindowsで可能なら、Winnyでの情報流出も防げたはず。
36
最後に
MCSをはじめとして、Fedora
MCSをはじめとして、Fedora Core
Core 5での
5での
SELinuxは、従来よりも格段に使い勝手がよく
SELinuxは、従来よりも格段に使い勝手がよく
なりました。
なりました。
MCS(Multi
MCS(Multi Category
Category Security)
Security)
でも、それだ
けじゃなく…。
提案次第では、様々な面白
提案次第では、様々な面白
い使い方も可能なツールに
い使い方も可能なツールに
化けるかもしれません。
化けるかもしれません。
役割ベース管理者
役割ベース管理者
Binary
Binary Policy
Policy Module
Module
semanage
semanage コマンド
コマンド
Reference
Reference Policy
Policy
SELinuxの動向
に注目です!
トロイの木馬対策
トロイの木馬対策
Any
Any idea
idea welcome!!
welcome!!
37
プレゼンテーションの補足
付録
38
MLSによるアクセス制御
カテゴリ(Category)
営業部門
機密度
高
(Sensitivity)
低
コンサル部門
開発部門
サポート部門
極秘
(s3)
機密
(s2)
取扱注意
(s1)
公開
(s0)
カテゴリの制約条件に加えて、{プロセスの機密レベル} ≧ {ファ
イルの機密レベル} でないと、ファイルへのアクセスが許可されない
39
MCSを使うときには注意してください(1)
エディタの一時ファイルが…。
vi Secret.txt と実行した場合
一時ファイル「.Secret.txt.swp」を生成する
[root@saba work]# ls -aZ
user_u:object_r:tmp_t
system_u:object_r:tmp_t
user_u:object_r:tmp_t
user_u:object_r:tmp_t:SecretFile
[root@saba work]#
.
..
.Secret.txt.swp
Secret.txt
デフォルトでは、プロセスの低位カテゴリは設定無し
生成されるファイルにはカテゴリが設定されない
[対策] プロセスの高位/低位カテゴリを一致させる。全ての
新規生成ファイルにカテゴリが付与されることに注意!
40
MCSを使うときには注意してください(2)
Permissiveモードに変えられたら…。
unconfined_tはEnforcing/Permissive変更の権限を持つ
Permissiveモードにされたら、MCSを含む全てのアクセ
ス制御が無効化
SELinuxのモード変更は /selinux/enforce への書き込み
によって行われる。
/selinux/enforce にカテゴリを設定すればよい
[設定例] chcat SystemHigh /selinux/enforce
ポリシーのロードは /selinux/load への書き込みによっ
て行われる。対処方法は同じ。
[対策] システム起動スクリプトの中で、/selinux/enforce
にカテゴリを設定する。
41