CPG开源项目对比
https://github.com/ShiftLeftSecurity/codepropertygraph 和 https://github.com/Fraunhofer-AISEC/cpg 对比
1 核心目标
项目 | 主要目标 |
---|---|
ShiftLeft | 提供CPG的规范定义和基础工具链,强调跨语言通用性,作为Joern等分析工具的后端。 |
Fraunhofer | 提供多语言CPG生成库,支持实际代码解析(C/C++、Java等),并集成分析扩展(如数据流、控制流)。 |
2 功能对比
特性 | ShiftLeft | Fraunhofer |
---|---|---|
规范定义 | ✅ 提供详细的CPG协议缓冲区(Proto)规范。 | ❌ 无独立规范,但提供内部节点/边结构的文档。 |
语言支持 | 语言无关(依赖前端如Joern生成CPG)。 | ✅ 直接支持C/C++、Java、Go、Python等。 |
工具链集成 | 生成CPG供其他工具(如Joern)使用。 | ✅ 内置Neo4j导出、命令行工具和API。 |
动态扩展性 | 通过扩展Schema支持自定义分析。 | ✅ 通过Passes机制动态扩展分析逻辑。 |
错误容忍解析 | ❌ 不直接处理源码解析。 | ✅ 使用容错解析器(如Eclipse CDT)。 |
量子计算支持 | ❌ 无 | ✅ 实验性支持OpenQASM和Qiskit(量子编程)。 |
3 技术实现
技术栈 | ShiftLeft | Fraunhofer |
---|---|---|
语言 | Scala(主) | Java/Kotlin(主)+ Python/NodeJS(部分前端) |
依赖管理 | sbt | Gradle |
数据库支持 | Tinkergraph(默认) | Neo4j、Apache Tinkergraph |
协议缓冲区 | ✅ 核心依赖Proto生成跨语言绑定。 | ❌ 未使用Proto,直接操作Java对象模型。 |
4 适用场景
ShiftLeft更适合:
-
需要标准化CPG格式的研究或工具开发。
-
作为其他静态分析工具(如Joern)的底层依赖。
-
关注CPG的理论规范而非具体语言实现。
Fraunhofer更适合:
-
需要直接分析多种语言源码的场景。
-
快速集成到Java/Kotlin项目(如安全分析工具)。
-
需要灵活扩展分析逻辑(如自定义数据流规则)。
5 社区与生态
指标 | ShiftLeft | Fraunhofer |
---|---|---|
维护状态 | 活跃(但侧重规范而非前端)。 | 活跃,持续扩展语言和分析功能。 |
扩展性 | 依赖外部工具链(如Joern)。 | 内置模块化设计(如cpg-language-go)。 |
文档 | 规范文档详细,但实际使用需结合Joern。 | 提供CLI教程、API文档和论文支持。 |
6 总结
-
ShiftLeft是CPG的参考实现和规范,适合底层工具开发者。
-
Fraunhofer是多语言CPG生成器,适合需要开箱即用分析的场景。
-
若需统一规范,优先选ShiftLeft;若需实际代码分析,选Fraunhofer。
-
两者互补性较强:ShiftLeft定义标准,Fraunhofer提供实现。例如,Fraunhofer的CPG可转换为ShiftLeft的Proto格式以实现工具互操作。