๊ธฐ๋ณธ ์ค์ ๊ตฌ์ฑ ํธ์ง ์ ๋ณด
๊ธฐ๋ณธ ์ค์ ์ ์ฌ์ฉํ์ฌ ์ฝ๋์ ์ด๊ธฐ ๋ถ์์ ์คํํ ํ์๋ ์๊ตฌ ์ฌํญ์ ๋ ์ ์ถฉ์กฑํ๊ธฐ ์ํด ๊ตฌ์ฑ์ ๋ณ๊ฒฝํด์ผ ํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ ์ค์ ์ ๊ธฐ์กด ๊ตฌ์ฑ์ ๋ํด ๋ค์ ์ฌํญ์ ํธ์งํ ์ ์์ต๋๋ค.
- ๊ธฐ๋ณธ ์ค์ ์ด ๋ถ์ํ ์ธ์ด์ ๋๋ค.
- ์ฟผ๋ฆฌ ๋๊ตฌ ๋ชจ์์ ๋ถ์ ์ค์ ์คํ๋ฉ๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ ์ฟผ๋ฆฌ ๋๊ตฌ ๋ชจ์์ ๋ํ ์์ธํ ์ ๋ณด๋ CodeQL ์ฟผ๋ฆฌ ๋๊ตฌ ๋ชจ์์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
- ๋ถ์์ ์ฌ์ฉํ ์ํ ๋ชจ๋ธ(๊ณต๊ฐ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ)์ ๋๋ค. ์ํ ๋ชจ๋ธ์ ์ ํํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ์ผ๋ก ์ฒ๋ฆฌ๋๋ ์ค์ผ๋ ๋ฐ์ดํฐ์ ์๋ณธ์ด ๊ฒฐ์ ๋ฉ๋๋ค. ๊ณต๊ฐ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์ค์ ์ํ ๋ชจ๋ธ์ Java/Kotlin ๋ฐ C# ๋ถ์์ฉ์ผ๋ก๋ง ์ง์ํฉ๋๋ค. ์ํ ๋ชจ๋ธ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๊ธฐ๋ณธ ์ค์ ์ ์ค์ผ๋ ๋ฐ์ดํฐ์ ๋ก์ปฌ ์๋ณธ ํฌํจ์ ์ฐธ์กฐํ์ธ์.
์ฝ๋๋ฒ ์ด์ค๊ฐ CodeQL์ ํฌํจ๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ธ์๋์ง ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ํ๋ ์์ํฌ์ ์์กดํ๋ ๊ฒฝ์ฐ CodeQL ๋ชจ๋ธ ํฉ์ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ ์ค์ ์์ CodeQL ๋ฒ์๋ฅผ ํ์ฅํ ์๋ ์์ต๋๋ค. ์์ธํ ์ ๋ณด๋ ๊ธฐ๋ณธ ์ค์ ์์ CodeQL ๋ชจ๋ธ ํฉ์ ์ฌ์ฉํ์ฌ CodeQL ์ ์ฉ ๋ฒ์ ํ์ฅ์ ์ฐธ์กฐํ์ธ์.
code scanning ๊ตฌ์ฑ์ ๋ค๋ฅธ ์ธก๋ฉด์ ๋ณ๊ฒฝํด์ผ ํ๋ ๊ฒฝ์ฐ ๊ณ ๊ธ ์ค์ ์ ๊ตฌ์ฑํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์ฝ๋ ์ค์บ์ ์ํ ๊ณ ๊ธ ์ค์ ๊ตฌ์ฑ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
๊ธฐ๋ณธ ์ค์ ์ ๊ธฐ์กด ๊ตฌ์ฑ ์ฌ์ฉ์ ์ง์
-
GitHub์์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๊ธฐ๋ณธ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
-
๋ฆฌํฌ์งํ ๋ฆฌ ์ด๋ฆ ์๋์์ ์ค์ ์ ํด๋ฆญํฉ๋๋ค. "์ค์ " ํญ์ด ํ์๋์ง ์์ผ๋ฉด ๋๋กญ๋ค์ด ๋ฉ๋ด๋ฅผ ์ ํํ ๋ค์ ์ค์ ์ ํด๋ฆญํฉ๋๋ค.
-
์ฌ์ด๋๋ฐ์ "Security" ์น์ ์์ Advanced Security ๋ฅผ ํด๋ฆญํฉ๋๋ค.
-
"Code Security" ์น์ ์ "CodeQL analysis" ํ์์ ๋ฅผ ์ ํํ ๋ค์, View CodeQL configuration์ ํด๋ฆญํฉ๋๋ค.
-
"CodeQL default configuration" ์ฐฝ์์ Edit๋ฅผ ํด๋ฆญํฉ๋๋ค.
-
์ ํ์ ์ผ๋ก "์ธ์ด" ์น์ ์์ ๋ถ์์ ์ํด ์ธ์ด๋ฅผ ์ ํํ๊ฑฐ๋ ์ ํ ์ทจ์ํฉ๋๋ค.
-
ํ์์ ๋ฐ๋ผ "Scan settings" ์น์ ์ "Query suite" ํ์์ ์ฝ๋์ ๋ํด ์คํํ ๋ค๋ฅธ ์ฟผ๋ฆฌ ๋๊ตฌ ๋ชจ์์ ์ ํํฉ๋๋ค.
-
ํ์์ ๋ฐ๋ผ ๋ ์ด๋ธ์ด ์ง์ ๋ ์คํ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด "CodeQL default configuration" ๋ชจ๋ฌ ๋ํ ์์์ "Runner type" ์น์ ์์ Standard GitHub runner ๋ฅผ ์ ํํ์ฌ ๋๋กญ๋ค์ด ๋ฉ๋ด๋ฅผ ์ฐ ๋ค์, Labeled runner๋ฅผ ์ ํํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์, "์คํ๊ธฐ ๋ ์ด๋ธ" ์์ ๊ธฐ์กด ์์ฒด ํธ์คํ ๋๋ GitHub ํธ์คํ ์คํ๊ธฐ์ ๋ ์ด๋ธ์ ์ ๋ ฅํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ฝ๋ ์ค์บ์ ์ํ ๊ธฐ๋ณธ ์ค์ ๊ตฌ์ฑ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
-
(๊ณต๊ฐ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ) ํ์์ ๋ฐ๋ผ "๊ฒ์ฌ ์ค์ " ์น์ ์ "์ํ ๋ชจ๋ธ" ํ์์ ์๊ฒฉ ๋ฐ ๋ก์ปฌ ์๋ณธ์ ์ ํํฉ๋๋ค. ์ด ์ต์ ์ ์ง์๋๋ ์ธ์ด(Java/Kotlin ๋ฐ C#)๋ก ์์ฑ๋ ์ฝ๋๊ฐ ์๋ ๋ฆฌํฌ์งํ ๋ฆฌ์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
-
๊ตฌ์ฑ์ ์ ๋ฐ์ดํธํ๊ณ ์ ๊ตฌ์ฑ์ผ๋ก ์ฝ๋์ ์ด๊ธฐ ๋ถ์์ ์คํํ๋ ค๋ฉด ๋ณ๊ฒฝ ๋ด์ฉ ์ ์ฅ์ ํด๋ฆญํฉ๋๋ค. ํฅํ ๋ชจ๋ ๋ถ์์์๋ ์ ๊ตฌ์ฑ์ ์ฌ์ฉํฉ๋๋ค.
๋์ด์ค๊ธฐ ์์ฒญ์ ๋ํ ๊ฒ์ฌ ์คํจ๋ฅผ ์ผ์ผํค๋ ๊ฒฝ๊ณ ์ฌ๊ฐ๋ ์ ์
๋ค์ ์กฐ๊ฑด ์ค ํ๋๊ฐ ์ถฉ์กฑ๋ ๊ฒฝ์ฐ ๊ท์น ์งํฉ์ ์ฌ์ฉํ์ฌ ๋น๊ฒจ๋ฐ๊ธฐ ์์ฒญ์ด ๋ณํฉ๋์ง ์๋๋ก ํ ์ ์์ต๋๋ค.
-
ํ์ ๋๊ตฌ๊ฐ ๊ท์น ์งํฉ์ ์ ์๋ ์ฌ๊ฐ๋์ ๋ํ code scanning ๊ฒฝ๊ณ ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค.
-
ํ์ code scanning ๋๊ตฌ์ ๋ถ์์ด ์์ง ์งํ ์ค์ ๋๋ค.
-
ํ์ code scanning ๋๊ตฌ๊ฐ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ํด ๊ตฌ์ฑ๋์ง ์์์ต๋๋ค.
์์ธํ ๋ด์ฉ์ ์ฝ๋ ๊ฒ์ฌ ๋ณํฉ ๋ณดํธ ์ค์ ์(๋ฅผ) ์ฐธ์กฐํ์ธ์. ๊ท์น ์งํฉ์ ๋ํ ์ผ๋ฐ์ ์ธ ์ ๋ณด๋ ๊ท์น ์ธํธ ์ ๋ณด์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
๊ธฐ๋ณธ ์ค์ ์ ์ค์ผ๋ ๋ฐ์ดํฐ์ ๋ก์ปฌ ์๋ณธ ํฌํจ
์ฐธ๊ณ ํญ๋ชฉ
์ํ ๋ชจ๋ธ์ ํ์ฌ ๊ณต๊ฐ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ๋ฒ์ ์ด๋ฉฐ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ๊ณต๊ฐ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ๋์, ์ํ ๋ชจ๋ธ์ Java/Kotlin ๋ฐ C#์ฉ์ผ๋ก๋ง ์ง์ํฉ๋๋ค.
์ฝ๋๋ฒ ์ด์ค์์ ์๊ฒฉ ๋คํธ์ํฌ ์์ฒญ๋ง ์ค์ผ๋ ๋ฐ์ดํฐ์ ์ ์ฌ์ ์๋ณธ์ผ๋ก ๊ฐ์ฃผํ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ์ํ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ฝ๋๋ฒ ์ด์ค์์ ๋คํธ์ํฌ ์์ฒญ ์ด์ธ์ ์๋ณธ์ด ์ ์ฌ์ ์ผ๋ก ์ค์ผ๋ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๋ ๊ฒฝ์ฐ ์ํ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ CodeQL ๋ถ์์ ์ด๋ฌํ ์ถ๊ฐ ์๋ณธ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๊ณต๊ฐ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์ค์ ์ฝ๋๋ฒ ์ด์ค๊ฐ ์ค์ผ๋ ๋ฐ์ดํฐ์ ์ถ๊ฐ ์์ค๋ก ๊ฐ์ฃผํ ์ ์๋ ๋ก์ปฌ ์๋ณธ(์: ๋ช ๋ น์ค ์ธ์, ํ๊ฒฝ ๋ณ์, ํ์ผ ์์คํ ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค)์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ ์ค์ ๊ตฌ์ฑ์ ์ฌ์ฉ๋๋ ์ํ ๋ชจ๋ธ์ ํธ์งํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ๊ธฐ๋ณธ ์ค์ ์ ๊ธฐ์กด ๊ตฌ์ฑ ์ฌ์ฉ์ ์ง์ ์ ์ฐธ์กฐํ์ธ์.
๊ธฐ๋ณธ ์ค์ ์์ CodeQL ๋ชจ๋ธ ํฉ์ ์ฌ์ฉํ์ฌ CodeQL ์ ์ฉ ๋ฒ์ ํ์ฅ
์ฐธ๊ณ ํญ๋ชฉ
CodeQL ๋ชจ๋ธ ํฉ์ ํ์ฌ ๊ณต๊ฐ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์ํ์ด๋ฉฐ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ๋ชจ๋ธ ํฉ์ C/C++, C#, Java/Kotlin, Python, Ruby ๋ถ์์ ์ํด ์ง์๋ฉ๋๋ค.
Visual Studio Code์ ๋ํ CodeQL ํ์ฅ์ CodeQL ๋ชจ๋ธ ํธ์ง๊ธฐ์์ C#, Java/Kotlin, Python, Ruby์ ๋ํ ๋ชจ๋ธ๋ง ์ข ์์ฑ์ ์ง์ํฉ๋๋ค.
CodeQL์ ํฌํจ๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ธ์๋์ง ์๋ ํ๋ ์์ํฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ข ์์ฑ์ ๋ชจ๋ธ๋งํ๊ณ code scanning ๋ถ์์ ํ์ฅํ ์ ์์ต๋๋ค. ์์ธํ ์ ๋ณด๋ CodeQL ์ค๋ช ์์ ์ง์๋๋ ์ธ์ด์ ํ๋ ์์ํฌ๋ฅผ ์ฐธ์กฐํ์ธ์.
๊ธฐ๋ณธ ์ค์ ์ ๊ฒฝ์ฐ CodeQL ๋ชจ๋ธ ํฉ์์ ์ถ๊ฐ ์ข ์์ฑ์ ๋ชจ๋ธ์ ์ ์ํด์ผ ํฉ๋๋ค. ๊ฐ๋ณ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ํ CodeQL ๋ชจ๋ธ ํฉ์ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ ์ค์ ์์ ์ ์ฉ ๋ฒ์๋ฅผ ํ์ฅํ๊ฑฐ๋ ์กฐ์ง์ ๋ชจ๋ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ํด ๋๊ท๋ชจ๋ก ์ ์ฉ ๋ฒ์๋ฅผ ํ์ฅํ ์ ์์ต๋๋ค.
CodeQL ๋ชจ๋ธ ํฉ ๋ฐ ์ง์ ์์ฑ์ ๋ํ ์์ธํ ์ ๋ณด๋ CodeQL ๋ชจ๋ธ ํธ์ง๊ธฐ ์ฌ์ฉ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ํ ์ ์ฉ ๋ฒ์ ํ์ฅ
- ๋ฆฌํฌ์งํ ๋ฆฌ์
.github/codeql/extensions
๋๋ ํฐ๋ฆฌ์์codeql-pack.yml
ํ์ผ์ ํฌํจํด์ผ ํ๋ ๋ชจ๋ธ ํฉ ๋๋ ํฐ๋ฆฌ ๋ฐ ๋ถ์์ ํฌํจํ๋ ค๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ํ๋ ์์ํฌ์ ๋ํ ์ถ๊ฐ ๋ชจ๋ธ์ด ํฌํจ๋.yml
ํ์ผ์ ๋ณต์ฌํฉ๋๋ค. - ๋ชจ๋ธ ํฉ์ด code scanning ๋ถ์์์ ์๋์ผ๋ก ๊ฒ์๋๊ณ ์ฌ์ฉ๋ฉ๋๋ค.
- ๋์ค์ ๊ณ ๊ธ ์ค์ ์ ์ฌ์ฉํ๋๋ก ๊ตฌ์ฑ์ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ
.github/codeql/extensions
๋๋ ํฐ๋ฆฌ์ ๋ชจ๋ธ ํฉ์ด ๊ณ์ ์ธ์๋๊ณ ์ฌ์ฉ๋ฉ๋๋ค.
์กฐ์ง์ ๋ชจ๋ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ํ ์ ์ฉ ๋ฒ์ ํ์ฅ
์ฐธ๊ณ ํญ๋ชฉ
์กฐ์ง์ ๋ชจ๋ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ํ CodeQL ๋ชจ๋ธ ํฉ์ผ๋ก ์ ์ฉ ๋ฒ์๋ฅผ ํ์ฅํ๋ ๊ฒฝ์ฐ ์ง์ ํ ๋ชจ๋ธ ํฉ์ GitHub Container registry์ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉฐ code scanning์(๋ฅผ) ์คํํ๋ ๋ ํฌ์งํ ๋ฆฌ์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์ปจํ ์ด๋ ๋ ์ง์คํธ๋ฆฌ ์์ ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
-
GitHub์ ์ค๋ฅธ์ชฝ ์ ๋ชจ์๋ฆฌ์์ ํ๋กํ ์ฌ์ง์ ์ ํํ ๋ค์, Your organizations๋ฅผ ํด๋ฆญํฉ๋๋ค.
-
์กฐ์ง ์ด๋ฆ์์ ์ค์ ์ ํด๋ฆญํฉ๋๋ค. "์ค์ " ํญ์ด ํ์๋์ง ์์ผ๋ฉด ๋๋กญ๋ค์ด ๋ฉ๋ด๋ฅผ ์ ํํ ๋ค์ ์ค์ ์ ํด๋ฆญํฉ๋๋ค.
-
์ฌ์ด๋๋ฐ์ "Security" ์น์ ์์ Advanced Security ๋ฅผ ํด๋ฆญํ ๋ค์, Global settings๋ฅผ ํด๋ฆญํฉ๋๋ค.
-
"Code scanning" ์น์ ์ ์ฐพ์ต๋๋ค.
-
"Expand CodeQL analysis" ์์ ์๋ Configure๋ฅผ ํด๋ฆญํ์ธ์.
-
์ฌ์ฉํ๋ ค๋ ๊ฒ์๋ ๋ชจ๋ธ ํฉ์ ๋ํ ์ฐธ์กฐ๋ฅผ ํ ์ค๋น ํ๋์ฉ ์ ๋ ฅํ ๋ค์ ์ ์ฅ์ ํด๋ฆญํฉ๋๋ค.
-
๊ธฐ๋ณธ ์ค์ ์ด ํ์ฑํ๋ ์กฐ์ง์ ๋ชจ๋ ๋ฆฌํฌ์งํ ๋ฆฌ์์ code scanning์ด(๊ฐ) ์คํ๋ ๋ ๋ชจ๋ธ ํฉ์ด ์๋์ผ๋ก ๊ฒ์๋๊ณ ์ฌ์ฉ๋ฉ๋๋ค.