Clamav使用及规则库详解
程序员文章站
2022-05-27 13:32:18
...
Clamav作为一款开源的病毒引擎,能够探测木马、病毒、恶意软件及其它的恶意威胁。
官方地址:http://www.clamav.net/
Github上维护的开源代码:https://github.com/Cisco-Talos/clamav-devel/
官方可以下载最新的开源代码及使用的病毒库。
从下载地址看,现在还支持exe文件的下载及使用,这里就不再做介绍。
安装clamav时,会自动安装sigtool。
Sigtool是一款针对clamav病毒库的读取工具。
查看帮助文档,可以明确各参数的具体使用方法sigtool --help
Clam AntiVirus: Signature Tool 0.100.0
By The ClamAV Team: https://www.clamav.net/about.html#credits
(C) 2007-2018 Cisco Systems, Inc.
sigtool [options]
--help -h Show this help
--version -V Print version number and exit
--quiet Be quiet, output only error messages
--debug Enable debug messages
--stdout Write to stdout instead of stderr
--hex-dump Convert data from stdin to a hex
string and print it on stdout
--md5 [FILES] Generate MD5 checksum from stdin
or MD5 sigs for FILES
--sha1 [FILES] Generate SHA1 checksum from stdin
or SHA1 sigs for FILES
--sha256 [FILES] Generate SHA256 checksum from stdin
or SHA256 sigs for FILES
--mdb [FILES] Generate .mdb (section hash) sigs
--imp [FILES] Generate .imp (import table hash) sigs
--html-normalise=FILE Create normalised parts of HTML file
--ascii-normalise=FILE Create normalised text file from ascii source
--utf16-decode=FILE Decode UTF16 encoded files
--info=FILE -i FILE Print database information
--build=NAME [cvd] -b NAME Build a CVD file
--max-bad-sigs=NUMBER Maximum number of mismatched signatures
When building a CVD. Default: 3000
--flevel=FLEVEL Specify a custom flevel.
Default: 91
--cvd-version=NUMBER Specify the version number to use for
the build. Default is to use the value+1
from the current CVD in --datadir.
If no datafile is found the default
behaviour is to prompt for a version
number, this switch will prevent the
prompt. NOTE: If a CVD is found in the
--datadir its version+1 is used and
this value is ignored.
--no-cdiff Don't generate .cdiff file
--unsigned Create unsigned database file (.cud)
--hybrid Create a hybrid (standard and bytecode) database file
--print-certs=FILE Print Authenticode details from a PE
--server=ADDR ClamAV Signing Service address
--datadir=DIR Use DIR as default database directory
--unpack=FILE -u FILE Unpack a CVD/CLD file
--unpack-current=SHORTNAME Unpack local CVD/CLD into cwd
--list-sigs[=FILE] -l[FILE] List signature names
--find-sigs=REGEX -fREGEX Find signatures matching REGEX
--decode-sigs Decode signatures from stdin
--test-sigs=DATABASE TARGET_FILE Test signatures from DATABASE against
TARGET_FILE
--vba=FILE Extract VBA/Word6 macro code
--vba-hex=FILE Extract Word6 macro code with hex values
--diff=OLD NEW -d OLD NEW Create diff for OLD and NEW CVDs
--compare=OLD NEW -c OLD NEW Show diff between OLD and NEW files in
cdiff format
--run-cdiff=FILE -r FILE Execute update script FILE in cwd
--verify-cdiff=DIFF CVD/CLD Verify DIFF against CVD/CLD
下载的病毒库cvd是由zlib压缩库压缩的文件,前512个bytes是一个特殊的头文件,记录引擎病毒库的简单信息,包括名字、创建时间、版本号、签名数量等,然后一个接着一个存储病毒库文件。clamav提供了一个签名工具sigtool,可以查看、生成和解压缩病毒库,在clamav的运行代码中会通过cli_untgz函数解压缩cvd文件,可以通读代码了解详细过程。
几个使用事例:
- 查看规则库的详细信息
sigtool -i main.cvd
File: main.cvd
Build time: 07 Jun 2017 17:38 -0400
Version: 58
Signatures: 4566249
Functionality level: 60
Builder: sigmgr
MD5: 57462fd73f1cfdb356b9dca66da2b732
Digital signature: KWRdhTG+Own6ohh0wn5+vqg1d8ULKCxxxQeKuSA155B3ijxBKgf+bV3IXPcmZrIBUDn1xi8FmyvB63UieykwN/Avq5mTjHIVO8zFnC7wVF7dhdcEYn9Nt+Pmk/HXXx0voylYkidvgZmrxI8jx4a/Re6n3hHQJoCZrkHM15GER8j
Verification OK.
- 使用
sigtool –unpack
对病毒库文件进行解压缩解压缩出来的文件都是明文,可直接进行查看。对main.cvd进行解压缩后可以看到如下文件:COPYING main.crb main.fp main.hdb main.hsb main.info main.mdb main.msb main.ndb main.sfp
- 很多人解压缩后想打包回去,sigtool提供了–build参数。生成cvd的过程需要证书,当前只供维护人员使用。因为当前用不到,所以没有深究源码是如何实现的。
针对不一样的文件后缀,库的功能是不一样的。
病毒库签名文件总结如下:
签名文件后缀名 | 签名类型 |
---|---|
*.hdb | 基于md5 hash的签名 |
*.hsb | 基于sha1和sha256 hash的签名 |
*.mdb | 基于PE section hash的签名 |
*.db | Body-based的基本签名 |
*.ndb | Body-based的扩展签名 |
*.ldb | Body-based的逻辑签名 |
*.idb | PE文件的图标签名 |
*.ndb | PE文件版本信息元数据签名 |
.crb, .crtdb | 信任和撤销的证书签名 |
*.cdb | 容器元数据签名 |
.zmd(zip)和*.rmd(rar) | 只基于ZIP/RAR元数据的签名 |
.fp(md5)和.sfp(sha1和sha256) | 白名单数据库 |
*.pdb | 钓鱼url/host签名 |
*.gdb | 钓鱼URL hash签名 |
*.wdb | 钓鱼URL白名单签名 |
上一篇: yarn源码之前奏Configuration类解析
下一篇: 整体二分