freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

codeql学习笔记分享1
2024-04-12 12:31:05

1.环境安装

解释一下什么是codeql吧:

CodeQL 是一种强大的静态代码分析工具,由 GitHub 开发。它可以用于发现和修复软件中的安全漏洞、漏洞和代码质量问题。CodeQL 通过将编程语言的语法和语义建模为一种特殊的查询语言,使得用户可以编写自定义查询来分析代码库。它支持多种编程语言,包括 C、C++、C#、Java、JavaScript、Python 等。用户可以使用现有的查询来发现已知的问题,也可以编写自己的查询来查找特定的问题或需求。

CodeQL 的工作原理是首先将代码转换成一种中间表示(IR)也就是我们这里要用到的数据库,然后在这种 IR 上执行查询。这种方法可以让用户不受代码语言的限制,因为查询是在 IR 上执行的,而不是直接在源代码上。这使得用户可以使用相同的查询语言来分析不同编程语言的代码。同时,CodeQL 还提供了丰富的 API 和库,使得用户可以编写更加复杂和高效的查询。

1.环境准备

https://github.com/github/codeql-cli-binaries/releases

1712891436_6618a62cee9121ffd2dab.png!small?1712891437855

解压,设置环境变量


1712891614_6618a6dec3ecf6323033f.png!small?1712891615536

1712891636_6618a6f4d7f6ff70e49eb.png!small?1712891638218

OK,第一步已经完成了。

2.规则库

官方规则库,各种内置的ql脚本,这部分是开源的。里面是各种ql脚本,也就是我们以后要学习的东西地址:

https://github.com/github/codeql(git clone下来,或者下载下来。最好和codeql_cli也就是上面那个放一起)

3.vscode_codeql插件

1712891926_6618a8168f8fb6eeb54c7.png!small?1712891927383

安装这个插件。设置可执行路径:

1712892021_6618a875508cf15a7cc0e.png!small?1712892023811

这里环境已经配置好了。

2.生成数据库

这里以java语言的数据库为示例:

原则要生成数据库的源文件:我这里选择的是java-sec-code 地址:https://github.com/JoyChou93/java-sec-code

因为java-sec-code是通过maven进行依赖管理,需要我们事先安装好maven,codeql识别出是个maven项目之后会自动对项目文件进行编译(用到mvn命令),通过编译得到的文件创建数据库。

安装maven: 默认你已经安装好java的jdk了,没有安装记得安装,并配置好环境变量

下载:https://maven.apache.org/download.cgi1712892389_6618a9e57e64c81d6a36a.png!small?1712892390361

配置环境变量:1712892488_6618aa489c0958bf38f90.png!small?1712892489218

1712892504_6618aa587dff20c3c4180.png!small?1712892505220

1712892533_6618aa7564cd42a188d6e.png!small?1712892534322这就是安装好了。我在这里遇见一个错误。后面在创建数据库的时候,一直创建失败,就是这一部分的原因。这里maven识别到的一定要是jdk下的jre,不能是如图:1712893882_6618afba3aa6b28395842.png!small?1712893882913

1712893963_6618b00b90ce016e8ae16.png!small?1712893964284

注意看区别

创建数据库的命令:

codeql database create java-sce-code-database  --language="java"  --command="mvn clean install --file pom.xml" --source-root=D:\CODEQLALL\java-sec-code-master\

1712894093_6618b08d70ef1bdb68876.png!small?17128940948431712894108_6618b09cb20e97d1d3ba4.png!small?1712894109489

成功。

3.利用利用数据库进行查询:

1712894317_6618b16d16616610c6372.png!small?1712894318019

选择语言选择数据库

1712894298_6618b15a3e345a843b2a3.png!small?1712894299235

打开规则库:1712894361_6618b199387b78b291d86.png!small?1712894362224

file ->open
找到Java的规则库如图:1712894434_6618b1e2249327d69afcd.png!small?1712894434749

你可以在这创建一个.ql的脚本也可以直接用写好的。

我们自己写一个查看(我在src下面写了一个test.ql)

1712895244_6618b50c0a90aad9d5869.png!small?1712895244796

也可以在这个地方查看,会主动识别的1712895974_6618b7e622b6ae92f2760.png!small?1712895974997

我们写了一个查询调用了executeQuery方法的地方:1712896083_6618b8535ec1344a56fb8.png!small?1712896086546

点这两个地方运行。最好我们看一下查询结果:

1712896129_6618b881a05b503f25328.png!small?1712896130318

1712896143_6618b88f7264fc176dd14.png!small?1712896144840

# 漏洞 # web安全 # 网络安全技术 # Java代码审计 # CodeQL
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
  • 0 文章数
  • 0 关注者
文章目录