本PDF文档由CPG和Joern的专家共同撰写,深入探讨了软件安全分析工具Joern的使用方法及其在代码审计中的应用案例。
CPG(代码属性图)是一种用于存储和分析代码结构及依赖关系的图数据库。Joern 是一款开源静态分析工具,以 CPG 作为核心组件。
### CPG
CPG 包括三个主要部分:图计算、图存储和图查询语句。
- 图计算负责高效地完成数据库查询、数据处理与动态调整;
- 图存储确保数据持久化;
- 图查询语句提供操作和查询机制,类似于 SQL 语言的功能。
### Joern
Joern 是一个开源的静态分析工具,它解析 Java 字节码并生成 CPG。通过命令行接口使用 Joern 可以进行代码分析、查询与评估。
AST(抽象语法树)、CFG(控制流图)和 PDG(程序依赖图)是构成 CPG 的基础元素,它们包含源代码的结构特征及语义信息。
### CPG 组件
CPG 主要由节点、边和键值对组成:
- 节点代表代码中的实体如变量或函数;
- 边表示这些实体之间的关系例如调用或赋值操作;
- 键值对则存储关于节点的属性,比如类型信息。
### Joern 的安装与使用
Joern 安装简便,只需下载并解压二进制文件。在使用时需设置 JDK 环境变量,并通过命令行接口进行 Java 代码分析、生成 CPG 并执行查询操作。
### 实践应用
CPG 和 Joern 在多个领域都有广泛应用:
- 静态代码分析,如检测代码质量问题;
- 软件测试和安全漏洞扫描等。
Joern 特别适用于Java项目的静态分析任务。