CodeQL是一款代码审计分析平台,它将Python、Go、JavaScript等语言解析生成语法树并存储到数据库中,之后通过QL语法进行代码审查与筛选。你可以按照自己的想法写代码审计检测脚本,甚至进行代码漏洞 OR 恶意检测。
下载CodeQL二进制文件
wget https://github.com/github/codeql-cli-binaries/releases/download/v2.2.4/codeql-linux64.zip
下载语言库依赖
wget https://github.com/github/codeql/archive/v1.24.0.zip
假设codeql_project/存在一个test.py文件,内容如下:
print("hello world")
下面根据project生成codeql数据库。
codeql database create pytest2 --source-root=codeql_project/ --language=python
指定--source-root为要进行检测的项目目录,指定language为python,生成的db名称为pytest2,之后他会生成一个db,其中包含codeql_project/test/中所有python文件的语法树解析。
在语言依赖库中创建QL查询脚本,以查询String为hello world为例。
# cat engine/codeql/python/ql/src/test.ql import python from StringValue s where s.getText() = "hello world" select s.toString()
# codeql query run -d pytest2 codeql-1.24.0/python/ql/src/test.ql | col0 | +---------------+ | 'hello world' |
指定test.ql查询语句便可查到所有的字符串为hello world的项。
后面就是QL语法的学习以及codeql的实现原理的分析。