CodeQL学习笔记
啥是CodeQL? Code Query Language CodeQL是Github Security Lab推出的一个基于语义的代码分析引擎,使用CodeQL可以让我们像对待数据一样去查询代码。通过编写查询条件来查找漏洞的所有变体以完全消除这个漏洞,并与他人分享漏洞查询语句 可以称之为基于模板的自动化变异分析 工作流程 将代码创建成数据库 编写QL查询从数据库中查询代码 解释查询结果 工作原理 数据库创建 使用语言相关的extractor从代码中提取抽象语法树(ast)、名称绑定的语义和类型信息,把源代码转化成单关系表示(single relational representation),以CodeQL数据库存储 执行查询 使用CodeQL专门设计的面向对象语言QL来查询此前创建的数据库 查询结果 将查询结果对应到源代码的上下文中去,即通过查询结果的解释找到源码中我们所关心的潜在漏洞 语义分析大概就是在ast中通过source正向找sink或通过sink回溯source,把审计变成路径查找 代码数据库 CodeQL 数据库包含从代码库中提取的可查询数据, 包含代码的完整、分层表示,包括抽象语法树、数据流图和控制流图的表示 每种语言都有自己独特的数据库模式,用于定义创建数据库的关系。该图为提取过程中的初始词汇分析与使用 CodeQL 的实际复杂分析提供了界面 对于每种语言,CodeQL 库定义类,以在数据库表上提供一层抽象 使用CodeQL securitylab.github.com/tools/codeql github security lab提供了一些教学项目以推广CodeQL,还举办有基于CodeQL的夺旗赛 https://securitylab.github.com/ctf/ 更提供了 LGTM ,开箱即用的在线CodeQL环境 这里基于Visual Studio Code搭建离线的CodeQL环境 相关文档 Writing a basic C++ Code QL query Introduction to CodeQL Learning CodeQL 安装CodeQL 安装Visual Studio Code 安装Visual Studio Code的CodeQL插件 按照 CodeQL 工作空间 完成剩下设置 代码数据库的获得 在LGTM....