CPG开源项目对比

https://github.com/ShiftLeftSecurity/codepropertygraph 和 https://github.com/Fraunhofer-AISEC/cpg 对比

1 核心目标

项目主要目标
ShiftLeft提供CPG的规范定义和基础工具链,强调跨语言通用性,作为Joern等分析工具的后端。
Fraunhofer提供多语言CPG生成库,支持实际代码解析(C/C++、Java等),并集成分析扩展(如数据流、控制流)。

2 功能对比

特性ShiftLeftFraunhofer
规范定义✅ 提供详细的CPG协议缓冲区(Proto)规范。❌ 无独立规范,但提供内部节点/边结构的文档。
语言支持语言无关(依赖前端如Joern生成CPG)。✅ 直接支持C/C++、Java、Go、Python等。
工具链集成生成CPG供其他工具(如Joern)使用。✅ 内置Neo4j导出、命令行工具和API。
动态扩展性通过扩展Schema支持自定义分析。✅ 通过Passes机制动态扩展分析逻辑。
错误容忍解析❌ 不直接处理源码解析。✅ 使用容错解析器(如Eclipse CDT)。
量子计算支持❌ 无✅ 实验性支持OpenQASM和Qiskit(量子编程)。

3 技术实现

技术栈ShiftLeftFraunhofer
语言Scala(主)Java/Kotlin(主)+ Python/NodeJS(部分前端)
依赖管理sbtGradle
数据库支持Tinkergraph(默认)Neo4j、Apache Tinkergraph
协议缓冲区✅ 核心依赖Proto生成跨语言绑定。❌ 未使用Proto,直接操作Java对象模型。

4 适用场景

ShiftLeft更适合:

  • 需要标准化CPG格式的研究或工具开发。

  • 作为其他静态分析工具(如Joern)的底层依赖。

  • 关注CPG的理论规范而非具体语言实现。

Fraunhofer更适合:

  • 需要直接分析多种语言源码的场景。

  • 快速集成到Java/Kotlin项目(如安全分析工具)。

  • 需要灵活扩展分析逻辑(如自定义数据流规则)。

5 社区与生态

指标ShiftLeftFraunhofer
维护状态活跃(但侧重规范而非前端)。活跃,持续扩展语言和分析功能。
扩展性依赖外部工具链(如Joern)。内置模块化设计(如cpg-language-go)。
文档规范文档详细,但实际使用需结合Joern。提供CLI教程、API文档和论文支持。

6 总结

  • ShiftLeft是CPG的参考实现和规范,适合底层工具开发者。

  • Fraunhofer是多语言CPG生成器,适合需要开箱即用分析的场景。

  • 若需统一规范,优先选ShiftLeft;若需实际代码分析,选Fraunhofer。

  • 两者互补性较强:ShiftLeft定义标准,Fraunhofer提供实现。例如,Fraunhofer的CPG可转换为ShiftLeft的Proto格式以实现工具互操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值