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 | mkdir joern && cd joern # optional |
然后测试你的安装
1 | cd <path_to_joern>/joern/joern-cli |
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