Skip to main content

์ฟผ๋ฆฌ ๋„์›€๋ง ํŒŒ์ผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ

CodeQL CLI์„(๋ฅผ) ์‚ฌ์šฉํ•˜์—ฌ ์ฟผ๋ฆฌ ๋„์›€๋ง ํŒŒ์ผ์„ Markdown์œผ๋กœ ๋ฏธ๋ฆฌ ๋ณด๊ณ  ์œ ํšจํ•œ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

  • GitHub Code Security๋ฅผ ์ง€์›ํ•˜๋Š” ์กฐ์ง ์†Œ์œ  ๋ฆฌํฌ์ง€ํ† ๋ฆฌ

์ฟผ๋ฆฌ ๋„์›€๋ง ํŒŒ์ผ ํ…Œ์ŠคํŠธ ์•Œ์•„๋ณด๊ธฐ

์ฟผ๋ฆฌ ๋„์›€๋ง ํŒŒ์ผ์„ Markdown์œผ๋กœ ๋ Œ๋”๋งํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•จ์œผ๋กœ์จ CodeQL ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์—…๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ์ฝ”๋“œ ์Šค์บ”์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์œ ํšจํ•œ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

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

CodeQL CLI์—๋Š” ์ฟผ๋ฆฌ ๋„์›€๋ง์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์ฝ˜ํ…์ธ ๋ฅผ Markdown์œผ๋กœ ๋ Œ๋”๋งํ•˜์—ฌ IDE์˜ ์ฝ˜ํ…์ธ ๋ฅผ ์‰ฝ๊ฒŒ ๋ฏธ๋ฆฌ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ CodeQL ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์—…๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์™€ ๊ณต์œ ํ•˜๊ธฐ ์ „์— ์ฟผ๋ฆฌ ๋„์›€๋ง ํŒŒ์ผ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. CodeQL CLI 2.7.1๋ถ€ํ„ฐ CodeQL ๋ถ„์„ ์ค‘์— ์ƒ์„ฑ๋œ SARIF ํŒŒ์ผ์— Markdown ๋ Œ๋”๋ง๋œ ์ฟผ๋ฆฌ ๋„์›€๋ง์„ ํฌํ•จํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ ์ฝ”๋“œ ์Šค์บ” UI์— ์ฟผ๋ฆฌ ๋„์›€๋ง์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ CodeQL ์ฟผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ ๋ถ„์„์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

ํ•„์ˆ˜ ์กฐ๊ฑด

  • ์ฟผ๋ฆฌ ๋„์›€๋ง(.qhelp) ํŒŒ์ผ์—๋Š” ๋™์ผํ•œ ๊ธฐ๋ณธ ์ด๋ฆ„์„ ๊ฐ€์ง„ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ์ฟผ๋ฆฌ(.ql) ํŒŒ์ผ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฟผ๋ฆฌ ๋„์›€๋ง ํŒŒ์ผ์€ ์ฟผ๋ฆฌ ๋„์›€๋ง ์„ค๋ช…์„œ์˜ ํ‘œ์ค€ ๊ตฌ์กฐ์™€ ์Šคํƒ€์ผ์„ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ CodeQL ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ์ฟผ๋ฆฌ ๋„์›€๋ง ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

codeql generate query-help ์‹คํ–‰

๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ์ฟผ๋ฆฌ ๋„์›€๋ง ํŒŒ์ผ์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

codeql generate query-help <qhelp|query|dir|suite> --format=<format> [--output=<dir|file>]

์ด ๋ช…๋ น์˜ ๊ฒฝ์šฐ <qhelp|query|dir|suite>๋Š” .qhelp ํŒŒ์ผ์˜ ๊ฒฝ๋กœ, .ql ํŒŒ์ผ์˜ ๊ฒฝ๋กœ, ์ฟผ๋ฆฌ ๋ฐ ์ฟผ๋ฆฌ ๋„์›€๋ง ํŒŒ์ผ์ด ํฌํ•จ๋œ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ๊ฒฝ๋กœ ๋˜๋Š” ์ฟผ๋ฆฌ ์ง‘ํ•ฉ์˜ ๊ฒฝ๋กœ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ ๋„์›€๋ง์ด ๋ Œ๋”๋ง๋˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•˜๋Š” --format ์˜ต์…˜์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ์ฟผ๋ฆฌ ๋„์›€๋ง์„ Markdown์œผ๋กœ ๋ Œ๋”๋งํ•˜๋„๋ก markdown์„(๋ฅผ) ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด --output ์˜ต์…˜์€ ๋ Œ๋”๋ง๋œ ์ฟผ๋ฆฌ ๋„์›€๋ง์„ ์ €์žฅํ•  ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  • .qhelp ํŒŒ์ผ์ด ํฌํ•จ๋œ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋˜๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ .qhelp ํŒŒ์ผ์„ ์ •์˜ํ•˜๋Š” ์ฟผ๋ฆฌ ๋ชจ์Œ์˜ ๊ฒฝ์šฐ --output ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ถœ๋ ฅ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋‚ด์˜ ํŒŒ์ผ ์ด๋ฆ„์€ .qhelp ํŒŒ์ผ ์ด๋ฆ„์—์„œ ํŒŒ์ƒ๋ฉ๋‹ˆ๋‹ค.
  • ๋‹จ์ผ .qhelp ๋˜๋Š” .ql ํŒŒ์ผ์˜ ๊ฒฝ์šฐ --output ์˜ต์…˜์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ถœ๋ ฅ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ Œ๋”๋ง๋œ ์ฟผ๋ฆฌ ๋„์›€๋ง์ด stdout์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ ๋„์›€๋ง ํŒŒ์ผ์„ ํ…Œ์ŠคํŠธํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์˜ต์…˜์— ๋Œ€ํ•œ ์ „์ฒด ๋‚ด์šฉ์€ generate query-help์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

๊ฒฐ๊ณผ

๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด CodeQL์ด(๊ฐ€) ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” .ql ํŒŒ์ผ์ด ์žˆ๋Š” ๊ฐ .qhelp ํŒŒ์ผ์˜ ๋ Œ๋”๋ง์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ํŒŒ์ผ์˜ ๊ฒฝ์šฐ --output ์˜ต์…˜์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ Œ๋”๋ง๋œ ์ฝ˜ํ…์ธ ๊ฐ€ stdout์— ์ธ์‡„๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ์‚ฌ์šฉ ์‚ฌ๋ก€์˜ ๊ฒฝ์šฐ ๋ Œ๋”๋ง๋œ ์ฝ˜ํ…์ธ ๋Š” ์ง€์ •๋œ ์ถœ๋ ฅ ๊ฒฝ๋กœ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ CodeQL CLI์€(๋Š”) ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค.

  • ์ฟผ๋ฆฌ ๋„์›€๋ง ์š”์†Œ์— ๋Œ€ํ•œ ์œ ํšจํ•˜์ง€ ์•Š์€ ์„ค๋ช…์ด ์žˆ๊ณ  ์ฟผ๋ฆฌ ๋„์›€๋ง์ด ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋ช…๋ น์— ์ง€์ •๋œ .qhelp ํŒŒ์ผ์˜ ๊ธฐ๋ณธ ์ด๋ฆ„์ด ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” .ql ํŒŒ์ผ๊ณผ ๋™์ผํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋ช…๋ น์— ์ง€์ •๋œ .ql ํŒŒ์ผ์˜ ๊ธฐ๋ณธ ์ด๋ฆ„์ด ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” .qhelp ํŒŒ์ผ๊ณผ ๋™์ผํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ช…๋ น์— --warnings ์˜ต์…˜์„ ํฌํ•จํ•˜์—ฌ CodeQL CLI์— ์ด๋Ÿฌํ•œ ๊ฒฝ๊ณ ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ generate query-help์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์ถ”๊ฐ€ ์ฐธ๊ณ  ์ž๋ฃŒ