我正在尝试做什么:
我正在尝试扫描我的文件服务器是否存在恶意软件,并且我正在使用 clamav/clamscan,手册页上说它可以扫描最大 4GB 的文件。
这手册页指出:
--max-filesize=#n
从每个存档中提取并扫描最多 #n KB。您可以以 xM 或 xm 格式传递以兆字节为单位的值,其中 x 是一个数字。此选项可保护您的系统免受 DoS 攻击(默认值:25 MB,最大:<4 GB)
--max-scansize=#n
从每个扫描的文件中提取并扫描最多 #n KB。您可以以 xM 或 xm 格式传递以兆字节为单位的值,其中 x 是一个数字。此选项可保护您的系统免受 DoS 攻击(默认值:100 MB,最大:<4 GB)
我的系统是:
新硬件华擎主板,
CPU:AMD Athlon(tm) II X2 270 处理器(3400MHz)
内存:4GB
操作系统:Debian Wheezy 所有更新。
问题:
我在这里做错了什么?
下面的这些错误和警告是什么意思?
这种行为有解决方法吗?
我的情况:
我已经尝试扫描两个 3TB 硬盘clamscan
一个多星期了,但它总是给出相同的错误(除了字节码编号不同):
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。因为我们将文件映射到内存中,所以如果没有足够的内存来映射整个文件,内存映射代码(当前实现的)将失败,并且不会扫描文件。
我们的长期目标之一是研究是否能够正确支持大文件。
可能的解决方案:
希望以上就是问题所在(内存不足),然后我可以简单地将系统内存扩展到 8GB,但不太可能这么简单,因为我尝试在具有 12GB 内存的系统上运行这些扫描。
编辑#1
这是在另一个具有 Fedora 21 + 12 GB 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 签名类型不同,字节码签名具有许多独特的区别,需要尊重这些区别才能有效使用。
相信
默认情况下,字节码签名被视为不可信。事实上,只有 Cisco 在 bytecode.cvd 中发布的字节码签名才被视为“可信”。这意味着默认情况下 ClamAV 引擎永远不会加载、触发或执行不受信任的字节码。人们可以通过向引擎指定字节码未签名选项来绕过这一安全机制,但应该注意的是,是否使用不受信任的字节码签名取决于用户的判断力。
对于 clamscan,命令行选项是
--bytecode-unsigned
。
对于 clamd,需要指定BytecodeUnsigned yes
to clamd.conf
。
暂停
字节码签名被设计为仅运行由内部超时值指定的有限时间。如果执行时间超过该值,则字节码签名的执行将终止并通知用户。字节码签名超时值可以由用户设置。
对于 clamscan,命令行是
--bytecode-timeout=[time in ms]
。
对于 clamd,可以指定BytecodeTimeout [time in ms]
为clamd.conf
。
这很有用:
问题报告
如果任何人遇到字节码签名问题,无论是在 clambc 编译器中还是在 ClamAV 中,他们都可以将其报告给 https://bugzilla.clamav.net/。请务必包含字节码签名、字节码源(如果可能)以及任何其他有用的信息。
回答
关键似乎是设置--bytecode-timeout=
高,以便扫描仪有时间扫描整个文件。默认值是60000
毫秒/60 秒,我将其设置为 190000,该值可以工作并且不会给出超时错误。这个值可能可以设置得更低,但它对我有用。在设置前有错误的两个系统上进行了测试。
更新:
在三个系统和多次扫描上进行测试,使用此设置后错误消失了--bytecode-timeout
。
这是新命令:
clamscan -r -i --remove --max-filesize=4000M --max-scansize=4000M --bytecode-timeout=190000 /DATA1
笔记:
我还将服务器内存升级到 8GB,我不确定 clamscan 在扫描文件时是否将文件加载到内存中,但一篇文章说了这么多,如果是这样,那就是另一个考虑因素。