CodeQL에서 사용자 지정 쿼리 사용
기본적으로 파이프라인 설정에 지정된 사용자 지정 구성 파일이 없는 경우 CodeQL은 쿼리 팩을 security-extended
실행하여 코드를 분석합니다. 사용자 지정 CodeQL 쿼리를 활용하여 고유한 쿼리를 작성하여 특정 취약성 및 오류를 찾을 수 있습니다. 또한 CodeQL의 기본 분석을 수정하기 위해 사용자 지정 구성 파일을 만들어야 합니다.
기존 사용자 지정 쿼리를 찾거나 사용자 고유의 사용자 지정 쿼리를 제공하려면 CodeQL에 기여를 참조하세요.
사용자 지정 쿼리를 사용하여 분석
사용자 지정 쿼리로 시작하는 가장 빠른 방법은 쿼리를 작성하고 로컬 Azure DevOps 리포지토리에 저장하는 것입니다. 필요에 따라 사용자 지정 쿼리의 세부 정보를 사용자 지정할 수 있지만 적어도 규칙 ID가 있어야 합니다. 고유한 CodeQL 쿼리를 작성하는 방법에 대한 자세한 내용은 CodeQL 쿼리 작성을 참조 하세요. 여러 쿼리를 쿼리 도구 모음에 함께 묶거나 다른 사용자가 게시한 팩을 활용할 수도 있습니다. 자세한 내용은 CodeQL 팩 게시 및 사용을 참조 하세요.
사용자 지정 구성 파일 사용
사용자 지정 구성 파일은 코드에 대해 CodeQL을 분석하는 동안 실행되는 쿼리를 관리하는 방법입니다. 실행할 더 많은 쿼리 또는 쿼리 팩을 지정하고 기본 CodeQL 쿼리를 변경하거나 사용하지 않도록 설정할 수 있습니다.
포함하려는 특정 쿼리를 포함하려면 리포지토리에서 쿼리 파일(.ql)의 위치에 대한 이름과 경로를 사용하여 쿼리를 지정합니다.
포함하려는 특정 팩을 포함하려면 팩 이름을 지정합니다. 구성 파일에서 실행할 CodeQL 쿼리 팩 수를 지정할 수 있습니다.
다음 단계는 파일을 만드는 것입니다 qlpack.yml
. 이 파일은 CodeQL 팩 및 해당 팩에 대한 정보를 선언합니다. 동일한 디렉터리(또는 하위 디렉터리)에 있는 qlpack.yml
모든 *.ql
파일은 패키지의 일부로 간주됩니다.
팁
구성 파일의 packs
필터는 GitHub에서 호스트되는 리포지토리에서 팩 다운로드를 지원하지만 queries
필터는 지원하지 않습니다.
GitHub에서 팩이 프라이빗인 경우 태스크를 통해 AdvancedSecurity-Codeql-Init@1
환경 변수 및 변수 이름으로 GitHub 액세스 토큰을 제공해야 합니다. 토큰 read:packages
범위는 다음과 같습니다GITHUB_TOKEN
.
다음은 예제 구성 파일입니다.
name: "Run custom queries"
# When using a configuration file, if you do not disable default queries,
# then the default CodeQL queries in the `code-scanning` query suite will also execute upon analysis.
disable-default-queries: true
# To reference local queries saved to your repository,
# the path must start with `./` followed by the path to the custom query or queries.
# Names for each query referenced is optional.
queries:
- name: Use security-extended query suite
uses: security-extended
- name: Use local custom query (single query)
uses: ./customQueries/javascript/FindTestFunctions.ql
- name: Use local custom query (directory of queries)
uses: ./customQueries/javascript/MemoryLeakQueries
packs:
- mygithuborg/mypackname
paths:
- src
paths-ignore:
- src/node_modules
- '**/*.test.js'
query-filters:
- include:
kind: problem
- include:
precision: medium
- exclude:
id:
- js/angular/disabling-sce
- js/angular/insecure-url-allowlist
팁
구성 파일 사양은 태스크에 대한 AdvancedSecurity-Codeql-Init@1
파이프라인 수준 구성보다 무시하고 우선합니다.
includepaths
/ ignorepaths
은 무시되거나 있는 경우 paths
/paths-ignore
다음의 paths
/paths-ignore
값으로 덮어씁니다.
querysuite
는 구성 파일 또는 queries
packs
구성 파일에 지정된 값으로 덮어씁니다.
사용자 지정 쿼리를 사용하는 경우 사용자 지정 쿼리의 디렉터리에 배치된 예제 qlpack.yml
는 다음과 같습니다.
version: 1.0.1
dependencies:
codeql/javascript-all: "*"
codeql/javascript-queries: "*"
변수에는 이 dependencies
패키지의 모든 종속성과 호환되는 버전 범위가 포함됩니다. 각 종속성은 CodeQL 라이브러리 팩으로 참조 scope/name
됩니다. 정의할 dependencies
때 쿼리에서 분석할 qlpack.yml
수 있는 언어를 결정하는 핵심 언어 팩(예: JavaScript, C#, Ruby 등) 중 하나에 따라 달라집니다.
구성 파일을 사용하여 보다 구체적인 조언 및 구성 옵션은 코드 검색 또는 qlpack.yml
설치를 위한 고급 설정 사용자 지정을 참조하세요. CodeQL 팩 구조를 참조하세요.
구성 파일이 있으면 CodeQL 분석을 실행하는 파이프라인을 사용자 지정하여 새 파일을 활용해야 합니다. 구성 파일을 가리키는 샘플 파이프라인은 다음과 같습니다.
trigger: none
pool:
vmImage: windows-latest
# You can either specify your CodeQL variables in a variable block...
variables:
# `configfilepath` must be an absolute file path relative to the repository root
advancedsecurity.codeql.configfilepath: '$(build.sourcesDirectory)/.pipelines/steps/configfile.yml'
# Or you can specify variables as variables for the task. You do not need both definitions.
steps:
- task: AdvancedSecurity-Codeql-Init@1
displayName: Initialize CodeQL
inputs:
languages: 'javascript'
loglevel: '2'
configfilepath: '$(build.sourcesDirectory)/.pipelines/steps/configfile.yml'
# If downloading a pack from GitHub,
# you must include a GitHub access token with the scope of `read:packages`.
env:
GITHUB_TOKEN: $(githubtoken)
- task: AdvancedSecurity-Codeql-Analyze@1
displayName: Perform CodeQL Analysis