2006年05月17日 (水)

ClamAV と ClamXav: 第五回 ClamAV のパーミッションを補強する

今回はエントリ「ClamXav における freshclam に suid パーミッションのセキュリティ問題」で取り上げたセキュリティ問題を回避するための設定について議論します。

前置き

この問題は ClamXav が内部的に使用する ClamAV のファイルのオーナやパーミッション(読み書きや実行の権限設定)について、ClamXav のドキュメント「Build Your Own」の「Set Appropriate Permissions」で示されている設定に起因するものです。このドキュメントは ClamAV を自分でビルドするためのものですが、ClamXav に付属している ClamAV のパッケージにも同様の設定が施されています。

この設定には ClamXav を通して ClamAV のアップデータ freshclam を使用する場合に、誰が ClamXav を使用しても問題がないようにとの配慮が含まれていますが、その配慮のための設定が緩すぎるのです。ここではこれをもう少しきつく設定し直します。

方針として二つあります。一つは ClamAV を ClamXav のみから使用することを想定したものです。もう一つはエントリ「ClamAV と ClamXav: 第三回 ウィルス定義ファイルの自動更新」で説明した freshclam をデーモンとして使用することを想定したものです。後者は ClamXav での利用に若干制限が加わります。

ついでにこの問題とは関係ないけれど私が気になっていた「ゆるい」設定も修正することにします。

freshclam をデーモンとして使用しない場合

既に私が書いた ClamXav での利用を前提とした ClamAV のインストールやアップデート手順(参照「clamav 凄いよ」「ClamAV の freshclam に HTTP ヘッダバッファーオーバフローの脆弱性」)には修正が加えられています。これで私としての情報のシェアは終わってはいるのですが、更なる補強と念押しの設定も含めて改めてまとめておきます。以下は ClamXav での使用を前提としてインストールされた ClamAV に適用されるものです。

  1. ターミナルを起動する。

    ターミナルウィンドウが表示されます。以後、このウィンドウ上での操作です。

  2. root 権限に移行する。

    次をターミナルウィンドウにコピー&ペーストして改行してください。

    sudo bash

    管理者アカウントのパスワードが訊ねられるのでログインするときのパスワードをタイプして改行してください。以後、このターミナルウィンドウ上の操作は root という OS の破壊も含めてなんでもできる特殊なアカウントの権限で動作します。十二分に注意して以後の操作を行ってください。

  3. 設定ファイル群のオーナとパーミッションを変更する。

    次をターミナルウィンドウにコピー&ペーストして改行してください。

    chown -R root:admin /usr/local/clamXav/etc
    chmod 0775 /usr/local/clamXav/etc
    chmod 0664 /usr/local/clamXav/etc/*

    既にこの操作で設定されるようになっているような気もしますが、念のためにやっておいてください。これは管理者権限を持っているユーザ以外は ClamAV の設定ファイルを変更できないようにするための設定です。

  4. コマンドのオーナとパーミッションを変更する。

    次をターミナルウィンドウにコピー&ペーストして改行してください。

    chown -R root:admin /usr/local/clamXav/bin
    chmod 0755 /usr/local/clamXav/bin
    chmod 0755 /usr/local/clamXav/bin/*

    これは root 以外でコマンド群が書き換えられないようにするための設定です。コマンドが書き換えられたり、名前を変えられて元の名前で偽のコマンドが作られたりしたら相当危険です。

    更に次をターミナルウィンドウにコピー&ペーストして改行してください。

    chown clamav /usr/local/clamXav/bin/freshclam
    chmod u+s /usr/local/clamXav/bin/freshclam

    これによって ClamAV のアップデータ freshclam が clamav というシステム用のユーザの権限で実行されるようになります。ClamXav からどのユーザが実行しても clamav が実行したものとして動作します。このため ClamAV のウィルス定義ファイルやその更新ログが clamav ユーザによって書き換えられることになります。

    エントリ「ClamAV と ClamXav: 第二回 ClamAV による定期スキャンと更新」に書いた cronscan というコマンドを追加している人は次も行ってください。

    chmod g+w /usr/local/clamXav/bin/cronscan

    cronscan はその Mac の環境や存在するファイルなどの実情に合わせて管理者が編集するものですから、その Mac OS X の管理者権限を持つユーザが必要に応じて保守するものです。ですから admin グループの書き込み権限を加えておきます。

  5. ウィルス定義ファイルとログのオーナとパーミッションを変更する。

    次をターミナルウィンドウにコピー&ペーストして改行してください。

    chown -R clamav:clamav /usr/local/clamXav/share/clamav
    chmod 0755 /usr/local/clamXav/share/clamav
    chmod 0644 /usr/local/clamXav/share/clamav/*

    これはウィルス定義ファイルとその更新ログを clamav というシステム用のユーザのみが書き換えられるようになります。ウィルス定義ファイルは ClamAV と ClamXav によるウィルス対策の要ですから、これが無闇に書き換えられては大変です。そしてログも重要です。なぜならばシステムに侵入したクラッカーは、自分が行った悪事の痕跡を消すためにログを改変するのが常だからです。インシデントが発生したときの事後対策にログは極めて重要です。ですからログも権限がないユーザが無闇に書き換えられないようにしておかなければなりません。

freshclam をデーモンとして使用している場合

基本は上のセクションの内容です。まずはそれをやってください。ただし一つだけ次を実施しないでください。

chown clamav /usr/local/clamXav/bin/freshclam
chmod u+s /usr/local/clamXav/bin/freshclam

上のセクションを一通り実行した後で次を行うのでも構いません。

chown root /usr/local/clamXav/bin/freshclam
chmod u-s /usr/local/clamXav/bin/freshclam

これは freshclam のオーナを元々の root に戻し、suid ビットを落とす操作です。これにより freshclam は root が明示的に clamav として実行しなければならない状態になります。無闇に freshclam が実行されても大丈夫にしようというわけです。

その代わり freshclam は root 権限で明示的に clamav として実行しなければならないため、freshclam を起動するシステムの起動項目に修正が必要です。そのためにエントリ「ClamAV と ClamXav: 第三回 ウィルス定義ファイルの自動更新」で公開している FreshClamdStartUp.dmg を再度ダウンロードしてそのエントリに書いてある手順で /Library/StartupItems/ に FreshClamDaemon フォルダを上書きでコピーしてください。sudo /Library/StartupItems/FreshClamDaemon/FreshClamDaemon restart として freshclam を再起動する必要はありません。

そして ClamXav でウィルス定義ファイルの更新を確認しないようにします。ただしこの再設定を行うと freshclam の設定ファイル /usr/local/clamXav/etc/freshclam.conf が ClamXav によって書き換えられてしまうので、freshclam.conf のバックアップを取ってから行います。具体的には ClamXav の環境設定の [インターネット]-[ClamXav を起動したとき]-[ウィルス定義を更新する] チェックボックスのチェックを外します。そしてバックアップしてあった freshclam.conf と今の freshclam.conf とに相違があればバックアップから戻しておきます。

以上の設定でウィルス定義ファイルの更新の権限により強い制限が加えられ、侵入したクラッカーや内部のユーザのいたずらから一層保護された状態になります。その代わり ClamXav で [ウィルス定義を更新] を行っても「ログファイルに問題があります - 所有権/アクセス権をご確認ください/usr/local/clamXav/share/clamav/freshclam.log」というエラーメッセージが表示されるようになります。これは意図していることなので問題ありません。freshclam がデーモンとしてバックグラウンドで自動で更新しているので ClamXav から更新する必要はありません。ただし、freshclam.conf で確認頻度を低く設定している人はデフォルトに戻したほうがよいでしょう。

後書き

ここに書いたことは検証期間が短いので何か不都合があるかもしれません。もしあったらコメントやフィードバックリンクによるメールからフィードバックをお願いします。


Posted: 01:55    | Comment | Trackback


以下、類似エントリです。