tanguychenier/purgo
GitHub: tanguychenier/purgo
Purgo是一款基于Rust的CDR引擎,用于重建不信任文件为安全版本。
Stars: 0 | Forks: 0
# purgo
`purgo` 通过仅从其合法部分**重建**它,而不是通过**扫描**它来中和跨越信任边界的文件(例如USB闪存驱动器、上传、二极管的“脏”面)。这就是CDR方法:不寻找坏的部分,只保留好的部分。
设计目标:
- **可审计的** —— 对于解密者来说,这是开源的全部意义:你只信任你能阅读的东西。
- **安全的** —— Rust,禁止整个工作区使用`unsafe`(`unsafe_code = "forbid"`)。
- **可扩展的** —— 一个格式 = 一个适配器,添加时无需触及其他部分(开放/封闭)。
## 状态(v0.1)
一个工作的垂直切片。**核心**(领域、应用程序和纯解析核心`purgo-filters`)没有第三方依赖(仅`std`/`no_std`);**适配器**依赖于小型、专注的库(`lopdf`、`zip`、`quick-xml`、`ed25519-dalek`、`rand_core`,以及`sandbox`功能背后的`wasmtime`),HTTP服务在`axum`/`tokio`上:
- 基于签名的格式检测(`MagicFormatDetector`);
- **JPEG** 解密:删除`APPn`段(EXIF/XMP/ICC/缩略图)和`COM`注释,可选地保留JFIF,逐字复制图像数据,并截断`EOI`之后的任何尾随字节;
- **PNG** 解密:保留关键块的白名单,删除辅助块(`tEXt`、`zTXt`、`iTXt`、`eXIf`等);
- **PDF** 解密(`lopdf`):删除自动操作(`/OpenAction`、`/AA`),JavaScript(`/JavaScript`、`/JS`,`/Names/JavaScript`树),通过`/A`/`/Next`访问的危险操作(无论是否为内联或间接对象)和嵌入文件(`/Names/EmbeddedFiles`、`/EF`、`/EmbeddedFile`、`/Filespec`);页面和文本重新序列化;拒绝超过64级的内联嵌套;
- **OOXML** 解密(`.docx`/`.xlsx`/`.pptx`,`zip` + `quick-xml`):重建ZIP存档,删除VBA宏项目(`word/`、`xl/`或`ppt/`下的`vbaProject.bin`,**按名称**删除,即使没有`.rels`引用它们),嵌入OLE对象(`embeddings/`、`oleObject*`)以及在`.rels`部分的外部(`TargetMode="External"`)和`oleObject`/`vbaProject`关系;检测器识别携带`[Content_Types].xml`的ZIP作为OOXML;显式拒绝裸(非OOXML)ZIP(`ZipDisarmer`,拒绝失败);
- **WASM隔离**(`WasmtimeSandbox`,在`sandbox`功能背后):解析在无导入的WebAssembly模块中运行(没有WASI,没有宿主函数→没有文件系统/网络/时钟访问),每个调用由燃料(CPU)预算和`StoreLimits`(内存)限制;纯逻辑通过`purgo-filters`(PNG今天)与进程内路径共享,因此沙盒输出的结果与进程内输出相同;
- **输出签名**(`Ed25519Signer`,纯Rust `ed25519-dalek`):`DisarmAndSign`用例解密,然后对干净的字节进行签名,并公开公钥;使用该密钥可以验证分离的Ed25519签名;
- `purgo` CLI生成干净的文件加上JSON审计报告,并可选地生成分离的签名`
标签:Axum, GitHub Advanced Security, HTTP 服务, JavaScript 移除, JPEG 安全, OOXML 安全, PDF 安全, PNG 安全, Rust 安全, Rust 编程, Tokio, Web 服务, XML 处理, 内容 disarm & reconstruction, 内容解包与重建, 可视化界面, 安全加固, 宏病毒防护, 嵌入式文件处理, 文件安全, 文件格式处理, 无安全漏洞, 格式检测, 通知系统