Skip to main content

์ฟผ๋ฆฌ ์ฐธ์กฐ ํŒŒ์ผ

์ฟผ๋ฆฌ ์ฐธ์กฐ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ์—์„œ ์‹คํ–‰ํ•˜๋ ค๋Š” ์ฟผ๋ฆฌ์˜ ์œ„์น˜๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

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

์ฟผ๋ฆฌ ์ฐธ์กฐ ํŒŒ์ผ ์•Œ์•„๋ณด๊ธฐ

์ฟผ๋ฆฌ ์ฐธ์กฐ ํŒŒ์ผ์€ ํ…Œ์ŠคํŠธํ•  ์ฟผ๋ฆฌ ํ•œ ๊ฐœ์˜ ์œ„์น˜๋ฅผ ์ •์˜ํ•˜๋Š” ํ…์ŠคํŠธ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

test run ํ•˜์œ„ ๋ช…๋ น์— ํ…Œ์ŠคํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์†ํ•˜์ง€ ์•Š๋Š” ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ์ง€์‹œํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ฟผ๋ฆฌ ์ฐธ์กฐ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋กœ ์‹คํ–‰ํ•˜๋ ค๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ฟผ๋ฆฌ ์ฐธ์กฐ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•  ์ฟผ๋ฆฌ์˜ ์œ„์น˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์‹ค์ œ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ๋ฌธ์ œ๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒฝ๊ณ  ๋ฐ ๊ฒฝ๋กœ ์ฟผ๋ฆฌ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ์—ฌ๋Ÿฌ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” ์ฟผ๋ฆฌ์˜ ๋‹ค์–‘ํ•œ ์ธก๋ฉด์— ์ดˆ์ ์„ ๋งž์ถฅ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ๊ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ฟผ๋ฆฌ ์ฐธ์กฐ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•  ์ฟผ๋ฆฌ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  2. ํ…Œ์ŠคํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ง์ ‘ ์ฟผ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ QL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋™์ž‘์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ์ฟผ๋ฆฌ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ž‘์„ฑํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฟผ๋ฆฌ์—๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์กฐ๊ฑด์ž ํ˜ธ์ถœ์ด ๋ช‡ ๊ฐœ๋งŒ ํฌํ•จ๋˜์–ด ์ถœ๋ ฅ์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋„๋ก select ๋ฌธ์— ๋ž˜ํ•‘ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ ์ฐธ์กฐ ํŒŒ์ผ ์ •์˜

๊ฐ ์ฟผ๋ฆฌ ์ฐธ์กฐ ํŒŒ์ผ(.qlref)์€ ํ•ด๋‹น ์ฟผ๋ฆฌ๋ฅผ ์ฐพ์„ ์œ„์น˜๋ฅผ ์ •์˜ํ•˜๋Š” ํ•œ ์ค„์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์œ„์น˜๋Š” ์ฟผ๋ฆฌ๊ฐ€ ํฌํ•จ๋œ CodeQL ํŒฉ์˜ ๋ฃจํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ .qlref์„(๋ฅผ) ํฌํ•จํ•˜๋Š” CodeQL ํŒฉ, ํ…Œ์ŠคํŠธ ํŒฉ์˜ dependencies ๋ธ”๋ก์— ์ง€์ •๋œ CodeQL ํŒฉ, ๋˜๋Š” CodeQL ํŒฉ์˜ ์ „์ด์  ์ข…์†์„ฑ์ž…๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ ๊ฐ„์˜ ํ˜ธํ™˜์„ฑ์„ ๋ณด์žฅํ•˜๋ ค๋ฉด ๋ชจ๋“  ์šด์˜ ์ฒด์ œ์˜ ๊ฒฝ๋กœ์—์„œ ์Šฌ๋ž˜์‹œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ

JavaScript ๊ฒฝ๊ณ  ์ฟผ๋ฆฌ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ์ฟผ๋ฆฌ ์ฐธ์กฐ ํŒŒ์ผ: DeadAngularJSEventListener.qlref

javascript/ql/test์— ์žˆ๋Š” CodeQL ํŒฉ์˜ qlpack.yml ํŒŒ์ผ(https://github.com/github/codeql/blob/main/javascript/ql/test/qlpack.yml)์€ codeql/javascript-queries์„(๋ฅผ) ์ข…์†์„ฑ์œผ๋กœ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฟผ๋ฆฌ ์ฐธ์กฐ ํŒŒ์ผ์€ codeql/javascript-queries CodeQL ํŒฉ์„ ๊ธฐ์ค€์œผ๋กœ ์ฟผ๋ฆฌ์˜ ์œ„์น˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

AngularJS/DeadAngularJSEventListener.ql

๋˜ ๋‹ค๋ฅธ ์˜ˆ๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ์ฟผ๋ฆฌ ํ…Œ์ŠคํŠธ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.