最近写技术的少了些,所以这篇比较技术向,重点是要关注 ClamAV 的新版本,及时更新自己网络内部署的 ClamAV。
笔者:国际认证信息系统审计师、软考系统分析师、软件工程硕士
ClamAV 1.4.0 RC 版本已经发布了一个月,正式版也即将发布。我们看看有什么新的功能。
主要新增功能包括:
1、添加支持从 ALZ 压缩文件中解压查杀,可以通过 DCONF(Dynamic CONFiguration)启用或关闭对 ALZ 压缩文件的支持。
ALZ 压缩格式是由 ESTsoft 开发的 ALZip 压缩软件产生的,使用类似于 ZIP 的压缩算法但主要面向较大尺寸的压缩规模,该软件可以在微软商店中获取。
笔者自己也没用过,要找时间测试一下和 7-zip 相比谁的压缩率更高。
2、添加支持从 LHA/LZH 压缩文件中解压查杀。同样可以通过 DCONF 启用或关闭该支持。
LHA 和 LZH 是真的古老,现在已经极少用到。但就由于太古老反而被利用来隐藏恶意代码,所以 ClamAV 补上了支持对其解压查杀。
3、添加关闭模糊图像哈希 Image Fuzzy Hashing 的选项。模糊图像哈希,简单说是专门针对图片夹带恶意代码的辅助检测机制。本次更新提供了命令行参数、配置文件选项和 DCONF 选项等方法允许在扫描时关闭该功能特性。
之所以要关注允许关闭该检测功能,我放在本文的第二部分说。
小改进包括:
1、对于 ARM64/aarch64 的CPU增加了交叉编译指令。这是源码编译的事,和用户没多大关系。
2、改良了 Freshclam 的警告信息内容,在被拦截或限流时带入 Cloudflare Ray ID 以帮助对问题进行分类检查。
这个改良的主要原因是 ClamAV 的杀毒特征库是用 Cloudflare 做 CDN 和 DDOS 防护的。如果企业用户不在内网做二级分发,大量服务器同时拥过去拉更新就有可能触发 Cloudflare 的保护机制。
3、删除了不必要的内存分配检查和内部重构......就是提升了性能,和用户没啥直接关系,详细不说了。
4、改良 Freshclam 文档内容,指出 datadir 选项必须是已经存在的目录的绝对路径,且该目录可以被 Freshclam 写入、可以被 ClamScan 和 ClamD 读取。用户可以对照检查一下。
5、实现一项优化,当干净文件缓冲被禁用,且不需要进行基于哈希值的检查时,不计算文件哈希值,从而提升扫描速度。笔者认为,基于上文“且...”的内容,这优化也没啥大用。
6、在 Linux 环境为 ClamOnAcc 改善 SystemD 服务文件,对于某些发行版可以提高服务关闭的速度。
就这了。
接下来说说模糊图像哈希。
Fuzzy Image Hashing,面向图像的模糊哈希计算,是利用特别设计的算法对图片进行计算而获得哈希值。该哈希值可以作为图片之间是否相似的检测特征。
ClamAV 的模糊图像哈希扫描功能特性是从 0.105 版本开始引入的。如前所述,典型用途就是把模糊图像哈希值作为检测特征,辨认文档内是否嵌入了相似的图像或文件后是否附着有相似的图像。
之所以要介绍模糊图像哈希,是因为它可以引出两个知识点:
第一个知识点是:为何恶意软件扫描要包括检测图像。
这是因为图像文件可能隐藏有恶意代码。稍有网络安全运维经验的读者都应该知道这个情况。
历史上典型例子是 LIBPNG 曾经有 RCE(远程代码执行) 漏洞(CVE-2014-9495[1]),精心构建的 PNG 文件可以嵌入可执行代码,利用该漏洞获得执行而实现对目标环境的入侵。
第二个知识点是:模糊哈希。
了解哈希算法的读者都知道比如 MD5 之类的信息摘要哈希算法的工作原理和输出结果的特性。比如用于计算信息摘要哈希值的输入内容,两次计算之间就算只是差了1个二进制位,输出结果都会完全不同,比如下面的例子。
通过信息摘要哈希值检测恶意软件曾经是一种比较简单直接的方法,但缺陷也很明显,只要恶意软件的代码稍有变化,甚至只是编译器版本、参数不同产生的新运行代码,其文件的信息摘要哈希值就会完全不同,检测就无效。
因此,对于具有家族或体系性质的恶意代码检测就无法使用信息摘要哈希算法。同样道理,对于稍作变化但实际依然是同一幅恶意图像的情况也无法使用。
为了应对这种情况,Fuzzy Hashing 模糊哈希算法就被发明出来。其工作原理主要是采用了包括分片采样在内的多种方式产生被哈希对象的模糊哈希值[2-3],ssdeep 是比较著名和被广泛使用的其中一种算法实现[4]。
在图像方面,情况还更复杂些。以 PyPI 的 ImageHash 为例,包括有多种不同的哈希算法,包括有平均哈希,感知哈希,差异哈希,小波哈希、HSV颜色哈希、抗剪切哈希等,概括说就是利用多种数学方法,通过颜色、特征、分片切割等因素实现相似图片的辨别[5]。
ClamAV 的模糊图像哈希算法和 PyPI 的 ImageHash 中的 phash() 函数也就是感知哈希函数,在算法的方向上是相同的,但代码是独立开发的。
读者对此能有所了解就行了,这里也不扯太远。
回到我们开始的问题:
为什么提供关闭模糊图像哈希检测功能,或者说用户在什么时候需要关闭这个检测功能?
一句话:对被检测的环境比较放心的时候。
典型如基本上是封闭的服务器环境,不会接收外来文档、电子邮件等的,关闭这个功能可以提升检测过程的速度,降低扫描过程的 CPU 资源消耗。
因为这个功能的关键用途和使用逻辑是:
如果检测到某图片是带有恶意代码的,那么与之相似的图片都有可能是恶意的,基于这些图片都会源自同一制作者的假设。
关闭该功能后,对图片的检查仅进行基本的结构检查,对于嵌入到文档或附着到文件末尾的图片则会被忽略[6]。
ClamAV 发展到现在,它在检测过程中的 CPU 资源和内存资源消耗是非常巨大的,适当地关闭一些检测功能可以缓解因为资源不足而导致正常服务失效等各种潜在的风险。
这个问题在企业内私有虚拟化环境,分配虚机之间的资源共享时尤其明显。
因为需要每台虚机都部署 ClamAV,导致笔者设置的 Linux 虚机即使没啥业务都要配置 4GB 以上的最小内存,且要设置至少 2.5GB 保留内存。
而且还要测算各虚机的扫描过程时长,妥善安排扫描开始时间,避免一窝蜂地并发检测而争夺宿主机的 CPU。
所以这个关闭选项是有其必要性的。
当然资源充足的甲方可以配置专门面向虚拟化环境、部署在 Hypervisor 层的商业杀毒软件。
花钱还是能解决问题的,就看钱花在哪里,如何达到支出和效率的平衡。
参考信息:
[1] CVE-2014-9495 - OpenCVE
https://www.opencve.io/cve/CVE-2014-9495
[2] Fuzzy Hashing Techniques in Applied Malware Analysis
https://insights.sei.cmu.edu/blog/fuzzy-hashing-techniques-in-applied-malware-analysis/
[3] Fuzzy Hashing Against Different Types of Malware
https://insights.sei.cmu.edu/blog/fuzzy-hashing-against-different-types-of-malware/
[4] ssdeep - Fuzzy hashing program
https://ssdeep-project.github.io/ssdeep/
[5] ImageHash · PyPI
https://pypi.org/project/ImageHash/
[6] Pull Request #1186 · Cisco-Talos/clamav · GitHub
本站微信订阅号:
本页网址二维码: