​ CodeQL 是开发人员用来自动化安全检查的分析引擎,安全研究人员用来执行变体分析。
在 CodeQL 中,代码被视为数据。安全漏洞、错误和其他错误被建模为可以针对从代码中提取的数据库执行的查询。
您可以运行由 GitHub 研究人员和社区贡献者编写的标准 CodeQL 查询,也可以编写自己的查询以用于自定义分析。查找潜在错误的查询直接在源文件中突出显示结果。

CodeQL 分析包括三个步骤:

  1. 通过创建 CodeQL 数据库准备代码
  2. 针对数据库运行 CodeQL 查询
  3. 解释查询结果

CodeQL支持的语言:

语言 变体 编译器 扩展
C/C++ Clang(和 clang-cl )扩展(最高 Clang 12.0)GNU 扩展(最高 GCC 11.1)Microsoft 扩展(最高 VS 2019)Arm 编译器 5 .cpp, .c++, .cxx, .hpp, .hh, .h++, .hxx, .c, .cc,.h
C# C# 最高 9.0 Microsoft Visual Studio 到 2019 年,.NET 到 4.8,.NET Core 最高 3.1,.NET 5 .sln, .csproj, .cs, .cshtml,.xaml
Golang 上升到 1.16 转到 1.11 或更新版本 .go
Java Java 7 到 16 javac(OpenJDK 和 Oracle JDK),Java 的 Eclipse 编译器 (ECJ) .java
JavaScript ECMAScript 2021 或更低版本 不适用 .js, .jsx, .mjs, .es, .es6, .htm, .html, .xhtm, .xhtml, .vue, .hbs, .ejs, .njk, .json, .yaml, .yml, .raml, .xml [6]
Python 2.7、3.5、3.6、3.7、3.8、3.9 不适用 .py
Ruby 高达 3.0.2 不适用 .rb, .erb, .gemspec,Gemfile
TypeScript 2.6-4.5 标准 TypeScript 编译器 .ts, .tsx

推荐应用方式:

  • 使用1.2官方源代码安装。

  • 结合jenkins在CI中自动安全检测。

  • 利用VSCode和VisualStudio扩展,查看检测并进行更正。

一、安装CodeQL

采用官方源码安装,需要自己打包编译环境,录入Dotnet、NodeJS、Npm等。

本地创建根目录CodeQLHome

mkdir CodeQL
cd CodeQL
mkdir codeql-home
cd codeql-home

1.1 安装CLI

下载地址:https://github.com/github/codeql-cli-binaries/releases

版本:2.7.1

wget https://github.com/github/codeql-cli-binaries/releases/download/v2.7.1/codeql-linux64.zip

1.2 安装查询库

查询库也就是过滤代码的.ql或.qls文件集合

版本:1.29.0

下载地址:https://github.com/github/codeql/tags

其中”lgtm-xxxx"的为仓库,因为源代码管理的非常不好,如果没有找到查询库,直接用源码代替即可。

wget https://github.com/github/codeql/archive/refs/tags/lgtm/v1.29.0.zip

1.3 集成

  • 解压CLI包到CodeQLHome目录下,命名为codeql

    unzip -o codeql-linux64.zip
    
  • 解压查询库包到CodeQLHome目录下,命名为codeql-repo

    unzip -o v1.29.0.zip
    

1.4 配置

更改环境变量,指向到CLI主目录,CodeQLHome/codeql

sudo vim /etc/profile

添加如下内容到文档最后

#Path CodeQL
export PATH=$PATH:/home/username/CodeQL/codeql-home/codeql

保存文件并退出编辑器.

重启应用配置

source  /etc/profile

切换到命令行,运行

codeql version

得到正确输出,配置完成

linux配置参见:https://www.jianshu.com/p/4274e679dec6

二、代码检查

2.1 Javascript检查

环境准备:

安装nodejs、安装nestjs(非必须)、安装npm

1)创建存储库

codeql  database create --language=javascript ./projects-result/test3_db -s ./projects-src/testproject

2)更新配置

codeql database upgrade ./projects-result/test3_db

3)执行查询

codeql database analyze ./projects-result/test3_db --format=sarifv2.1.0 --output=./projects-result/test3_db/issues.sarif javascript-security-and-quality.qls

2.2 Dotnet检查

环境准备:

安装dotnetcore 3.1以及dotnet6运行时。

添加 global.json 到源码根目录,该文件能够解决对.NET 5 6的支持

{"sdk": {"version": "5.0.0","rollForward": "latestMajor"}
}

提升文件夹权限,因为编译时会生成文件。

chmod -R 777 /home/username/CodeQL/projects-src
cd /home/username/CodeQL

1)创建存储库

codeql  database create --language=csharp ./projects-result/test4_db -s ./projects-src/testproject2

2)更新配置

codeql database upgrade ./projects-result/test4_db

3)执行查询

codeql database analyze ./projects-result/test4_db --format=sarifv2.1.0 --output=./projects-result/test4_db/issues.sarif csharp-security-and-quality.qls

三、结果查看

地址:https://sarifweb.azurewebsites.net/

四、CI集成

地址:https://docs.github.com/en/code-security/code-scanning/using-codeql-code-scanning-with-your-existing-ci-system

4.1、jenkins集成

  1. 插件:https://plugins.jenkins.io/codeql/

    推荐jenkins与CodeQL部署在同一台服务器,以便于源码只需要下载一次、同时能够方便的调用CodeQL容器部署的脚本封装,简化操作。

4.2、VSCode集成

  • 搜索并安装扩展codeql

  • 扩展设置

Executable Path->D:/Software/CodeQLHome/codeql/codeql.exe
  • 源码目标库生成

​ 假设本地代码在,D:\Projects\Local\Test\npmRes\abc的TypeScript程序

​ 生成数据库:

codeql database create --language=javascript D:\Projects\Local\CodeQL\RESULT0127\source_db -s D:\Projects\Local\Test\npmRes\abc
  • VSCode指定源码库

进入VSCode的CodeQL左侧最下方小图标,选择“从文件夹中选择”,并设置为当前可用库。

  • 选择工作区

选择D:/Software/CodeQLHome/codeql-repo文件夹

进入"javascript/ql/src/"->任意*.ql文件右键->CodeQL:Run queries
  • 查看右侧结果

CodeQL代码安全扫描工具安装部署相关推荐

  1. kafka-eagle工具安装部署

    kafka-eagle工具安装部署 文章目录 kafka-eagle工具安装部署 1.kafka-eagle概述 2.环境和安装 1.环境要求 2.安装步骤 2.1.下载源码包 2.2.解压 2.3. ...

  2. python代码安全扫描工具

    python代码安全扫描工具:Coverity. Fortify.SecMissile(漏扫,对源代码提供基于语义的搜索和分析能力,实现已知安全漏洞的快速扫描) 转载于:https://www.cnb ...

  3. Windows7之天镜漏洞扫描工具安装

    01 天镜漏洞扫描工具安装 01 安装天镜 02 升级漏洞 03 重启win7, 多次重复升级过程(1次可能没办法成功) 04 成功之后查看版本

  4. php代码 扫描,PHP代码安全扫描工具(AutoPHPCheck)

    PHP代码安全扫描工具(AutoPHPCheck)是一款好用的安全扫描工具,该软件能够帮助用户自动完成检测服务器主要参数.PHP主要参数.PHP安全选项以及服务器性能等功能,当你编辑完一段PHP代码后 ...

  5. sonarQube(代码扫描工具)安装配置

    sonarqube使用介绍@[TOC]sonarqube使用介绍 sonarQube使用介绍 本文不讲解 什么是sonarQube,请自行了解 sonarQube安装 sonarQube分为2个 部分 ...

  6. 代码静态扫描工具sonar介绍

    一.SonarQube整体介绍 SonarQube为静态代码检查工具,采用B/S架构,帮助检查代码缺陷,改善代码质量,提高开发速度,通过插件形式,可以支持Java.C.C++.JavaScripe等等 ...

  7. pmd代码安全扫描工具

    pmd是一款开源的代码扫描工具,这里对pmd做了一些修改,加了安全相关的插件.支持的代码文件类型:java.vue.js.xml 下载链接: https://files.cnblogs.com/fil ...

  8. 代码 安全扫描 Sonar 安装使用

    本文主要说明Sonar的安装方式并附上依赖安装包,本文目标只实现本地搭建测试的Sonar环境,以及本地的测试项目的非定制化扫描 本机测试环境:Win10-X64,.vs2017      依赖包: 1 ...

  9. Ubuntu14.04下Mongodb数据库可视化工具安装部署步骤(图文详解)(博主推荐)

    不多说,直接上干货! 前期博客 Ubuntu14.04下Mongodb(离线安装方式|非apt-get)安装部署步骤(图文详解)(博主推荐) Ubuntu14.04下Mongodb官网安装部署步骤(图 ...

  10. 全局缓存管理工具-安装部署时提供小小的方便

    之所以多此一举做这个工具,只是为了方便来回修改已经安装的程序集.特别是开发期间,节省点部署的时间.(苦闷中...有谁会为这样的东西付8块钱购买吗?练饭钱都不够.苦笑. 只能当作娱乐工具) 下载地址: ...

最新文章

  1. Hibernate映射解析——七种映射关系
  2. oracle11g中用asmlib配置磁盘组,ASM学习笔记_配置ASMLIB磁盘组
  3. python 取值范围的命令_python获取命令行参数的方法
  4. 我的世界中国版服务器存档位置,我的世界中国版如何自己上传本地的mod和存档...
  5. Layui导航、面包屑
  6. 《肖申克的救赎》--[美]斯蒂芬·金
  7. 学计算机是要智商的,到底有没有必要让计算机拥有智商呢?
  8. 四川托普计算机职业学校教务管理系统,四川托普信息技术职业学院教务处
  9. 算术平均、几何平均、调和平均、平方平均和移动平均
  10. 七年切图仔如何面试大厂web前端?(沟通软技能总结) | 掘金技术征文
  11. 数学思维导图学习方法
  12. 数据可视化笔记5 时间数据可视化
  13. 清除WKWebView cookies
  14. MySQL里Wating for Slave workers to free pending events到底在等什么
  15. 坚持与展望——科泰华捷董事长陈榕专访
  16. ESPnet-SE 开源工具介绍
  17. 硬件基础知识(9)---电容容量、尺寸及作用
  18. Python爬虫-专业数据库书名爬取
  19. 哪看计算机的网络密码,如何检查计算机的无线网络密码?两种查看方法
  20. 洛谷P1562 还是N皇后(DFS+状态压缩+位运算)

热门文章

  1. 2021 Java面试真题集锦
  2. 基于python处理问卷数据并进行卡方分析全流程
  3. 【Antd】Pagination中的current和pageSize参数自动同步到url当中
  4. 台式计算机cpu多高,台式机硬件正常温度是多少
  5. c语言写uart协议实时读写,串口Xmodem协议的发送数据 程序
  6. 【数据科学竞赛入门】从往届腾讯广告大赛看如何入坑数据挖掘竞赛
  7. 离线语音控制系统 唤醒词.命令字
  8. 如何阅读源码学习总结
  9. 小米路由器无线网无法连接到服务器,小米路由器桥接后进不了路由器设置
  10. App下载的视频导进电脑中生成.mp4文件的方法