第3回 権限を最小化するLinuxカーネルケーパビリティ

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

 前回「ファイルACLを用いたアクセス制御」では、LIDSの特徴であるファイルACLによる強制アクセス制御(MAC)とその実装について見ました。今回は、LIDSの特徴の2つ目である「Linuxカーネルケーパビリティ」を見ていきましょう。

 権限を切り分けるPOSIXケーパビリティ

 通常、UNIXにおけるプロセスは、一般ユーザー権限で動くか、特権(root権限)で動くかの2種類しかありません。プロセスに特権が必要となるのは、Apacheなどのサービスがポート1024番未満のいわゆる「特権ポート」をプロセスで使用する場合や、pingやsnortなどのように生(raw)ソケットをイーサネットデバイスに対してオープンし生のIPデータトラフィックを見る場合、あるいはntpdなどでシステムの時刻を設定する場合などです。

 しかし、プロセスに特権をすべて与えてしまうことにより新たな問題が生じてきます。動作しているプロセスに脆弱性があった場合に、不正な操作によりプロセスが持っている権限を取得されてしまう可能性があるのです。この結果、悪意のあるユーザーにコンピュータのすべてを自由にできる特権を奪われてしまうことになります。

 この問題は随分前からUNIXでは指摘されており、これを解決する方法として「ケーパビリティ(POSIX Capability)」という提案がPOSIX(Portable Operating System Interface for UNIX:IEEEによるUNIXの標準アプリケーション・インターフェイス仕様)のドラフト1003.1eに提出されました。

 これは、特権をさらに細分化したケーパビリティと呼ばれる単位で取り扱えるようにし、プロセスに特権すべてを与えるのではなく、最小限のケーパビリティを与えて必要な処理を行わせようというものです。これにより、プロセスにもし脆弱性が発見されて悪用されたとしても、そのプロセスが必要とする最小限のケーパビリティしか奪われないため、被害の範囲を狭めることが可能になります。

 POSIXケーパビリティに関する詳しい説明は以下のテキストを参照してください。

Linux Capabilities FAQ 0.2
ftp://www.kernel.org/pub/linux/libs/security/linux-privs/kernel-2.4/capfaq-0.2.txt

 Linuxカーネルケーパビリティ

 このPOSIXケーパビリティは、Linux上では「Linuxカーネルケーパビリティ」としてカーネル2.4から採用されています。最新のカーネル2.4.32では29種類のケーパビリティ(表1)が定義されています。

番号 ケーパビリティ名 番号 ケーパビリティ名
0
CAP_CHOWN
15
CAP_IPC_OWNER
1
CAP_DAC_OVERRIDE
16
CAP_SYS_MODULE
2
CAP_DAC_READ_SEARCH
17
CAP_SYS_RAWIO
3
CAP_FOWNER
18
CAP_SYS_CHROOT
4
CAP_FSETID
19
CAP_SYS_PTRACE
5
CAP_KILL
20
CAP_SYS_PACCT
6
CAP_SETGID
21
CAP_SYS_ADMIN
7
CAP_SETUID
22
CAP_SYS_BOOT
8
CAP_SETPCAP
23
CAP_SYS_NICE
9
CAP_LINUX_IMMUTABLE
24
CAP_SYS_RESOURCE
10
CAP_NET_BIND_SERVICE
25
CAP_SYS_TIME
11
CAP_NET_BROADCAST
26
CAP_SYS_TTY_CONFIG
12
CAP_NET_ADMIN
27
CAP_MKNOD
13
CAP_NET_RAW
28
CAP_LEASE
14
CAP_IPC_LOCK
表1 カーネル2.4.32でのケーパビリティ一覧

 またカーネル2.6.14.4では新たにログ監査に使うAUDIT機能関連のケーパビリティ「29 CAP_AUDIT_WRITE」と「30 CAP_AUDIT_CONTROL」の2つが追加されて31種類となっています。

 それぞれのケーパビリティに関する詳しい説明は、カーネルソース内の/usr/src/linux/include/capability.hファイルにコメントとして載っています。また、「man capabilities」としてケーパビリティに関するマニュアルを読むこともできます。代表的なケーパビリティに関しての説明を表2に示します。

ケーパビリティ名 説明
CAP_CHOWN ファイルのUID とGID を任意に変更することを許可する
CAP_DAC_OVERRIDE ファイルの読込み、書き込みと実行権限のチェックをバイパスする
CAP_NET_ADMIN さまざまなネットワークに関係する操作(ルーティングテーブルの変更など)を許可する
CAP_NET_BIND_SERVICE 1024 番以下のポート番号へのバインディングを許可する
CAP_NET_RAW RAWソケットとPACKETソケットの使用を許可する
CAP_SYS_CHROOT chroot(2)をコールすることを許可する
CAP_SYS_TIME システムクロックの変更を許可する
表2 代表的なケーパビリティ

1/4

Index
権限を最小化するLinuxカーネルケーパビリティ
Page1
権限を切り分けるPOSIXケーパビリティ
Linuxカーネルケーパビリティ
  Page2
ケーパビリティチェック
LIDSによるケーパビリティの拡張
ファイルに対するアクセス制御のフロー
  Page3
ケーパビリティの実態
  Page4
ケーパビリティの調整方法
LIDSを用いた場合のケーパビリティの調整方法


Security&Trust記事一覧

@IT Special

- PR -

TechTargetジャパン

Security&Trust フォーラム 新着記事
  • 情報危機管理コンテストで考える――人材は育てるもの? それとも育つもの? (2017/6/21)
    さまざまなセキュリティインシデントに対応する能力をコンテスト形式で鍛える「第12回情報危機管理コンテスト」の決勝戦が、2017年5月25〜27日に和歌山県田辺市で開催された。競技シナリオにもない脆弱(ぜいじゃく)性を見つけたチームあり、意識的に初参加者を加えたチームあり、これまでのコンテストの枠を超えた戦いが繰り広げられた
  • リクルートのCSIRTが、マルウェア対策の一部を内製化した理由 (2017/6/19)
     本連載では、ランサムウェアを含む「マルウェア感染」という、さまざまな企業が頭を悩ませる問題について、リクルートグループのコンピューターインシデント対応チーム「Recruit-CSIRT」の発想と技術をお伝えする
  • 「WannaCry」の次は「SambaCry」? (2017/6/14)
    2017年5月のセキュリティクラスタ、ゴールデンウイークはのんびり過ごせたものの、その後が大変。ワームとして動くランサムウェア「WannaCry」の話題で持ちきりとなりました。騒ぎが落ち着いたと思ったら「SambaCry」が話題に。結局5月末まで、Windowsファイル共有サービスがタイムライン(TL)を賑わしていました。この他、無線LANのタダ乗り無罪判決に対し、総務省が違法だと主張してTL上で意見が飛び交いました。
  • 「WannaCry」にどう対処する、猛威を振るった「ランサムウェア」を知る記事12選 (2017/5/30)
     2017年5月12日からランサムウェア「WannaCry」が大きな話題になった。これをきっかけにランサムウェア対策を講じることになった企業も多いのではないだろうか。本稿では、ランサムウェアに関する記事をピックアップ。今後のセキュリティ対策の参考にしてみてはいかがだろうか
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

イベントカレンダー

PickUpイベント

- PR -

アクセスランキング

もっと見る

ホワイトペーパーTechTargetジャパン

注目のテーマ

Security & Trust 記事ランキング

本日 月間
ソリューションFLASH