CodeQL代理是一个旨在自动使用CodeQL的项目。该项目有助于创建数据库并执行CodeQL分析。 CodeQL代理是Docker映像。
Docker的CodeQL代理也是Visual Studio代码的CodeQl代理的基本图像 - Visual Studio Code的扩展名,可简化CodeQl使用并执行代码自动扫描。
CodeQL代理图像以doublevkay/codeql-agent名称在Docker Hub上发布。您可以在不在本地建造的情况下使用它。
Docker的CodeQL代理提供以下关键功能:
通过以下docker命令绑定安装源,结果文件夹,并运行codeql-agent图像。
docker run --rm --name codeql-agent-docker
-v "$PWD:/opt/src"
-v "$PWD/codeql-agent-results:/opt/results"
doublevkay/codeql-agent您还可以指定更多的选项来运行CodeQl代理。有关更多详细信息,请参见支持的选项。
您可以将环境变量设置为使用以下支持的选项:
| 多变的 | 描述 |
|---|---|
LANGUAGE | 价值<language> 。设置项目语言以构建数据库或执行SAST。 <language>必须是: go , java , cpp , csharp , python , javascript , ruby 。 |
USERID | 值<id> 。将结果文件夹的所有者设置为<id> 。 |
GROUPID | 值<group_id> 。将结果文件夹的组所有者设置为<group_id> 。 |
THREADS | 值<number_of_threads> 。使用这许多线程来构建数据库并评估查询。默认为1。您可以通过0在计算机上使用每个核心的一个线程。 |
OVERWRITE_FLAG | 价值--overwrite 。当存在数据库路径而不是空目录时,启用/禁用覆盖数据库。该标志对于强行重建数据库很有用。 |
QS | 值<queries-suite> 。指定在数据库上运行的查询列表。默认值是<language>-security-extended.qls 。有关更多详细信息,请参阅使用CodeQL CLI分析数据库。 |
SAVE_CACHE_FLAG | 值--save-cache 。积极地将中间结果保存到磁盘缓存。如果相似,这可能会加快随后的查询。请注意,使用此选项将大大增加磁盘使用情况和初始评估时间。 |
ACTION | 价值create-database-only 。仅在不执行CodeQL分析的情况下创建CodeQL数据库。 |
COMMAND | 值<command> 。为一种或多种编译语言创建CodeQL数据库时使用的变量,如果所请求的唯一语言是Python和JavaScript,则使用的变量。这指定了调用编译器所需的构建命令。如果您没有设置此变量,则CodeQL将尝试使用内置的自动构建器自动检测构建系统。 |
免责声明: CodeQL代理在运行容器时将这些选项直接转发到命令参数。请把它作为您的安全责任。
docker run --rm --name codeql-agent-docker
-v " $PWD :/opt/src "
-v " $PWD /codeql-agent-results:/opt/results "
doublevkay/codeql-agentdocker run --rm --name codeql-agent-docker
-v " $PWD :/opt/src "
-v " $PWD /codeql-agent-results:/opt/results "
-e " THREADS=0 "
doublevkay/codeql-agentdocker run --rm --name codeql-agent-docker
-v " $PWD :/opt/src "
-v " $PWD /codeql-agent-results:/opt/results "
-e " ACTION=create-database-only "
doublevkay/codeql-agentdocker run --rm --name codeql-agent-docker
-v " $PWD :/opt/src "
-v " $PWD /codeql-agent-results:/opt/results "
-e " LANGUAGE=java "
-e " QS=java-security-and-quality.qls "
doublevkay/codeql-agentdocker run --rm --name codeql-agent-docker
-v " $PWD :/opt/src "
-v " $PWD /codeql-agent-results:/opt/results "
-e " USERID= $( id -u ${USER} ) " -e " GROUPID= $( id -g ${USER} )
doublevkay/codeql-agent默认情况下,我们将JDK 11和Maven 3.6.3用于CodeQL代理图像。我们可以通过安装音量并在CodeQL代理容器中设置Java_home和Maven_Home环境变量来更改Java和Maven的版本。例如:
FROM --platform=amd64 maven:3-jdk-8-slim
RUN mkdir -p /opt/jdk/ /opt/maven/
RUN cp -r $JAVA_HOME/* /opt/jdk/
RUN cp -r $MAVEN_HOME/* /opt/maven/
CMD [ "echo" ] docker buildx build -t codeql-java -f Dockerfile-java .
docker run --rm -v " jdkvol:/opt/jdk " -v " mavenvol:/opt/maven " codeql-javadocker run --rm --name codeql-agent-docker
-v " $PWD :/opt/src "
-v " $PWD /codeql-agent-results:/opt/results "
-v " jdkvol:/opt/jdk "
-v " mavenvol:/opt/maven "
-e " LANGUAGE=java "
-e " JAVA_HOME=/opt/jdk "
-e " MAVEN_HOME=/opt/maven "
-e " COMMAND=mvn clean install "
doublevkay/codeql-agent您可以在Docker Hub上使用CodeQl代理图像,也可以自定义并在本地构建。
# Build codeql-agent docker image locally
cd codeql-agent
docker build -t codeql-agent . CodeQL代理是Docker映像。完成了以下步骤,以实现自动使用CodeQL的目标。
在此步骤中,图像为执行CodeQl的环境准备了环境。它包括:使用Ubuntu基本图像;下载和安装CodeQL捆绑包(其中包含CodeQl CLI和预编译的库查询,以减少CodeQL执行时间);安装必要的软件,例如
java,maven,nodejs,typescript,...以成功创建一个CodeQL数据库。
CodeQL代理使用GitHub/语言学家检测源代码语言。
CodeQL代理运行CodeQL创建数据库命令。
codeql database create --threads= $THREADS --language= $LANGUAGE $COMMAND $DB -s $SRC $OVERWRITE_FLAG分析数据库需要指定查询套件。根据应用程序静态应用程序安全测试(SAST)目标的目标,CodeQL代理使用
<language>-security-extended.qls作为默认查询套件。
CodeQL代理运行CodeQL数据库分析命令。
codeql database analyze --format= $FORMAT --threads= $THREADS $SAVE_CACHE_FLAG --output= $OUTPUT /issues. $FORMAT $DB $QSCodeQL代理将将CodeQL结果从SARIF格式转换为安全报告Schemas(由GitLab提供)。通过映射两种格式的字段来完成此步骤。实现的详细信息在Sarif2Sast脚本中。您可以独立使用此脚本作为解决方法,以解决Gitlab问题118496。
此存储库基于Microsoft/codeql-container和J3SSIE/CODEQL-DOCKER具有更多功能选项。具体来说:
您可以在GitHub存储库上打开问题
总是欢迎捐款!只需创建拉动请求或与我联系
请参阅详细信息
CodeQL代理使用CodeQl CLI作为核心引擎。请遵循GitHub CodeQL条款和条件,并将其视为您自己的责任。