システム構成とアプリケーション設定に基づく セキュリティ・ポリシ自動生成フレームワーク sod(B4) 親:trueさん サブ親:yasuさん
背景 セキュリティの確保が重要な課題に ホストレベルの対策が重要 インターネットの重要インフラ化 全てのホストがセキュアになれば 多くのセキュリティの問題が解決される セキュアOS
セキュアOSの特徴 脆弱性を狙った攻撃への有効な対策 特権ユーザへの権限集中の問題を解決 ワーム、クラッキングなど様々な攻撃の手段 未知の脆弱性に対する攻撃にも有効 特権ユーザへの権限集中の問題を解決 従来のUnixでは特権ユーザは何でも出来る 特権ユーザの権限が奪取された場合
主要なセキュアOS Linux - SELinux, LIDS, TOMOYO, etc… Solaris - Trusted Solaris FreeBSD - Trusted BSD PitBull, SecuveTOS, etc… 数多くのセキュアOSが研究されている 主要なもの!それぞれどのような特徴があるのか? ドライバ型とカーネ組込型の違い
× × × セキュアOSの技術概要 強制アクセス制御 最小特権 Secure OS MAC read write write /var/www/ read × httpd-error.log write × write read/append >_ × /bin/sh × excute attacker apache
問題点 アクセス制御ルールの設定 設定には知識・経験が必要 本研究では『セキュリティ・ポリシ』と呼ぶ 強制アクセス制御を行うために必要 粒度が高くなればなるほど設定は複雑に 設定には知識・経験が必要 プログラムの動作とシステムの挙動への理解 本研究では『セキュリティ・ポリシ』と呼ぶ セキュアOSとアプリケーションに精通した者にしか現実的に設定不可能
セキュリティ・ポリシの一例 主体から対象へのアクセス制御を定義 httpdは/var/wwwに対してread権限を保有
情報共有モデル 精通した者のセキュリティ・ポリシを流通 精通した者 精通していない者 精通した者 精通していない者
既存の手法 標準的なセキュリティ・ポリシの流通 環境・設定に対して強く依存 ディストリビューションなどで分割 標準的な構成・設定で動作するように 固定的 環境・設定に対して強く依存 設定を一つ変えただけで動作しない
セキュリティ・ポリシの再利用性 プログラムの動作はある程度限定可能 apache shell /etcへの書込アクセスは不必要 apacheのプロセスがDocumentRootを読み込む shell 権限が非常に広範囲に渡るが限定可能
再利用上の問題 必要なアクセス制御の差異 環境に関する具体的な値の差異 パターン化が可能 ファイルパスやポート番号 組合せは無数に存在 するする/きつきつ、ある機能が必要/不必要 ex) apacheはttyを開けるか/開けないか 環境に関する具体的な値の差異 ファイルパスやポート番号 組合せは無数に存在 ex) apacheの実行バイナリのパス
提案する手法 自動的にホストに合わせて調整 必要なアクセス制御の差異 環境に関する具体的な値の差異 パターンの選択 調整段階でホストにおける具体的な値を代入
アプリケーションの設定ファイル DocumentRoot /var/www/html Port 80 httpd.conf
判断材料 システム構成 アプリケーションの設定ファイル アプリケーションの固定的な値 ユーザの入力した値 ファイルの有無 ソースコードにハードコーディングされた値 ユーザの入力した値 設定ファイルのパスが不明などの場合
フレームワーク 参照 bool変数 @***@ 変更 設定 精通した者が用意する部分 システム構成 セキュリティ ポリシのベース 調整スクリプト bool変数 @***@ 変更
実装概要 実例としてApache用の自動生成を実装 実装環境 フレームワークに準ずる Fedora Core Linux(Linux Kernel 2.6.14-1) Apache 2.0.54 GNU bash 3.0.16 GNU sed 4.04 SELinux (libselinux 1.23.10-2) security policy strict-1.27.1-2.16
実装1 推測/ユーザからの入力が必要なもの ユーザからの入力が必要なもの 現実的に自動生成不可能なもの 実行バイナリ/設定ファイルのパス cgiのネットワークアクセス可否 現実的に自動生成不可能なもの cgi関連のファイルのアクセス権限 DocumentRoot外のファイルのアクセス権限
実装2 設定ファイルから得られる情報の一例 DocumentRoot … 公開されるリソースのパス ServerRoot … ベースとなるディレクトリ ErrorLog … エラーログのパス LoadModule … 利用するモジュールのパス ScriptAlias … CGIを利用を許可するパス ExecCGI … CGI利用の許可 UserDir … ユーザディレクトリ以下の公開パス
デモ
評価 アクセス制御設定の正当性 アクセス制御設定のセキュリティ強度 アクセス制御設定の生成工数 ユーザが意図した設定に基づく制御を行うか 無駄なアクセス権限を付与の有無 アクセス制御設定の生成工数 削減出来た設定コストの評価
評価ソフトウェア環境 OS ソフトウェア Fedora Core Linux 4 (Kernel 2.6.14-1) Apache 2.0.54 GNU bash 3.0.16 GNU sed 4.04 セキュリティ・ポリシstrict-1.27.1-2.16
評価ハードウェア環境 Machine CPU Memory HDD VMware GSX Server Xeon 3.2GHz 1GB
評価:正当性 同じ団体によって作られた設定とアクセス定義設定と比較 比較項目 設定 自動生成 デフォルト Apacheの正常起動の可否 ○ DocumentRoot以下に置かれたhtml等の表示可否 ScriptAlias以下に置かれたcgiの利用可否 cgiからScriptAlias以下ファイルへの読込可否 - cgiからScriptAlias以下ファイルへの書込可否 × cgiからDocumentRoot以下ファイルへのアクセス可否 Alias以下に置かれたファイルの表示可否 各種ログの出力可否 ユーザディレクトリ以下のhtml等の表示可否 ユーザディレクトリ以下のcgi等の利用可否 cgiのネットワークアクセス利用の可否
評価:セキュリティ強度 不必要なアクセス権限が付与されたファイルの数を評価 権限 自動生成 デフォルト httpd_exec_t 1 httpd_suexec_exec_t httpd_config_t 3 4 httpd_sys_content_t 248 249 httpd_sys_script_exec_t 2 httpd_user_content_t 7 httpd_log_t httpd_modules_t 43 48 httpd_var_run_t 合計 302 316
評価:生成工数 最終的に同じアクセス定義設定を設定 手動作成/変更は1行15秒として計算 自動生成は150回試行 Apacheの構成はapache.org標準 手動作成/変更は1行15秒として計算 自動生成は150回試行 手法 行数 秒数 標準偏差 自動生成 157.463 7.269 手動変更 73 1095 一から設定 376 5640
まとめ アクセス制御設定をホストに合わせて自動調整 今回の実装ではSELinuxを用いたが セキュアOSの運用・導入コストを削減 アプリケーションの設定を判断材料に アクセス制御設定の自動生成を実現 今回の実装ではSELinuxを用いたが LIDSでも /sbin/lidsconf @APACHE_BIN@ … セキュアOSの運用・導入コストを削減
今後の課題 フレームワークの構築 調整を行うスクリプトの記述コストの削減 他アプリケーションへの適用 定義後のラベル付与の簡易化
any questions? ご清聴ありがとうございました
SELinux 非常に細かい粒度でアクセス制御 Type Enforcement Role Based Access Control セキュリティ・ポリシと呼ばれる アクセス定義設定も非常に複雑 Type Enforcement プロセス毎にアクセス制限を行う機能 Role Based Access Control ロール毎に権限を分割 TresysとかRedhatとかNSAとか