Skip to main content

CodeQL CLI ์„ค์ •ํ•˜๊ธฐ

CodeQL CLI์„(๋ฅผ) ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ๋ถ„์„ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋„๊ตฌ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก CLI๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ˆ„๊ฐ€ ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

CodeQL์€(๋Š”) ๋‹ค์Œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์œ ํ˜•์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • GitHub.com์˜ ํผ๋ธ”๋ฆญ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ, GitHub CodeQL ์‚ฌ์šฉ ์•ฝ๊ด€ ์ฐธ์กฐ
  • GitHub Code Security๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •๋œ GitHub Team์˜ ์กฐ์ง ์†Œ์œ  ๋ฆฌํฌ์ง€ํ† ๋ฆฌ

CodeQL CLI ์„ค์ •ํ•˜๊ธฐ

CodeQL ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ๋ถ„์„ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋„๊ตฌ, ์ฟผ๋ฆฌ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก CLI๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

CodeQL CLI์€(๋Š”) ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€ ๋ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ง€์›ํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ์•„๋ž˜ ๋‹จ๊ณ„์— ์„ค๋ช…๋œ ๋Œ€๋กœ ๋น„๊ต์  ๊ฐ„๋‹จํ•œ ์„ค์ •์„ ์ฑ„ํƒํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋ณด์•ˆ ์—ฐ๊ตฌ์— CodeQL CLI์„(๋ฅผ) ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ฟผ๋ฆฌ๋ฅผ ํ…Œ์ŠคํŠธ ๋˜๋Š” ๊ธฐ์—ฌํ•˜๋ ค๋Š” ๊ฒฝ์šฐ, CodeQL CLI์˜ ๊ณ ๊ธ‰ ์„ค์ •์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ CodeQL CLI ๊ณ ๊ธ‰ ์„ค์ •์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

CI ์‹œ์Šคํ…œ์—์„œ CodeQL CLI์„(๋ฅผ) ์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ, CodeQL CLI ๋ฒˆ๋“ค์˜ ์ „์ฒด ์ฝ˜ํ…์ธ ๋ฅผ CodeQL code scanning ๋ถ„์„์„ ์‹คํ–‰ํ•˜๋ ค๋Š” ๋ชจ๋“  CI ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ค‘์•™ ๋‚ด๋ถ€ ์œ„์น˜์—์„œ ๋ฒˆ๋“ค์„ ๋ณต์‚ฌํ•˜๊ณ  ์ถ”์ถœํ•˜๋„๋ก ๊ฐ ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” REST API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ GitHub์—์„œ ์ง์ ‘ ๋ฒˆ๋“ค์„ ๊ฐ€์ ธ์™€ ์ฟผ๋ฆฌ์— ๋Œ€ํ•œ ์ตœ์‹  ๊ฐœ์„  ์‚ฌํ•ญ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ REST API ์„ค๋ช…์„œ์—์„œ ๋ฆด๋ฆฌ์Šค ๋ฐ ๋ฆด๋ฆฌ์Šค ์ž์‚ฐ์— ๋Œ€ํ•œ REST API ์—”๋“œํฌ์ธํŠธ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

Apple Silicon์œผ๋กœ macOS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ(์˜ˆ: Apple M1), Xcode ๋ช…๋ น์ค„ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ ๋ฐ Rosetta 2๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  ํ•ญ๋ชฉ

CodeQL CLI๋Š” (musl ๊ธฐ๋ฐ˜) Alpine Linux์™€ ๊ฐ™์€ ๋น„ glibc Linux ๋ฐฐํฌํŒ๊ณผ ํ˜„์žฌ ํ˜ธํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

1. CodeQL CLI tar ๋ณด๊ด€ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ

CodeQL CLI ๋‹ค์šด๋กœ๋“œ ํŒจํ‚ค์ง€๋Š” ๋„๊ตฌ, ์Šคํฌ๋ฆฝํŠธ ๋ฐ ๋‹ค์–‘ํ•œ CodeQL ๊ด€๋ จ ํŒŒ์ผ์„ ํฌํ•จํ•˜๋Š” tar ๋ณด๊ด€ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. GitHub Enterprise ๋ผ์ด์„ ์Šค๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ, ์ด ๋ณด๊ด€ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜๋ฉด GitHub CodeQL ์ด์šฉ ์•ฝ๊ด€์— ๋™์˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค.

https://github.com/github/codeql-action/releases์—์„œ CodeQL ๋ฒˆ๋“ค์„ ๋‹ค์šด๋กœ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฒˆ๋“ค์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  • CodeQL CLI ์ œํ’ˆ
  • https://github.com/github/codeql์—์„œ ํ˜ธํ™˜๋˜๋Š” ์ฟผ๋ฆฌ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „
  • ๋ฒˆ๋“ค์— ํฌํ•จ๋˜๋Š” ๋ชจ๋“  ์ฟผ๋ฆฌ์˜ ์‚ฌ์ „ ์ปดํŒŒ์ผ ๋ฒ„์ „

ํ•ญ์ƒ CodeQL ๋ฒˆ๋“ค์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฒˆ๋“ค์€ ํ˜ธํ™˜์„ฑ์„ ๋ณด์žฅํ•˜๊ณ  CodeQL CLI ์ฟผ๋ฆฌ๋ฅผ ๋ณ„๋„๋กœ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  CodeQL ์ฟผ๋ฆฌ๋ฅผ ์ฒดํฌ ์•„์›ƒํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋‚˜์€ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ํŠน์ • ํ”Œ๋žซํผ์—์„œ๋งŒ CLI๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ์ ์ ˆํ•œ codeql-bundle-PLATFORM.tar.zst ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” ์ง€์›๋˜๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์— ํ•ด๋‹นํ•˜๋Š” CLI๊ฐ€ ํฌํ•จ๋œ codeql-bundle.tar.zst๋ฅผ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฒˆ๋“ค์˜ tar.gz ๋ณ€ํ˜•๋„ ์žˆ์œผ๋ฉฐ, ํšจ์œจ์„ฑ์ด ๋–จ์–ด์ง€๋Š” gzip ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์••์ถ•๋œ๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๊ณ ๋Š” tar.zst ๋ณ€ํ˜•๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. tar.gz ๋ณ€ํ˜•์„ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ์œ ์ผํ•œ ์ด์œ ๋Š” ํ‘œ์ค€ ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ด์ „ ์••์ถ• ํ•ด์ œ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

2. CodeQL CLI tar ๋ณด๊ด€ ํŒŒ์ผ ์ถ”์ถœ

CodeQL CLI tar ๋ณด๊ด€ ํŒŒ์ผ์„ ์„ ํƒํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.

3. codeql ์‹œ์ž‘

์ถ”์ถœํ•œ ํ›„์—๋Š” codeql ์‹คํ–‰ ํŒŒ์ผ์„ ๋ช‡ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ์‹คํ–‰ํ•˜์—ฌ CodeQL ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • <extraction-root>/codeql/codeql์„(๋ฅผ) ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ <extraction-root>๋Š” CodeQL CLI ํŒจํ‚ค์ง€๋ฅผ ์ถ”์ถœํ•œ ํด๋”์ž…๋‹ˆ๋‹ค.
  • codeql์ฒ˜๋Ÿผ ์‹คํ–‰ ํŒŒ์ผ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก PATH์— <extraction-root>/codeql๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ CodeQL ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. CodeQL CLI ๋ช…๋ น์˜ ์ „์ฒด ๋ชฉ๋ก์€ CodeQL CLI ๋ช…๋ น ์„ค๋ช…์„œ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์ฐธ๊ณ  ํ•ญ๋ชฉ

PATH์— codeql์„ ์ถ”๊ฐ€ํ•œ ๊ฒฝ์šฐ, Visual Studio Code์šฉ CodeQL์—์„œ ์•ก์„ธ์Šคํ•ด ์ฟผ๋ฆฌ๋ฅผ ์ปดํŒŒ์ผํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. CodeQL CLI์— ์•ก์„ธ์Šคํ•˜๋„๋ก VS Code์„(๋ฅผ) ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ CodeQL CLI์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ตฌ์„ฑ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

CodeQL CLI ๊ตฌ์„ฑ ํ…Œ์ŠคํŠธํ•˜๊ธฐ

CodeQL CLI ๋ฒˆ๋“ค์„ ์ถ”์ถœํ•œ ํ›„ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ CLI๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ๋ถ„์„ํ•˜๋„๋ก ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • /<extraction root>/codeql์ด PATH์— ์žˆ๋Š” ๊ฒฝ์šฐ codeql resolve packs์ž…๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด /<extraction root>/codeql/codeql resolve packs์ž…๋‹ˆ๋‹ค.

์„ฑ๊ณตํ–ˆ๋‹ค๋ฉด, ์•„๋ž˜ ์ถ”์ถœ๋œ ๊ฒƒ๊ณผ ๋น„์Šทํ•œ ๋‚ด์šฉ์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

Searching directories specified by `--additional-packs`. All directories have equal priority.
  Searching in:
    No packs were found at this location.
Searching directories specified by `--search-path`. Directories are searched in order.
Searching the root of the CodeQL distribution.
  Searching in:
      <extraction root>
    The following packs were found:
      codeql/java-all@<version>: (library) <extraction root>/qlpacks/codeql/javat-all/<version>/qlpack.yml
      codeql/java-queries@<version>: (query) <extraction root>/qlpacks/codeql/java-queries/<version>/qlpack.yml
      codeql/javascript-all@<version>: (library) <extraction root>/qlpacks/codeql/javascript-all/<version>/qlpack.yml
      codeql/javascript-queries@<version>: (query) <extraction root>/qlpacks/codeql/javascript-queries/<version>/qlpack.yml
      codeql/swift-all@<version>: (library) <extraction root>/qlpacks/codeql/swift-all/<version>/qlpack.yml
      codeql/swift-queries@<version>: (query) <extraction root>/qlpacks/codeql/swift-queries/<version>/qlpack.yml
...

๊ฐ„๋‹จํ•œ ์„ค๋ช…์„ ์œ„ํ•ด ๊ฒฐ๊ณผ๊ฐ€ ์ž˜๋ ธ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ๊ฒฐ๊ณผ๋Š” ๋” ๊ธธ๊ณ  ๋” ์ƒ์„ธํ•ฉ๋‹ˆ๋‹ค.

์ถœ๋ ฅ์— ์˜ˆ์ƒ๋œ ์–ธ์–ด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๊ณ  qlpack ํŒŒ์ผ์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ ์œ„์น˜๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์œ„์น˜๋Š” ์•ž์„œ ์˜ˆ์‹œ์—์„œ <extraction root>(์œผ)๋กœ ํ‘œ์‹œ๋œ ์ถ”์ถœ๋œ CodeQL CLI ๋ฒˆ๋“ค ๋‚ด์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. CodeQL CLI์—์„œ ์˜ˆ์ƒ ์–ธ์–ด์— ๋Œ€ํ•œ qlpack์„ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ CodeQL ๋ฒˆ๋“ค์„ ๋‹ค์šด๋กœ๋“œํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  CodeQL CLI์˜ ๋…๋ฆฝ ์‹คํ–‰ํ˜• ๋ณต์‚ฌ๋ณธ์ด ์•„๋‹Œ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด codeql resolve languages๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด CodeQL CLI ํŒจํ‚ค์ง€์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›๋˜๋Š” ์–ธ์–ด๊ฐ€ ๋‚˜์—ด๋ฉ๋‹ˆ๋‹ค.

ํ•„์š”์— ๋”ฐ๋ผ, ์‹คํ–‰ํ•˜๋ ค๋Š” ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ ์ฟผ๋ฆฌ๊ฐ€ ํฌํ•จ๋œ ์ผ๋ถ€ CodeQL ํŒฉ์„ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ CodeQL ํŒฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ„์„ ์‚ฌ์šฉ์ž ์ง€์ •์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์ด codeql resolve packs ๋ช…๋ น์€ CodeQL CLI์—์„œ ๋ถ„์„์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ์ฟผ๋ฆฌ ํŒฉ์„ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ๋ฌธ์ œ๋ฅผ ์ง„๋‹จํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  ํ•ญ๋ชฉ

์ด codeql resolve packs ๋ช…๋ น์€ CodeQL CLI ๋ฒ„์ „ 2.19.0 ์ด์ƒ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ „ ๋ฒ„์ „์˜ CLI์˜ ๊ฒฝ์šฐ ๋น„์Šทํ•˜์ง€๋งŒ ๋œ ์ž์„ธํ•œ ์ถœ๋ ฅ์„ ์ƒ์„ฑํ•˜๋Š” codeql resolve qlpacks ๋ช…๋ น์„ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„

CodeQL CLI์—์„œ ๋ถ„์„ํ•  ์ฝ”๋“œ๋ฅผ ์ค€๋น„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๋ ค๋ฉด CodeQL ๋ถ„์„์„ ์œ„ํ•œ ์ฝ”๋“œ ์ค€๋น„์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.