运行 clamav/clamscan、扫描 3TB 硬盘时出现警告/错误

运行 clamav/clamscan、扫描 3TB 硬盘时出现警告/错误

我正在尝试做什么:

我正在尝试扫描我的文件服务器是否存在恶意软件,并且我正在使用 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.cvdmain.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 yesto 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 在扫描文件时是否将文件加载到内存中,但一篇文章说了这么多,如果是这样,那就是另一个考虑因素。

相关内容