[^(syslogd)]|[^(bootloader)]_t.* var_log_t:file.*write.

SELinux Config Checker
sod(B3)
親:trueさん
SELinux
► MAC(強制アクセス制御)
 Role Based Access Control
►ユーザー(ロール)毎に権限を分割する
►最小特権に通じる
 Type Enforcement
►プロセス毎にアクセス制限を行う機能
► LSM(Linux
Security Module) に対応
 Linux Kernel 2.6以降
SELinux 動作例
attack
攻撃者
apache
root
/etc/.*, /var/.*
SELinuxに触れてみてください
► SELinuxサーバー
(Fedora core 2)
 IP Address : 203.178.143.232
 user : root Password : hoge
► wanwanからsshしてみてください




設定はほぼデフォルト(rootの権限は最小に設定)
ps -Z, ls -Z SELinux用に拡張されています
dmesg
SELinuxの出力するログを閲覧可
rm -rf /
などとやってみたら…?
policy設定の手順例
仮設定作業
動作テスト
設定の見直し
実動作テスト
► プロセス特有のファイル
かどうか
► サービスの実行に必要
な権限は与えられてい
るか(サービスは正常に
動作するか)
► 本当に必要な権限か
SELinuxに於ける問題点
► policyが難解
 プロセスにはドメイン、ファイルにはタイプ
 膨大な量 policy.conf – 4MB – 20万行
► 正しく設定されなければ無意味
 不必要な権限の付与 → 最小特権に反する
 使用するプログラムごとに設定が必要
►動作しなかったり、脆弱性になる可能性
SELinux Config Checker
概要
► Miss
Configurationによる脆弱性の発生を防止
► ポリシー監査
 脆弱性になり得るルールの警告
►権限の強いドメインへの遷移などの一般的な脆弱性
►特定アプリケーションに特化した不必要な脆弱性
► プロセス監査
 不適当なドメインで動作しているプロセスの警告
►initrc_tのまま稼動しているdaemonなど
SELinux Config Checker
動作イメージ
設定ファイル
設定
ファイル
*.te
*.fc
.checkrc
%make reload
マクロの展開・統合
policy.conf
プロセス
ルール
セット
ファイル
SELinux Config Checker
設定
► .checkrc
 警告レベルと読み込むルールセットファイルを指定
► ルールセットファイル
 general.rs – 一般的なルールセット
 ***.rs – 各アプリケーション毎に特化
► 実際のルールセット
 (警告レベル)[0-9], (警告タイプ)[0-9][0-9],
(正規表現を用いたルール).*
例)2,01,allow .*[^(kernel)]_t init_t:process transition;
SELinux Config Checker
警告タイプの一例
► This
is Debug Alert.
► Warning
Domain Trans.
 危険なドメイン遷移
► Enable
to Write System Log.
 /var/log以下などにwriteする権限を保持
SELinux Config Checker
動作メカニズム
1.
2.
3.
4.
5.
.checkrcを参照し、ルールセットを読み込む
警告レベル、警告タイプ、
ルール文(正規表現)を構造体に設定
システムに適用される設定の集合である
policy.confを頭から一行ずつ比較
実際にマッチした行数と文字列をメモリを動的
に確保して格納
設定された警告レベルに合わせ、警告を表示
SELinux Config Checker
実行例
sod.te
#
Warning Domain Trans Ruleset.
●結果(抜粋)
●必要要件
2,01,allow.*_t.*
WARNING:
Enable
kernel_t:process.*transition;
to Write System log. alertlevel: 2 line: 102698
/var/log/sod.logに対してwrite権限
> allow sod_t var_log_t:file { getattr
write };
(略)
●推奨設定
3,01,allow.*[^(init)]|[^(sysadm_ssh_agent)]|[^(sysadm_su)]|[^(sulogin)]_t.
*log_domain(sod)
sysadm_t:process.*transition;
ユーザーは表示された警告メッセージを参照し、
→ sod_log_tのファイル生成~
# Enable to Write System Log.
“var_log_tタイプを付与されたファイルに対して書き込み権限を持つ”
●実際
2,02,allow.*[^(init)]|[^(initrc)]|[^(syslogd)]|[^(bootloader)]_t.*
が正しいかどうかを判断する
var_log_t:file.*write.*;
allow sod_t var_log_t:file { write } ;
今後の課題
► ルールセットの充実
► 監査条件の充実
 現状では一行ごとに比較しているだけ
► ユーザーへの警告方法の改善
 現状ではpolicy.confの行数を表示するだけ
►実際にはどの設定ファイルが問題なのか?
► 警告タイプ定義の柔軟性向上
 現状では警告タイプは定義されたもののみ
 ルールセットファイルで自由に定義出来るように