第5回 Referenceポリシーの作成と動作テスト
古田 真己サイオステクノロジー株式会社
インフラストラクチャービジネスユニット
Linuxテクノロジー部
OSSテクノロジーグループ
2006/6/17
そろそろ読者の皆さんもFedora Core 5(FC5)に触れているころではないかと思います。
第4回「ReferenceポリシーをEnforcingモードで動かそう」ではReferenceポリシーでのモジュール作成に向けて必要なことをおさらいも含め解説しました。今回は、実際にモジュールを作成してSELinuxのポリシーを仕上げます。
ドメイン名を考える
いよいよモジュールの作成に取り掛かります。最初に、アプリケーションバイナリ名を基にしてドメイン名を考えます。これはtomcat.teを作成する部分に当たります。
アプリケーション実行環境であるTomcatはJavaバイナリによって実行されるので、こういったアプリケーションには通常ドメイン名としてはjava_tやjvm_tなどを割り当てることが考えられます。
Linuxシステム上ではTomcatはjvmの引数(オブジェクト)で表されるので、ドメイン名にするには適当ではない。 |
しかしながら、今回Targetedポリシーを適用する対象用途としてサーバでの運用を考えていますので、tomcat_tドメインとして作成します。ここでは、クライアントとしてWebブラウザを使用することを考えないこととします。
teファイルの構成は、以下の手順で行っていきます。
1.ドメインの定義(tomcat.te)
type tomcat_t; |
2.実行バイナリ、設定ファイルのタイプ定義(tomcat.te)
type tomcat_exec_t; |
3.ドメインの定義(tomcat.te)
init_daemon_domain(tomcat_t,tomcat_exec_t) |
4.ネットワークの使用許可(tomcat.te)
kernelレイヤに含まれるkernel/corenetwork.ifのインターフェイスを使用します。
corenet_tcp_sendrecv_all_if(tomcat_t) corenet_udp_sendrecv_all_if(tomcat_t) corenet_raw_sendrecv_all_if(tomcat_t) corenet_tcp_sendrecv_all_nodes(tomcat_t) corenet_udp_sendrecv_all_nodes(tomcat_t) corenet_raw_sendrecv_all_nodes(tomcat_t) corenet_tcp_sendrecv_all_ports(tomcat_t) corenet_udp_sendrecv_all_ports(tomcat_t) corenet_non_ipsec_sendrecv(tomcat_t) corenet_tcp_bind_all_nodes(tomcat_t) corenet_udp_bind_all_nodes(tomcat_t) |
mod_jkで使用するポートをcorenetwork.ifに定義(後述)して、それを使用します(tomcat.te)。
corenet_tcp_connect_tomcat_modjk_port(tomcat_t) corenet_tcp_bind_tomcat_modjk_port(tomcat_t) |
8080ポートをcorenetwork.ifのインターフェースで指定します(tomcat.te)。
corenet_tcp_bind_http_cache_port(tomcat_t) |
5.ログの読み込み設定(tomcat.te)
type tomcat_log_t; logging_log_file(tomcat_log_t) allow tomcat_t tomcat_log_t:file append; |
6.設定ファイルの読み込み設定(tomcat.te)
sysnet_read_config(tomcat_t) type tomcat_etc_t; files_config_file(tomcat_etc_t) allow tomcat_t tomcat_etc_t:file create_file_perms; allow tomcat_t tomcat_etc_t:dir rw_dir_perms; |
7.corenetwork.ifへのmod_jkのポート設定の追加(corenetwork.if.in)
Referenceポリシーではネットワークの定義はtomcatやapacheの各モジュールのほか、corenetwork.ifに記述する必要があります。しかし、直接、corenetwork.ifには記述せずに、corenetwork.if.inに記述してコンパイル時に自動生成させます。
network_port(tomcat_modjk, tcp,8009,s0, tcp,8005,s0) |
これを記述することで、4.で指定した以下のインターフェイスが自動的にcorenetwork.ifファイルに加わります。
corenet_tcp_connect_tomcat_modjk_port(tomcat_t) corenet_tcp_bind_tomcat_modjk_port(tomcat_t) |
8.teファイルの完成(tomcat.te)
1〜7の手順を行い、微調整を行うことで以下のようなポリシーを作成しました。
policy_module(tomcat,1.0.0) require { type bin_t; type devpts_t; type proc_t; type urandom_device_t; }; type tomcat_t; type tomcat_exec_t; ←ドメイン設定 init_daemon_domain(tomcat_t,tomcat_exec_t) type tomcat_log_t; logging_log_file(tomcat_log_t) ←ログ設定 allow tomcat_t tomcat_log_t:file append; allow tomcat_t devpts_t:chr_file { read write }; sysnet_read_config(tomcat_t) type tomcat_etc_t; files_config_file(tomcat_etc_t) ←コンフィグ設定 allow tomcat_t tomcat_etc_t:file create_file_perms; allow tomcat_t tomcat_etc_t:dir rw_dir_perms; type tomcat_tmp_t; files_tmp_file(tomcat_tmp_t) ←/tmp用の設定 files_create_tmp_files(tomcat_t,tomcat_tmp_t,{file dir}) allow tomcat_t tomcat_tmp_t:file execute; type tomcat_var_run_t; files_pid_file(tomcat_var_run_t) files_create_pid(tomcat_t,tomcat_var_run_t) ←pidファイル用の設定 allow tomcat_t var_t:dir { read remove_name write }; allow tomcat_t var_t:file { getattr read unlink }; allow tomcat_t bin_t:dir r_dir_perms; allow tomcat_t bin_t:lnk_file r_file_perms; ←/usr/lib/jvm/java/bin/java用の設定 can_exec(tomcat_t,bin_t) allow tomcat_t self:fifo_file { getattr read write }; allow tomcat_t self:process { sigkill signal }; allow tomcat_t urandom_device_t:chr_file { getattr read }; allow tomcat_t proc_t:dir search; allow tomcat_t proc_t:file { getattr read }; ←java VM用メモリ関連設定 allow tomcat_t proc_t:lnk_file read; files_read_var_lib_files(tomcat_t) files_list_var_lib(tomcat_t) files_read_var_lib_symlinks(tomcat_t) files_read_etc_files(tomcat_t) ←そのほかのライブラリなどの設定 files_read_usr_files(tomcat_t) files_read_usr_symlinks(tomcat_t) files_read_generic_tmp_files(tomcat_t) libs_use_ld_so(tomcat_t) allow tomcat_t lib_t:file { execute getattr read }; corenet_tcp_sendrecv_all_if(tomcat_t) corenet_udp_sendrecv_all_if(tomcat_t) corenet_raw_sendrecv_all_if(tomcat_t) corenet_tcp_sendrecv_all_nodes(tomcat_t) corenet_udp_sendrecv_all_nodes(tomcat_t) corenet_raw_sendrecv_all_nodes(tomcat_t) corenet_tcp_sendrecv_all_ports(tomcat_t) corenet_udp_sendrecv_all_ports(tomcat_t) corenet_non_ipsec_sendrecv(tomcat_t) ←ネットワークの設定 corenet_tcp_bind_all_nodes(tomcat_t) corenet_udp_bind_all_nodes(tomcat_t) corenet_tcp_connect_tomcat_modjk_port(tomcat_t) corenet_tcp_bind_tomcat_modjk_port(tomcat_t) corenet_tcp_bind_http_cache_port(tomcat_t) allow tomcat_t self:tcp_socket { accept bind connect create getattr listen setopt shutdown read write }; allow tomcat_t self:udp_socket { connect create write }; |
1/4
|
Index | |
Referenceポリシーの作成と動作テスト | |
Page1 ドメイン名を考える |
|
Page2 実行ファイルのタイプを考える インターフェイスを考える モジュールの作成 ログの再確認と修正 |
|
Page3 FC5におけるポリシーソースのインストール方法 新しくなったaudit2allowによる設定方法 |
|
Page4 SELinuxのこれからの展開 |
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)対策の観点から考える。
|
|