Elkeid-Scanner

1. 关于 Scanner 插件

当前版本 1.9.X

Scanner 使用 clamav 引擎对系统进程和敏感目录进行周期扫描,以发现可疑静态文件(UPX/挖矿二进制/后门/木马/可疑脚本文件/...)。

1.1. 平台兼容性

Elkeid Agent相同,目前预编译产物已支持 x86_64、Aarch64。

1.2. Agent/后端 兼容性

向前兼容: 1.7.X、1.8.X

2. 构建

开源版本通过 Github Action 自动构建,完整编译环境与遍历流程可参考对应 Dockerfile。用户可通过 Dockerfile 创建 Docker 自动执行编译步骤。

2.1. Docker 完整docker编译环境 & 编译产物

  • aarch64

    {
        "id_list":[
            "xxxxxxxx"
        ],
        "data":{
            "config":[
                {
                    "name":"scanner",
                    "version":"3.1.9.6",
                    "download_url":[
                        "http://lf3-elkeid.bytetos.com/obj/elkeid-download/plugin/scanner/scanner-default-aarch64-3.1.9.6.tar.gz",
                        "http://lf6-elkeid.bytetos.com/obj/elkeid-download/plugin/scanner/scanner-default-aarch64-3.1.9.6.tar.gz",
                        "http://lf9-elkeid.bytetos.com/obj/elkeid-download/plugin/scanner/scanner-default-aarch64-3.1.9.6.tar.gz",
                        "http://lf26-elkeid.bytetos.com/obj/elkeid-download/plugin/scanner/scanner-default-aarch64-3.1.9.6.tar.gz"
                    ],
                    "type": "tar.gz",
                    "sha256": "d75a5c542a2d7c0900ad96401d65833833232fcf539896ac2d2a95619448850b",
                    "signature": "1089b8fdcb69eac690323b0d092d8386901ded2155a057bf4d044679a2b83a9c",
                    "detail":""
                }
            ]
        }
    }
    
  • x86_64

    {
        "id_list":[
            "xxxxxxxx"
        ],
        "data":{
            "config":[
                {
                    "name":"scanner",
                    "version":"3.1.9.6",
                    "download_url":[
                        "http://lf3-elkeid.bytetos.com/obj/elkeid-download/plugin/scanner/scanner-default-x86_64-3.1.9.6.tar.gz",
                        "http://lf6-elkeid.bytetos.com/obj/elkeid-download/plugin/scanner/scanner-default-x86_64-3.1.9.6.tar.gz",
                        "http://lf9-elkeid.bytetos.com/obj/elkeid-download/plugin/scanner/scanner-default-x86_64-3.1.9.6.tar.gz",
                        "http://lf26-elkeid.bytetos.com/obj/elkeid-download/plugin/scanner/scanner-default-x86_64-3.1.9.6.tar.gz"
                    ],
                    "type": "tar.gz",
                    "sha256": "e17e7380233c64172c767aa7587a9e303b11132e97c0d36a42e450469c852fdf",
                    "signature": "527c6ea0caac3b0604021de5aa2d34e4b9fae715e5e6cdd37e8f485869f923c2",
                    "detail":""
                }
            ]
        }
    }
    

2.2. 编译

# x86_64
docker build -t scanner -f docker/Dockerfile.x86_64 ../../ 
docker create --name scanner scanner
docker cp scanner:/Elkeid/plugins/scanner/output/scanner-x86_64.tar.gz ./
docker rm -f scanner

# aarch64
docker build -t scanner -f docker/Dockerfile.aarch64 ../../ 
docker create --name scanner scanner
docker cp scanner:/Elkeid/plugins/scanner/output/scanner-aarch64.tar.gz ./
docker rm -f scanner

3. 自定义编译配置(可选)

在下列文件中,有一些常量,可根据实际情况进行配置(出于性能考虑,除规则外,建议保持默认)。

3.1. 检控扫描目录配置

  • SCAN_DIR_CONFIG 定义扫描目录,以及递归深度
  • SCAN_DIR_FILTER 定义过滤目录,按照前缀匹配过滤扫描白名单

3.2. 引擎配置

  • CLAMAV_MAX_FILESIZE 定义扫描的文件的最大文件大小,跳过大文件

3.3. 可选 : 1. Clamav Database配置

通过如下 url 获取默认 database(解压密码为 clamav_default_passwd):

wget http://lf26-elkeid.bytetos.com/obj/elkeid-download/18249e0cbe7c6aca231f047cb31d753fa4604434fcb79f484ea477f6009303c3/archive_db_default_20220817.zip

#wget http://lf3-elkeid.bytetos.com/obj/elkeid-download/18249e0cbe7c6aca231f047cb31d753fa4604434fcb79f484ea477f6009303c3/archive_db_default_20220817.zip

#wget http://lf6-elkeid.bytetos.com/obj/elkeid-download/18249e0cbe7c6aca231f047cb31d753fa4604434fcb79f484ea477f6009303c3/archive_db_default_20220817.zip

#wget http://lf9-elkeid.bytetos.com/obj/elkeid-download/18249e0cbe7c6aca231f047cb31d753fa4604434fcb79f484ea477f6009303c3/archive_db_default_20220817.zip

clamav scanner 插件会在启动时,从 TMP_PATH/archive_db_default_XXXX.zip 使用默认密码 ARCHIVE_DB_PWD, 加载本地database 。同时, 从 ARCHIVE_DB_VERSION_FILE 文件中检查 ARCHIVE_DB_VERSION ,并且检查密码 ARCHIVE_DB_PWD.

更过逻辑细节参考代码 src/model/engine/updater.rs

3.4. 可选 : 2. database 中的规则

默认的 database 包括裁剪过的 clamav 官方数据库,以及开源的 yara 规则。

root@hostname$ ls
main.ldb  main.ndb  online_XXXXX.yar

在 debian9+ 或 ubuntu18+的 linux 中,可以通过如下方式,从最新的 clamav 官方数据库中生成裁剪过的 clamav 数据库。

root@hostname$ bash ./db_updater.sh

更多细节参考 clamav 官方文档

  • Notice
    • There are currently a few limitations on using YARA rules within ClamAV

4. 插件任务

scanner 插件任务支持

  • 指定目录扫描
  • 全盘扫描
  • 快速扫描

详情参考Elkeid 前端使用文档

5. 上报数据类型

数据类型6000-扫描任务结束字段含义
1status扫描任务结束状态: failed 失败,succeed 成功
2msg日志
数据类型6001-检出静态文件字段含义
1types检出文件类型
2class恶意样本分类
3name恶意样本家族
4exe检出文件目录
5static_file检出文件目录
6exe_size检出文件 大小
7exe_hash检出文件 32kb xxhash
8md5_hash检出文件 md5 hash
9create_at检出文件 创建时间
10modify_at检出文件 最后修改时间
11hit_datayara命中数据(如果命中了Yara才会有此字段)
12token任务 token(全盘扫描任务才会有此字段)
数据类型6002-检出进程exe字段含义
1typesexe文件类型
2class恶意样本分类
3name恶意样本家族
4exeexe文件目录
5static_fileexe文件目录
6exe_sizeexe文件 大小
7exe_hashexe文件 32kb xxhash
8md5_hashexe文件 md5 hash
9create_atexe文件 创建时间
10modify_atexe文件 最后修改时间
11hit_datayara命中数据(如果命中了Yara才会有此字段)
12pid进程 id
13ppid父进程 id
14pgid进程组 id
15tgid线程组 id
16argv执行命令行
17comm进程名
18sessionidproc/pid/stat/sessionid
19uid用户ID
20pns进程 namespace
21token任务 token(全盘扫描任务才会有此字段)
数据类型6003-目录扫描任务字段含义
1types检出文件类型
2class恶意样本分类
3name恶意样本家族
4exe检出文件目录
5static_file检出文件目录
6exe_size检出文件 大小
7exe_hash检出文件 32kb xxhash
8md5_hash检出文件 md5 hash
9create_at检出文件 创建时间
10modify_at检出文件 最后修改时间
11hit_datayara命中数据(如果命中了Yara才会有此字段)
12token任务 token
13error错误信息 (任务出错时不为空)

6. 已知问题

  • Creation time / birth_time is not available for some filesystems
error: "creation time is not available for the filesystem
  • Centos7 default compile tool-chains didn't work, high version of tool-chains needed.

7. License

Scanner plugin is distributed under the Apache-2.0 license.