CodeQL ํฉ ๋ฐ CodeQL CLI ์ ๋ณด
CodeQL ํฉ์ CodeQL ์ฟผ๋ฆฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ , ๊ณต์ ํ๊ณ , ์ฌ์ฉํ๊ณ , ์คํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. CodeQL ํฉ์๋ ์ฟผ๋ฆฌ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ, ์ฟผ๋ฆฌ ๋๊ตฌ ๋ชจ์ ๋ฐ ๋ฉํ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ฉ๋๋ค. CodeQL ํฉ ๋ฐ CodeQL CLI์ ํจํค์ง ๊ด๋ฆฌ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ง์ ์ฟผ๋ฆฌ๋ฅผ ๊ฒ์ํ๊ณ ์ฝ๋๋ฒ ์ด์ค ๋ถ์์ ํตํฉํ ์ ์์ต๋๋ค.
CodeQL ํฉ์๋ ์ฟผ๋ฆฌ ํฉ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฉ, ๋ชจ๋ธ ํฉ์ ์ธ ์ ํ์ด ์์ต๋๋ค.
-
์ฟผ๋ฆฌ ํฉ์ ์คํ๋๋๋ก ์ค๊ณ๋์์ต๋๋ค. ์ฟผ๋ฆฌ ํฉ์ด ๊ฒ์๋๋ฉด ๋ฒ๋ค์ ์ฟผ๋ฆฌ ์๋ณธ ์ธ์๋ ๊ฐ ์ฟผ๋ฆฌ์ ๋ชจ๋ ์ ์ด์ ์ข ์์ฑ๊ณผ ๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ํํ์ด ํฌํจ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํฉ์์ ์ฟผ๋ฆฌ๋ฅผ ์ผ๊ด๋๊ณ ํจ์จ์ ์ผ๋ก ์คํํ ์ ์์ต๋๋ค.
-
๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฉ์ ์ฟผ๋ฆฌ ํฉ(๋๋ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฉ)์์ ์ฌ์ฉํ๋๋ก ์ค๊ณ๋์์ผ๋ฉฐ ์ฟผ๋ฆฌ ์์ฒด๋ฅผ ํฌํจํ์ง ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ณ๋๋ก ์ปดํ์ผ๋์ง ์์ต๋๋ค.
-
๋ชจ๋ธ ํฉ์ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์๋์ง ์๋ ์ข ์์ฑ์ ํฌํจํ๋๋ก code scanning ๋ถ์์ ํ์ฅํ ์ ์์ต๋๋ค. ๋ชจ๋ธ ํฉ์ ํ์ฌ ๊ณต๊ฐ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ๋ฒ์ ์ด๋ฉฐ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ๊ณต๊ฐ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ์์ ๋ชจ๋ธ ํฉ์ C/C++, C#, Java/Kotlin, Python, Ruby ๋ถ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์์ฒด ๋ชจ๋ธ ํฉ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ CodeQL ๋ชจ๋ธ ํฉ ์์ฑ์ ์ฐธ์กฐํ์ธ์.
CodeQL CLI์ pack
๋ช
๋ น์ ์ฌ์ฉํ์ฌ CodeQL ํฉ์ ๋ง๋ค๊ณ , ํฉ์ ์ข
์์ฑ์ ์ถ๊ฐํ๊ณ , ์ข
์์ฑ์ ์ค์นํ๊ฑฐ๋ ์
๋ฐ์ดํธํ ์ ์์ต๋๋ค. pack
๋ช
๋ น์ ์ฌ์ฉํ์ฌ CodeQL ํฉ์ ๊ฒ์ํ๊ณ ๋ค์ด๋ก๋ํ ์๋ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ CodeQL ํฉ ๊ฒ์ ๋ฐ ์ฌ์ฉ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
๊ฒ์๋ ์ฟผ๋ฆฌ ํฉ๊ณผ ๋ค๋ฅธ CodeQL ๋ฆด๋ฆฌ์ค ๊ฐ์ ํธํ์ฑ์ ๋ํ ์์ธํ ๋ด์ฉ์ CodeQL ํฉ ๊ฒ์ ๋ฐ ์ฌ์ฉ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
์ง์๋๋ ๋ชจ๋ ์ธ์ด์ ๋ํ ํ์ค CodeQL ํจํค์ง๊ฐ Container registry์ ๊ฒ์๋ฉ๋๋ค. CodeQL ๋ฆฌํฌ์งํ ๋ฆฌ์๋ ์ง์๋๋ ๋ชจ๋ ์ธ์ด์ ๋ํ ํ์ค CodeQL ํฉ์ ๋ํ ์๋ณธ ํ์ผ์ด ํฌํจ๋์ด ์์ต๋๋ค. CodeQL CLI ๋ฒ๋ค์ ํฌํจ๋์ด ์์ง๋ง ๋ค์ด๋ก๋ํ ์ ์๋ ํต์ฌ ์ฟผ๋ฆฌ ํฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
codeql/cpp-queries
codeql/csharp-queries
codeql/go-queries
codeql/java-queries
codeql/javascript-queries
codeql/python-queries
codeql/ruby-queries
CodeQL ํฉ ๊ตฌ์กฐ
CodeQL ํฉ์ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ์ qlpack.yml
์ด๋ผ๋ ํ์ผ์ด ์์ด์ผ ํฉ๋๋ค. qlpack.yml
ํ์ผ์์ name:
ํ๋์๋ <scope>/<pack>
์ ํ์์ ๋ฐ๋ฅด๋ ๊ฐ์ด ์์ด์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์ <scope>
๋ ํฉ์ด ๊ฒ์๋ GitHub ์กฐ์ง ๋๋ ์ฌ์ฉ์ ๊ณ์ ์ด๋ฉฐ <pack>
์ ํฉ์ ์ด๋ฆ์
๋๋ค. ๋ํ CodeQL ํ
์คํธ๊ฐ ์๋ ์ฟผ๋ฆฌ ํฉ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฉ์๋ ํฉ์ ํ์ธ๋ ์ข
์์ฑ์ด ๋ค์ด์๋ codeql-pack.lock.yml
ํ์ผ์ด ํฌํจ๋์ด ์์ต๋๋ค. ์ด ํ์ผ์ codeql pack install
๋ช
๋ น์ ํธ์ถํ๋ ๋์ ์์ฑ๋๋ฉฐ, ์ง์ ํธ์งํ ์ ์์ผ๋ฉฐ ๋ฒ์ ์ ์ด ์์คํ
์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
ํฉ ๋ด์ ๋ค๋ฅธ ํ์ผ ๋ฐ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ตฌ์ฑํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
-
์ฟผ๋ฆฌ๋ ํน์ ๋ฒ์ฃผ์ ๋ํ ๋๋ ํฐ๋ฆฌ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
-
ํน์ ์ ํ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ํ๋ ์์ํฌ์ ๋ํ ์ฟผ๋ฆฌ๋ ์์ฒด ์ต์์ ๋๋ ํฐ๋ฆฌ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
CodeQL ํฉ ๋ง๋ค๊ธฐ
ํ๋ก์ ํธ์ ์ฒดํฌ ์์ ๋ฃจํธ์์ ๋ค์ ๋ช ๋ น์ ์คํํ์ฌ CodeQL ํฉ์ ๋ง๋ค ์ ์์ต๋๋ค.
codeql pack init <scope>/<pack>
๋ค์ ํญ๋ชฉ์ ์ง์ ํด์ผ ํฉ๋๋ค.
-
<scope>
: ๊ฒ์ํ GitHub ์กฐ์ง ๋๋ ์ฌ์ฉ์ ๊ณ์ ์ ์ด๋ฆ์ ๋๋ค. -
<pack>
: ๋ง๋ค ํฉ์ ์ด๋ฆ์ ๋๋ค.
codeql pack init
๋ช
๋ น์ CodeQL ํฉ์ ๋ํ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ ๋ฐ ๊ตฌ์ฑ ํ์ผ์ ๋ง๋ญ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ด ๋ช
๋ น์ ์ฟผ๋ฆฌ ํฉ์ ๋ง๋ญ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฉ์ ๋ง๋ค๋ ค๋ฉด library:true
์์ฑ์ ํฌํจํ์ฌ ํ์ผ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฉ์ผ๋ก ๋ช
์์ ์ผ๋ก ์ ์ธํ๋๋ก qlpack.yml
ํ์ผ์ ํธ์งํด์ผ ํฉ๋๋ค.
CodeQL ๋ชจ๋ธ ํฉ ๋ง๋ค๊ธฐ
์ฐธ๊ณ ํญ๋ชฉ
CodeQL ๋ชจ๋ธ ํฉ์ ํ์ฌ ๊ณต๊ฐ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์ํ์ด๋ฉฐ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ๋ชจ๋ธ ํฉ์ C/C++, C#, Java/Kotlin, Python, Ruby ๋ถ์์ ์ํด ์ง์๋ฉ๋๋ค.
Visual Studio Code์ ๋ํ CodeQL ํ์ฅ์ CodeQL ๋ชจ๋ธ ํธ์ง๊ธฐ์์ C#, Java/Kotlin, Python, Ruby์ ๋ํ ๋ชจ๋ธ๋ง ์ข ์์ฑ์ ์ง์ํฉ๋๋ค.
code scanning ๋ถ์์ ํ์ฅํ์ฌ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์๋์ง ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ํ๋ ์์ํฌ๋ฅผ ์ธ์ํ๋ ๋ฐ ๋ชจ๋ธ ํฉ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ชจ๋ธ ํฉ์ YAML๋ก ๊ตฌํ๋๋ ๋ฐ์ดํฐ ํ์ฅ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ๊ณ ์ ์ข ์์ฑ์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. ๋ชจ๋ธ ํฉ์ ์ง์ ํ๋ฉด ํด๋น ํฉ์ ๋ฐ์ดํฐ ํ์ฅ ํ๋ก๊ทธ๋จ์ด code scanning ๋ถ์์ ์๋์ผ๋ก ์ถ๊ฐ๋ฉ๋๋ค. CodeQL ๋ชจ๋ธ ํฉ ๋ฐ ๋ฐ์ดํฐ ํ์ฅ ํ๋ก๊ทธ๋จ์ ๋ํ ์์ธํ ์ ๋ณด๋ CodeQL ๋ชจ๋ธ ํธ์ง๊ธฐ ์ฌ์ฉ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
๋ชจ๋ธ ํฉ์ ํ์ผ์์ qlpack.yml
ํ์ผ์์ ๋ค์๊ณผ ๊ฐ์ ํน์ฑ์ ๊ฐ์ง CodeQL ํฉ์
๋๋ค.
library: true
๋ฅผ ์ ์ํฉ๋๋ค.- ์ข ์์ฑ์ด ์์ต๋๋ค.
extensionTargets
๊ฐ ํ๋ ์ด์ ์์ต๋๋ค.- ํ๋ ์ด์์ ๋ฐ์ดํฐ ํ์ฅ ํ๋ก๊ทธ๋จ ํ์ผ์ ๊ฐ๋ฆฌํค๋
dataExtensions
์์ฑ์ด ์์ต๋๋ค.
๋ชจ๋ธ ํฉ์ ์ง์ ๋ ๋ฒ์ ๋ฒ์์ ์ํ๋ ๊ฒฝ์ฐ extensionTargets
์ ๋ช
๋ช
๋ ๊ฐ ์ฟผ๋ฆฌ ํฉ์ ์ง์ ๋ ๋ฐ์ดํฐ ํ์ฅ ํ๋ก๊ทธ๋จ์ ์ฝ์
ํฉ๋๋ค. ์์:
name: my-repo/my-java-model-pack
version: 1.2.3
extensionTargets:
codeql/java-all: ~1.2.3
codeql/util: ~4.5.6
dataExtensions:
- models/**/*.yml
์ด ์์ ์์ ๋ชจ๋ธ ํฉ์ models/**/
์ ๋ชจ๋ ๋ฐ์ดํฐ ํ์ฅ ํ๋ก๊ทธ๋จ์ 1.2.3
๋ถํฐ 1.3.0
๊น์ง์ ๋ฒ์ ์ธ codeql/java-all
์ฟผ๋ฆฌ ํฉ ๋ฐ 4.5.6
๋ถํฐ 4.6.0
๊น์ง์ ๋ฒ์ ์ธ codeql/util
์ฟผ๋ฆฌ ํฉ์ ์ฝ์
ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ npm ์ค๋ช
์์ ์๋ฏธ ์ฒด๊ณ ๋ฒ์ ๊ด๋ฆฌ ์ฌ์ฉ ๋ฐ ์๋ฏธ ์ฒด๊ณ ๋ฒ์ ๊ด๋ฆฌ ์ฌ์์ ์ฐธ์กฐํ์ธ์.
๋ชจ๋ธ ํฉ์ ๋ง๋ ํ์๋ ๋ค๋ฅธ CodeQL ํฉ๊ณผ ๋์ผํ ๋ฐฉ์์ผ๋ก ๊ฒ์ํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ CodeQL ํฉ ๊ฒ์ ๋ฐ ์ฌ์ฉ์(๋ฅผ) ์ฐธ์กฐํ์ธ์. ๊ทธ๋ฐ ๋น๋ฏ code scanning ๋ถ์์ ๊ฒ์๋ ๋ชจ๋ธ ํฉ์ --model-packs
์ต์
๊ณผ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ CodeQL ํฉ์ ์ฌ์ฉํ์ฌ ๋ถ์ ์ฌ์ฉ์ ์ง์ ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
CodeQL ํฉ์ ์ข ์์ฑ ์ถ๊ฐ ๋ฐ ์ค์น
์ฐธ๊ณ ํญ๋ชฉ
์ด๋ CodeQL ์ฟผ๋ฆฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฉ์๋ง ์ง์๋ฉ๋๋ค.
codeql pack add
๋ช
๋ น์ ์ฌ์ฉํ์ฌ CodeQL ํฉ์ ์ข
์์ฑ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๋ฒ์, ์ด๋ฆ ๋ฐ ํธํ๋๋ ๋ฒ์ ๋ฒ์(์ ํ ์ฌํญ)๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค.
codeql pack add <scope>/<name>@x.x.x <scope>/<other-name>
๋ฒ์ ๋ฒ์๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด ์ต์ ๋ฒ์ ์ด ์ถ๊ฐ๋ฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์์ฒญ๋ ๋ฒ์๋ฅผ ์ถฉ์กฑํ๋ ์ต์ ๋ฒ์ ์ด ์ถ๊ฐ๋ฉ๋๋ค.
์ด ๋ช
๋ น์ ์์ฒญ๋ ์ข
์์ฑ์ผ๋ก qlpack.yml
ํ์ผ์ ์
๋ฐ์ดํธํ๊ณ ํจํค์ง ์บ์์ ๋ค์ด๋ก๋ํฉ๋๋ค. ์ด ๋ช
๋ น์ ํ์ผ์ ์์์ ๋ค์ ์ง์ ํ๊ณ ๋ชจ๋ ์ฃผ์์ ์ ๊ฑฐํฉ๋๋ค.
qlpack.yml
ํ์ผ์ ์๋์ผ๋ก ํธ์งํ์ฌ ์ข
์์ฑ์ ํฌํจํ๊ณ ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ์ข
์์ฑ์ ์ค์นํ ์๋ ์์ต๋๋ค.
codeql pack install
์ด ๋ช ๋ น์ ๋ชจ๋ ์ข ์์ฑ์ ๋ก์ปฌ ๋์คํฌ์ ๊ณต์ ์บ์์ ๋ค์ด๋ก๋ํฉ๋๋ค.
์ฐธ๊ณ ํญ๋ชฉ
codeql pack add
๋ฐcodeql pack install
๋ช ๋ น์ ์คํํ๋ฉดcodeql-pack.lock.yml
ํ์ผ์ด ์์ฑ๋๊ฑฐ๋ ์ ๋ฐ์ดํธ๋ฉ๋๋ค. ์ด ํ์ผ์ ๋ฒ์ ๊ด๋ฆฌ์ ์ฒดํฌ์ธ๋์ด์ผ ํฉ๋๋ค.codeql-pack.lock.yml
ํ์ผ์๋ ํฉ์์ ์ฌ์ฉํ๋ ์ ํํ ๋ฒ์ ๋ฒํธ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ codeql-pack.lock.yml ํ์ผ ์ ๋ณด๋ฅผ ์ฐธ์กฐํ์ธ์.- ๊ธฐ๋ณธ์ ์ผ๋ก
codeql pack install
์ GitHub.com์ Container registry์์ ์ข ์์ฑ์ ์ค์นํฉ๋๋ค.qlconfig.yml
ํ์ผ์ ๋ง๋ค์ด GitHub Enterprise Server Container registry์์ ์ข ์์ฑ์ ์ค์นํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ GitHub Enterprise Server ์ค๋ช ์์ CodeQL ํฉ ๊ฒ์ ๋ฐ ์ฌ์ฉ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
๋ค์ด๋ก๋ํ CodeQL ํฉ ์ฌ์ฉ์ ์ง์
ํฉ์ ๋ณ๊ฒฝ ๋ด์ฉ์ ์คํํ๋ ๊ถ์ฅ ๋ฐฉ๋ฒ์ ์์ค ์ฝ๋๊ฐ ํฌํจ๋ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ณต์ ํ๋ ๊ฒ์ ๋๋ค.
์๋ณธ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๊ณ Container registry์์ ๋ค์ด๋ก๋ํ ํฉ์ ๋ํ ๊ธฐ๋ณธ ์์ ์ด ํ์ํ ๊ฒฝ์ฐ ์ด๋ฌํ ํฉ์ ๋ค์ด๋ก๋ ํ ์์ ํ๊ฑฐ๋ ์ฌ์ฉ์ ์ง์ ํ ์ ์์ผ๋ฉฐ ๋์ค์ ํด๋น ํ์์ด ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ์ฝํ ์ธ ๋ฅผ ์์ ํด์ผ ํ๋ ๊ฒฝ์ฐ ํฉ์ ๋ค์ด๋ก๋ํ ํ ๋ค์ ๋จ๊ณ๋ฅผ ์ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
-
์์ ํ์ง ์์ ํฉ์ ๊ฒฐ๊ณผ์ ํผ๋ํ์ง ์๋๋ก ํฉ _์ด๋ฆ_์
qlpack.yml
๋ก ๋ณ๊ฒฝํฉ๋๋ค. -
์์ถ์ ํผ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ์์ ์ด๋ฆ์ด
*.qlx
์ธ ๋ชจ๋ ํ์ผ์ ์ ๊ฑฐํฉ๋๋ค. ์ด๋ฌํ ํ์ผ์๋ ๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ๋ฒ์ ์ ์ฟผ๋ฆฌ๊ฐ ํฌํจ๋์ด ์์ผ๋ฉฐ, ๊ฒฝ์ฐ์ ๋ฐ๋ผ CodeQL์ ์์ ํ QL ์๋ณธ์ ๊ธฐ๋ณธ ์ค์ ์ผ๋ก ์ฌ์ฉํฉ๋๋ค.