0%

joern使用(1)

joern是一个很好用的静态代码审计工具,有些类似codeQL,joern的查询语句就是scala语言的语法(但其实不涉及多少scala语法,joern封装的还行,可以直接上手),加上了一个cpg对象,让我们可以访问cpg图.

cpg全称code property grpah,整合了AST,CFG,PDG,CDG,DDG五种数据结构,使其可以更加方便便利和进行污点分析帮助漏洞的挖掘.

与codeQL相比,joern的优势在于无需编译,而利用的cpg使其有更多的维度可以对代码审计.

安装

  • 要求JDK11以上,最好是11.

安装官方文档给了两种方式,但是我推荐第三种方法.

我尝试了一下预编译的二进制方法,发现在国内网络环境下,其实并不是很友好,因为它默认是从github拉的包,所以其实如果你不挂代理,体验会很差,我是挂着终端代理去安装的,但其实有更好的解决方案.

因为上面这个问题,我用docker封装了一个镜像,就有了第三种方法.

1. 预编译的二进制

1
2
3
4
mkdir joern && cd joern # optional
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

然后测试你的安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cd <path_to_joern>/joern/joern-cli
./joern
Compiling (synthetic)/ammonite/predef/interpBridge.sc
Compiling (synthetic)/ammonite/predef/replBridge.sc
Compiling (synthetic)/ammonite/predef/DefaultPredef.sc
Compiling /home/tmp/shiftleft/joern/(console)

██╗ ██████╗ ███████╗██████╗ ███╗ ██╗
██║██╔═══██╗██╔════╝██╔══██╗████╗ ██║
██║██║ ██║█████╗ ██████╔╝██╔██╗ ██║
██ ██║██║ ██║██╔══╝ ██╔══██╗██║╚██╗██║
╚█████╔╝╚██████╔╝███████╗██║ ██║██║ ╚████║
╚════╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═══╝

joern>

2. 从源码构建

​ 省略,有需求可以看底部的官网链接

3. 使用docker构建(推荐)

​ 我去找了一下dockerhub,没找到官方上传的镜像,但其实官方是有一个dockerfile的,我后来在官方的仓库找到了,但是官方的Dockerfile构建方式是从sbt对scala源码进行构建…

Fine,我还是自己打一个吧.

https://github.com/LycsHub/joern-docker

可以用上面这个仓库中的dockerfile,clone仓库后cd到对应路径使用build -t joern .来构建这个镜像.

镜像已经根据国内网络特殊情况进行优化,但是使用之前还是阅读一下README,我默认去除了joern自带的扫描规则库,因为他也是从github直接拉取,这部分逻辑写在源码中,不太容易进行github加速.

如果要下载可以详细参考dockerfile中的注释.

JVM调节性能

这里介绍的是全局的限制,可以在你的shell启动脚本,比如~/.bashrc或者~/.zshrc中添加一个环境变量来限制其最大内存占用

export _JAVA_OPTS="-Xmx4G"这样就是限制4个G

参考

https://docs.joern.io/installation