SIREN

插件系统

通过插件扩展 SIREN 的能力

插件用于在不修改核心代码的前提下扩展 SIREN 的能力。已安装的插件存放在工作目录下的 plugins/ 目录中,每个插件占一个子目录,包含 manifest.json 清单与可执行文件。

插件类型

插件通过清单中的 type 字段区分为两类,二者的启用开关和调用方式不同:

类型配置开关调用方式
commandplugins.<name>作为独立命令按需调用,输出立即返回
reconrecon.<name>在运行信息收集时自动执行,结果并入 Recon 报告

插件名称规则

插件名称必须为 1–128 个字符,且只能包含字母、数字、短横线(-)和下划线(_)。

管理插件

安装、卸载、更新和启停插件,本地模式与远程模式均支持。

./siren plugins                  # 列出已安装插件(NAME / VERSION / TYPE / ENABLED)
./siren plugins install <name>   # 从插件市场下载并安装,安装后默认启用
./siren plugins uninstall <name> # 卸载插件
./siren plugins update <name>    # 重新下载更新,保留当前启用/禁用状态
./siren plugins toggle <name>    # 启用或禁用插件

远程模式下,每个客户端已安装的插件也会显示在 ls 命令输出的 Plugins 列中。

command 类型插件安装并启用后,可以直接作为命令调用:

./siren <plugin_name> [args]

插件市场

installupdate配置文件中的 plugins.marketplace 地址下载插件。SIREN 会依次获取插件的 manifest.json 清单、与当前平台匹配的入口二进制文件,以及可选的 setup 安装脚本(如有,安装时执行,超时 5 分钟)。

config.yaml
plugins:
  marketplace: https://oss-siren.oss-cn-hongkong.aliyuncs.com/plugins

提示

update 会先卸载再重新安装,并保留插件原有的启用/禁用状态;安装或更新失败时会回滚,不会残留半安装的插件目录。

内置示例插件

SIREN 仓库提供了两个示例插件,可作为开发参考:

插件类型说明调用方式
jdumpcommand导出 Java 进程的堆内存本地 jdump <PID>;远程 jdump <Client ID> <PID>
chkrootkitrecon运行 chkrootkit 检测 Rootkit启用后随 recon 自动执行

插件开发

每个插件目录下需包含一个 manifest.json 清单:

manifest.json
{
  "name": "jdump",
  "version": "1.0.0",
  "type": "command",
  "description": "Dump the Java heap memory",
  "usage": "jdump <Client ID> <PID>",
  "clientUsage": "jdump <pid>",
  "platforms": ["linux_amd64", "linux_arm64"],
  "entrypoint": "jdump",
  "setup": "setup.sh"
}
字段说明
name插件名称,须符合上文的命名规则
version插件版本
typecommandrecon
description插件描述
usage远程模式(服务端 REPL)下的用法提示
clientUsage本地模式(客户端 CLI)下的命令用法
platforms支持的平台列表,如 linux_amd64linux_arm64darwin_arm64
entrypoint入口可执行文件名
setup可选,安装时执行的脚本文件名

安全约束

entrypointsetup 必须是纯文件名,不能包含路径分隔符或 ..。SIREN 在加载与下载前会校验清单,校验不通过的插件会被跳过,以防被篡改的清单触发任意路径写入。

相关内容

On this page