このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

MacOSXで侵入検知2

発言者:石津@RJC
( Date Thursday, March 04, 2004 21:36:02 )


ということで続きを。

途中で終わっていたosirisのOSX用の設定の仕方。
前回までに設定したマシンmyclient01はOS標準の検知設定になっています。
OSX用は以下のように表示されます。
設定の書式はapacheと似ていてわかりやすいです。(とドキュメントに書いてある):-)

osiris-3.0.4-current: host myclient01 ←osirisにログインしてhost xxxxとしてホスト設定に入る
myclient01 is alive. ←該当ホストが有効になっていればaliveと表示される
osiris-3.0.4-current[myclient01]: print-config ←print-configで現在の設定が表示される

 config name:  default.darwin ←OSX用のデフォルト
          ID:  8850eba9
      status:  valid
      errors:  0
    warnings:  0
       lines:  43

-------- begin config file --------

Recursive   no ←ディレクトリをたどっていかない
FollowLinks no ←リンクをたどっていかない
IncludeAll ←全ての項目をチェック
Hash sha ←ハッシュにはshaを使う
<System> ←システム項目に関する設定開始
Include users ←ユーザの追加削除をチェック
Include groups ←グループの追加削除をチェック
Include kexts ←機能拡張の追加削除をチェック
</System> ←システム項目の設定終了
<Directory /> ←/ディレクトリに関する設定開始
Recursive no ←/ディレクトリだけを見ます
Include file( "mach_kernel" ) ←/mach_kernelのファイルだけを見ます
</Directory>
<Directory /private/var/root> ←/private/var/rootディレクトリに関する設定開始
Recursive yes ←/private/var/rootディレクトリ以下もたどって見ます
Include executable ←実行形式のファイルだけを見ます(推測)
Include suid ←suidされたファイルだけを見ます(推測)
</Directory>
<Directory /bin>
IncludeAll ←全ての項目をチェック
</Directory>
<Directory /usr/bin>
IncludeAll
</Directory>
<Directory /usr/local/bin>
IncludeAll
</Directory>
<Directory /sbin>
IncludeAll
</Directory>
<Directory /usr/sbin>
IncludeAll
</Directory>
<Directory /System/Library/StartupItems>
IncludeAll
</Directory>
<Directory /System/Library/Extensions>
IncludeAll
</Directory>
# EOF

--------  end config file  --------

OSXではApplicationフォルダにファイルが追加されることが多いので
その設定を加えるためには、上記に以下の設定を追加すればOKです。

<Directory /Applications>
IncludeAll
</Directory>

設定を追加する時には以下のようにします。

osiris-3.0.4-current[myclient01]: edit-config ←編集コマンド(必ずホスト設定にいないといけないです)

こうするとviエディタの画面になり上記の設定が表示され編集できます。
編集を終えてviを終了すると以下の表示が出て完了します。

config file changed, updating...
the config: (default.darwin) was succesfully updated.


→  前スレ MacOSXで侵入検知

石津@RJC さんからのコメント
( Thursday, March 04, 2004 22:13:59 )

この状態でそのまま運用しても大きな問題はないんでしょうが、時々気になる
ことが起きます。それは/usr/binや/usr/sbinのほとんどファイルでctimeが
異なるという検知結果を送ってくることです。
ctimeというのはchange timeとドキュメントには記載されているのですが、
もうひとつmtimeというModify timeというものをどう違うのか説明がない
ので、その違いがよくわかりませんでした。(ご存知の方教えてください)
この検知が割と多く出るのですが、特に変わったこともないのでオプティマイズ
などでディスク内をスキャンした際などに出るのではないかと推測しています。

これを出ないようにするためにはfilterの設定を行います。
osirisではホスト設定にfilterがあるのではなく、osirisのマネージャ設定(mhost)
側にfilterを書くのでちょっとわかりにくい感じがします。

filterは最初は何も登録されていないので、以下のコマンドから始めます。

osiris-3.0.4-current: edit-filter  ←フィルタ編集コマンド

    s) show current filters. ←現在のフィルタを表示するには「s」を入力
    a) add a new filter. ←フィルタを追加するには「a」を入力
    r) remove filter. ←フィルタを削除するには「r」を入力
    q) quit ←フィルタ設定を終了します

    > a ←追加なので「a」とします

  > host (*=all hosts): * ←どのホストに適用するフィルタかホスト名で指定します
  > path (*=any path): /Applications ←どのパスに適用するフィルタかフルパスで指定します

  1) Include Only (monitor changes only to certain attributes) ←標準監視設定の一部だけを有効にしたい場合こちらを選択します
  2) Exclude (ignore changes to certain attributes) ←標準監視設定の一部を無効にしたい場合こちらを選択します

  > filter type: [2] 2 ←今回は標準監視設定のctimeだけを無効にするのでこちらを選択します

        csum - checksum ←チェックサム
      device - device number ←デバイスナンバー(割り当てたネットワークカードが変わったりすると出ます)
       inode - inode number ←inodeナンバー(HD上の記録位置)
        perm - permissions (mode) ←アクセス権
       links - number of hard links ←ハードリンクの数
         uid - user ID ←ユーザID
         gid - group ID ←グループID
       mtime - last modification time ←最後に更新された時間
       atime - last access time ←最後にアクセスされた時間
       ctime - last change time ←最後に変化した時間???
       dtype - device type ←デバイスタイプ(よくわかりません)
       bytes - number of bytes ←ファイルの大きさ(バイト数)
      blocks - number of blocks ←ファイルの大きさ(ブロック数)
       bsize - block size ←ブロックのサイズ
        osid - owner SID ←オーナーのセキュリティ識別子
        gsid - group SID ←グループのセキュリティ識別子
    fileattr - windows file attributes ←Windowsのファイル情報
         new - not in trusted database ←新規に追加されたファイル
     missing - not present in latest scan ←削除されたファイル

  > attributes (comma separated): ctime  ←今回はctimeだけ除外します(複数ある場合はカンマで区切って書きます)

  does this look correct:
    ==> host=*;path=/Applications;exclude: ctime ;  (y/n)? y ←確認されるので良ければy

filter added. ←無事追加されました

こうして追加されたフィルタは上記で設定されたルールで各ホストに適用されます。
具体的には以下のような設定を持つホストの場合、

<Directory /Applications>
IncludeAll
</Directory>

本来であれば以下の項目全てがチェックされますが

        csum - checksum
      device - device number
       inode - inode number
        perm - permissions (mode)
       links - number of hard links
         uid - user ID
         gid - group ID
       mtime - last modification time
       atime - last access time
       ctime - last change time
       dtype - device type
       bytes - number of bytes
      blocks - number of blocks
       bsize - block size
        osid - owner SID
        gsid - group SID
    fileattr - windows file attributes
         new - not in trusted database
     missing - not present in latest scan

filterを設定したのでctimeだけはチェックされなくなるということです。
逆に特定の項目だけチェックしたい場合は以下のようにします。
(/Applicationに入るアプリの増減やアクセス権だけチェックしたいとか)

  > filter type: [2] 1 

  > attributes (comma separated): new,missing,perm,uid,gid

  does this look correct:
    ==> host=*;path=/Applications;include: new,missing,perm,uid,gid ;  (y/n)? y

これでOKです。


石津@RJC さんからのコメント
( Thursday, March 04, 2004 22:19:49 )

短期間でのサーバ構築のためosirisに十分な時間がかけられていないこともあり、間違いも
あるかと思いますが、気付いた方はぜひお知らせください。
今後使い込んでいきたいソフトウェアなので、私自身も新たに気付いたことはできるだけ
書いていきたいと思います。


石津@RJC さんからのコメント
( Thursday, March 04, 2004 22:37:23 )

ずいぶん時間が空いてしまいましたがRadmindについても簡単に書いておきます。

Radmindはアメリカの大学でMacの管理に多く使われているようで紹介された事例の多くは
大学の管理部門?がプロモーションしているものでした。
アプリケーションは前述のsamhainやosirisのようにコマンドラインでなく、MacOSX用の
しっかりしたインストーラがついているので、インストール自体は難なく行えます。
しかし、先にRadmindのアーキテクチャを理解していないとインストールしてすぐに使える
というタイプのものではないので注意が必要です。

基本的にRadmindは侵入検知やファイル整合性チェックの用途ではなく、複数のマシンを管理
マシンと同期して管理を楽にするためのマネージメントツールのようです。

Radmindを利用するためには最低3台のマシンが必要でした。
 管理用サーバ ←マシンを同期するための中心
 同期元マシン ←同期のためのオリジナル
 同期先マシン ←同期する対象のマシン

簡単に言うと、管理サーバが同期元マシンの情報を同期先マシンにコピーして、同じ状態にする。
という機能を大規模に行えるツールという感じでしょうか。
設定をうまく理解できなかったからか、管理サーバとしてインストールしたマシン上では、自身を
同期元にした設定を作ることができなかったので、どうしても3台構成にならざるを得ないのだな
と考えています。

同期できる内容は非常に柔軟らしく、クローンマシンを作ることも可能です。
ログインやログアウト時に同期元マシンと比較して、常に同じ状態に保つという仕組みも持ってい
るので、不特定多数に利用してもらうサービス(ネットカフェとか検索サービス端末とか)を提供す
る企業には魅力的なソフトウェアかもしれません。

ファイル構成の差異をチェックする機能がもちろんあるので、侵入検知にも使えることは使えますが
そのために使うのはちょっと冗長そうでした。

ということで、常に同じ状態に保ちたいOSX端末をたくさん抱えている人にはオススメです。:-)

石津@RJC さんからのコメント
( Monday, August 09, 2004 14:52:59 )

久しぶりにみたらOsirisが4.0.3にバージョンアップしてました。
近いうちに現状の3.0.4を入れ替えようと思っています。

石津@RJC さんからのコメント
( Wednesday, April 13, 2005 18:59:17 )

osirisの3.0.4を一年間動かしたマシンでちょっとしたイベントが起きたので記録しておきます。
1年前に設定してこれまで問題なく動作していたosirismdが本日から急に動作しなくなりました。
こんなメールアラートが送られてきました。
---
Subject: failed to start scheduled scan [host: myhost]
Date: Tue, 12 Apr 2005 18:22:51 +0900
From: "Osiris IDS" <osirismd@myhost>
To: mymailaddress

host: myhost
scheduled scan time: Tue Apr 12 15:00:03 2005

The scheduler produced the following error message:

session key negotiation failed.
---

何が起きたのか調べてみたところ、osirisをインストールした際に生成された証明書が1年で
期限切れになっていることがわかりました。
この状態でosirisにログインしようとすると以下のようなエラーになります。

---
Osiris command line management utility - version 3.0.4-current
authenticating to (myhost)

User: admin
Password: 


WARNING : certificate authentication failed.  The certificate
presented by the mangaement host (localhost) was not signed by
the root cert loaded from (/Users/ara/.osiris/osiris_root.pem).

[ presented certificate ]

    issuer = /C=US/CN=Osiris Managment Daemon/OU=Osiris IDS
   subject = /C=US/CN=Osiris Managment Daemon/OU=Osiris IDS
untrusted MD5 fingerprint: 16:27:02:E6:4E:B9:36:EB:24:DA:C2:5B:F8:xx:xx:xx.

If you trust this certificate, delete the root cert and start
this application again. 
---

この問題に対処するためには以下の操作を行ないます。

$ sudo mv /usr/local/osiris/certs/osirismd.crt /usr/local/osiris/certs/old_osirismd.crt
$ sudo SystemStarter restart "Osiris IDS"

このコマンドを入力すると以下のような表示が出ます。

---
Welcome to Macintosh.
Osiris Management daemon stopped.
Osiris Scanning daemon stopped.
Starting osiris management daemon.
unable to load server certificate (/usr/local/osiris/certs/osirismd.crt)
  ==> creating one.
Generating RSA key, 2048 bit long modulus.
.........+++
..........................................Waiting for Osiris Host Intrusion Detection System
................................................................Waiting for Osiris Host Intrusion Detection System
..................+++
Starting osiris scanning daemon.
Startup complete.
Hangup 
---

これを行なうことで再度osirisをこれまでのIDとパスワードで利用できるようになります。
ちょっとびっくりしたのでFYIで。ご利用中の方気をつけてください。
4.xでも同じことが起きるかも...

石津@RJC さんからのコメント
( Wednesday, April 13, 2005 19:19:08 )

追加で操作が必要でした。
上記の操作をやった後にosirisのadminを操作しようとするユーザのホームディレクトリにある
.osirisフォルダ内のosiris_root.pemファイルを削除する必要があります。

$ rm -f 〜/.osiris/osiris_root.pem

これをやっておかないとosirisにadminでログインできません。
更にもうひとつ/usr/local/osiris/にあるosiris_root.pemも削除しておきます。

$ sudo rm -f /usr/local/osiris/osiris_root.pem

これらの作業をやった後にadminでログインするようにしてください。

石津@RJC さんからのコメント
( Thursday, April 14, 2005 14:41:58 )

上記でログインまではできますが、設定した各host毎の処理が残っていました。
上記の設定だけではosirismdへのログインはできますがhost設定をしようとすると
以下のエラーになり接続することができません。

---
osiris-3.0.4-current: host RemoteServer
error: session key negotiation with remote host failed.  
---

これを回避するためにはhostで設定したRemoteServerにsshでログインして以下の操作をしてください。

---
$ sudo mv /usr/local/osiris/osiris_root.pem /usr/local/osiris/old_osirisroot.pem
$ sudo SystemStarter restart "Osiris IDS"
---

この操作をした上でosirismdにadminでログインして以下の操作をします。

---
osiris-3.0.4-current: host RemoteServer
TWO01 is alive.
osiris-3.0.4-current[RemoteServer]: status

[ current status of host: RemoteServer ]

     current time: Thu Apr 14 13:59:49 2005
         up since: Thu Apr 14 13:59:07 2005

    daemon status: idle.
    config status: no config present. ←設定ファイルが消えているので注意
   osiris version: 3.0.4-current
               OS: Darwin 7.8.0    

osiris-3.0.4-current[RemoteServer]: push-config ←設定ファイルをPushする
the config: (default.darwin) was succesfully pushed to host: RemoteServer
osiris-3.0.4-current[RemoteServer]: status

[ current status of host: RemoteServer ]

     current time: Thu Apr 14 14:00:47 2005
         up since: Thu Apr 14 13:59:07 2005

 last config push: Thu Apr 14 14:00:35 2005
 configuration id: cc4f6e68

    daemon status: idle.
    config status: current config is valid. ←設定ファイルが有効になった
   osiris version: 3.0.4-current
               OS: Darwin 7.8.0

osiris-3.0.4-current[RemoteServer]: start-scan ←スキャンを実行
scanning process was started on host: RemoteServer  ←スキャン成功

---

ここまでやって証明書の更新が完了になります。
追記ばかりですいません。

いこ さんからのコメント
( Thursday, April 21, 2005 13:11:09 )

自己証明書作成時に期限を10年ぐらいにするというのはどうですか?
osirisというものが分かりませんが、opensslなら-daysオプションか
openssl.cfgで設定できます。

石津@RJC さんからのコメント
( Friday, April 22, 2005 18:54:09 )

たしかコンパイル時のオプションで指定できた気もするのですが
あまり考えずにデフォルト設定で使っていました。
結果1年期限だったみたいなので、ここでフォローしておきました。

opensslが利用されているので、おそらくいこさんの方法で期限変更
した証明も作成可能だと思います。
時間ができたら試してみようと思います(きっと来年同じことになるので)