第5回 「信頼されたPath」という考え方をLIDSで使う

面 和毅
サイオステクノロジー株式会社
インフラストラクチャービジネスユニット
Linuxテクノロジー部
OSSテクノロジーグループ
シニアマネージャ
2006/3/25

 LIDS TPEの考え方

 LIDSを導入したシステムでは、前章で挙げたようなTPEの3つの構成要素を次のように定義します。

1.Trusted Path

 この連載ですでに説明しているとおり、LIDSを導入したシステムではrootの権限を制限できます。LIDSを導入する目的として「rootも信用しない」という大前提があります。よって、信頼されたPathとは「rootがオーナーである親ディレクトリ」という定義ではなく、「バイナリ/カーネルモジュール/ライブラリのパスがLIDSでREADONLY/DENYで保護されている状態」を「信頼できる」として定義します。

 つまり、「lidsconf -A -o /sbin -j READONLY」であれば、/sbin以下のバイナリファイルが信頼できます。また、「lidsconf -A -o /lib -j READONLY」であれば、/lib以下のライブラリが信頼できます。同様に「lidsconf -A -o /lib/modules -j READONLY」であれば、/lib/modules以下のモジュールが信頼できます。

 さらに、

lidsconf -A -o /var/workdir -j READONLY
lidsconf -A -o /sbin/foo -j READONLY
lidsconf -A -s /sbin/foo -o /var/workdir -j WRITE

という設定において、信頼できるバイナリ「foo」が/var/workdirに対してWRITE権限を持っているときには、/var/workdir以下のファイルも信頼できると定義します。

2.Trusted ACL

 LIDSではユーザーによるアクセス制限を考慮しておらず、バイナリ/プログラムの方に焦点を当てていますので、信頼できるユーザーかどうかを考慮することができません。そこで、LIDS ACLをTrusted ACLとします。

3.Rule

 ルールは「信頼できるバイナリのみが実行を許可され、信頼できるライブラリ/カーネルモジュールのみがロードを許可される」と定義されます。

 これらの定義に基づいて実装されたものが、LIDS TPEになります。LIDS TPEを用いると、以下のことが可能になります。

  • root特権を含む任意のユーザーが、保護されていないライブラリを含む任意のファイル(保護されていないバイナリ)を実行することを防止
  • root特権を含む任意のユーザーが、保護されていないカーネルモジュールを読み込むことを防止
  • システムを「LD_PRELOAD/LD_LIBRARY_PATHタイプ」の攻撃から防御
  • システムを「'/lib/ld-linux.so.X <executable_name>'」タイプの攻撃から防御

 実際にLIDS TPEを使ってみよう

 それでは、LIDS TPEの使用例を実際に見てみましょう。前回、使い方を説明したVMwareイメージを使用します。

 LIDSの入ったシステムをTPEモードにするには、rootアカウントで、

# lidsadm -S -- +TPE

とするか、カーネル封印時のコマンドを、

# lidsadm -I +TPE

とします。なお、紹介したVMwareイメージでは、すでにLIDSはカーネル封印時にTPEモードが有効になっています。

 それでは早速VMwareイメージを立ち上げてrootでログインし、

# lidsadm -V

というコマンドを入力してみましょう。LIDSの状態パラメータがチェックできます。

 すると「TPE 1」となっていることが分かります。これは、TPEモードが有効になっていることを意味しています。

画面1 LIDSの状態パラメータの確認

 この状態で、LIDS TPEの挙動をテストしてみましょう。VMwareイメージでは、/binや/usr/binはREADONLYで保護されていますが、/tmp以下はWRITEパーミッションが与えられており、何も保護が掛かっていない状態になっています。では、/tmpディレクトリに移動し、/bin/lsコマンドを/tmpディレクトリにコピーします。

# cd /tmp
# cp /bin/ls ./

 次に、「/tmp/ls -l」を実行してみましょう。

# /tmp/ls -l

 TPEモードが有効になっているため、「/tmp/lsが保護されていない入力のため、実行を拒否した」というエラーメッセージが出て、「/tmp/ls」は実行されません。しかし、ここで「/bin/ls -l」を実行すると、/tmpディレクトリの中身は正しく表示されます。

画面2 LIDS TPEの挙動

 LIDS TPEの考え方

 LIDS TPEの機能を見てきましたが、LIDS TPEの実装もいまだ完ぺきではありません。例えば、LIDS TPEではsh、perlなどを信頼してしまうと、シェルスクリプトやPerlスクリプトに関しても自動的に信頼してしまうため、悪意のあるスクリプトによる攻撃を防げません。これらに関しては、TPEの発展形であるLIDS TDEとSandbox機能を使って防ぎます。

 また、LIDS TPEを導入したとしても、バッファオーバーフローの脆弱性を用いて任意のコードを実行される攻撃を防げません。バッファオーバーフローに関しては、別途、対策を講じる必要があります。

 次回は、TPEから派生した機能であるLIDS TDEとSandbox機能を説明します。

2/2
 

Index
「信頼されたPath」という考え方をLIDSで使う
  Page1
Trusted Pathというセキュリティモデル
一般的なTPEの考え方
Page2
LIDS TPEの考え方
実際にLIDS TPEを使ってみよう
LIDS TPEだけでは万能ではない


Profile
面 和毅(おも かずき)

サイオステクノロジー株式会社
インフラストラクチャービジネスユニット Linuxテクノロジー部
OSSテクノロジーグループ
シニアマネージャ

 学生時代よりUNIXに親しむ。1997年からサーバ構築およびセキュリティ全般を扱う仕事に従事、Linuxを使い始める。

 現在はLIDSの普及活動に注力。LIDSユーザ会(LIDS-JP)の立ち上げやLIDS関連文書の日本語化、LIDSを用いたシステム構築の紹介などを行っている。また、サイオステクノロジーでビジネス面でのLIDSの普及活動に注力している。

 2005年12月より、LIDS Teamに参加し、LIDSの公式な開発チームの一員として活動している。

Security&Trust記事一覧


Security&Trust フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Security & Trust 記事ランキング

本日 月間