Skip to main content

CodeQL ํŒฉ ๋งŒ๋“ค๊ธฐ ๋ฐ ์ž‘์—…

CodeQL ํŒฉ์„ ์‚ฌ์šฉํ•˜์—ฌ CodeQL ์ฟผ๋ฆฌ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ , ๊ณต์œ ํ•˜๊ณ , ์‚ฌ์šฉํ•˜๊ณ , ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

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

CodeQL ํŒฉ ๋ฐ CodeQL CLI ์ •๋ณด

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

CodeQL ํŒฉ์—๋Š” ์ฟผ๋ฆฌ ํŒฉ๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒฉ, ๋ชจ๋ธ ํŒฉ์˜ ์„ธ ์œ ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ฟผ๋ฆฌ ํŒฉ์€ ์‹คํ–‰๋˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ ํŒฉ์ด ๊ฒŒ์‹œ๋˜๋ฉด ๋ฒˆ๋“ค์— ์ฟผ๋ฆฌ ์›๋ณธ ์™ธ์—๋„ ๊ฐ ์ฟผ๋ฆฌ์˜ ๋ชจ๋“  ์ „์ด์  ์ข…์†์„ฑ๊ณผ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ ํ‘œํ˜„์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํŒฉ์—์„œ ์ฟผ๋ฆฌ๋ฅผ ์ผ๊ด€๋˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒฉ์€ ์ฟผ๋ฆฌ ํŒฉ(๋˜๋Š” ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒฉ)์—์„œ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ ์ฟผ๋ฆฌ ์ž์ฒด๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋ณ„๋„๋กœ ์ปดํŒŒ์ผ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ๋ชจ๋ธ ํŒฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›๋˜์ง€ ์•Š๋Š” ์ข…์†์„ฑ์„ ํฌํ•จํ•˜๋„๋ก code scanning ๋ถ„์„์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ ํŒฉ์€ ํ˜„์žฌ ๊ณต๊ฐœ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ๋ฒ„์ „์ด๋ฉฐ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต๊ฐœ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ์—์„œ ๋ชจ๋ธ ํŒฉ์€ C/C++, C#, Java/Kotlin, Python, Ruby ๋ถ„์„์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์ฒด ๋ชจ๋ธ ํŒฉ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ CodeQL ๋ชจ๋ธ ํŒฉ ์ƒ์„ฑ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

CodeQL CLI์˜ pack ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ CodeQL ํŒฉ์„ ๋งŒ๋“ค๊ณ , ํŒฉ์— ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ณ , ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. pack ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ CodeQL ํŒฉ์„ ๊ฒŒ์‹œํ•˜๊ณ  ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ CodeQL ํŒฉ ๊ฒŒ์‹œ ๋ฐ ์‚ฌ์šฉ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

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

์ง€์›๋˜๋Š” ๋ชจ๋“  ์–ธ์–ด์— ๋Œ€ํ•œ ํ‘œ์ค€ CodeQL ํŒจํ‚ค์ง€๊ฐ€ Container registry์— ๊ฒŒ์‹œ๋ฉ๋‹ˆ๋‹ค. CodeQL ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—๋Š” ์ง€์›๋˜๋Š” ๋ชจ๋“  ์–ธ์–ด์— ๋Œ€ํ•œ ํ‘œ์ค€ CodeQL ํŒฉ์— ๋Œ€ํ•œ ์›๋ณธ ํŒŒ์ผ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. CodeQL CLI ๋ฒˆ๋“ค์— ํฌํ•จ๋˜์–ด ์žˆ์ง€๋งŒ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ํ•ต์‹ฌ ์ฟผ๋ฆฌ ํŒฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • codeql/cpp-queries
  • codeql/csharp-queries
  • codeql/go-queries
  • codeql/java-queries
  • codeql/javascript-queries
  • codeql/python-queries
  • codeql/ruby-queries

CodeQL ํŒฉ ๊ตฌ์กฐ

CodeQL ํŒฉ์€ ๋ฃจํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ์— qlpack.yml์ด๋ผ๋Š” ํŒŒ์ผ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. qlpack.yml ํŒŒ์ผ์—์„œ name: ํ•„๋“œ์—๋Š” <scope>/<pack>์˜ ํ˜•์‹์„ ๋”ฐ๋ฅด๋Š” ๊ฐ’์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ <scope>๋Š” ํŒฉ์ด ๊ฒŒ์‹œ๋  GitHub ์กฐ์ง ๋˜๋Š” ์‚ฌ์šฉ์ž ๊ณ„์ •์ด๋ฉฐ <pack>์€ ํŒฉ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ CodeQL ํ…Œ์ŠคํŠธ๊ฐ€ ์žˆ๋Š” ์ฟผ๋ฆฌ ํŒฉ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒฉ์—๋Š” ํŒฉ์˜ ํ™•์ธ๋œ ์ข…์†์„ฑ์ด ๋“ค์–ด์žˆ๋Š” codeql-pack.lock.yml ํŒŒ์ผ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ codeql pack install ๋ช…๋ น์„ ํ˜ธ์ถœํ•˜๋Š” ๋™์•ˆ ์ƒ์„ฑ๋˜๋ฉฐ, ์ง์ ‘ ํŽธ์ง‘ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๋ฒ„์ „ ์ œ์–ด ์‹œ์Šคํ…œ์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŒฉ ๋‚ด์˜ ๋‹ค๋ฅธ ํŒŒ์ผ ๋ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ฟผ๋ฆฌ๋Š” ํŠน์ • ๋ฒ”์ฃผ์— ๋Œ€ํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  • ํŠน์ • ์ œํ’ˆ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•œ ์ฟผ๋ฆฌ๋Š” ์ž์ฒด ์ตœ์ƒ์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

CodeQL ํŒฉ ๋งŒ๋“ค๊ธฐ

ํ”„๋กœ์ ํŠธ์˜ ์ฒดํฌ ์•„์›ƒ ๋ฃจํŠธ์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ CodeQL ํŒฉ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

codeql pack init <scope>/<pack>

๋‹ค์Œ ํ•ญ๋ชฉ์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • <scope>: ๊ฒŒ์‹œํ•  GitHub ์กฐ์ง ๋˜๋Š” ์‚ฌ์šฉ์ž ๊ณ„์ •์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

  • <pack>: ๋งŒ๋“ค ํŒฉ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

codeql pack init ๋ช…๋ น์€ CodeQL ํŒฉ์— ๋Œ€ํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ ๋ฐ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ๋ช…๋ น์€ ์ฟผ๋ฆฌ ํŒฉ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒฉ์„ ๋งŒ๋“ค๋ ค๋ฉด library:true ์†์„ฑ์„ ํฌํ•จํ•˜์—ฌ ํŒŒ์ผ์„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒฉ์œผ๋กœ ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•˜๋„๋ก qlpack.yml ํŒŒ์ผ์„ ํŽธ์ง‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

CodeQL ๋ชจ๋ธ ํŒฉ ๋งŒ๋“ค๊ธฐ

์ฐธ๊ณ  ํ•ญ๋ชฉ

CodeQL ๋ชจ๋ธ ํŒฉ์€ ํ˜„์žฌ ๊ณต๊ฐœ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์ƒํƒœ์ด๋ฉฐ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ ํŒฉ์€ C/C++, C#, Java/Kotlin, Python, Ruby ๋ถ„์„์„ ์œ„ํ•ด ์ง€์›๋ฉ๋‹ˆ๋‹ค.

Visual Studio Code์— ๋Œ€ํ•œ CodeQL ํ™•์žฅ์˜ CodeQL ๋ชจ๋ธ ํŽธ์ง‘๊ธฐ์—์„œ C#, Java/Kotlin, Python, Ruby์— ๋Œ€ํ•œ ๋ชจ๋ธ๋ง ์ข…์†์„ฑ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

code scanning ๋ถ„์„์„ ํ™•์žฅํ•˜์—ฌ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›๋˜์ง€ ์•Š๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ธ์‹ํ•˜๋Š” ๋ฐ ๋ชจ๋ธ ํŒฉ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ ํŒฉ์€ YAML๋กœ ๊ตฌํ˜„๋˜๋Š” ๋ฐ์ดํ„ฐ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜๊ณ  ์ƒˆ ์ข…์†์„ฑ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ ํŒฉ์„ ์ง€์ •ํ•˜๋ฉด ํ•ด๋‹น ํŒฉ์˜ ๋ฐ์ดํ„ฐ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์ด code scanning ๋ถ„์„์— ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. CodeQL ๋ชจ๋ธ ํŒฉ ๋ฐ ๋ฐ์ดํ„ฐ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋Š” CodeQL ๋ชจ๋ธ ํŽธ์ง‘๊ธฐ ์‚ฌ์šฉ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

๋ชจ๋ธ ํŒฉ์€ ํŒŒ์ผ์—์„œ qlpack.yml ํŒŒ์ผ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์„ฑ์„ ๊ฐ€์ง„ CodeQL ํŒฉ์ž…๋‹ˆ๋‹ค.

  • library: true๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์ข…์†์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค.
  • extensionTargets๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ํŒŒ์ผ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” dataExtensions ์†์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋ธ ํŒฉ์€ ์ง€์ •๋œ ๋ฒ„์ „ ๋ฒ”์œ„์— ์†ํ•˜๋Š” ๊ฒฝ์šฐ extensionTargets์— ๋ช…๋ช…๋œ ๊ฐ ์ฟผ๋ฆฌ ํŒฉ์— ์ง€์ •๋œ ๋ฐ์ดํ„ฐ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์‹œ:

name: my-repo/my-java-model-pack
version: 1.2.3
extensionTargets:
  codeql/java-all: ~1.2.3
  codeql/util: ~4.5.6
dataExtensions:
  - models/**/*.yml

์ด ์˜ˆ์ œ์—์„œ ๋ชจ๋ธ ํŒฉ์€ models/**/์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์„ 1.2.3๋ถ€ํ„ฐ 1.3.0๊นŒ์ง€์˜ ๋ฒ„์ „์ธ codeql/java-all ์ฟผ๋ฆฌ ํŒฉ ๋ฐ 4.5.6๋ถ€ํ„ฐ 4.6.0๊นŒ์ง€์˜ ๋ฒ„์ „์ธ codeql/util ์ฟผ๋ฆฌ ํŒฉ์— ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ npm ์„ค๋ช…์„œ์˜ ์˜๋ฏธ ์ฒด๊ณ„ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‚ฌ์šฉ ๋ฐ ์˜๋ฏธ ์ฒด๊ณ„ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‚ฌ์–‘์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ชจ๋ธ ํŒฉ์„ ๋งŒ๋“  ํ›„์—๋Š” ๋‹ค๋ฅธ CodeQL ํŒฉ๊ณผ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ CodeQL ํŒฉ ๊ฒŒ์‹œ ๋ฐ ์‚ฌ์šฉ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”. ๊ทธ๋Ÿฐ ๋‹น๋ฏ€ code scanning ๋ถ„์„์— ๊ฒŒ์‹œ๋œ ๋ชจ๋ธ ํŒฉ์„ --model-packs ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ CodeQL ํŒฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ„์„ ์‚ฌ์šฉ์ž ์ง€์ •์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

CodeQL ํŒฉ์— ์ข…์†์„ฑ ์ถ”๊ฐ€ ๋ฐ ์„ค์น˜

์ฐธ๊ณ  ํ•ญ๋ชฉ

์ด๋Š” CodeQL ์ฟผ๋ฆฌ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒฉ์—๋งŒ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

codeql pack add ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ CodeQL ํŒฉ์— ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ”์œ„, ์ด๋ฆ„ ๋ฐ ํ˜ธํ™˜๋˜๋Š” ๋ฒ„์ „ ๋ฒ”์œ„(์„ ํƒ ์‚ฌํ•ญ)๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

codeql pack add <scope>/<name>@x.x.x <scope>/<other-name>

๋ฒ„์ „ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์ตœ์‹  ๋ฒ„์ „์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์š”์ฒญ๋œ ๋ฒ”์œ„๋ฅผ ์ถฉ์กฑํ•˜๋Š” ์ตœ์‹  ๋ฒ„์ „์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

์ด ๋ช…๋ น์€ ์š”์ฒญ๋œ ์ข…์†์„ฑ์œผ๋กœ qlpack.yml ํŒŒ์ผ์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ํŒจํ‚ค์ง€ ์บ์‹œ์— ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ ํŒŒ์ผ์˜ ์„œ์‹์„ ๋‹ค์‹œ ์ง€์ •ํ•˜๊ณ  ๋ชจ๋“  ์ฃผ์„์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

qlpack.yml ํŒŒ์ผ์„ ์ˆ˜๋™์œผ๋กœ ํŽธ์ง‘ํ•˜์—ฌ ์ข…์†์„ฑ์„ ํฌํ•จํ•˜๊ณ  ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ข…์†์„ฑ์„ ์„ค์น˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

codeql pack install

์ด ๋ช…๋ น์€ ๋ชจ๋“  ์ข…์†์„ฑ์„ ๋กœ์ปฌ ๋””์Šคํฌ์˜ ๊ณต์œ  ์บ์‹œ์— ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  ํ•ญ๋ชฉ

  • codeql pack add ๋ฐ codeql pack install ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด codeql-pack.lock.yml ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ ๋ฒ„์ „ ๊ด€๋ฆฌ์— ์ฒดํฌ์ธ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. codeql-pack.lock.yml ํŒŒ์ผ์—๋Š” ํŒฉ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ •ํ™•ํ•œ ๋ฒ„์ „ ๋ฒˆํ˜ธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ codeql-pack.lock.yml ํŒŒ์ผ ์ •๋ณด๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
  • ๊ธฐ๋ณธ์ ์œผ๋กœ codeql pack install์€ GitHub.com์˜ Container registry์—์„œ ์ข…์†์„ฑ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. qlconfig.yml ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด GitHub Enterprise Server Container registry์—์„œ ์ข…์†์„ฑ์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub Enterprise Server ์„ค๋ช…์„œ์˜ CodeQL ํŒฉ ๊ฒŒ์‹œ ๋ฐ ์‚ฌ์šฉ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

๋‹ค์šด๋กœ๋“œํ•œ CodeQL ํŒฉ ์‚ฌ์šฉ์ž ์ง€์ •

ํŒฉ์˜ ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ์‹คํ—˜ํ•˜๋Š” ๊ถŒ์žฅ ๋ฐฉ๋ฒ•์€ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋ณต์ œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์›๋ณธ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ  Container registry์—์„œ ๋‹ค์šด๋กœ๋“œํ•œ ํŒฉ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ˆ˜์ •์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ํŒฉ์€ ๋‹ค์šด๋กœ๋“œ ํ›„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž ์ง€์ •ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๋‚˜์ค‘์— ํ•ด๋‹น ํ˜•์‹์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ˜ํ…์ธ ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ํŒฉ์„ ๋‹ค์šด๋กœ๋“œํ•œ ํ›„ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  • ์ˆ˜์ •ํ•˜์ง€ ์•Š์€ ํŒฉ์˜ ๊ฒฐ๊ณผ์™€ ํ˜ผ๋™ํ•˜์ง€ ์•Š๋„๋ก ํŒฉ _์ด๋ฆ„_์„ qlpack.yml๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

  • ์••์ถ•์„ ํ‘ผ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ์—์„œ ์ด๋ฆ„์ด *.qlx์ธ ๋ชจ๋“  ํŒŒ์ผ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŒŒ์ผ์—๋Š” ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ ๋ฒ„์ „์˜ ์ฟผ๋ฆฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๊ฒฝ์šฐ์— ๋”ฐ๋ผ CodeQL์€ ์ˆ˜์ •ํ•œ QL ์›๋ณธ์„ ๊ธฐ๋ณธ ์„ค์ •์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.