1 个不稳定版本
0.1.0 | 2024年7月29日 |
---|
在 操作系统 中排名第130
每月下载量139次
54KB
1K SLoC
memflow-registry
用于存储 memflow 插件组件的 Docker 风格注册服务器。
memflow-registry 项目旨在提供一个集中式解决方案,用于管理 memflow 二进制插件。该服务器简化了 memflow 插件的分发和更新,确保用户可以轻松访问适合其 memflow 版本的插件版本。
官方注册表中的所有插件在 memflowup 或 memflow 下载时都进行了加密签名和验证。
功能
-
组件管理:用户可以下载和探索现有插件。
-
版本控制:注册表维护插件的版本信息,允许用户根据需要访问特定版本。
-
ABI 兼容性:确保为最终用户提供正确的插件版本,最小化兼容性问题。
-
分发简化:简化了在不同环境中安装和更新 memflow 插件的过程。
-
安全性:在上传之前对插件进行加密签名,并由最终用户在客户端进行验证。
入门指南
要开始开发,您只需启动服务器实例
cargo run --release
所有配置都存储在根目录下的 .env
文件中。要自定义设置,将 .env.example
文件复制到 .env
并编辑它。默认的 .env
值是
# enable `info` and higher logs
RUST_LOG=info
# Serve the http api on all interfaces on port 3000
MEMFLOW_ADDR=0.0.0.0:3000
# Store plugin artifacts in `.storage`
MEMFLOW_STORAGE_ROOT=.storage
# Enable file signature verification support in the backend
#MEMFLOW_PUBLIC_KEY_FILE=ec-secp256k1-pub-key.pem
# Enable and set the bearer token which is required to upload and delete artifacts
MEMFLOW_BEARER_TOKEN=token
如果您使用的是默认示例配置,您还必须首先创建 .storage
目录。
如果您想启用并测试文件签名验证,您必须生成用于上传和验证过程中使用的公钥-私钥对。这些密钥必须是 pkcs8 格式的 ecdsa p256k1 密钥。您可以通过以下方式生成密钥对
$ openssl ecparam -name secp256k1 -genkey | openssl pkcs8 -topk8 -nocrypt -out ec-secp256k1-priv-key.pem
$ openssl ec -in ec-secp256k1-priv-key.pem -pubout > ec-secp256k1-pub-key.pem
部署您的实例
官方预构建镜像可在 Docker 仓库 此处 获取。
配置/持久化
可以通过环境变量配置映像。要查看所有可用的变量,请参阅 .env.example 文件。为了开始使用,您很可能会覆盖 MEMFLOW_PUBLIC_KEY_FILE
和 MEMFLOW_BEARER_TOKEN
变量。
映像还配置为将所有工件存储在 /var/lib/memflow-registry/data/mfdata
。为了确保数据库在容器重启后仍然可用,请为该文件夹创建一个卷绑定。
可伸缩性
目前,映像不支持水平扩展。请确保只允许一个实例访问存储卷。
通过 cURL 进行测试
上传插件工件
作为第一步,您可能想要上传一个插件。例如,您可以从 assets
文件夹中上传提供的示例二进制文件之一。
# Generate the file signature:
$ openssl dgst -sha256 -hex -sign ec-secp256k1-priv-key.pem memflow-registry-shared/assets/libmemflow_coredump.aarch64.so
EC-SHA256(memflow-registry-shared/assets/libmemflow_coredump.aarch64.so)= 304402200e45acb16e3f01b6f2f04df06eab1a40f8da90cfaa49a8ad987d013a41c7e647022065ff4ab45e543e5c068e4398c0703cf3142ffa6aee31892672dc6937f624e10a
# Set the file signature:
$ export SIGNATURE="304402200e45acb16e3f01b6f2f04df06eab1a40f8da90cfaa49a8ad987d013a41c7e647022065ff4ab45e543e5c068e4398c0703cf3142ffa6aee31892672dc6937f624e10a"
# Run curl with the appropriate Bearer Token and file signature:
$ curl -H "Authorization: Bearer token" -F 'file=@memflow-registry-shared/assets/libmemflow_coredump.aarch64.so' -F "signature=$SIGNATURE" https://127.0.0.1:3000/files
要为文件夹中的所有二进制文件签名和上传,您可以调用上述函数的所有文件。
$ cd assets
$ for i in *; do curl -F "file=@$i" -F "signature=$(openssl dgst -sha256 -hex -sign ../ec-secp256k1-priv-key.pem $i | cut -d' ' -f2)" https://127.0.0.1:3000/files; done
查询所有可用的插件
$ curl -v https://127.0.0.1:3000/plugins
{
"plugins": [
{
"name": "coredump",
"description": "win32 coredump connector for the memflow physical memory introspection framework"
}
]
}
查找特定的插件变体
$ curl -v https://127.0.0.1:3000/plugins/coredump\?memflow_plugin_version\=1\&file_type\=pe\&architecture\=x86_64
{
"plugins": [
{
"digest": "880e0e255146016e820a5890137599936232ea9bf26053697541f2c579921065",
"signature": "30440220240ee8af828d459358882eabb7dbb0405a03c2f7bedd9504ec32190267ce9b27022057bdcef318eb0616fc030d028d4d6a1a802f4e6b95567e66a290380e2702f78d",
"created_at": "2024-03-22T18:14:53.402258600",
"descriptor": {
"file_type": "pe",
"architecture": "x86_64",
"plugin_version": 1,
"name": "coredump",
"version": "0.2.0",
"description": "win32 coredump connector for the memflow physical memory introspection framework"
}
}
],
"skip": 0
}
所有筛选都是可选的。以下是目前可用的筛选器:
- version - 特定插件的版本,类似于版本标签
- memflow_plugin_version - memflow abi 版本
- file_type - pe、elf 或 mach
- architecture - x86、x86_64、arm 或 arm64
- digest - 插件二进制的 sha256 校验和
- digest_short - 插件二进制的 sha256,但裁剪到 7 位数字
此外,此 API 支持通过提供以下参数进行分页:
- skip - 跳过前
skip
个元素 - limit - 只显示
limit
个项目
所有插件按上传日期排序。因此,特定变体的最新版本总是在列表中第一个。
下载插件
$ curl -v https://127.0.0.1:3000/files/880e0e255146016e820a5890137599936232ea9bf26053697541f2c579921065 --output file.dll
检索特定插件的元数据
$ curl -v https://127.0.0.1:3000/files/880e0e255146016e820a5890137599936232ea9bf26053697541f2c579921065/metadata
{
"digest": "30d5292c0acf87cf7a4ebddfcd108230f864609c882a0f7ca26ecbff4b2f5ee6",
"signature": "3044022030E3E6C64269B29FA2FDE1E62774EAD6EF756C61C31E0A1287C9D55F53951AB302205CEC067CDE046A874701DCA2CD22346E6FD6D86B1ACCCC4CD7FC366E441556F8",
"created_at": "2024-04-06T20:49:56.440891100",
"descriptors": [
{
"plugin_kind": "connector",
"export_name": "MEMFLOW_CONNECTOR_COREDUMP",
"file_type": "elf",
"architecture": "x86_64",
"plugin_version": 1,
"name": "coredump",
"version": "0.2.0",
"description": "win32 coredump connector for the memflow physical memory introspection framework"
}
]
}
删除插件二进制文件
$ curl -v -X DELETE -H "Authorization: Bearer token" https://127.0.0.1:3000/files/880e0e255146016e820a5890137599936232ea9bf26053697541f2c579921065
由于插件二进制文件可以包含多个插件,此调用确保从数据库中删除所有插件变体。
路线图
- 向注册表添加拉取功能,以便最终用户可以更轻松地设置自己的注册表
- 添加对多个签名密钥的支持
- 用于浏览插件数据库的 Web UI
贡献
欢迎为 memflow-registry 服务器做出贡献!如果您想做出贡献,请遵循以下指南
- 将存储库分叉并创建一个新分支以用于您的功能或错误修复。
- 进行更改并确保所有测试通过。
- 提交一个包含您更改的清晰描述的拉取请求。
许可
本项目采用 MIT 许可证 - 请参阅 LICENSE 文件以获取详细信息。
依赖项
~22–37MB
~622K SLoC