SELinuxで組み込み機器のセキュリティを高める(前編) ―― SELinuxの概要

中村雄一

tag: 組み込み

技術解説 2008年9月 2日

● SELinuxモジュール

 SELinuxによるセキュリティ・チェックそのものを担うのが,Linuxカーネル内のSELinuxモジュールです注3.SELinuxのようなセキュリティ・システムを採用する場合,気になるのはセキュリティ・チェックの性能への影響です.SELinuxモジュールでは,AVC(Access Vector Cache)という実装を採用し,性能への影響を最小限に抑えています(図10).動作は以下のとおりです.

zu10_01.gif
図10 AVCでセキュリティ・チェックの処理を高速化

(1) プロセスがSELinuxリソースにアクセスする際,SELinuxにアクセス可否を問い合わせる.アクセス可否のルールはセキュリティ・ポリシに記述されているが,SELinuxはセキュリティ・ポリシを直接見にいかず,AVCというキャッシュを見にいく.AVCには,過去のアクセス可否の判定結果がキャッシュされている.ここでアクセス可否を判定できれば,処理は終わる.
(2) AVCでアクセス可否を判定できない場合,セキュリティ・サーバというSELinuxの中の機能に処理が渡る.
(3) セキュリティ・サーバは,セキュリティ・ポリシ内のアクセス可否ルールを探索し,アクセス可否を判定する.
(4) セキュリティ・サーバがアクセス可否の判定結果をAVCに書き込む.AVCの探索は,セキュリティ・ポリシの探索より約100倍高速.一般的なシステムではAVCのヒット率は99%以上なので,AVCによって大きく処理速度を向上できる.ちなみに,周波数が200MHz程度のCPUの場合,AVCの探索にかかる時間はμsのオーダである.
(5) SELinuxモジュールのステータス(SELinuxのモードなど)やAVCの統計情報(キャッシュのヒット・ミス回数)などは,selinuxfsというメモリ上の特殊なファイル・システムに記録される.通常は,/selinuxにマウントされる.例えば,/selinux/avcディレクトリには,AVCの統計情報が記録されている.

● ファイル・システムの拡張属性xattr

 SELinuxでは,プロセスにドメインを,ファイルなどのリソースにタイプというラベルを付与する必要がありました.ファイルのタイプについては,ファイル・パーミッションや更新日時と同じように,ファイル・システム内部に保存しておく必要があります.そのため,ファイル・システムは,タイプを保存するための領域を確保しておかなければなりません.タイプのようなセキュリティ属性を保存する領域のことを「xattr(Extended Attribute:拡張属性)」と呼びます.SELinuxを使うためには,xattrをサポートしたファイル・システムを使う必要があります.組み込み分野で使われるファイル・システムでは,ext2,ext3,jffs2がxattrに対応しています.一方,yaffs,logfs,cramfsはxattrに対応していません.

● ログ取得のためのauditサブシステム

 SELinuxによるアクセス可否判定の結果をログ・ファイルに残すことができますが,ログを取得するために使われているのがauditサブシステムです.

 auditサブシステムとは,もともとは「どんなuid,pidのプロセスが,どんなシステム・コールを呼び出したか」といったシステム・コールのログを取得するために用意された仕組みです.そのため,取りこぼしなくログを取得できる堅ろうな実装になっています.現在はシステム・コールのログ以外のログも取得できるようになっており,SELinuxに関するログもauditサブシステムを使って取得されるようになっています.ログ・メッセージは,syslogが動作している場合はsyslogに処理が渡り,ログ・ファイルに記録されます.syslogが動作していない場合は,カーネル・メッセージとして,カーネルのメッセージ・バッファに出力されます.auditdというauditサブシステムに対応したデーモンが動作している場合は,/var/log/audit以下にログが保存されます.

● ユーザランド

 SELinuxを使うためには,SELinuxを有効にしたカーネルだけではなく,ライブラリやコマンドが必要です.セキュリティ・ポリシの設定ファイルをカーネルに読み込ませるためのコマンドや,ファイルのラベルを閲覧・変更するためのコマンドがなどが配布されています.主なライブラリ・コマンドを表1に示します.

  名 前 機 能
ライブラリ libselinux SELinux管理コマンドを使うための基本ライブラリ.必須
libsepol SELinuxのポリシ・ファイルを解析するためのライブラリ
libsemanage SELinuxのポリシ・ファイルをモジュール化して管理するためのライブラリ.パソコン・サーバ向けの機能
コマンドの拡張 ls ファイルのラベルを閲覧するためのオプション「-Z」が用意
ps プロセスのラベルを閲覧するためのオプション「-Z」が用意
管理コマンド load_policy セキュリティ・ポリシの設定ファイルをカーネルにロードする.必須
setfiles, restorecon ファイルのラベル付与設定ファイルの設定を反映.必須
chcon ファイルに任意のラベルを付与する
getenforce, setenforce SELinuxのモードを切り換える
表1 SELinuxに関連したライブラリとコマンド
組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日