私は何をしたいですか?:
ファイルサーバーでマルウェアを検索しようとしていますが、マニュアルページで最大4 GBのファイルを検索できることを示しているclamav / clamscanを使用しています。
これマニュアルページには次のように記載されています。
--max-filesize=#n
各アーカイブから最大#nKBを抽出してスキャンします。 xM または xm 形式で値をメガバイト単位で渡すことができます。ここで x は数値です。このオプションはDoS攻撃からシステムを保護します(デフォルト:25MB、最大値:<4GB)
--max-scansize=#n
スキャンした各ファイルから最大#nKBまで抽出してスキャンします。 xM または xm 形式で値をメガバイト単位で渡すことができます。ここで x は数値です。このオプションはDoS攻撃からシステムを保護します(デフォルト:100MB、最大値:<4GB)
私のシステムは:
新しいハードウェアASRockマザーボード、
CPU: AMD Athlon(tm) II X2 270プロセッサ(3400MHz)
メモリ:4GB
オペレーティングシステム:Debian Wheezyのすべてのアップデート。
質問:
私がここで何を間違っているのか?
次のエラーと警告はどういう意味ですか?
この問題の回避策はありますか?
私の状況:
clamscan
1週間以上2台の3TBドライブをスキャンしようとしましたが、常に同じエラーが発生します(バイトコード番号が異なる場合を除く)。
LibClamAV Warning: [Bytecode JIT]: recovered from error
LibClamAV Warning: [Bytecode JIT]: JITed code intercepted runtime error!
LibClamAV Warning: Bytcode 38 failed to run: Time limit reached
LibClamAV Warning: [Bytecode JIT]: Bytecode run timed out, timeout flag set
LibClamAV Warning: [Bytecode JIT]: recovered from error
LibClamAV Warning: [Bytecode JIT]: JITed code intercepted runtime error!
LibClamAV Warning: Bytcode 38 failed to run: Time limit reached
LibClamAV Warning: [Bytecode JIT]: recovered from error
LibClamAV Warning: [Bytecode JIT]: Bytecode run timed out, timeout flag set
LibClamAV Warning: [Bytecode JIT]: JITed code intercepted runtime error!
LibClamAV Warning: Bytcode 38 failed to run: Time limit reached
スキャン後約40〜50時間:
(次のスニペットはclamscan
私が実行したい実際のコマンドであることに注意してください)
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
2012 root 20 0 1903M 246M 1244 R 101. 6.6 47h27:45 clamscan -r -i --remove --max-filesize=4000M --max-scansize=4000M /DATA1/
bytecode.cvd
一部のファイルが破損していると思われるフォーラムで提案されているようにファイルを削除し、更新ツールを使用して再main.cvd
ダウンロードdaily.cld
してみました。
root ~ # ls -ahl /usr/local/share/clamav/
total 145M
drwxr-sr-x 2 clamav clamav 4.0K Mar 26 04:29 .
drwxrwsr-x 10 root staff 4.0K Mar 20 01:59 ..
-rw-r--r-- 1 clamav clamav 65K Mar 26 04:29 bytecode.cvd
-rw-r--r-- 1 clamav clamav 83M Mar 26 04:29 daily.cld
-rw-r--r-- 1 clamav clamav 62M Mar 18 01:17 main.cvd
-rw------- 1 clamav clamav 156 Mar 26 04:29 mirrors.dat
root ~ # rm -f /usr/local/share/clamav/bytecode.cvd /usr/local/share/clamav/daily.cld /usr/local/share/clamav/main.cvd
root ~ # freshclam
ClamAV update process started at Thu Mar 26 04:42:21 2015
Downloading main.cvd [100%]
main.cvd updated (version: 55, sigs: 2424225, f-level: 60, builder: neo)
Downloading daily.cvd [100%]
daily.cvd updated (version: 20242, sigs: 1358870, f-level: 63, builder: neo)
Downloading bytecode.cvd [100%]
bytecode.cvd updated (version: 247, sigs: 41, f-level: 63, builder: dgoddard)
Database updated (3783136 signatures) from db.UK.clamav.net (IP: 129.67.1.218)
私が見つけたフォーラムの投稿に基づいて設定と--max-filesize
ダウンを試しました。--max-scansize
ここファイル/スキャンサイズの制限は2.17GBと指定されています。
clamscan -r -i --remove --max-filesize=2100M --max-scansize=2100M /DATA1/
しかし、同じエラーが発生します。
このプログラムは公式ウェブサイトclamav-0.98.6から最新バージョンです。次のオプションを使用してソースで構成およびコンパイルします。
./configure --enable-bzip2
プログラムの再インストールを試みた後、最初にコンパイルでより多くのオプションを設定しました(--enable-experimental、--with-dbdir = / usr / local / share / clamav)
私が知っている最後のオプションは、このバージョンを削除して配布リポジトリでパッケージを試すことです。しかし、可能であれば、このプロジェクトを成功させたいと思います。
更新:リポジトリからclamavをインストールしようとしましたが、同じ問題/エラーが発生しました。
私が見つけたこれが、古くて問題がどこにあるのか分からないようです。そしてここしかし、まだ明確な答えや解決策はありません。
私がスキャンしようとしたドライブは次のとおりです。
# df -h
/dev/sdb1 2.7T 2.6T 115G 96% /DATA1
/dev/sdc1 2.7T 2.6T 165G 95% /DATA2
これはfdiskです:
# fdisk -l
WARNING: GPT (GUID Partition Table) detected on '/dev/sdb'! The util fdisk doesn't support GPT. Use GNU Parted.
Disk /dev/sdb: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 1 4294967295 2147483647+ ee GPT
Partition 1 does not start on physical sector boundary.
WARNING: GPT (GUID Partition Table) detected on '/dev/sdc'! The util fdisk doesn't support GPT. Use GNU Parted.
Disk /dev/sdc: 3000.6 GB, 3000592982016 bytes
255 heads, 63 sectors/track, 364801 cylinders, total 5860533168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdc1 1 4294967295 2147483647+ ee GPT
Partition 1 does not start on physical sector boundary.
考えられる理由:
システムメモリ/ CPUに関連している可能性がありますが、その情報はありません。
私が見つけたこれclamscanはスキャンするファイルをメモリにロードし、メモリが不足すると失敗するという内容です。この問題は、最大4Gigs(システムのメモリ容量)までファイルをスキャンするようにスキャナを設定したときに発生する可能性があります。
抜粋:
ファイルのサイズはどのくらいですか?スキャナにRAMがどれくらいインストールされていますか(物理メモリとスワップメモリを分離してください)現在、ClamAVのハードファイル制限は約2.17GBです。ファイルをメモリにマッピングするため、ファイル全体をマッピングするのに十分なメモリがない場合、メモリマッピングコード(現在実装されているように)が失敗し、ファイルが検索されません。
私たちの長期的な目標の1つは、大容量ファイルを適切にサポートできるかどうかを調べることです。
考えられる解決策:
上記の問題(メモリ不足)が発生したい場合は、単にシステムメモリを8 GBに拡張できますが、12 GBのメモリを持つシステムでこれらのスキャンを実行しようとしているので、それほど単純ではありません。
編集#1
以下は、Fedora 21 + 12GB RAMを搭載した他のシステムで実行されています。
clamscan -r -i --remove --max-filesize=1700M --max-scansize=1700M --exclude=/proc --exclude=/sys --exclude=/dev /
LibClamAV Warning: [Bytecode JIT]: recovered from error
LibClamAV Warning: [Bytecode JIT]: JITed code intercepted runtime error!
LibClamAV Warning: [Bytecode JIT]: Bytecode run timed out, timeout flag set
LibClamAV Warning: Bytcode 27 failed to run: Time limit reached
LibClamAV Error: cli_scanxz: premature end of compressed stream
LibClamAV Error: cli_scanxz: premature end of compressed stream
----------- SCAN SUMMARY -----------
Known viruses: 3779101
Engine version: 0.98.6
Scanned directories: 101382
Scanned files: 744103
Infected files: 0
Total errors: 18419
Data scanned: 285743.78 MB
Data read: 394739.73 MB (ratio 0.72:1)
Time: 32171.073 sec (536 m 11 s)
サイズを2100M-4000Mに設定して同じスキャンを実行すると、元の質問で述べたのと同じエラーが発生しました。
ベストアンサー1
私はこれを見つけました(@FloHimselfのおかげで):ClamAVバイトコード署名の簡単な再紹介、プログラムのいくつかの用途といくつかの便利なオプションの良い概要/補足を提供します。
抜粋:
バイトコード署名は、スキャンしたファイルに対して追加の処理を実行し、より信頼性の高い検出を可能にする特別な種類のClamAV署名です。標準のClamAV署名タイプとは異なり、バイトコード署名には、効果的な使用のために従う必要があるいくつかの固有の違いがあります。
信じる
デフォルトでは、バイトコード署名は信頼できないと見なされます。実際、シスコがbytecode.cvdに公開したバイトコード署名のみが「信頼できる」と見なされます。つまり、デフォルトでは、ClamAVエンジンは信頼できないバイトコードをロード、トリガー、または実行しません。エンジンにbytecode unsignedオプションを指定することで、このセキュリティメカニズムをバイパスできますが、信頼できないバイトコード署名を使用するかどうかは、ユーザーの裁量に依存することに注意してください。
clamscanの場合、コマンドラインオプションは次のとおりです。
--bytecode-unsigned
。
clamdにはBytecodeUnsigned yes
toを指定する必要がありますclamd.conf
。
停止する
バイトコード署名は、内部タイムアウト値で指定された限られた時間だけ実行されるように設計されています。実行時間がこの値を超えると、バイトコード署名の実行が終了し、ユーザーに通知されます。バイトコード署名タイムアウト値はユーザーが設定できます。
clamscanの場合、コマンドラインは次のようになります。
--bytecode-timeout=[time in ms]
。
BytecodeTimeout [time in ms]
clamdの場合に指定できますclamd.conf
。
これは便利です:
問題報告
誰もがclambcコンパイラまたはClamAVでバイトコード署名の問題が発生した場合に報告できます。 https://bugzilla.clamav.net/。バイトコード署名、バイトコードソース(可能な場合)、およびその他の有用な情報を含める必要があります。
回答
--bytecode-timeout=
スキャナーがファイル全体をスキャンする時間があるように高く設定することが重要なようです。デフォルト値は60000
ミリ秒/60秒です。 190000に設定しましたが動作し、タイムアウトエラーは発生しません。この値を低く設定することもできますが、私は効果的です。セットアップ前にエラーがある両方のシステムでテストされました。
修正する:
3つのシステムと複数のスキャンでテストした結果、この設定でエラーが消えました--bytecode-timeout
。
これは新しいコマンドです:
clamscan -r -i --remove --max-filesize=4000M --max-scansize=4000M --bytecode-timeout=190000 /DATA1
メモ:
サーバーメモリも8GBにアップグレードしましたが、clamscanがファイルをスキャンするときにメモリにファイルをロードするかどうかはわかりませんが、ある記事ではそれほど多く言及しています。