Life with IT

山好きITエンジニア 木檜(こぐれ)和明 による発信の場

Sophos Anti-Virus

2007/10/19更新

対応バージョン: 4.20

sweepはCPUをフルに使用するので根本的な対策はなく、以下のような運用で対処する。

システムの閑散時(深夜など)に実行する。
一度にファイルシステム全体をチェックするのではなく、適度なサイズの領域毎に区切って実行する。
以下の4種類の検索パターンのうち、システム要件に応じてなるべく負荷の低い方法を選ぶ。下に行くほどCPUへの負荷が高くなる。
対象ファイルの種類は実行形式のファイル、及び一部の圧縮ファイル。各ファイル内のチェック部位はウィルスを含んでいる可能性がある部分のみ(デフォルト)
対象ファイルは全種類。各ファイル内のチェック部位はウィルスを含んでいる可能性がある部分のみ(-allオプション)
対象ファイルの種類は実行形式のファイル、及び一部の圧縮ファイル。各ファイル内全体をチェック(-fオプション)
対象ファイルは全種類。各ファイル内全体をチェック(-all -fオプション)

2007/10/19更新

対応バージョン: 4.20

以下の原因が考えられる。

検索対象ファイルがパスワードで保護されている
ファイル内のヘッダ情報が不完全である
ファイルそのものが壊れている

2007/10/19更新

対応バージョン: 4.20

sweepが返すエラーコードには通常のエラーコードと、-eecオプションを付けて起動した場合の拡張エラーコードの2種類がある。

それぞれを以下に示す。

通常のエラーコード

0

エラーがなく、ウィルスが発見されなかった。

1

[Ctrl]+[c]を押してユーザが実行を中断した。

2

実行の継続を妨げるエラーが発生した。

3

ウィルスやウィルスフラグメントが発見された。

拡張エラーコード

0

エラーがなく、ウィルスが発見されなかった。

8

エラーが発生した。

12

圧縮ファイルが検出され、それが解凍された。

16

圧縮ファイルが検出され、それが解凍されなかった。

20

ウィルスが発見され、それが駆除された。

24

ウィルスが発見され、それが駆除されなかった。

28

メモリ内にウィルスが発見された。

32

sweepの整合性チェックに失敗した。

36

致命的なエラーが発生した。

40

実行が中断された。

2007/10/19更新

対応バージョン: 4.20

sweepの検索ポリシー

sweepはデフォルトでは実行ファイルのみを検索し、またそのファイルの中身も全てを検索するのではなくウィルスを含んでいる可能性のある部分しか検索しない。

「-all」オプションを使用することで実行ファイル以外のファイルも含めて全てのファイルが検索対象となる。

また「-f」オプションを使用することでファイルの中身全てが検索対象となる。

sweepが検索対象とするファイル

sweepはデフォルトでは以下のファイルを検索対象とする。

特定の拡張子付ファイル

com,cpl,dll,doc,dot,exe,ov?,scr,sys,xl?,vb?,ini,mpp,mpt,hlp,hta等

拡張子に関わらずマクロを含んだファイル

マクロウィルスの感染をチェックする

アーカイブファイル

デフォルトではPKLite,LZEXE,Dietで圧縮されたファイルが対象

「-archive」オプションを使用することで以下のアーカイブファイルも検索対象となる。

lzh,zip,gzip,rar,arj,cmz,tar等

シンボリックリンク先のファイル

「--no-follow-symlinks」オプションを使用することでシンボリック先のファイルを検索対象から外せる

その他オプション

--backtrack-protection (デフォルトで有効)

1ファイルにつきウィルス検索を1回に限定する。

つまり、全ファイルシステムを検索する場合は前述の「--no-follow-symlinks」オプションを指定する必要はない。

--quarantine[:オプション]

感染ファイルに他ユーザがアクセスしないようにパーミッションを0400(-r--------)に変更する。

以下のようにファイルのオーナー変更や0400以外のパーミッションも指定できる。

--quarantine:<uid=nnn>,<user=username>,<gid=nnn>,<group=groupname>,<mode=ppp>

ただしこの場合はファイルの属性を変更できる権限のあるスーパーユーザ等でsweepを実行する必要がある。

-di

感染ファイル内のマクロウィルスをsweep内蔵の駆除機能によって駆除する。

-nc

sweepはデフォルトでウィルス駆除/削除の前に確認応答を求めるが、これを無効にする。

-p=<ログファイル>

sweepの実行結果をログファイルに出力する。

ただし、このファイルはsweepを起動する度に上書きされるので注意が必要である。

例) ログを/tmp/sweep.logに出力する。

# sweep -p=/tmp/sweep.log . 

2007/10/19更新

対応バージョン: 4.20

ウィルスチェック

チェックしたいディレクトリを指定してsweepを起動する。

ファイルシステム全体をチェックしたい場合は引数に/を指定する。

例) /tmp配下をチェックしたい場合

# sweep /tmp
:
Quick Sweeping

 
40 files swept in 14 seconds.
No viruses were discovered. ← ウィルスは見付からなかった
End of Sweep.

例) カレントディレクトリにウィルス`W32/Goner-A'と`W32/Klez-G'が見付かった場合

# sweep .
:
Quick Sweeping

>>> Virus 'W32/Goner-A' found in file ./gone.scr
>>> Virus 'W32/Klez-G' found in file ./Height.exe

3 files swept in 3 seconds.
2 viruses were discovered.
2 files out of 3 were infected.
Please send infected samples to Sophos for analysis.
For advice consult www.sophos.com, email support@sophos.com
or telephone +44 1235 559933
End of Sweep.

ウィルス駆除

感染したウィルスを駆除(削除)するにはsweepに-removeオプションを付けて起動する。

感染が見付かったファイル毎に駆除方法の確認を求めてくるので、何らかの目的で削除したくないウィルス付ファイルを保持することが可能である。

例)

# sweep . -remove
:
>>> Virus 'W32/Klez-G' found in file ./foo.exe
Proceed with removal of ./foo.exe ([Y]es/[N]o/[A]ll) ? ■ ← 駆除方法選択
Removal successful
:

2007/10/19更新

対応バージョン: 4.20

InterCheckサーバの動作制御

InterCheckサーバ(icheckd)はデフォルトの設定のままでも動作するが、/etc/icheckd.confにてカスタマイズも可能である。

以下にicheckd.confに指定できるパラメータを示す。

EmailCmd=<文字列>

ウィルス発見時やファイルシステムの空き容量がなくなりそうな時などにユーザにメールを送る際使用するメールプログラムを指定する。

当パラメータ、あるいは後述のEmailRecipientで何も指定しないとこの機能は無効になる(例:EmailCmd= )。

デフォルトのメールプログラムは/bin/mailである。

EmailLevel=<数値>

ウィルス発見時やファイルシステムの空き容量がなくなりそうな時にユーザにメールを送る最低のレポートレベルを指定する。

ただし、EmailLevelがレポートレベルより低い、または同じでない限りメールは送信されない。

デフォルトは0で常にメールが送られる。

EmailRecipient=<文字列>

ウィルス発見時やファイルシステムの空き容量がなくなりそうな時にメールを送るユーザを指定する。

当パラメータ、あるいは前述のEmailCmdで何も指定しないとこの機能は無効になる(例:EmailRecipient= )。

デフォルトのユーザ名はsweepである。

LogFacility=<文字列>

情報をログ記録する際のsyslogファシリティ。

指定できるファシリティはdaemon、local0、local1...local7等である。

デフォルトのファシリティはdaemonである。

Rootdirectory=<文字列>

InterCheckのルートディレクトリ名を指定する。

commsとinfectedディレクトリはこのルートディレクトリにある。

またディスクレスクライアントにインストールする際のlistsディレクトリもここにある。

デフォルトは/var/spool/intercheckである。

レポート機能御の動作制御

InterCheckサーバのレポート機能は/var/spool/intercheck/sweepic.iniのReportingLevelフィールドで制御できる。

以下にReportingLevelに指定できるパラメータを示す。

0 or NONE

レポートなし

1 or FATAL

UNIXログレベルは「LOG_CRIT」(致命的なエラー)

2 or VIRUS (デフォルト)

UNIXログレベルは「LOG_CRIT」(ウィルスについての情報)

3 or ERROR

UNIXログレベルは「LOG_ERROR」(何らかのエラー)

4 or WARNING

UNIXログレベルは「LOG_WARNING」(何らかの警告)

5 or INFORMATION

UNIXログレベルは「LOG_INFO」(何らかの情報)

6 or VERBOSE

UNIXログレベルは「LOG_NOTICE」(全ての情報)

2007/10/19更新

対応バージョン: 4.20

Sophos Anti-Virusのアップデートには以下の2通りの方法がある。

既知のパターンファイルを含んだエンジンそのものをアップデートする

パターンファイル(IDEファイルと呼ぶ)のみをアップデートする

エンジンをアップデートする場合はSophosより入手するアップデートCDを使用して通常のインストール手順と同じ方法でアップデートを行なう。

ここでは後者のIDEファイルのみをアップデートする場合について説明する。

手順は簡単で、最新のIDEファイルを以下から入手して/usr/local/sav配下に展開するだけでよい。

配布物の形態としてはその時公開されているIDEファイル一式をzipで圧縮したものと、個別のIDEファイル(xxx.ide)の2種類があるので必要に応じてどちらかを入手する。

例えば1個のIDEファイルを展開した場合、「sweep -v」を実行すると以下のような情報が出力される。

# sweep -v
:
Information on additional data files:

Data file name      : /usr/local/sav/agen-gek.ide
Data file type      : IDE
Data file date      : 17 Oct 2007, 17:20:56
Data file status    : Loaded

最後の4行が追加されたIDEファイルの情報である。

2007/10/19更新

対応バージョン: 4.20

準備

導入OS

Solaris 8

管理用アカウント作成

アカウント (UID)

www (任意)

グループ (GID)

www (任意)

ホームディレクトリ

/nonexistent (*)

ログインシェル

/sbin/nologin (*)

(*) このアカウントではログインしない

インストール

アップデートインストールの場合も同様の手順で作業してよい。

配布ファイル展開

% tar xvf solaris.sparc.tar
% cd sav-install

インストール

% su
# ./install.sh

確認

# sweep -v
SWEEP virus detection utility
Copyright (c) 1989-2007 Sophos Plc, www.sophos.com

System time 19:53:26, System date 17 October 2007

Product version           : 4.20.0
Engine version            : 2.48.1
Virus data version        : 4.20
User interface version    : 2.07.177
Platform                  : Solaris/SPARC
Released                  : 06 August 2007
Total viruses (with IDEs) : 268291

インストール物 (man,infoは除く)

設定ファイル
/etc/sav.conf
静的ウィルスチェックプログラム
/usr/local/bin/sweep
SAVIライブラリ
/usr/local/lib/libsavi.so.*
ウィルスパターンファイル
/usr/local/sav/vdl-X.XX.dat
/usr/local/sav/vdl.dat@ -> vdl-X.XX.dat
InterCheckサーバ

Windowsクライアント上で動作するSophos Anti-Virusからのログを集中監視するためのサーバ

/usr/local/bin/icheckd
InterCheckクライアント用エリア

InterCheckを他のクライアントマシンが実行している場合にそのマシンがアクセスすべきディレクトリ。両ディレクトリのパーミッションはそれぞれ1777、700。

/var/spool/intercheck/comms
/var/spool/intercheck/infected

(*) アップデートインストールした場合は以前のウィルスパターンファイルとSAVIライブラリが残っているので不必要なら削除する。

/usr/local/lib/libsavi.so.x.x.xx.xxx
/usr/local/sav/vdl-x.xx.dat

initスクリプト設置

InterCheckサーバを使用する場合のみ、同サーバの起動/停止処理を行うinitスクリプトを作成する。

スクリプト作成

/etc/init.d/icheckdを作成する。

#!/bin/sh

DST=/usr/local/bin/icheckd
DST_PIDF=/var/spool/intercheck/comms/ic.sta

case "$1" in
start)
  if [ -x ${DST} ]; then
    echo -n ' icheckd'
    ${DST} -d > /dev/null 2>&1
  fi
  ;;

stop)
  if [ -x ${DST} -a -f ${DST_PIDF} ]; then
    echo -n ' icheckd'
    ${DST} -stop
  fi
  ;;

restart)
  if [ -x ${DST} -a -f ${DST_PIDF} ]; then
    echo -n ' icheckd'
    kill -HUP `cat ${DST_PIDF}`
  fi
  ;;

*)
  echo "Usage: `basename $0` {start|stop|restart}" >&2
  exit 64
  ;;

esac
exit 0

スクリプト配置

# cd /etc/rc3.d
# ln -s ../init.d/icheckd S99icheckd

# cd /etc/rc0.d
# ln -s ../init.d/icheckd K99icheckd