• 検索結果がありません。

自動ルール生成の手順

ドキュメント内 CompartmentGuard_Ver3.0-Rev1.0a.doc (ページ 58-66)

11.3.1 実行前に行うこと

自動ルール生成では、cgmakeruleというコマンドを使用しますが、実行に先立って、

実行時のコンパートメントとケーパビリティに制限があります。

-systemコンパートメントにあること

-CAP_MAC_ADMIN、CAP_MAC_ALARMの両ケーパビリティを有していること

確認には、cgstatcapコマンドを使用します。

確認が済んだら、cgmakeruleコマンドを検索パスに含めます。

11.3.2 初期化

初期化を行うと、Compartment GuardはPass throughモードに移行し、ルールが 許可しないイベント操作を行っても、拒否されなくなります。ただし、Pass through モー ドにあっても、アプリケーションの振舞いは常に監視されています。

また、初期化時には、アプリケーションの実行ファイルとコンパートメントの対応付けを 行い、初期ルールを生成します。この対応付けは、コンパートメントの遷移が発生する 起点となる実行ファイルについてのみ行います。

例えば、Web サービスを提供する実行ファイルが/usr/sbin/httpd であったとすると、

# export PATH=$PATH:/opt/hpcg/cgmakerule/bin 

# cgstatcap  

Compartment: system  MAC capabilities: 

      pie    CAP̲MAC̲ADMIN        pie    CAP̲MAC̲SETCID        ̲̲̲   ‑CAP̲MAC̲OVERRIDE̲NET        pie    CAP̲MAC̲OVERRIDE̲FS 

      ̲̲̲   ‑CAP̲MAC̲IGNORE̲SIGNAL̲SHIELD        ̲̲̲   ‑CAP̲MAC̲SIGNAL̲SHIELD 

      pie    CAP̲CHOWN 

実行ファイル/usr/sbin/httpdについてコンパートメントの指定を行えば、httpdプロセ スから起動される実行ファイルについて、指定する必要はありません(派生プロセスの コンパートメントを別に分けたい場合を除きます)。

以下のコマンドを実行します。

コマンド実行例)

初期化ファイルの書式は以下の通りです。

初期化ファイル例)

11.3.3 イベントの発生(1)

一旦、自動ルール生成が始まったら、アプリケーションのルール生成の元となるイベン トを発生させる必要があります。

例えば、Webサービスならば、Web サービス起動・停止スクリプトを使い、サービスを 起動及び停止させることによって、イベントを発生させます。

# cgmakerule ?init 初期化ファイル 

# cgmakerule ?init httpd.init  adding compartment httpd  csec.pass̲through = all  csec.log̲denial = none 

実行ファイル(絶対パス)遷移元コンパートメント遷移先コンパートメント

/usr/sbin/httpd httpd hpcg_httpd

# /etc/rc.d/init.d/httpd start Starting httpd: [ OK ]

# /etc/rc.d/init.d/httpd stop Stopping httpd: [ OK ]

11.3.4 ルール生成の進行(1)

イベントを発生させたら、それを元にしたルール生成を試みます。

以下のコマンドを実行します。

コマンド実行例)

ここで生成されたルールは、やや精度が低く、更につづけてアプリケーションの振舞い を観察する必要があります。

11.3.5 イベントの発生(2)

サービスを起動し、ネットワークアクセスなど、さまざまなアクセスを試みて、出来るだ け多くのイベント発生を試みます。

11.3.6 ルール生成の進行(2)

一通り、イベントの発生を試みたら、再度ルール生成を試みます。

以下のコマンドを実行します。

コマンド実行例)

# cgmakerule --next

# cgmakerule –next csec.log_denial = none 431 event(s) caught 42 rule(s) generated 20 rule(s) deleted 42 rule(s) added csec.log_denial = all

# cgmakerule --next

ここで生成されたルールの精度は「11.3.4 ルール生成の進行(1)」の時点より上がっ ていますが、十分な精度が得られているかどうかを判断するため、更にアプリケーショ ンの振舞いを観察します。

11.3.7 イベントの発生(3)

「11.3.5 イベントの発生(2)」と同様にイベントを発生させます。

11.3.8 ルール生成の進行(3)

十分な精度が得られたかどうかを確認するために、ルール生成を進めます。新たなル ールが生成されなければ、収束した状態であり、ルールを確定する準備が出来たこと になります。

ルール生成を進めるには、以下のコマンドを実行します。

コマンド実行例)

11.3.9 ルールの確定

収束状態になったら、ルールを確定できます。

ルールを確定するためには、コンパートメントとそれが属するCompartment Guard 上のサービス名の対応を記述したファイルが必要です。Compartment Guard 上の

# cgmakerule –next csec.log_denial = none 19 event(s) caught 40 rule(s) generated 2 rule(s) deleted 0 rule(s) added csec.log_denial = all

# cgmakerule –next csec.log_denial = none 0 event(s) caught

No new rules are generated. Ready to commit csec.log_denial = all

# cgmakerule --next

サービス名は、通常、アプリケーションサービス名の前に”hpcg_”がつきます。例えば、

httpdサービスなら、hpcg_httpd という名前とします。

ルールを確定することで、Pass throughモードから通常のモードに移行します。すな わち、ルールで許可されないアプリケーションの振舞いは禁止されます。

このあと、(経過を観察し)問題がなければ、ルール生成は完了します。問題があれば、

「11.3.11 ルールの確定解除」の手順に従ってルールの確定を解除し、「11.3.7 イベ ントの発生(2)」の手順から繰り返します。

ルールを確定するには、以下のコマンドを実行します。

コマンド実行例)

サービス定義ファイルは、以下の書式で記述します。

サービス定義ファイル例)

11.3.10 ルール生成の完了

ルールを確定して問題がなければ、ルール生成を完了できます。ルール生成を完了し た後は、別のアプリケーションのルール生成を開始することが出来ます。

コマンド実行例)

# cgmakerule –commit サービス定義ファイル

# cgmakerule –commit httpd.serv csec.log_denial = all

csec.pass_through = none

コンパートメント名 Compartment Guard サービス名

httpd hpcg_httpd

# cgmakerule –complete

11.3.11 ルールの確定解除

ルールを確定した後、問題が発生した場合、一旦ルールの確定を解除して新しいルー ルを生成させることが出来ます。

コマンド実行例)

11.3.12 イベント発生状況の確認

処理に時間のかかるアプリケーションのイベントを発生させている時、以下のコマンド を実行して、イベント発生数を確認することが出来ます。

コマンド実行例)

11.3.13 ルール生成完了後のルール更新

自動ルール生成が完了したサービスについて、自動ルール生成によってルールの更 新を行いたいときは、ルールを自動生成過程に戻すことが出来ます。この際は、

「11.3.9 ルールの確定」で使用したコンパートメントとそれに属するCompartment

# cgmakerule –complete Rule generation summary 40 rule(s) total

1 compartment(s) total 1 service(s) total

# cgmakerule –uncomplete

# cgmakerule –uncomplete csec.log_denial = all

csec.pass_through = all

# cgmakerule –count

# cgmakerule –count 391 event(s) caught

Guard上でのサービス名の対応を記述したファイルが必要です。

以下のコマンドによって、ルールの確定状態に戻ります。

コマンド実行例)

この後、「11.3.11 ルールの確定解除」の手順に従って確定解除を行って、ルール生 成を行ってください。

このコマンドを誤って発行してしまった場合は、以下のコマンドで元に戻ります。

11.3.14 ルール生成の中止

ルール生成を途中で止めたい場合、以下のコマンドを実行して初期化前の状態に復 帰できます。

コマンド実行例)

ただし、このコマンドは、ルール確定後は実行できません。ルール確定後にルール生 成を止めたい場合は、「11.3.11 ルールの確定解除」の手順により、ルール確定を解 除してから実行してください。

# cgmakerule –count

# cgmakerule –revise httpd.serv csec.log_denial = all

csec.pass_through = none

Ready to uncommit in order to revise rules for following compartment(s).

httpd

# cgmakerule –complete

# cgmakerule –abort

# cgmakerule –abort csec.log_denial = none csec.pass_through = none

12 参考事項及び注意事項

ドキュメント内 CompartmentGuard_Ver3.0-Rev1.0a.doc (ページ 58-66)

関連したドキュメント