Elkeid 静态检测插件 scanner_clamav ,使用clamav 引擎:https://docs.clamav.net/Introduction.html 对 Linux 系统进程和敏感目录进行周期扫描,以发现可疑静态文件(UPX/挖矿二进制/挖矿脚本/可疑脚本文件/...)。
开源地址: https://github.com/bytedance/Elkeid/tree/main/plugins/scanner\_clamav
在 Elkeid 的 agent 中,静态检测插件需要在极其有限的内存和CPU资源占用条件下,在不同发行版和内核版本的 Linux x64 架构系统上进行静态扫描,因此使用完全静态链接的 libclamav 库以及裁剪后的 clamav database 与 yara 规则实现。资源占用数据如下:
Agent-插件占比 PCT
CPU 单核百分比
RSS Mb
静默
0
25.6
50
0.18
64.2
75
0.80
64.4
90
1.12
64.8
95
1.58
65
99
1.69
66
999
2.88
75
MAX
10
111
(PCT.50~PCT.999 为 Agent 每次心跳上报的数据统计分布占比)
参考 Github readme
中文 https://github.com/bytedance/Elkeid/blob/main/plugins/scanner\_clamav/README-zh\_CN.md
英文 https://github.com/bytedance/Elkeid/blob/main/plugins/scanner\_clamav/README.md
考虑到部分国内用户无法在编译时正常拉取 zlib、ssl 等标准库的代码,这里配置了 github action 对应的 dockerfile 编译方式,参见:
https://github.com/bytedance/Elkeid/blob/main/plugins/scanner\_clamav/docker/Dockerfile
https://github.com/bytedance/Elkeid/blob/main/.github/workflows/Elkeid.yml#L46
https://github.com/bytedance/Elkeid/actions/runs/2202809672
===
3. 使用场景
===============
1.周期性扫描:对敏感目录和系统进程进行静态扫描
2.插件扫描任务:对静态检测插件下发扫描任务,对指定文件进行静态扫描
3.与策略联动:外网下载 & php/jsp/asp 文件创建扫描,以发现 webshell 上传
数据类型汇总
types
文件类型
class
恶意分类
name
恶意家族
exe
目标文件
exe_size
文件大小(byte)
exe_hash
快速hash,对标 driver exe_hash
md5_hash
md5
create_at
文件 brith_time, 文件系统不支持则为0
modify_at
文件修改时间, 文件系统不支持则为0
pid
目标进程pid
ppid
父进程 pid
pgid
父进程 组id
tgid
thread group id
argv
进程命令行 cmdline
comm
进程的命令名
sessionid
进程所在会话 ID
uid
用户ID
pns
Process name space
error
扫描任务执行错误信息(如果有)
token
扫描任务 token
{custom}
自定义数据
{
字段 data 为给插件下发的扫描任务 json string,其中,exe 为待扫描的文件绝对路径,exe、data_type 以外的所有字段会 插入/覆盖(如果已经存在)到命中规则后上报的数据中。例,如果需要在上报的数据中插入预定义的sid,则需要变更如下:
{
完整的 clamav database 中包含六百万以上样本数据,加载需要 2G 以上内存使用,且 clamav database 中大部分规则类型为:文件 hash 校验、Section hash 校验,以及大量的 windows 相关病毒规则。在 Linux 服务端的场景下,windows pe 等无关的病毒规则可以裁剪掉,此外 hash 校验部分则可以在扫描时提取对应特征,随 agent 数据流到后端统一验证。裁剪后的 database 再配合低频率的扫描任务,这样可以大幅减少静态检测在端上的内存和 CPU 资源资源占用。
clamav 数据库支持 yara 格式(但有一些限制),且数据库文件支持自定义,详细格式以及数据库定义规则请参考 https://docs.clamav.net/manual/Signatures.html。