CodeQL Agent는 CodeQL 사용을 자동화하기위한 프로젝트입니다. 이 프로젝트는 데이터베이스를 만들고 CodeQL 분석을 실행하는 데 도움이됩니다. CodeQL 에이전트는 Docker 이미지입니다.
Docker의 CodeQl Agent는 또한 CodeQL 사용법을 단순화하고 코드 스캔을 자동으로 실행하는 Visual Studio Code의 확장자 인 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-agentCodeQL 에이전트를 실행하기 위해 더 많은 옵션을 지정할 수도 있습니다. 자세한 내용은 지원되는 옵션을 참조하십시오.
다음 지원되는 옵션을 사용할 수 있도록 환경 변수를 설정할 수 있습니다.
| 변하기 쉬운 | 설명 |
|---|---|
LANGUAGE | 가치 <language> . 데이터베이스를 구축하거나 SAST를 실행하도록 프로젝트 언어를 설정하십시오. <language> 언어 cpp java go csharp javascript python ruby |
USERID | 가치 <id> . 결과 폴더의 소유자를 <id> 로 설정하십시오. |
GROUPID | 값 <group_id> . 결과 폴더의 그룹 소유자를 <group_id> 로 설정하십시오. |
THREADS | 값 <number_of_threads> . 이 많은 스레드를 사용하여 데이터베이스를 작성하고 쿼리를 평가하십시오. 기본값은 1에서 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기본적으로 CodeQL 에이전트 이미지에는 JDK 11 및 Maven 3.6.3을 사용합니다. 볼륨을 장착하고 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-agentDocker 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 실행 시간을 줄이기 위해 CodeQL CLI 및 사전 컴파일 된 라이브러리 쿼리가 포함되어 있음);
java,maven,nodejs,typescript와 같은 필요한 소프트웨어 설치 ... CodeQL 데이터베이스를 성공적으로 만듭니다.
CodeQL Agent는 Github/Linguist를 사용하여 소스 코드 언어를 감지합니다.
CodeQL Agent는 CodeQL 작성 데이터베이스 명령을 실행합니다.
codeql database create --threads= $THREADS --language= $LANGUAGE $COMMAND $DB -s $SRC $OVERWRITE_FLAG데이터베이스를 분석하려면 쿼리 제품군을 지정해야합니다. Application의 목표 정적 응용 프로그램 보안 테스트 (SAST) 목표의 목표에 따르면 CodeQL Agent는
<language>-security-extended.qls
CodeQL Agent는 CodeQL 데이터베이스 분석 명령을 실행합니다.
codeql database analyze --format= $FORMAT --threads= $THREADS $SAVE_CACHE_FLAG --output= $OUTPUT /issues. $FORMAT $DB $QSCodeQL Agent는 CodeQL 결과를 SARIF 형식에서 보안 보고서 스키마 (GITLAB에서 제공)로 변환합니다. 이 단계는 두 형식의 필드를 매핑하여 수행됩니다. 구현의 세부 사항은 Sarif2Sast 스크립트에 있습니다. 이 스크립트를 Gitlab 문제 118496을 해결하기 위해 해결 방법으로 독립적으로 사용할 수 있습니다.
이 repo는 Microsoft/CodeQL-Container 및 더 많은 기능 옵션이있는 J3SSIE/CodeQL Docker를 기반으로합니다. 구체적으로:
Github Repo에서 문제를 열 수 있습니다
기부금은 항상 환영합니다! 풀 요청을 만들거나 저에게 연락하십시오
세부 사항을 참조하십시오
CodeQl Agent는 CodeQL CLI를 코어 엔진으로 사용합니다. GitHub CodeQL 이용 약관을 따르고 자신의 책임으로 받아들이십시오.