Skip to main content

CodeQL ์ž‘์—… ์˜์—ญ ์„ค์ •

CodeQL(์œผ)๋กœ ์ž‘์—…ํ•˜๋Š” ๊ฒฝ์šฐ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ์ฟผ๋ฆฌ์— ์•ก์„ธ์Šคํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

CodeQL ์ž‘์—… ์˜์—ญ ์„ค์ •

์ต์Šคํ…์…˜์— github/codeql ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ์ฟผ๋ฆฌ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • codeql-custom-queries-LANGUAGE ํ˜•์‹์œผ๋กœ ๋ช…๋ช…๋œ ์ผ๋ จ์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ํฌํ•จํ•˜๋Š” CodeQL ์‹œ์ž‘ ์ž‘์—… ์˜์—ญ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์–ธ์–ด์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ์ง€์ • ์ฟผ๋ฆฌ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์ œ ์ฟผ๋ฆฌ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๊ถŒ์žฅ๋œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

  • CodeQL์— ๋Œ€ํ•œ ๊ธฐ์กด ์ž‘์—… ์˜์—ญ์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ณ ๊ธ‰ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.

  • CodeQL CLI ์‚ฌ์šฉ์ž๋Š” ์ถ”์ถœ๋œ CodeQL CLI ๋ณด๊ด€ ํŒŒ์ผ์ด ํฌํ•จ๋œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ  ํ•ญ๋ชฉ

CodeQL ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋Š” ์‹œ์ž‘ ์ž‘์—… ์˜์—ญ์— ํ•˜์œ„ ๋ชจ๋“ˆ๋กœ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. git submodule update --remote๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •๊ธฐ์ ์œผ๋กœ ํ•˜์œ„ ๋ชจ๋“ˆ์„ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๊ณ  ์ตœ์‹  ๋ฒ„์ „์˜ VS Code ์ต์Šคํ…์…˜ ๋ฐ CodeQL CLI๊ณผ(์™€) ํ˜ธํ™˜๋˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. vscode-codeql-starter ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ปดํ“จํ„ฐ์— ๋ณต์ œํ•ฉ๋‹ˆ๋‹ค. git clone --recursive๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ณต์ œ ํ›„ git submodule update --init --remote๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜์œ„ ๋ชจ๋“ˆ์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  2. VS Code์—์„œ ํŒŒ์ผ์„ ํด๋ฆญํ•œ ํ›„ ํŒŒ์ผ์—์„œ ์ž‘์—… ์˜์—ญ ์—ด๊ธฐ... ๋ฅผ ํด๋ฆญํ•˜์—ฌ ์ž‘์—… ์˜์—ญ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ์ฒดํฌ ์•„์›ƒ์—์„œ vscode-codeql-starter.code-workspace ํŒŒ์ผ์„ ์—ฝ๋‹ˆ๋‹ค.

์˜ต์…˜ 2: CodeQL์— ๋Œ€ํ•œ ๊ธฐ์กด ์ž‘์—… ์˜์—ญ ์—…๋ฐ์ดํŠธ(๊ณ ๊ธ‰)

  1. VS Code์—์„œ ํŒŒ์ผ์„ ์„ ํƒํ•œ ๋‹ค์Œ ์ž‘์—… ์˜์—ญ์— ํด๋” ์ถ”๊ฐ€... ๋ฅผ ์„ ํƒํ•˜๊ณ  CodeQL ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๋กœ์ปฌ ์ฒดํฌ ์•„์›ƒ์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

  2. ์ƒˆ ํด๋” ๋˜๋Š” ์ž‘์—… ์˜์—ญ์— ํด๋” ์ถ”๊ฐ€... ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ง€์ • ์ฟผ๋ฆฌ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ €์žฅํ•  ๋Œ€์ƒ ์–ธ์–ด๋‹น ํ•˜๋‚˜์˜ ์ƒˆ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  3. ๊ฐ ๋Œ€์ƒ ์–ธ์–ด ๋””๋ ‰ํ„ฐ๋ฆฌ์— qlpack.yml ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค(github/codeql์˜ main ๋ถ„๊ธฐ์— ์ด๋ฏธ ์ด๋Ÿฌํ•œ ํŒŒ์ผ์ด ์žˆ์Œ). ์ด๋ฅผ ํ†ตํ•ด CodeQL CLI์— ํ•ด๋‹น ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ๋Œ€์ƒ ์–ธ์–ด์™€ ํ•ด๋‹น ์ข…์†์„ฑ์ด ๋ฌด์—‡์ธ์ง€ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. CodeQL์€(๋Š”) ์—ด๋ ค ์žˆ๋Š” ๋ชจ๋“  ์ž‘์—… ์˜์—ญ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋˜๋Š” ์‚ฌ์šฉ์ž์˜ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ์—์„œ ์ข…์†์„ฑ์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด my-custom-cpp-pack์ด๋ผ๋Š” ์‚ฌ์šฉ์ž ์ง€์ • CodeQL ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ C++์šฉ CodeQL ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ข…์†๋˜๋„๋ก ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์ฝ˜ํ…์ธ ๊ฐ€ ํฌํ•จ๋œ qlpack.yml ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    name: my-custom-cpp-pack
    version: 0.0.0
    libraryPathDependencies: codeql/cpp-all
    

    qlpack.yml ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ CodeQL ํŒฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ„์„ ์‚ฌ์šฉ์ž ์ง€์ •์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์˜ต์…˜ 3: ์ถ”์ถœ๋œ CodeQL CLI ๋ณด๊ด€ ํŒŒ์ผ์ด ํฌํ•จ๋œ ๋””๋ ‰ํ„ฐ๋ฆฌ ์—ด๊ธฐ

์ฐธ๊ณ  ํ•ญ๋ชฉ

์ด ์˜ต์…˜์˜ ๊ฒฝ์šฐ CodeQL CLI๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ CodeQL CLI ์„ค์ •ํ•˜๊ธฐ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

VS Code์—์„œ CodeQL CLI .zip ๋ณด๊ด€ ํŒŒ์ผ์„ ์ถ”์ถœํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์—ด์–ด CodeQL ๋””๋ ‰ํ„ฐ๋ฆฌ(์˜ˆ: codeql-home)๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.