Solaris のシステム管理 (セキュリティサービス)

監査レコードの管理

監査トレールを管理することによって、ネットワーク上のユーザーの動作を監視することができます。監査プロセスを行うと、大量のデータが生成される可能性があります。次の手順では、さまざまな監査データを使用して作業を行う方法について説明します。

Procedure監査レコードの書式の表示方法

必要な監査データを検索するスクリプトを作成するためには、監査イベント内のトークンの順番を知る必要があります。bsmrecord コマンドは、監査イベントの監査イベント番号、監査クラス、選択マスク、およびレコード書式を表示します。

  1. すべての監査イベントレコードを HTML ファイルに出力します。

    -a オプションを指定すると、すべての監査イベントレコードの書式が表示されます。-h オプションを指定すると、ブラウザで表示できる HTML 形式で一覧が出力されます。


    % bsmrecord -a -h > audit.events.html
    

    ブラウザで *html ファイルを表示する場合は、ブラウザの検索ツールを使用して特定のレコードを検索します。

    詳細は、bsmrecord(1M) のマニュアルページを参照してください。


例 30–26 プログラムの監査レコード書式を表示する

この例では、login プログラムによって生成されたすべての監査レコードの書式を表示します。login プログラムには、rlogintelnetnewgrp、Solaris 管理コンソールへの役割ログイン、および Solaris Secure Shell も含まれます。


% bsmrecord -p login
login: logout
  program     various              See login(1)
  event ID    6153                 AUE_logout
…

newgrp
  program     newgrp               See newgrp login
  event ID    6212                 AUE_newgrp_login
…

rlogin
  program     /usr/sbin/login      See login(1) - rlogin
  event ID    6155                 AUE_rlogin
…

SMC: role login
  program     SMC server           See role login
  event ID    6173                 AUE_role_login
…

/usr/lib/ssh/sshd
  program     /usr/lib/ssh/sshd    See login - ssh
  event ID    6172                 AUE_ssh
…

telnet login
  program     /usr/sbin/login      See login(1) - telnet
  event ID    6154                 AUE_telnet
  …


例 30–27 ある監査クラスの監査レコード書式を表示する

この例では、fd クラスに属するすべての監査レコードの書式を表示します。


% bsmrecord -c fd

rmdir
  system call rmdir                See rmdir(2)
  event ID    48                   AUE_RMDIR
  class       fd                   (0x00000020)
      header
      path
      [attribute]
      subject
      [use_of_privilege]
      return

unlink
  system call unlink               See unlink(2)
  event ID    6                    AUE_UNLINK
  …

unlinkat
  system call unlinkat             See openat(2)
  event ID    286                  AUE_UNLINKAT
  …

Procedure監査トレールの監査ファイルをマージする方法

すべての監査ディレクトリ内のすべての監査ファイルをマージすると、監査トレール全体の内容を分析できます。auditreduce コマンドを使用すると、入力ファイルのすべてのレコードが 1 つの出力ファイルにマージされます。マージが完了すると、入力ファイルを削除できます。出力ファイルが /etc/security/audit/server-name/files という名前のディレクトリに配置されている場合、完全パスを指定しなくても、auditreduce コマンドは出力ファイルを検索できます。


注 –

この手順は、バイナリ監査レコードだけに適用します。


  1. Audit Review プロファイルを含む役割を引き受けるか、スーパーユーザーになります。

    System Administrator 役割には、 Audit Review プロファイルが含まれます。Audit Review プロファイルを含む役割を別々に作成することもできます。役割を作成する方法と役割をユーザーに割り当てる方法については、「RBAC の構成 (作業マップ)」を参照してください。

  2. マージされた監査ファイルを格納するディレクトリを作成します。


    # mkdir audit-trail-directory
    
  3. ディレクトリへのアクセスを制限します。


    # chmod 700 audit-trail-directory
    # ls -la audit-trail-directory
    drwx------   3 root     sys          512 May 12 11:47 .
    drwxr-xr-x   4 root     sys         1024 May 12 12:47 ..
  4. 監査トレール内の監査レコードをマージします。

    ディレクトリを audit-trail-directory に変更して、指定した接尾辞を持つファイルに監査レコードをマージします。ローカルシステム上にある audit_control ファイルの dir 行に指定されているすべてのディレクトリがマージされます。


    # cd audit-trail-directory
    # auditreduce -Uppercase-option -O suffix
    

    大文字オプションを auditreduce コマンドに指定すると、監査トレール内のファイルを操作できます。次の大文字オプションがあります。

    -A

    監査トレール内のすべてのファイルを選択します。

    -C

    完全ファイルだけを選択します。このオプションは、接尾辞 not_terminated を持つファイルを無視します。

    -M

    特定の接尾辞を持つファイルを選択します。接尾辞はマシン名、またはサマリーファイルに指定した接尾辞です。

    -O

    開始時刻と終了時刻を示す 14 文字のタイムスタンプおよび接尾辞 suffix が付いた監査ファイルを現在のディレクトリに作成します。


例 30–28 サマリーファイルに監査ファイルをコピーする

次の例では、System Administrator 役割 sysadmin は、すべてのファイルを監査トレールからマージされたファイルにコピーします。


$ whoami
sysadmin
$ mkdir /var/audit/audit_summary.dir
$ chmod 700 /var/audit/audit_summary.dir
$ cd /var/audit/audit_summary.dir
$ auditreduce -A -O All
$ ls *All
20030827183214.20030827215318.All

次の例では、完全ファイルだけが監査トレールからマージされたファイルにコピーされます。


$ cd /var/audit/audit_summary.dir
$ auditreduce -C -O Complete
$ ls *Complete
20030827183214.20030827214217.Complete

次の例では、完全ファイルだけが example1 マシンからマージされたファイルにコピーされます。


$ cd /var/audit/audit_summary.dir
$ auditreduce -M example1 -O example1summ
$ ls *summ
20030827183214.20030827214217.example1summ


例 30–29 監査ファイルをサマリーファイルに移動する

auditreduce- D オプションを指定すると、監査ファイルをほかの場所にコピーしたときにその監査ファイルを削除します。次の例では、あるシステムの完全監査ファイルを、あとで調べるためにサマリーディレクトリにコピーします。


$ cd /var/audit/audit_summary.dir
$ auditreduce -C -O daily_example1 -D example1
$ ls *example1
20030827183214.20030827214217.daily_example1

このコマンドが正常に完了すると、*daily_example1 ファイルへの入力となった example1 システムの監査ファイルが削除されます。


Procedure監査トレールから監査イベントを選択する方法

調べる監査レコードをフィルタリングすることができます。フィルタリングオプションの一覧については、auditreduce(1M) のマニュアルページを参照してください。

  1. Audit Review プロファイルを含む役割を引き受けるか、スーパーユーザーになります。

    System Administrator 役割には、 Audit Review プロファイルが含まれます。Audit Review プロファイルを含む役割を別々に作成することもできます。役割を作成する方法と役割をユーザーに割り当てる方法については、「RBAC の構成 (作業マップ)」を参照してください。

  2. 監査トレールまたは指定した監査ファイルから必要なレコードを選択します。


    auditreduce -lowercase-option argument [optional-file]
    argument

    小文字オプションが必要とする特定の引数。たとえば、-c オプションは、ua などの監査クラスの argument を必要とします。

    -d

    特定の日付のイベントをすべて選択します。argument の日付の形式は、yyyymmdd です。ほかの日付オプション -b-a は、特定の日付の前と後のイベントを選択します。

    -u

    特定のユーザーのイベント属性をすべて選択します。argument はユーザー名です。もう 1 つのユーザーオプション -e は、実効ユーザー ID のイベント属性をすべて選択します。

    -c

    事前選択された監査クラス内のイベントをすべて選択します。argument は監査クラス名です。

    -m

    特定の監査イベントのインスタンスをすべて選択します。argument は監査イベントです。

    optional-file

    監査ファイルの名前です。


例 30–30 監査ファイルを結合して削減する

auditreduce コマンドを使用すると、入力ファイルの結合時に不要なレコードを除外できます。たとえば、auditreduce コマンドを使用して、1 か月以上経過した監査ファイルから、ログインレコードとログアウトレコード以外のレコードを削除することができます。監査トレール全体が必要になった場合は、バックアップメディアから監査トレールを復元します。


# cd /var/audit/audit_summary.dir
# auditreduce -O lo.summary -b 20030827 -c lo; compress *lo.summary


例 30–31 na 監査レコードをサマリーファイルにコピーする

この例では、監査トレール内の、ユーザーに起因しない監査イベントのすべてのレコードが、1 つのファイルに収集されます。


$ whoami
sysadmin
$ cd /var/audit/audit_summary.dir
$ auditreduce -c na -O nasumm
$ ls *nasumm
20030827183214.20030827215318.nasumm

マージされた nasumm 監査ファイルは、na レコードの開始時刻と終了時刻のタイムスタンプが記録されます。



例 30–32 指定した監査ファイル内で監査イベントを検索する

監査ファイルを手動で選択して、指定された一連のファイルだけを検索できます。たとえば、前の例の *nasumm ファイルをさらに処理して、システムブートイベントを検索できます。これを行うには、auditreduce コマンドの最後の引数にファイル名を指定します。


$ auditreduce -m 113 -O systemboot 20030827183214.20030827215318.nasumm
20030827183214.20030827183214.systemboot

20030827183214.20030827183214.systemboot ファイルは、システムブート監査イベントだけを含みます。



例 30–33 ユーザー監査レコードをサマリーファイルにコピーする

この例では、特定のユーザー名を含む監査トレール内のレコードがマージされます。-e オプションを指定すると実効ユーザーが検索されます。-u オプションを指定すると監査ユーザーが検索されます。


$ cd /var/audit/audit_summary.dir
$ auditreduce -e tamiko -O tamiko

このファイル内の特定のイベントを検索できます。次の例では、2003 年 9 月 7 日にユーザーがログインした時間が確認されます。接尾辞にユーザーの名前が付いたファイルだけが確認されます。日付の短い形式は、yyyymmdd です。


# auditreduce -M tamiko -O tamikolo -d 20030907 -u tamiko -c lo


例 30–34 選択レコードを 1 つのファイルにコピーする

この例では、特定の日付におけるログイン、ログアウトのメッセージが監査トレールから選択されます。これらのメッセージは対象ファイルにマージされます。対象ファイルは、通常の監査ルートディレクトリ以外のディレクトリに書き込まれます。


# auditreduce -c lo -d 20030827 -O /var/audit/audit_summary.dir/logins
# ls /var/audit/audit_summary.dir/*logins
/var/audit/audit_summary.dir/20030827183936.20030827232326.logins

Procedureバイナリ監査ファイルの内容を表示する方法

praudit コマンドを使用すると、バイナリ監査ファイルの内容を表示できます。auditreduce コマンドから出力をパイプしたり、特定の監査ファイルを読み取ったりできます。さらに処理する場合に -x オプションが役立ちます。

  1. Audit Review プロファイルを含む役割を引き受けるか、スーパーユーザーになります。

    System Administrator 役割には、 Audit Review プロファイルが含まれます。Audit Review プロファイルを含む役割を別々に作成することもできます。役割を作成する方法と役割をユーザーに割り当てる方法については、「RBAC の構成 (作業マップ)」を参照してください。

  2. 次の praudit コマンドの 1 つを使用して、目的に沿った出力を生成します。

    次の例は、同じ監査イベントからの praudit 出力を表示します。監査ポリシーは、sequence トークンと trailer トークンを含むように設定されています。

    • praudit -s コマンドを使用して、短い書式で 1 行につき 1 トークンの監査レコードを表示します。-l オプションを指定して、1 行に各レコードを配置します。


      $ auditreduce -c lo | praudit -s
      header,101,2,AUE_rlogin,,example1,2003-10-13 11:23:31.050 -07:00
      subject,jdoe,jdoe,staff,jdoe,staff,749,749,195 1234 server1
      text,successful login 
      return,success,0 
      sequence,1298
    • praudit -r コマンドを使用して、監査レコードの raw 書式で 1 行につき 1 トークンの監査レコードを表示します。-l オプションを指定して、1 行に各レコードを配置します。


      $ auditreduce -c lo | praudit -r
      21,101,2,6155,0x0000,192.168.60.83,1062021202,64408258
      36,2026700,2026700,10,2026700,10,749,749,195 1234 192.168.60.17
      40,successful login
      39,0,0
      47,1298
    • praudit -x コマンドを使用して、XML 形式で 1 行につき 1 トークンの監査レコードを表示します。-l オプションを指定して、1 レコードの XML 出力を 1 行に配置します。


      $ auditreduce -c lo | praudit -x
      <record version="2" event="login - rlogin" host="example1" 
      time="Wed Aug 27 14:53:22 PDT 2003" msec="64">
      <subject audit-uid="jdoe" uid="jdoe" gid="staff" ruid="jdoe" 
      rgid="staff" pid="749" sid="749" tid="195 1234 server1"/>
      <text>successful login</text>
      <return errval="success" retval="0"/>
      <sequence seq-num="1298"/>
      
      </record>

例 30–35 監査トレール全体を印刷する

lp コマンドにパイプすると、監査トレール全体の出力がプリンタに送られます。プリンタへのアクセスを制限してください。


# auditreduce | praudit | lp -d example.protected.printer


例 30–36 特定の監査ファイルを表示する

この例では、サマリーログインファイルを端末ウィンドウで調べます。


# cd /var/audit/audit_summary.dir/logins
# praudit 20030827183936.20030827232326.logins | more


例 30–37 監査レコードを XML 形式に変換する

この例では、監査レコードを XML 形式に変換します。


# praudit -x 20030827183214.20030827215318.logins > 20030827.logins.xml

*xml ファイルはブラウザを使って表示できます。スクリプトを使えば、XML ファイルの内容を操作して目的の情報を抽出できます。


注意事項

次のようなメッセージは、praudit コマンドを使用するために必要な権限がないことを示しています。

praudit: Can't assign 20090408164827.20090408171614.example1 to stdin.

Procedurenot_terminated 監査ファイルを整理する方法

監査ファイルが開いている状態で監査デーモンが終了することがあります。また、サーバーがアクセス不能になって、強制的に別のサーバーに切り替わってしまうことがあります。このような場合、その監査ファイルは監査レコードとして使用されなくなりますが、監査ファイルの終了タイムスタンプとして文字列 not_terminated が付いたままになります。auditreduce -O コマンドを使用して、ファイルに正しいタイムスタンプを付けます。

  1. 監査ファイル上の not_terminated 文字列が付いたファイルを作成順に一覧表示します。


    # ls -R1t audit-directory*/files/* | grep not_terminated
    -R

    サブディレクトリ内のファイルを一覧表示します。

    -t

    最新のファイルからもっとも古いファイルの順で一覧表示します。

    -1

    1 列でファイルを一覧表示します。

  2. 古い not_terminated ファイルを整理します。

    古いファイルの名前を auditreduce -O コマンドに指定します。


    # auditreduce -O system-name old-not-terminated-file
    
  3. 古い not_terminated ファイルを削除します。


    # rm system-name old-not-terminated-file
    

例 30–38 閉じた not_terminated 監査ファイルを整理する

次の例では、not_terminated ファイルを検索し、名前を変更して、元のファイルを削除します。


ls -R1t */files/* | grep not_terminated
…/egret.1/20030908162220.not_terminated.egret
…/egret.1/20030827215359.not_terminated.egret
# cd */files/egret.1
# auditreduce -O egret 20030908162220.not_terminated.egret
# ls -1t
20030908162220.not_terminated.egret Current audit file
20030827230920.20030830000909.egret Input (old) audit file
20030827215359.not_terminated.egret
# rm 20030827215359.not_terminated.egret
# ls -1t
20030908162220.not_terminated.egret Current audit file
20030827230920.20030830000909.egret Cleaned up audit file

新しいファイルの開始タイムスタンプは、not_terminated ファイル内にある最初の監査イベントの時間を反映します。終了タイムスタンプは、そのファイル内にある最後の監査ファイルの時間を反映します。


Procedure監査トレールのオーバーフローを防ぐ方法

セキュリティーポリシーの関係ですべての監査データを保存する必要がある場合は、次の手順に従います。

  1. 監査ファイルを定期的に保存するスケジュールを設定します。

    ファイルをオフラインのメディアにバックアップして、監査ファイルを保管します。これらのファイルを保存ファイルシステムに移動することもできます。

    syslog ユーティリティーを使用してテキスト監査ログを収集している場合、テキストログを保管します。詳細は、logadm(1M) のマニュアルページを参照してください。

  2. スケジュールを設定して、保管された監査ファイルを監査ファイルシステムから削除します。

  3. 補助情報を保存し保管します。

    監査レコードの解釈に必要な情報を、監査トレールとともに格納します。

  4. 保管した監査ファイルの記録をとります。

  5. 保存したメディアを適切な方法で保管します。

  6. サマリーファイルを作成して、格納する監査データのボリュームを削減します。

    監査トレールからサマリーファイルを抽出するには、auditreduce コマンドのオプションを使用します。サマリーファイルには、指定された種類の監査イベントのレコードだけが含まれます。サマリーファイルを抽出するには、例 30–30 および例 30–34 を参照してください。