目次

メールサーバーで、Clam AntiVirus(Clamd)がメモリー食いすぎなので、他製品(Dr.Web)をトライアルしてみる。

調査アプリ/バージョン

インストール時に必要なパッケージ

RockyLinux8.5 Minimalインストール 直後状態で、インストーラ drweb-11.1.3-av-linux-amd64.run を実行したら、

Uncompressing Dr.Web for Linux Workstations.Extraction failed.
Signal caught, cleaning up

で、コケる。

⇒ tar コマンド(RPM)が必須。

tarコマンドは初期の段階でインストールするコマンドの為、このエラーはあまりお目にかかれないと思う。

インストールにあたり

インストール後に、dnf updateしたら、早速アップグレード対象としてリストされた。

インストール後の設定

  →今回はGUIが無いサーバーにインストールするが、初期設定状態を読み解く為に、一時的にGUI有にもインストールした。

トライアルライセンス取得

インストール直後は、/opt/drweb.com/bin/drweb-configd.real のみ起動

トライアルライセンスを取得すると、パターンファイルのアップデートが可能となるようだ。

CUIでは、

# drweb-ctl license --GetDemo

数秒後に、ユーザー登録なしで、30日間試用可能となる

ライセンスを有効にすると、さらに、

/opt/drweb.com/bin/drweb-update.real が常駐する。

今回は、メールサーバーで扱うメールに対してウイルスチェック出来れば良い。

つまり、それ以外の機能はリソースが厳しいので機能OFFしたい。

設定内容の確認

設定を確認するには、

# drweb-ctl cfshow

設定を入れる際には、

# drweb-ctl cfset xxxxxxx

設定で気になった部分をピックアップすると、デフォルト状態では

おそらく、新しいウイルスが見つかったが、パターンファイルとして開発して配信され反映されまでの時間をこの機能で補完するものと予想。
(所謂、0Day攻撃対策?)

既に機能OFFになっている項目もあるが、以下の項目は確定。

[SPIDer Gurd OFF]
drweb-ctl cfset LinuxSpider.Start off

[SPIDer Gate OFF]
drweb-ctl cfset LinuxFirewall.OutputDivertEnable off

[Dr.Web Cloud OFF]
drweb-ctl cfset Root.UseCloud off

コマンド単体実行結果

通常メール

[drweb-ctl scan]

/home/develop/Maildir/new/1659425076.V10303I3040c9eM713861.rocky8-mail.chovits.net (MAIL) - Ok
Scanned objects: 1, scan errors: 0, threats found: 0, threats neutralized: 0.
Scanned 0.46 KB in 0.08 s with speed 5.57 KB/s.
---> Exit Code: 0

[drweb-ctl mailcheck]

/home/develop/Maildir/new/1659425076.V10303I3040c9eM713861.rocky8-mail.chovits.net - Ok
Scanned objects: 1, scan errors: 0, threats found: 0, threats neutralized: 0.
Scanned 0.46 KB in 18.14 s with speed 0.03 KB/s.
---> Exit Code: 0

テストウイルスメール (EICAR)

[drweb-ctl scan]

/home/develop/Maildir/new/1659699700.V10303I30447dcM256465.rocky8-mail.chovits.net//2.inline - infected with EICAR Test File (NOT a Virus!)
Scanned objects: 1, scan errors: 0, threats found: 1, threats neutralized: 0.
Scanned 1.07 KB in 0.50 s with speed 2.12 KB/s.
---> Exit Code: 0

[drweb-ctl mailcheck]

/home/develop/Maildir/new/1659699700.V10303I30447dcM256465.rocky8-mail.chovits.net - Reject: infected with EICAR Test File (NOT a Virus!)
Scanned objects: 1, scan errors: 0, threats found: 1, threats neutralized: 0.
Scanned 1.07 KB in 0.16 s with speed 6.61 KB/s.
---> Exit Code: 0

調査内容

【確認方法】
# drweb-ctl [scan|mailcheck] メールファイル

考察

  → '- Reject: infected with ' が在った場合は、ウイルス有り

    無ければ、ウイルス無

@av_scanners について

(1) メールがamavisd-newに渡った時にmaillogを確認(debug=5)すると、

 とファイルが別れる。いくつ別れるかは不明。
 今回のテストでは、p001の1つのみ、p001/p002の2つ、p001/p003の2つなど、ファイル名のナンバリングも一定ではない。

 →ファイルが分かれるので、

 と、それぞれ結果表示されている。

(2) @av_scannersのメイン定義(drweb)では、drwebd.sockがあるが、コンシューマー向けDr.webは確認するも見当たらない。

  ⇒ この定義は使えない。(おそらく、法人向け Dr.Web for UNIX mail servers製品用と推測)

(3) @av_scannersのバックアップ定義(drweb)では、/usr/local/drweb/drweb or /opt/drweb/drweb のdrwebコマンドがない。

  現バージョン(11.3)では、「drweb-ctl」に置き換わったものと思われる。

  ウイルス有/無をExitコードだけで判別できない(@av_scanners定義では、Dr.Web 4.33 and earlierとあるので、そもそも無理)

以上の事から、@av_scannersのバックアップ定義(drweb)を参考に修正しつつ、メイン定義に置き換える必要あり。

@av_scanners 定義

@av_scannersの定義方法についてgoogleったが、有用な情報を得られず。幸いamavisd-newはperlで書かれているので、直接ファイルを見てみる。
run_avルーチンにて、

  my($bare_fnames,  # a ref to a list of filenames to scan (basenames)
     $names_to_parts, # ref to a hash that maps base file names to parts object
     $tempdir,      # temporary directory
      # n-tuple from an @av_scanners list entry starts here
     $av_name, $command, $args,
     $sts_clean,    # a ref to a list of status values, or a regexp
     $sts_infected, # a ref to a list of status values, or a regexp
     $how_to_get_names, # ref to sub, or a regexp to get list of virus names
     $pre_code, $post_code,  # routines to be invoked before and after av
  ) = @_;

とあり、@av_scannersのパラメータは、

$av_name, $command, $args, $sts_clean, $sts_clean, $how_to_get_names ・・・ となっている。

AntiVirus名称, コマンド名, コマンド引数, ウイルス無判定, ウイルス有判定, ウイルス有の場合のウイルス名取得

これに当てはめると、

'drweb - DrWeb Antivirus', '/usr/bin/drweb-ctl', 'mailcheck ディレクトリ/ファイル名', Exitコードが0, ' - Reject: infected with'の文字列がある, 'infected with xxxx'のxxx部分がウイルス名

よって定義は、

 @av_scanners = (
  ### DrWebD
  ['drweb - DrWeb Antivirus',
    ['/usr/bin/drweb-ctl', '/opt/drweb.com/bin/drweb-ctl', 'drweb-ctl'],
    'checkmail {}',
    [0],
    qr' - Reject: infected with'm,
    qr' - Reject: infected with (.*)$'m,],
 );
 
 @av_scanners_backup = (
 
  ### DrWebD
  ['drweb - DrWeb Antivirus',  #
    ['/usr/bin/drweb-ctl', '/opt/drweb.com/bin/drweb-ctl', 'drweb-ctl'],
    'scan {}',
    [0],
    qr' - infected with 'm,
    qr' - infected with (.*)$'m,],
 
 );

実際にメールテストを実施したが、ウイルス無判定(ExitCode:0)だけで完結せず、ウイルス有判定までチェックした結果となる。

amavisd-newで、メールが複数ファイルに分かれて書き出される仕様により、ウイルス無時に「Ok」文字では判別出来ないと推測

未確認情報

実際にウイルス有(EICAR)/無で試したが、今回使用したamavisd-newのバージョン・Dr.webのバージョンでは検出した。

しかし、以下の点については加味されていない。

まずは、連携可能かどうかから確認したので後回し。