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條款和條件,並將其視為您自己的責任。