一、Joern简介
Joern 是一个用于静态代码分析的命令行工具。Joern 可以帮助您找到并纠正具有数十万行代码的程序中的安全漏洞,包括难以通过模糊测试检测到的缺陷。它包括以代码属性图为中心的交互式外壳和自动化功能。
二、环境配置
1.jdk配置
注意jdk版本要是jdk11,jdk8亲测不可用。jdk配置可参考Linux下安装JDK11 - 小毅同学 - 博客园
2.Joern安装
方法一:安装预构建的二进制文件
要安装最新版本,只需执行以下命令
mkdir joern && cd joern
curl -L "https://github.com/joernio/joern/releases/latest/download/joern-install.sh" -o joern-install.sh
chmod u+x joern-install.sh
./joern-install.sh --interactive
并按照安装程序说明进行操作。默认情况下,joern 将安装在~/bin/joern
.
可以按如下方式测试你的安装:
有可能出现No java installation was detected的错误,输入source /etc/profile解决。进行joern测试时,一定要到joern的路径测试,我的joern路径是/home/lh/bin/joern/joern-cli
方法二:从源代码构建
要从源代码构建 joern-cli,需要安装 Scala 构建工具 (sbt),可以按照sbt - Download上的说明进行安装。任何 1.x 版本的 sbt 都可以。
git clone https://github.com/joernio/joern.git
cd joern
sbt stage
这会在当前目录中构建 joern-cli。要构建zip 文件 ( joern-cli.zip
),运行sbt createDistribution命令
.
三、实例
在开始 Joern 之前,您应该准备好一个可供分析的程序。克隆以下 git 存储库,其中包含一个名为的简单程序X42:
git clone https://github.com/ShiftLeftSecurity/x42.git
其中c程序是这样的:
// X42.c
#include
#include
#include
int main(int argc, char *argv[]) {
if (argc > 1 && strcmp(argv[1], "42") == 0) {
fprintf(stderr, "It depends!\n");
exit(42);
}
printf("What is the meaning of life?\n");
exit(0);
}
启动joern
导入代码,inputPath是c程序所在的路径;projectName是项目名,可以随便命名,方便以后打开该项目。
importCode(inputPath="/home/lh/桌面/x42/c",projectName="x42-c")
得到以下结果,证明环境配置没有问题。
查看含有“stderr”的代码:
cpg.call.argument.code("stderr").toList
生成代码的抽象语法树AST,需要有graphviz的支持,输入以下指令安装graphviz。
sudo apt-get install graphviz
sudo apt-get install graphviz graphviz-doc
安装成功后,需要以下指令,生成AST。
cpg.method("main").plotDotAst
生成的AST如下图所示,图片太宽,只放了部分。
先输入close指令关闭项目,再输入exit,再输入y,保存修改并退出joern。
其他常用的操作,可以参考Joern的手册,Quickstart | Joern Documentation