Skip to main content

CodeQL ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ ๋ช…๋ น ์˜ต์…˜ ์ง€์ •ํ•˜๊ธฐ

CodeQL ๊ตฌ์„ฑ ํŒŒ์ผ์— ๊ธฐ๋ณธ ๋ช…๋ น ์˜ต์…˜์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

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

CodeQL ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ ๋ช…๋ น ์˜ต์…˜ ์ง€์ • ์•Œ์•„๋ณด๊ธฐ

์‚ฌ์šฉ์ž๋ณ„ ๊ตฌ์„ฑ ํŒŒ์ผ์— ๋ช…๋ น์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ๋˜๋Š” ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์˜ต์…˜์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ CodeQL CLI ๋ช…๋ น ์˜ต์…˜์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ ์ ˆํ•œ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…๋ น์ค„์—์„œ ์ง์ ‘ ์ง€์ •.
  • CodeQL์ด(๊ฐ€) ๋ช…๋ น์ด ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ๊ด€๋ จ ์˜ต์…˜์„ ์Šค์บ”ํ•˜๋Š” ๊ตฌ์„ฑ(๋˜๋Š” config) ํŒŒ์ผ์—์„œ ์ง€์ •.

๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๋ณ€๊ฒฝ๋˜๋Š” ์˜ต์…˜์˜ ๊ฒฝ์šฐ, ๋ช…๋ น์ค„์—์„œ ๊ฐ’์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด CodeQL์— ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฐ€์žฅ ํŽธ๋ฆฌํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. config ํŒŒ์ผ์— ์˜ต์…˜์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์€ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์˜ต์…˜์„ ์ง€์ •ํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์ •๊ธฐ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • CodeQL ํŒฉ์„ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ์— ์ถ”๊ฐ€ํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

CodeQL ๊ตฌ์„ฑ ํŒŒ์ผ ์‚ฌ์šฉํ•˜๊ธฐ

.config/codeql/ ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ํ™ˆ(Linux ๋ฐ macOS) ๋˜๋Š” ์‚ฌ์šฉ์ž ํ”„๋กœํ•„(Windows) ๋””๋ ‰ํ„ฐ๋ฆฌ ์•„๋ž˜์— config ํŒŒ์ผ์„ ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋“ค ๋“ค์–ด $HOME/.config/codeql/config์ž…๋‹ˆ๋‹ค.

์˜ต์…˜์„ ์ง€์ •ํ•˜๋Š” ๊ตฌ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

<command> <subcommand> <option> <value>

๋‘˜ ์ด์ƒ์˜ ๋ช…๋ น์— ๋™์ผํ•œ ์˜ต์…˜์„ ์ ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ด€๋ จ ์žˆ๋Š” ๋ชจ๋“  <subcommand>์— ๋Œ€ํ•œ ์˜ต์…˜์„ ์ง€์ •ํ•˜๋Š” <subcommand>์„(๋ฅผ) ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค.
  • <command> ๋ฐ <subcommand> ๋‘˜ ๋‹ค ์ƒ๋žตํ•˜๊ณ , ๋ชจ๋“  <command> ๋ฐ <subcommand> ์˜ต์…˜๊ณผ ๊ด€๋ จ๋œ ์˜ต์…˜์„ ์ „์ฒด์ ์œผ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  ํ•ญ๋ชฉ

  • config ํŒŒ์ผ์€ ์˜ต์…˜ ํ”Œ๋ž˜๊ทธ์™€ ๊ฐ’ ์‚ฌ์ด์˜ ๊ณต๋ฐฑ๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. CodeQL์€(๋Š”) ์˜ต์…˜ ๊ฐ’์„ ์ง€์ •ํ•˜๋Š” ๋ฐ =์„(๋ฅผ) ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • ๋ช…๋ น์ค„์—์„œ ์˜ต์…˜์„ ์ง€์ •ํ•˜๋ฉด ํ•ด๋‹น ์˜ต์…˜์— ๋Œ€ํ•ด ์ •์˜๋œ config ๊ฐ’์ด ์žฌ์ •์˜๋ฉ๋‹ˆ๋‹ค.
  • <command>, <subcommand>์— ๋Œ€ํ•ด ๋˜๋Š” ์ „์—ญ์ ์œผ๋กœ ๋‘˜ ์ด์ƒ์˜ ์˜ต์…˜์„ ์ง€์ •ํ•˜๋ ค๋ฉด ์˜ต์…˜๋‹น ํ•œ ์ค„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ

  • CSV ํ˜•์‹์œผ๋กœ codeql database analyze์— ์˜ํ•ด ์ƒ์„ฑ๋œ ๋ชจ๋“  ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

    database analyze --format csv
    

    ์—ฌ๊ธฐ์„œ๋Š” database analyze์— ๋™์ผํ•œ --format ์˜ต์…˜์ด ์ „๋‹ฌ๋˜๋Š” ๋™์•ˆ ์‹คํ–‰๋˜๋Š” ํ•˜์œ„ ์ˆ˜์ค€ ๋ช…๋ น์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ช…๋ น ๋ฐ ํ•˜์œ„ ๋ช…๋ น์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • CodeQL ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉํ•  RAM(4096MB) ๋ฐ ์Šค๋ ˆ๋“œ ์ˆ˜(4)๋ฅผ ์ •์˜ํ•˜๋ ค๋ฉด ๋ณ„๋„์˜ ์ค„์—์„œ ๋‹ค์Œ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

    --ram 4096
    --threads 4
    
  • CodeQL์— ๋Œ€ํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ „์—ญ์ ์œผ๋กœ ์ง€์ •ํ•˜์—ฌ CodeQL ํŒฉ(์„ค์น˜ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ํ˜•์ œ๊ฐ€ ์•„๋‹˜)์„ ์Šค์บ”ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    --search-path <path-to-directory>