タイプ継承を可能にするSELinuxポリシーコンパイラの拡張

Similar documents
McAfee Application Control ご紹介

XAMPP で CMS のお手軽 テスト環境を手に入れよう 2011/5/21 上村崇 1

TOMOYO Linuxを体験しよう

WEBシステムのセキュリティ技術

6-2- 応ネットワークセキュリティに関する知識 1 独立行政法人情報処理推進機構

Microsoft Word - ModelAnalys操作マニュアル_

Microsoft Word - ManagerIPChange.doc

日本内科学会雑誌第98巻第4号

日本内科学会雑誌第97巻第7号

使用する前に

実験 5 CGI プログラミング 1 目的 動的にWebページを作成する手法の一つであるCGIについてプログラミングを通じて基本的な仕組みを学ぶ 2 実験 実験 1 Webサーバの設定確認と起動 (1)/etc/httpd/conf にある httpd.conf ファイルの cgi-bin に関する

製品概要

<4D F736F F F696E74202D D352E8ED093E08AC28BAB835A834C A BAD89BB82CC8CE492F188C42E707074>

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ

Microsoft PowerPoint - 入門編:IPSとIDS、FW、AVの違い(v1.1).ppt

Microsoft Word - XOOPS インストールマニュアルv12.doc

SiteLock操作マニュアル

今さら聞けない!? Oracle入門 ~前編~

Red Hat Enterprise Linuxのcron(8)デーモンにデフォルト定義されたtmpwatch命令の動作による、WebOTXのトラブル対処方法

Another HTML-lint 導入マニュアル(JSP)版

PHP 開発ツール Zend Studio PHP アフ リケーションサーハ ー Zend Server OSC Tokyo/Spring /02/28 株式会社イグアスソリューション事業部

アルファメールプレミア 移行設定の手引き

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar

スライド 1

2 SmaSvr SmaSvr システムの概要 テクノベインズでは 業務系周辺機器 業務系周辺機器が操作できる スマート端末 が操作できる スマート端末 が操作できる スマート端末アプリ環境 アプリ環境の提供 提供 を実現できる方法 実現できる方法 実現できる方法について研究してきた 研究してきた

今さら聞けない!? Oracle入門 ~後編~

9 WEB監視

vibit CMS テンプレート制作について

IBM i ユーザーの課題 モバイルや IOT に対応した新しい開発案件への対応 RPG COBOL など既存アプリのメンテナンス 要員の確保 属人化しない運用 管理体制 2

— intra-martで運用する場合のセキュリティの考え方    

UNIVERGE SG3000 から SG3600 Ver.6.2(2012 年モデル ) への 移行手順 All Rights Reserved, Copyright(C) NEC Corporation 2017 年 11 月 4 版

FTP 共有を有効にする あらかじめ作成済みの共有フォルダーを FTP 共有可能にする設定を説明します 共有フォルダーの作成方法は 画面で見るマニュアル をご覧ください ファイル数の多い共有フォルダーを変更すると 変更が完了するまでに時間がかかる場合があります また 変更が完了するまで共有フォルダー

metis ami サービス仕様書

サービス内容 サービス内容 ドメインサービス Web サービスのサービス内容についてご案内します このたびは ドメイン /Web サービスをお申し込みいただきまして 誠にありがとうございます 本冊子は ドメイン /Web サービスの運用を管理される方向けの内容で構成されております お客様のご利用環境

ログを活用したActive Directoryに対する攻撃の検知と対策

Microsoft IISのWebDAV認証回避の脆弱性に関する検証レポート

データベース 【1:データベースシステムとは】

Microsoft PowerPoint - Android+TPMによるセキュアブート_KDDI研_後日配布用

延命セキュリティ製品 製品名お客様の想定対象 OS McAfee Embedded Control 特定の業務で利用する物理 PC 仮想 PC や Server 2003 Server 2003 ホワイトリスト型 Trend Micro Safe Lock 特定の業務で利用するスタンドアロン PC

Oracle Un お問合せ : Oracle Data Integrator 11g: データ統合設定と管理 期間 ( 標準日数 ):5 コースの概要 Oracle Data Integratorは すべてのデータ統合要件 ( 大量の高パフォーマンス バッチ ローブンの統合プロセスおよ

UCSセキュリティ資料_Ver3.5

Sendmail AD連携モジュールキャンペーン

2010年4月~6月 協業実績報告

Ł\”ƒ-2005

ServerViewのWebアクセス制限方法

ESMPRO/JMSS Ver6.0

第90回日本感染症学会学術講演会抄録(I)

<4D F736F F D FC8E448FEE95F1837C815B835E838B C8F92E88B608F912E646F63>

How_to_use_integritycheck

Logstorage for VISUACT 標的型サイバー攻撃 対策レポートテンプレート

各種パスワードについて マイナンバー管理票では 3 種のパスワードを使用します (1) 読み取りパスワード Excel 機能の読み取りパスワードです 任意に設定可能です (2) 管理者パスワード マイナンバー管理表 の管理者のパスワードです 管理者パスワード はパスワードの流出を防ぐ目的で この操作

OSSTechプレゼンテーション

2

(Microsoft PowerPoint - HP\227pWASABI\217\320\211\356\216\221\227\277.ppt)

PowerPoint プレゼンテーション

CloudEdgeあんしんプラス月次レポート解説書(1_0版) _docx

Transcription:

タイプ継承を可能にする SELinux ポリシーコンパイラの拡張 平成 17 年 6 月 2 日 NECLinux 推進センター 海外浩平

Today s s Agenda SELinux の概要と考え方 セキュリティポリシーの記述方法と問題点 タイプ継承に基づくセキュリティポリシー SELinux ポリシーコンパイラの拡張 タイプ継承を利用したポリシーの記述 まとめ 2

はじめに ~SELinux の概要 ~ Linux2.6.x 用のセキュリティ強化モジュール万が一 侵入を許しても 何もさせない アプローチ FW IDS のような水際作戦とは異なる SELinux が有効なケース アプリ脆弱性を突いた侵入 不正な権限昇格 ウィルス ワーム トロイの木馬 目的外の機密情報の参照 アプリケーションには不必要な権限が多すぎる セキュリティホール経由で これらの権限を悪用される BOF からシェルを実行されて ファイルを改ざんされたり SELinux は攻撃者の手足を縛ってしまう 3

SELinux における考え方 アプリケーションを必要最小権限で動作させるアプリケーションには不必要な権限が盛りだくさん粒度の細かいアクセス制御 ( 約 200 種類!) 仮に脆弱性が存在しても 想定の範囲内 の行動しか許可されない UNIX モデルでは root 権限を取られたら無条件降伏 セキュリティポリシーによる一括設定アプリケーションが やっていいこと を予め列挙しておく全てのユーザ プロセスはセキュリティポリシーに従う 誰が 誰に 何をできる かを列挙したもの セキュリティポリシーの記述に反する事は一切許さない 正しい セキュリティポリシーが SELinux の生命線 4

セキュリティポリシーのいろは 基本は 誰が 誰に 何をする 誰が?: ほとんどがプロセス 誰に?: ファイル ソケット 共有メモリ 何をする : ディレクトリに対するエントリの追加 親プロセスへのシグナルの送信 TCP ソケットに対するパケットの送信 共有メモリの書き込み可能マップ PostgreSQL データベールファイル を定義する TYPEpostgresql_db_t,file_type,sysadmfile; Apache が Web コンテンツを ファイルとして読み込む ALLOWhtpd_thtpd_sys_content_t:fileread; 俳優 は脚本通りに演技しなければならない 脚本 俳優 脚本 SELinux のセキュリティポリシーはこのような記述 ( 脚本 ) の集合 タイプ アクセス許可 5

誰が 誰に 何をする 構文 登場人物の宣言 TYPE 構文 TYPE< タイプ名 >[ALIAS< 別名 >][,< 属性名 >,.]; [ 使用例使用例 ] TYPEhtpd_sys_content_t,file_type; TYPEhtpd_t,domain; [ 意味 ]] ]] htpd_sys_content_t の名前のタイプを定義し file_type 属性を付与する htpd_t という名前のタイプを定義し domain 属性を付与する 脚本の執筆 ALLOW 構文 ALLOW< タイプ名 (Subject)>< タイプ名 (Object)> :< クラス名 >< パーミッション >; [ 使用例使用例 ] ALLOWhtpd_thtpd_sys_content_t:file{getatrreadlockioctl}; [ 意味 ] Apache(htpd_t) が が Web コンテンツ (htpd_sys_content_t) の の ファイルに対して getatr/read/ioctl/lock の操作を行うことを許可 6

セキュリティポリシー記述の課題 複数のアプリケーションに関連する設定が複雑 FTP/Samba/Apache から共通にアクセスされるファイルに対するアクセス権の設定をどのように行うか? アプリケーションの組み合わせが増えるほど煩雑 冗長になる PHP/CGI スクリプトが PostgreSQL へ接続するための設定は どこの設定ファイルに記述すればよいのか? ポリシーの相互依存関係が強くなりすぎる インターフェース 的 なものを明確に定義することが必要 細かすぎる パーミッションの粒度 直感的に把握可能なものに抽象化することが必要 セキュリティポリシーの記述に高いスキルを要求される 大量のポリシーを一貫性を持ったまま記述しなければならない アプリケーション間の依存関係を理解している必要がある 7

FTP/Samba/Apache の例 /var/www/html/* (httpd_sys_content_t) Execute Apache サーバ (httpd_t) /var/www/cgi-bin/* (httpd_sys_script_exec_t) Append /var/log/httpd/* (httpd_log_t) FTP サーバ (ftpd_t) /home/foo/* (user_home_t) /var/log/samba/* (var_log_t) Append /home/foo/public_html (httpd_user_content_t) Samba サーバ (httpd_t) 8

PHP/CGI とPostgreSQL の例 (1) htpd_t postgresql_t ドメイン Apache サーバ PostgreSQL サーバ 接続 Create CGI の実行 PHP スクリプト (mod_php.so) htpd_sys_script_t CGI スクリプト [htpd_sys_script_t] UNIX ドメインソケット DB ファイル postgres_db_t アクセス許可を設定しているのは PostgreSQL の設定ファイル htpd_t が postgresql_t に UNIX ソケット経由での通信を許可 FedoraCore3/RedHatEL4 の設定 Apache のポリシーと PostgreSQL のポリシーが強く依存している PostgreSQL に接続可能なタイプ を抽象化する仕組みが必要 9

PHP/CGI とPostgreSQL の例 (2) test.cgi PostgreSQL に接続する CGI #!/usr/bin/perl usedbi; $conn=dbi->connect("dbi:pg: dbname=test;user=test;"); $SQL="select*fromtesttbl"; $res=$conn->prepare($sql); $code=$res->execute(); : 独立のCGI として実行 (htpd_sys_script_t) mod_perl 経由で実行 (htpd_t) アクセス拒否ログ audit(1115774411.448:0):avc: denied {write}forpid=20243exe=/usr/bin/perl name=.s.pgsql.5432dev=sda2ino=2205106 scontext=root:system_r:httpd_sys_script_t tcontext=root:object_r:postgresql_tmp_t tclass=sock_file 10

タイプ継承に基づくセキュリティポリシー タイプ間に親子関係を定義 権限を継承させることができる 多重継承を許し タイプは複数の親を持つことができる タイプ継承がない場合 データベースサーバ ファイル A ファイル B ファイル C データベース Socket Execute Execute Connect Connect Connect アプリケーション α アプリケーション β アプリケーション γ 11

タイプ継承に基づくセキュリティポリシー タイプ間に親子関係を定義 権限を継承させることができる 多重継承を許し タイプは複数の親を持つことができる タイプ継承がある場合 データベースサーバ ファイル B データベース Socket Connect// ファイル A ファイル C DB 接続可能アプリ Execute アプリケーション α アプリケーション β アプリケーション γ 12

セキュリティポリシーの生成フロー /etc/selinux/targeted/src/policy/* セキュリティポリシーのソースファイル群 マクロ アクセス許可 基本構造 タイプ定義 アプリ設定 m4 マクロプロセッサ ( マクロを展開して 1 ファイルに統合 ) checkpolicy コマンド (SELinux ポリシーコンパイラ ) policy.conf 中間生成ファイル policy.xx ( バイナリポリシー ) load_policy コマンド ( バイナリポリシーのロード ) Linux カーネル SELinux モジュール 13

SELinux ポリシーコンパイラの拡張 継承関係を定義するための構文 TYPE< タイプ名 >EXTENDS< 親タイプ >[,.]; 例 ) TYPEchild_tEXTENDSparent_t; child_t は parent_t を親タイプに持つ 継承を意識したアクセス許可を与えるための拡張タイプ名に対する @ プレフィクスの追加 親とその子孫がタイプ指定の範囲となる タイプの定義 TYPEparent_t; TYPEchild_tEXTENDSparent_t; parent_t child_t ALLOWanyone_tparent_t:fileread; anyone_t は parent_t のファイルのみ 可能 ALLOWanyone_t@parent_t:fileread; anyone_t は parent_t/child_t のファイルを 可能 14

従来のポリシーコンパイラとの互換性 セキュリティポリシー ソースレベル互換性 EXTENDS のないタイプ宣言は継承関係を定義しない @ を付与しない権限の付与は 従来通りに認識される EXTENDS や @ を使用しない従来の構文の解釈は全く変わらない セキュリティポリシー バイナリレベル互換性 タイプ間の親子関係を内部的に展開してコンパイルする バイナリ形式は従来のものを一切変更していない 既存のポリシー分析ツールなどをそのまま使用することができる parent_t child1_t child2_t grandchild_t @parent_t {parent_tchild1_tchild2_tgrandchild_t} @child2_t {child2_tgrandchild_t} @parent_t-@child2_t {parent_tchild1_t} ALLOWanyone_t@parent_t:file{readwrite}; ALLOWanyone_t{parent_tchild1_tchild2_t grandchild_t}:file{readwrite}; 15

FTP/Samba/Apache の例 /var/www/html/* (httpd_sys_content_t) Execute Apache サーバ (httpd_t) /var/www/cgi-bin/* (httpd_sys_script_exec_t) Append /var/log/httpd/* (httpd_log_t) FTP サーバ (ftpd_t) /home/foo/* (user_home_t) /var/log/samba/* (var_log_t) Append /home/foo/public_html (httpd_user_content_t) Samba サーバ (httpd_t) 16

FTP/Samba/Apache の例 FTP/Apache/Samba が共通のファイルにアクセス /var/www/html/ /var/www/cgi-bin/ /var/log/htpd/ Apache Execute Append FTP / / Samba /var/log/samba/ /home/foo/ / / /home/foo/public_html / / 17

継承を使った FTP/Samba/Apache の例 Samba サーバ (smbd_t) / smbd_share_t /home/foo/* (user_home_t) Append /var/log/samba/* (var_log_t) / 各アプリ毎の設定をクローズドにできる FTP サーバ (ftpd_t) /home/foo/public_html (httpd_user_content_t) ftpd_file_rw_t ftpd_file_ro_t /var/www/html/* (httpd_sys_content_t) Apache サーバ (httpd_t) Execute Append /var/www/cgi-bin/* (htpd_sys_script_exec_t) /var/log/httpd/* (httpd_var_log_t) 18

継承を使った PHP/CGI とPostgreSQL の例 Apache 用の設定 PostgreSQL 用の設定 Apache サーバ [htpd_t] PostgreSQL サーバ [postgresql_t] CGI 実行 PHP PHP スクリプト PHPスクリプト CGI プログラム [htpd_sys_script_t] 継承 継承 継承 接続許可 PostgreSQL 接続用抽象タイプ [postgresql_connectable_t] メールサーバ用の設定 メール管理用抽象タイプ [mailadmin_domain_t] DB ファイル postgresql_db_t 再起動 設定ファイル メールサーバ 細かすぎる権限を集約して付与することが可能になる 各アプリケーションのポリシー記述の独立性が向上 19

継承を利用したポリシーの記述 (1) 継承 される 側に必要な設定 インターフェースとなるタイプの定義 アプリケーション ~ インターフェース間のアクセス権の定義 FTP/Samba の合成タイプの例 FTP と Samba から共通にアクセスしたいファイルタイプの定義 FTP のみ /Samba のみのファイルタイプの定義を利用する typesamba_share_t; typeftpd_file_ro_t; typeftpd_file_rw_t; #Samba 共用ファイル用タイプ #FTP 読み取り専用タイプ #FTP 読み書き可能タイプ allowsmbd_t@samba_share_t:filecreate_file_perms; allowsmbd_t@samba_share_t:dir create_file_perms; allowftpd_t@ftpd_file_rw_t:filecreate_file_perms; allowftpd_t@ftpd_file_rw_t:dir create_dir_perms; allowftpd_t@ftpd_file_ro_t:filer_file_perms; allowftpd_t@ftpd_file_ro_t:dir r_dir_perms; 20

継承を利用したポリシーの記述 (2) 継承 する側 に必要な設定 インターフェースとして提供されたタイプを継承する Samba/FTP の合成タイプの例 継承を使用した場合 typesamba_ftpd_file_ro_textends samba_share_t,ftpd_file_ro_t; typesamba_ftpd_file_rw_textends samba_share_t,ftpd_file_rw_t; Samba が読み書き可能で FTP は -Only 又は / 可能 同様の記述を繰り返すことに FTP の設定なのか Samba の設定なのか不明確 継承を使用しない場合 allowsmbd_tsamba_ftpd_file_ro_t:filecreate_file_perms; allowftpd_tsamba_ftpd_file_ro_t:filer_file_perms; allowsmbd_tsamba_ftpd_file_rw_t:filecreate_file_perms; allowftpd_tsamba_ftpd_file_rw_t:filecreate_file_perms; : 21

継承を利用したポリシーの記述 (3) サーバアプリケーションに接続可能なタイプの定義 PostgreSQL へ接続可能なインターフェース タイプを定義 PostgreSQL 側の設定 typepostgresql_connectable_t; allow@postgresql_connectable_tpostgresql_tmp_t :sock_filerw_file_perms; allow@postgresql_connectable_tpostgresql_t :unix_stream_socketconnectto; Apache 側の設定 typeextendshttpd_textends postgresql_connectable_t; 中間にインターフェースとなるタイプを挟むことで PostgreSQL の設定と Apache の設定を分離できる 22

継承を利用したポリシーの記述 (3) サーバアプリケーションに接続可能なタイプの定義 PostgreSQL へ接続可能なインターフェース タイプを定義 PostgreSQL 側の設定 typepostgresql_connectable_t; ifdef(`apache.te',` allow@postgresql_connectable_tpostgresql_tmp_t allowhttpd_tpostgresql_tmp_t :sock_filerw_file_perms; :sock_filerw_file_perms; allowhttpd_tpostgresql_t allow@postgresql_connectable_tpostgresql_t :unix_stream_socketconnectto; ') :unix_stream_socketconnectto; Apache 側の設定 typeextendshttpd_textends postgresql_connectable_t; 中間にインターフェースとなるタイプを挟むことで PostgreSQL の設定と Apache の設定を分離できる 23

まとめ タイプ継承によって可能になったこと複数アプリケーションが共有するリソースへの権限付与インターフェース タイプを継承することで 個別アプリケーション毎の設定の独立性を高くできる 既存の構文より少ない記述で一貫性のある設定が可能にこれからの課題 継承される ことを意識したセキュリティポリシーの記述 今までの蓄積もあるので大変 SELinux はまだまだ始まったばかりの技術プログラミング言語で言えば アセンブリ言語時代 高級言語 的 なものが求められている タイプ継承も これらのアプローチの一つ 24

ご静聴ありがとうございました NEC Linux 推進センター 海外浩平 (kaigai@ak.jp.nec.com) 25