Skip to main content

์ข…๋ฃŒ ์ฝ”๋“œ

์ข…๋ฃŒ ์ฝ”๋“œ๋Š” CodeQL CLI์ด(๊ฐ€) ์‹คํ–‰๋œ ํ›„ ๋ช…๋ น์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

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

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

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

์ข…๋ฃŒ ์ฝ”๋“œ ์ •๋ณด

CodeQL CLI์€(๋Š”) ์ข…๋ฃŒ ์ฝ”๋“œ๋กœ ์‹คํ–‰๋˜๋Š” ๊ฐ ๋ช…๋ น์˜ ์ƒํƒœ๋ฅผ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ข…๋ฃŒ ์ฝ”๋“œ๋Š” ํ›„์† ๋ช…๋ น์ด๋‚˜ CodeQL CLI์— ์˜์กดํ•˜๋Š” ๋‹ค๋ฅธ ๋„๊ตฌ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

0

์„ฑ๊ณต, ์ •์ƒ ์ข…๋ฃŒ.

1

์ด ๋ช…๋ น์œผ๋กœ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์ด "์•„๋‹ˆ์š”"์ธ ๊ฒƒ์„ ์„ฑ๊ณต์ ์œผ๋กœ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ์ข…๋ฃŒ ์ฝ”๋“œ๋Š” ํ…Œ์ŠคํŠธ ์‹คํ–‰, dataset check, ์ฟผ๋ฆฌ ํ˜•์‹,์ถ”์ถœ๊ธฐ ํ™•์ธ ๊ฐ™์€ ๋ช‡ ๊ฐ€์ง€ ๋ช…๋ น์—์„œ๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ด๋Ÿฌํ•œ ๋ช…๋ น์˜ ์„ค๋ช…์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

2

์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

CLI๋Š” stderr์— ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์”๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” codeql ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์ถ”์ถœ๊ธฐ ๋™์ž‘์—์„œ ๋‚ด๋ถ€ ์˜ค๋ฅ˜์™€ ์‚ฌ์šฉ์ž ๊ด€๋ จ ์˜ค๋ฅ˜๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ถ”์ถœ๊ธฐ๊ฐ€ ๋‚ด๋ถ€ ์˜ค๋ฅ˜๋กœ ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

3

์‹œ์ž‘ ๊ด€๋ฆฌ์ž๊ฐ€ CodeQL ์„ค์น˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ ์‹œ์ž‘ ๊ด€๋ฆฌ์ž๊ฐ€ CodeQL CLI์— ๋Œ€ํ•œ Java ์ฝ”๋“œ๋ฅผ ์•„์˜ˆ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” CodeQL ์„ค์น˜์— ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

32

์ถ”์ถœ๊ธฐ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งŒ๋“ค๊ธฐ ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ข…๋ฃŒ์„(๋ฅผ) ์‹คํ–‰ํ•  ๋•Œ ๋ถ„์„ํ•  ์ฝ”๋“œ๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

33

ํ•˜๋‚˜ ์ด์ƒ์˜ ์ฟผ๋ฆฌ ํ‰๊ฐ€ ์‹œ๊ฐ„์ด ์ดˆ๊ณผ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ณ‘๋ ฌ๋กœ ํ‰๊ฐ€๋œ ์ผ๋ถ€ ์ฟผ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ์ดˆ๊ณผ๋˜์ง€ ์•Š์•˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฟผ๋ฆฌ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋Š” ํ‰์†Œ์™€ ๊ฐ™์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

98

ํ‰๊ฐ€๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ์ทจ์†Œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

99

CodeQL CLI์— ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๊ณ  ํ•ด์„œ ๋ชจ๋“  ์ปดํ“จํ„ฐ์˜ ๋ฌผ๋ฆฌ์  RAM์ด ์‚ฌ์šฉ๋œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. --ram ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ œํ•œ์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด JVM์ด ์‹œ์ž‘ ์‹œ ๊ธฐ๋ณธ ์ œํ•œ์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

100

์น˜๋ช…์ ์ธ ๋‚ด๋ถ€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฒ„๊ทธ๋กœ ๊ฐ„์ฃผ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. CLI๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ stderr์— ์•ฝ์–ด ์˜ค๋ฅ˜ ์„ค๋ช…์„ ์”๋‹ˆ๋‹ค. ๋ฒ„๊ทธ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ, --logdir์„(๋ฅผ) ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ ํŒŒ์ผ์„ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ์˜ GitHub์— ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ธฐํƒ€

codeql์„(๋ฅผ) ์‹คํ–‰ํ•˜๋Š” JVM ๋‚ด์—์„œ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ์ž์ฒด์ ์œผ๋กœ ์„ ํƒํ•œ nonzero ์ข…๋ฃŒ ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” CodeQL ์„ค์น˜์— ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ๊ฑฐ๋‚˜ CodeQL ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์— ๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Unix ์‹œ์Šคํ…œ์€ ์ข…๋ฃŒ ์ฝ”๋“œ 137์„ ๋ฐ˜ํ™˜ํ•˜์—ฌ ํ•ด๋‹น ์ปค๋„์ด CodeQL์ด(๊ฐ€) ์‹œ์ž‘๋œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ–ˆ์Œ์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ codeql database analyze ๋‹จ๊ณ„์— ๋Œ€ํ•œ โ€“ram= ํ”Œ๋ž˜๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์›Œํฌํ”Œ๋กœ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.