2009年6月2日火曜日

ubuntuで AppArmor を使ってセキュアな環境を構築する

AppArmor はubuntuにセキュアな環境を提供するフレームワークです。同様のものにSElinuxがありますが、あちらはがっちがちの強固なセキュアOSで、我々のようなエンドユーザーが気軽にほいほいと使えるものでもありません。SElinuxの中の人も、ポリシーは専門家が記述すればいいと言っています・・・

 幸いにして AppArmor はカジュアルに扱えるセキュリティツールとしてubuntuで採用されており、これを使わない手はありません。がしかし日本語での資料がほとんどなく、ろくに有効活用されていないのが実情だと思います。
 そこで、自分のためのメモとして簡単な使い方を書いてみたいと思います。

導入

 apparmor はアプリごとにルールを設定し、設定したルール以外の行動を禁止します。ですからあるアプリが脆弱性を利用してクラックされ、そのアプリから全然関係のないファイルにアクセスしようとしても、それはルールで許可されていませんから、アクセスが出来ず、被害を防げるという仕組みです。
 このルールをプロファイル(ポリシー)といい、あらかじめいくつか用意されていますので、まずprofileを導入します。
sudo apt-get install apparmor-profiles apparmor-utils
apparmor 自体は標準で有効になっているはず。

確認する

sudo apparmor_status
でステータスが確認出来ます。
 enforce mode が実際にprofileを適用しています。
 complain mode が学習モードで、システムログに学習結果をどんどん書き出しています。


新しいprofileを作る

 polipo を使っているので、こいつのprofileを実際に作っていきます。

sudo aa-genprof /usr/bin/polipo
とすると、
Please start the application to be profiled in
another window and exercise its functionality now.

Once completed, select the "Scan" button below in
order to scan the system logs for AppArmor events.

For each AppArmor event, you will be given the
opportunity to choose whether the access should be
allowed or denied.

Profiling: /usr/bin/polipo

[(S)can system log for SubDomain events] / (F)inish
と聞いてきますので、F キーを押して終了させます。そうすると、 /etc/apparmor.d/ 以下に usr.bin.polipo というファイルが作られます。
 次に、
sudo aa-complain /usr/bin/polipo
としてすぐさま学習モードにし、
sudo /etc/init.d/polipo restart
としてpolipoをリスタートさせ、しばらく動作させます。この間 apparmor はpolipoの動作ログを取り続けます。いろいろとpolipoを動作させ、その振る舞いを学習できたかなあと思ったら、
sudo aa-logprof
として学習結果を反映させます。
対話形式で、許可、不許可を聞いてきますので、逐次答えていきます。答え終わると、セーブするか聞いてくるので、もちろんセーブします。

 しばらく学習行為を終え、もう漏れがないかなあと思ったら、complainモードからenforceモードに
sudo aa-enforce polipo
として切り替えます。

 これでpolipoは設定したファイル以外にはアクセス出来なくなります。
 参考までに、/etc/apparmor.d/usr.bin.polipo の中身を。
# Last Modified: Tue Jun  2 16:00:15 2009
#include

/usr/bin/polipo flags=(complain) {
#include
#include



/etc/polipo/config r,
/etc/polipo/forbidden r,
/etc/polipo/uncachable r,
/usr/bin/polipo r,
/usr/share/polipo/www/doc/* r,
owner /var/cache/polipo/ r,
owner /var/cache/polipo/** rw,
owner /var/log/polipo/polipo.log a,
owner /var/run/polipo/polipo.pid w,

}

こんな感じになっています。もちろんエディタで直接変更してもかまいません。

 つまり簡単に言うと、
  1. プロファイルがなければ aa-genprof で作る。
  2. complainモードでしばらく学習させる。
  3. aa-logprof で学習結果を反映させる。
  4. Okなようなら enforceモードに切り替える。
こんな感じです。ね、簡単でしょう?w

 ちなみに aa-genprof でいきなりFキーで終了させていましたが、あのままの状態でアプリを立ち上げ、いろいろ操作をした後に、Fキーでなく、Sキーを押すと、許可、不許可の設定が続きます。ただ短時間の学習だとどうしても漏れがあるので、しばらくはcomplainモードで回したのちに、 aa-logprof で反映させるといいでしょう。

# 正直デスクトップユーザで セキュアOS必要かというと現状いらないんじゃないかと思うんですが、将来のことを考えると憶えておいて損はないと思います。でもその前に TOMOYO がubuntu にきちゃうかなw

0 件のコメント: