CodeQL CLI ã§ã®ããŒã¿ããŒã¹ã®åæã«ã€ããŠ
ã³ãŒãããŒã¹ãåæããã«ã¯ãã³ãŒãããæœåºããã CodeQL ããŒã¿ããŒã¹ã«å¯ŸããŠã¯ãšãªãå®è¡ããŸãã CodeQL åæã«ããçæãããçµæã¯ãGitHub ã«ã¢ããããŒãããŠã³ãŒã ã¹ãã£ã³ ã¢ã©ãŒããçæã§ããŸãã
åææ¡ä»¶
åæãéå§ããåã«ã次ã®ããšãè¡ãå¿ èŠããããŸãã
- ã³ãã³ããããŒã«ã«ã§å®è¡ããããã« CodeQL CLI ãèšå®ããã
- åæãããœãŒã¹ ã³ãŒãã® CodeQL ããŒã¿ããŒã¹ãäœæããã
codeql database analyze
ãå®è¡ããæãç°¡åãªæ¹æ³ã¯ãCodeQL CLI ãã³ãã«ã«å«ãŸããæšæºã¯ãšãªã䜿çšããããšã§ãã
å®è¡äž codeql database analyze
database analyze
ãå®è¡ãããšã次ã®ããã«ãªããŸãã
- å¿ èŠã«å¿ããŠãããŒã«ã«ã§äœ¿çšã§ããªãåç §ããã CodeQL ããã±ãŒãžãããŠã³ããŒããããŸãã
- CodeQL ããŒã¿ããŒã¹ã§å®è¡ããããšã§ã1 ã€ãŸãã¯è€æ°ã®ã¯ãšãª ãã¡ã€ã«ãå®è¡ãããŸãã
- ç¹å®ã®ã¯ãšãª ã¡ã¿ããŒã¿ã«åºã¥ããŠçµæãè§£éããããœãŒã¹ ã³ãŒãå ã®æ£ããå Žæã«èŠåã衚瀺ã§ããããã«ããŸãã
- 蚺æããã³ãµããªãŒ ã¯ãšãªã®çµæãæšæºåºåã«å ±åãããŸãã
次ã®ã³ãã³ããå®è¡ããŠãããŒã¿ããŒã¹ãåæã§ããŸãã
codeql database analyze <database> --format=<format> --output=<output> <query-specifiers>...
ã¡ã¢
1 ã€ã®ã³ãããã«å¯ŸããŠè€æ°ã® CodeQL ããŒã¿ããŒã¹ãåæããå Žåããã®ã³ãã³ãã«ãã£ãŠçæãããããããã®çµæã»ããã«å¯Ÿã㊠SARIF ã«ããŽãªãæå®ããå¿ èŠããããŸãã çµæã GitHub ã«ã¢ããããŒããããšãcode scanning ã¯ãã®ã«ããŽãªã䜿ã£ãŠããããã®èšèªã«å¯Ÿããçµæãå¥ã ã«ä¿åããŸãã ãã®æäœãå¿ããå Žåã¯ãåã¢ããããŒãã§åã®çµæãäžæžããããŸãã
codeql database analyze <database> --format=<format> \
--sarif-category=<language-specifier> --output=<output> \
<packs,queries>
<database>
ã--format
ã--output
ãæå®ããå¿
èŠããããŸãã ç®çã®åæã«åãããŠè¿œå ã®ãªãã·ã§ã³ãæå®ã§ããŸãã
ãªãã·ã§ã³ | å¿ é | äœ¿çšæ³ |
---|---|---|
<database> | åæããCodeQLããŒã¿ããŒã¹ãå«ããã£ã¬ã¯ããªã®ãã¹ãæå®ããŸãã | |
<packs,queries> | å®è¡ãã CodeQL ããã¯ãŸãã¯ã¯ãšãªãæå®ããŸãã code scanning ã«äœ¿çšãããæšæºã¯ãšãªãå®è¡ããã«ã¯ããã®ãã©ã¡ãŒã¿ãŒãçç¥ããŸãã CodeQL CLI ãã³ãã«ã«å«ãŸããŠããä»ã®ã¯ãšãª ã¹ã€ãŒãã確èªããå Žåã¯ãcodeql resolve queries ãå®è¡ããŸãã ããã«äžèŠ§è¡šç€ºãããŠããã¹ã€ãŒãã¯ã.qls æ¡åŒµåã®æç¡ã«é¢ä¿ãªãæäŸã§ããŸãã ç¬èªã®ã¯ãšãª ã¹ã€ãŒãã®äœæã«ã€ããŠã¯ãCodeQL CLI çšããã¥ã¡ã³ãã®ãCodeQL ã¯ãšãª ã¹ã€ãŒãã®äœæããã芧ãã ããã | |
--format | åæäžã«çæãããçµæãã¡ã€ã«ã®åœ¢åŒãæå®ããŸãã CSVãSARIFãã°ã©ã圢åŒãªã©ãããŸããŸãªåœ¢åŒããµããŒããããŠããŸãã GitHubã«ã¢ããããŒãããå Žåãããã¯sarif-latest ã§ããå¿
èŠããããŸãã 詳ããã¯ããCode scanningã® SARIF ãµããŒãããã芧ãã ããã | |
--output | SARIF çµæãã¡ã€ã«ãä¿åããå Žæãã.sarif æ¡åŒµåãšä»»æã®ãã¡ã€ã«åãå«ããŠæå®ããŸãã | |
--sarif-category | åäžããŒã¿ããŒã¹ã®åæã®å Žåã¯çç¥å¯èœã§ãã ãªããžããªå
ã®åäžã³ãããã«å¯ŸããŠè€æ°ã®ããŒã¿ããŒã¹ãåæããå Žåã«èšèªãå®çŸ©ããããã«å¿
èŠã§ãã ãã®åæã® SARIF çµæãã¡ã€ã«ã«å«ããã«ããŽãªãæå®ããŸãã ã«ããŽãªã¯ãåãããŒã«ãšã³ãããã«å¯Ÿããè€æ°ã®åæãåºå¥ããããã«äœ¿çšãããŸãããç°ãªãèšèªãŸãã¯ã³ãŒãã®ç°ãªãéšåã§å®è¡ãããŸãã | |
--sarif-add-baseline-file-info | æšå¥šã ãã¡ã€ã« ã«ãã¬ããžæ å ±ã ããŒã«ã®ç¶æ ããŒãž ã«éä¿¡ããç®çã§äœ¿çšããŸãã 詳ããã¯ããã³ãŒã ã¹ãã£ã³ã®ããŒã«ç¶æ ããŒãžã«ã€ããŠããã芧ãã ããã | |
--sarif-include-query-help | SARIF åºåã«ã¯ãšãª ãã«ããå«ãããã©ãããæå®ããŸãã æ¬¡ã®ããããã§ã: always : ãã¹ãŠã®ã¯ãšãªã«ã¯ãšãª ãã«ããå«ããŸãã custom_queries_only (ããã©ã«ã): ã«ã¹ã¿ã ã¯ãšãª (codeql/<lang>-queries 圢åŒã§ã¯ãªãã¯ãšãª ããã¯ã®ã¯ãšãª) ã«ã®ã¿ã¯ãšãª ãã«ããå«ããŸãã never : ã©ã®ã¯ãšãªã«ããã«ããå«ããŸããã SARIF åºåã«å«ãŸããã«ã¹ã¿ã ã¯ãšãªã®ã¯ãšãª ãã«ãã¯ãã¯ãšãªã®ã³ãŒã ã¹ãã£ã³ã®ã¢ã©ãŒãã§è¡šç€ºãããŸãã 詳ããã¯ããCodeQL CLI ã§ã®ã«ã¹ã¿ã ã¯ãšãªã®äœ¿çšããã芧ãã ããã | |
<packs> | CodeQL ã¯ãšãª ããã¯ãåæã«å«ãããå Žåã«äœ¿ããŸãã 詳现ã«ã€ããŠã¯ããCodeQL ããã¯ã®ããŠã³ããŒããšäœ¿çšããåç §ããŠãã ããã | |
--download | CodeQL ã¯ãšãª ããã¯ã®äžéšããŸã ãã£ã¹ã¯äžã«ãªããã¯ãšãªãå®è¡ããåã«ããŠã³ããŒãããå¿ èŠãããå Žåã«äœ¿ããŸãã | |
--threads | è€æ°ã®ã¹ã¬ããã䜿çšããŠã¯ãšãªãå®è¡ããå Žåã«äœ¿çšããŸãã æ¢å®å€ã¯ 1 ã§ãã ã¯ãšãªã®å®è¡ãé«éåããããã«ãããå€ãã®ã¹ã¬ãããæå®ã§ããŸãã ã¹ã¬ããã®æ°ãè«çããã»ããµã®æ°ã«èšå®ããã«ã¯ã0 ãæå®ããŸãã | |
--verbose | ããŒã¿ããŒã¹äœæããã»ã¹ããåæããã»ã¹ãšèšºæããŒã¿ã«é¢ãã詳现æ å ±ãååŸããããã«äœ¿çšããŸãã | |
--threat-model | (ãããªã㯠ãã¬ãã¥ãŒ) è åšã¢ãã«ã远å ããŠãCodeQL è§£æã§è¿œå ã®ãœãŒã¹ãæ§æããããã«äœ¿çšããŸãã ãããªã㯠ãã¬ãã¥ãŒ ã§ã¯ãè åšã¢ãã«ã¯ Java åæã§ã®ã¿ãµããŒããããŸãã 詳ããã¯ããdatabase analyzeããã芧ãã ããã |
ã¡ã¢
ããŒã¿ããŒã¹ã®ã¢ããã°ã¬ãŒã
CodeQL CLI v2.3.3 以åã§äœæãããããŒã¿ããŒã¹ã®å Žåã¯ãæ°ããããŒãžã§ã³ã® CodeQL CLI ã§åæãå®è¡ããåã«ãããŒã¿ããŒã¹ãæç€ºçã«ã¢ããã°ã¬ãŒãããå¿
èŠããããŸãã ãã®æé ãå¿
èŠãªå Žåã¯ãdatabase analyze
ã®å®è¡æã«ããŒã¿ããŒã¹ãã¢ããã°ã¬ãŒãããå¿
èŠãããããšã瀺ãã¡ãã»ãŒãžã衚瀺ãããŸãã
CodeQL CLI v2.3.4 以éã«ãã£ãŠäœæãããããŒã¿ããŒã¹ã®å Žåã¯ãCLI ã§å¿ èŠãªã¢ããã°ã¬ãŒããæé»çã«å®è¡ãããŸãã ã¢ããã°ã¬ãŒã ã³ãã³ããæç€ºçã«å®è¡ããå¿ èŠã¯ãããŸããã
ããŒã¿ããŒã¹ãåæãããšãã«äœ¿ãããšãã§ãããã¹ãŠã®ãªãã·ã§ã³ã®è©³çްã«ã€ããŠã¯ããdatabase analyzeããåç §ããŠãã ããã
CodeQL ããŒã¿ããŒã¹ã®åæã®åºæ¬çãªäŸ
ãã®äŸã§ã¯ã/codeql-dbs/example-repo
ã§æ ŒçŽãããŠãã CodeQL ããŒã¿ããŒã¹ãåæããçµæã SARIF ãã¡ã€ã« (/temp/example-repo-js.sarif
) ãšããŠä¿åããŸãã --sarif-category
ã䜿çšããŠãçµæã JavaScript ãšããŠèå¥ãã远å ã®æ
å ±ã SARIF ãã¡ã€ã«ã«å«ããŸãã ããã¯ããªããžããªäžã®åäžã®ã³ãããã«å¯ŸããŠåæããCodeQLããŒã¿ããŒã¹ãè€æ°ããå Žåã«äžå¯æ¬ ã§ãã
$ codeql database analyze /codeql-dbs/example-repo \
javascript-code-scanning.qls --sarif-category=javascript-typescript \
--format=sarif-latest --output=/temp/example-repo-js.sarif
> Running queries.
> Compiling query plan for /codeql-home/codeql/qlpacks/codeql-javascript/AngularJS/DisablingSce.ql.
...
> Shutting down query evaluator.
> Interpreting results.
ç£èŠã®ããã«çµæã«ãã¡ã€ã« ã«ãã¬ããžæ å ±ã远å ãã
å¿ èŠã«å¿ããŠããã¡ã€ã« ã«ãã¬ããžæ å ±ã GitHub ã«éä¿¡ããŠãcode scanning ã® ããŒã«ã®ç¶æ ããŒãž ã«è¡šç€ºã§ããŸãã ãã¡ã€ã« ã«ãã¬ããžæ å ±ã®è©³çްã«ã€ããŠã¯ããã³ãŒã ã¹ãã£ã³ã®ããŒã«ç¶æ ããŒãžã«ã€ããŠããåç §ããŠãã ããã
code scanning ã®çµæã«ãã¡ã€ã« ã«ãã¬ããžæ
å ±ãå«ããã«ã¯ãCI ã·ã¹ãã ã® codeql database analyze
ã®åŒã³åºãã« --sarif-add-baseline-file-info
ãã©ã°ã远å ããŸããæ¬¡ã«äŸã瀺ããŸãã
$ codeql database analyze /codeql-dbs/example-repo \
javascript-code-scanning.qls --sarif-category=javascript-typescript \
--sarif-add-baseline-file-info \ --format=sarif-latest \
--output=/temp/example-repo-js.sarif
ããŒã¿ããŒã¹åæã®å®è¡äŸ
次ã®äŸã¯ãCodeQL ããã¯ã䜿çšã㊠database analyze
ãå®è¡ããæ¹æ³ãšãCodeQL ãªããžããªã®ããŒã«ã« ãã§ãã¯ã¢ãŠãã䜿çšããæ¹æ³ã瀺ããŠããŸãã ãããã®äŸã§ã¯ãCodeQL ãªããžããªã®ããŒã«ã« ã³ããŒã®å
åŒã§ãããã£ã¬ã¯ããªã« CodeQL ããŒã¿ããŒã¹ãäœæãããŠããããšãåæãšããŠããŸãã
CodeQL ã¯ãšãª ããã¯ã®å®è¡
GitHub Container registry ã®æ¢åã® CodeQL ã¯ãšãª ããã¯ãå®è¡ããå Žåã¯ã1 ã€ãŸãã¯è€æ°ã®ããã¯åãæå®ã§ããŸãã
codeql database analyze <database> microsoft/coding-standards@1.0.0 github/security-queries --format=sarifv2.1.0 --output=query-results.sarif --download
ãã®ã³ãã³ãã§ã¯ã2 ã€ã® CodeQL ã¯ãšãª ãã㯠(microsoft/coding-standards
ããŒãžã§ã³ 1.0.0 ãšææ°ããŒãžã§ã³ã® github/security-queries
) ã®æ¢å®ã®ã¯ãšãª ã¹ã€ãŒããæå®ããããŒã¿ããŒã¹ã§å®è¡ããŸãã æ¢å®ã®ã¹ã€ãŒãã®è©³çްã«ã€ããŠã¯ããCodeQL ããã¯ãçºè¡ããŠäœ¿çšããããåç
§ããŠãã ããã
--download
ãã©ã°ã¯çç¥ã§ããŸãã ããã䜿çšãããšãã¯ãšãª ããã¯ããŸã ããŒã«ã«ã§äœ¿çšã§ããªãå Žåã«ç¢ºå®ã«ããŠã³ããŒããããŸãã
åäžã¯ãšãªã®å®è¡
JavaScript ã³ãŒãããŒã¹ã® CodeQL ããŒã¿ããŒã¹ã«å¯ŸããŠåäžã®ã¯ãšãªãå®è¡ããå Žåã¯ãããŒã¿ããŒã¹ãå«ããã£ã¬ã¯ããªããæ¬¡ã®ã³ãã³ãã䜿çšã§ããŸãã
codeql database analyze --download <javascript-database> codeql/javascript-queries:Declarations/UnusedVariable.ql --format=csv --output=js-analysis/js-results.csv
ãã®ã³ãã³ãã§ã¯ãæªäœ¿çšã®å€æ°ãã€ã³ããŒãã颿°ããŸãã¯ã¯ã©ã¹ã«é¢é£ããæœåšçãªãã°ãæ€åºããã·ã³ãã«ãªã¯ãšãªãå®è¡ããŸããããã¯ãCodeQL ãªããžããªã«å«ãŸãã JavaScript ã¯ãšãªã® 1 ã€ã§ãã åæ§ã®ãã¹ã®ã¹ããŒã¹åºåããªã¹ããæå®ããããšã§ãè€æ°ã®ã¯ãšãªãå®è¡ã§ããŸãã
åæã«ãããæ°ãããã£ã¬ã¯ã㪠(js-analysis
) ã« CSV ãã¡ã€ã« (js-results.csv
) ãçæãããŸãã
ãŸãã¯ãCodeQL ãªããžããªããã§ãã¯ã¢ãŠããããŠããå Žåã¯ãã¯ãšãªãžã®ãã¹ãçŽæ¥æå®ããããšã§ãåãã¯ãšãªãå®è¡ã§ããŸãã
codeql database analyze <javascript-database> ../ql/javascript/ql/src/Declarations/UnusedVariable.ql --format=csv --output=js-analysis/js-results.csv
database analyze
ã³ãã³ãã䜿çšããŠãç¬èªã®ã«ã¹ã¿ã ã¯ãšãªãå®è¡ããããšãã§ããŸãã
CodeQL CLI ã§äœ¿ãç®çã§ã¯ãšãªãæºåããæ¹æ³ã«ã€ããŠã¯ããCodeQL CLI ã§ã®ã«ã¹ã¿ã ã¯ãšãªã®äœ¿çšããåç
§ããŠãã ããã
ãã£ã¬ã¯ããªå ã®ãã¹ãŠã®ã¯ãšãªã®å®è¡
ãã£ã¬ã¯ããªå ã«ãããã¹ãŠã®ã¯ãšãªã¯ãåã ã®ã¯ãšãª ãã¡ã€ã«ããã¹ãŠäžèŠ§è¡šç€ºããã®ã§ã¯ãªãããã£ã¬ã¯ã㪠ãã¹ãæå®ããããšã§å®è¡ã§ããŸãã ãã¹ã¯ååž°çã«æ€çŽ¢ãããããããµããã©ã«ããŒã«å«ãŸãããã¹ãŠã®ã¯ãšãªãå®è¡ãããŸãã
éèŠ
database analyze
ã®å®è¡äžã«ã³ã¢ CodeQL ã¯ãšãª ããã¯ã®ã«ãŒããæå®ããããšã¯é¿ããŠãã ãããã³ãã³ãã§äœ¿çšããããã«èšèšãããŠããªãç¹æ®ãªããã€ãã®ã¯ãšãªãå«ãŸããŠããå¯èœæ§ãããããã§ãã 代ããã«ãã¯ãšãª ããã¯ãå®è¡ããŠãããã¯ã®æ¢å®ã®ã¯ãšãªãåæã«å«ããããã³ãŒã ã¹ãã£ã³ ã¯ãšãª ã¹ã€ãŒãã®ãããããå®è¡ããŸãã
ããšãã°ãcodeql/python-queries
ã¯ãšãª ããã¯å
ã® Functions
ãã£ã¬ã¯ããªã«å«ãŸãããã¹ãŠã® Python ã¯ãšãªãå®è¡ããã«ã¯ã次ã®ããã«å®è¡ããŸãã
codeql database analyze <python-database> codeql/python-queries:Functions --format=sarif-latest --output=python-analysis/python-results.sarif --download
ãŸãã¯ãCodeQL ãªããžããªããã§ãã¯ã¢ãŠããããŠããå Žåã¯ããã£ã¬ã¯ããªãžã®ãã¹ãçŽæ¥æå®ããŠãåãã¯ãšãªãå®è¡ã§ããŸãã
codeql database analyze <python-database> ../ql/python/ql/src/Functions/ --format=sarif-latest --output=python-analysis/python-results.sarif
åæãå®äºãããšãSARIF çµæãã¡ã€ã«ãçæãããŸãã --format=sarif-latest
ãæå®ãããšãCodeQL ã§ãµããŒããããŠããææ°ã® SARIF 仿§ã«åŸã£ãŠçµæã確å®ã«æžåŒèšå®ãããŸãã
CodeQL ããã¯ã§ã®ã¯ãšãªã®ãµãã»ããã®å®è¡
CodeQL CLI v2.8.1 以éã䜿çšããŠããå Žåã¯ãããã¯ä»æ§ã®æåŸã«ãã¹ãå«ããããã¯å ã§ã¯ãšãªã®ãµãã»ãããå®è¡ã§ããŸãã ããã¯ãããã¯å ã§ã¯ãšãªãæ€çŽ¢ãŸãã¯å®è¡ãããã¹ãŠã®ã³ãã³ãã«é©çšãããŸãã
ã¯ãšãªã®ã»ãããæå®ããå®å
šãªæ¹æ³ã¯ãscope/name@range:path
ã®åœ¢åŒã§ããåå€ã¯æ¬¡ã®ãšããã§ãã
-
scope/name
ã¯ãCodeQL ããã¯ã®ä¿®é£Ÿåã§ãã -
range
㯠semver ç¯å²ã§ãã -
path
ã¯ãåäžã®ã¯ãšãªãã¯ãšãªãå«ããã£ã¬ã¯ããªããŸãã¯ã¯ãšãª ã¹ã€ãŒã ãã¡ã€ã«ãžã®ãã¡ã€ã« ã·ã¹ãã ãã¹ã§ãã
scope/name
ãæå®ããå Žåã¯ãrange
ãš path
ãçç¥ã§ããŸãã range
ãçç¥ãããšãæå®ããããã¯ã®ææ°ããŒãžã§ã³ã䜿çšãããŸãã path
ãçç¥ãããšãæå®ããããã¯ã®æ¢å®ã®ã¯ãšãª ã¹ã€ãŒãã䜿çšãããŸãã
path
ã¯ã\*.ql
ã¯ãšãª ãã¡ã€ã«ã1 ã€ãŸãã¯è€æ°ã®ã¯ãšãªãå«ããã£ã¬ã¯ããªããŸã㯠.qls
ã¯ãšãª ã¹ã€ãŒã ãã¡ã€ã«ã®ããããã«ããããšãã§ããŸãã ããã¯åãçç¥ããå Žåã¯ãpath
ãæå®ããå¿
èŠããããŸããããã¯ãçŸåšã®ããã»ã¹ã®äœæ¥ãã£ã¬ã¯ããªã«å¯ŸããŠçžå¯Ÿçã§ãããšè§£éãããŸãã
scope/name
ãš path
ãæå®ããå Žåã¯ãpath
ã絶察ã«ããããšã¯ã§ããŸããã ããã¯ãCodeQL ããã¯ã®ã«ãŒãã«å¯ŸããŠçžå¯Ÿçã§ãããšèŠãªãããŸãã
codeql/cpp-queries
CodeQL ããã¯ã® experimental/Security
ãã©ã«ããŒå
ã®ãã¹ãŠã®ã¯ãšãªã䜿çšããŠããŒã¿ããŒã¹ãåæããå Žåã¯ã以äžã䜿çšã§ããŸãã
codeql database analyze --format=sarif-latest --output=results <db> \
codeql/cpp-queries:experimental/Security
codeql/cpp-queries
CodeQL ããã¯ã® RedundantNullCheckParam.ql
ã¯ãšãªãå®è¡ããã«ã¯ã以äžã䜿çšããŸãã
codeql database analyze --format=sarif-latest --output=results <db> \
'codeql/cpp-queries:experimental/Likely Bugs/RedundantNullCheckParam.ql'
0.0.3 以äžã0.1.0 æªæº (äºææ§ãæãé«ãããŒãžã§ã³ãéžæããã) ã®ããŒãžã§ã³ã® codeql/cpp-queries
CodeQL ããã¯ã® cpp-security-and-quality.qls
ã¯ãšãª ã¹ã€ãŒãã䜿çšããŠããŒã¿ããŒã¹ãåæããå Žåã¯ã以äžã䜿çšã§ããŸãã
codeql database analyze --format=sarif-latest --output=results <db> \
'codeql/cpp-queries@~0.0.3:codeql-suites/cpp-security-and-quality.qls'
ãã¹ã«ãªãã©ã« @
ãŸã㯠:
ãå«ãŸããã¯ãšãª ãã¡ã€ã«ããã£ã¬ã¯ããªããŸãã¯ã¹ã€ãŒããåç
§ããå¿
èŠãããå Žåã¯ã次ã®ããã«ãã¯ãšãªä»æ§ã®åã« path:
ãä»ããããšãã§ããŸãã
codeql database analyze --format=sarif-latest --output=results <db> \
path:C:/Users/ci/workspace@2/security/query.ql
CodeQL ããã¯ã«ã€ããŠè©³ããã¯ããCodeQL ããã¯ã䜿ã£ãåæã®ã«ã¹ã¿ãã€ãºããã芧ãã ããã
ã¯ãšãª ã¹ã€ãŒãã®å®è¡
C/C++ ã³ãŒãããŒã¹ã® CodeQL ããŒã¿ããŒã¹ã«å¯ŸããŠã¯ãšãª ã¹ã€ãŒããå®è¡ããå Žåã¯ãããŒã¿ããŒã¹ãå«ããã£ã¬ã¯ããªããæ¬¡ã®ã³ãã³ãã䜿çšã§ããŸãã
codeql database analyze <cpp-database> codeql/cpp-queries:codeql-suites/cpp-code-scanning.qls --format=sarifv2.1.0 --output=cpp-results.sarif --download
ãã®ã³ãã³ãã§ã¯ãcodeql/cpp-queries
CodeQL ã¯ãšãª ããã¯ãããŠã³ããŒãããåæãå®è¡ãããã¹ãŠã®ããŒãžã§ã³ã® GitHub ã§ãµããŒããããŠãã SARIF ããŒãžã§ã³ 2.1.0 圢åŒã®ãã¡ã€ã«ãçæããŸãã ãã®ãã¡ã€ã«ã¯ãcodeql github upload-results
ãŸãã¯ã³ãŒã ã¹ãã£ã³ API ãå®è¡ããŠãGitHub ã«ã¢ããããŒãã§ããŸãã
詳现ã«ã€ããŠã¯ããCodeQL åæçµæã GitHub ã«ã¢ããããŒãããããŸãã¯ãã³ãŒã ã¹ãã£ã³çšã® REST API ãšã³ããã€ã³ãããåç
§ããŠãã ããã
CodeQL ã¯ãšãª ã¹ã€ãŒãã¯ããã£ã¬ã¯ãã£ãã䜿çšããŠãç¹å®ã®ã¡ã¿ããŒã¿ ããããã£ã«åºã¥ããŠå®è¡ããã¯ãšãªãéžæãã .qls
ãã¡ã€ã«ã§ãã æšæºã® CodeQL ããã¯ã«ã¯ãã³ãŒã ã¹ãã£ã³ã§äœ¿çšãããã¯ãšãª ã¹ã€ãŒãã®å Žæãæå®ããã¡ã¿ããŒã¿ããããããCodeQL CLI ã§ãããã®ã¹ã€ãŒã ãã¡ã€ã«ãèªåçã«æ€çŽ¢ããå ŽæãèªèãããŠããããŠãŒã¶ãŒãã³ãã³ã ã©ã€ã³ã§å®å
šãªãã¹ãæå®ããå¿
èŠã¯ãããŸããã
詳ããã¯ããCodeQL ã¯ãšãª ã¹ã€ãŒãã®äœæããã芧ãã ããã
ã«ã¹ã¿ã ã¯ãšãª ã¹ã€ãŒãã®äœæã®è©³çްã«ã€ããŠã¯ãCodeQL ã¯ãšãª ã¹ã€ãŒãã®äœæããåç §ããŠãã ããã
æ±æãããããŒã¿ã®æœåšçãªãœãŒã¹ã远å ããã¢ãã« ããã¯ãå«ãã
ã¡ã¢
è åšã¢ãã«ã¯çŸåš ãããªã㯠ãã¬ãã¥ãŒ 段éã§ããã倿Žãããå¯èœæ§ããããŸãã ãããªã㯠ãã¬ãã¥ãŒ æéäžãè åšã¢ãã«ã¯ Java/Kotlin ãš C# è§£æã§ã®ã¿ãµããŒããããŸãã
è åšã¢ãã«ã¯ãcode scanning è§£æãæ§æã§ããŸãã 詳现ã«ã€ããŠã¯ãCodeQL ããã¥ã¡ã³ãã®ãJava ããã³ Kotlin ã®è åšã¢ãã«ããšãC# ã®è åšã¢ãã«ããåç §ããŠãã ããã
$ codeql database analyze /codeql-dbs/my-company --format=sarif-latest \
--threat-model=local \
--output=/temp/my-company.sarif codeql/java-queries
ãã®äŸã§ã¯ãæšæºã¯ãšãª ãã㯠codeql/java-queries
ã®é¢é£ããã¯ãšãªã§ã¯ãè
åšã¢ãã«ãšãremote
ããŒã¿ãã㌠ãœãŒã¹ã®ããã©ã«ãã® local
è
åšã¢ãã«ã䜿çšãããŸãã ããŒã«ã« ãœãŒã¹ (ãã¡ã€ã« ã·ã¹ãã ãã³ãã³ã ã©ã€ã³åŒæ°ãããŒã¿ããŒã¹ãç°å¢å€æ°ãªã©) ã®ããŒã¿ããã³ãŒãããŒã¹ã®æ±æãããããŒã¿ã®æœåšçãªãœãŒã¹ãšèŠãªãå Žåã¯ãlocal
è
åšã¢ãã«ã䜿çšããå¿
èŠããããŸãã
çµæ
åæçµæã¯ãSARIF ã CSV ãªã©ãããŸããŸãªåœ¢åŒã§ä¿åã§ããŸãã
SARIF 圢åŒã¯ãããŸããŸãªçš®é¡ã®éçåæããŒã«ã®åºåã衚ãããã«èšèšãããŠããŸãã 詳ããã¯ããCodeQL CLI SARIF åºåããã芧ãã ããã
çµæã® CSV 圢åŒã®è©³çްã«ã€ããŠã¯ããCodeQL CLI ã® CSV åºåããåç §ããŠãã ããã
çµæãã¡ã€ã«ã¯ãç¬èªã®ã³ãŒã ã¬ãã¥ãŒãŸãã¯ãããã° ã€ã³ãã©ã¹ãã©ã¯ãã£ã«çµ±åã§ããŸãã ããšãã°ãSARIF ãã¡ã€ã«åºåã䜿çšãããšãIDE çšã® SARIF ãã¥ãŒã¢ãŒ ãã©ã°ã€ã³ã䜿ã£ãŠããœãŒã¹ ã³ãŒãå ã®æ£ããå Žæã«ããèŠåã匷調衚瀺ã§ããŸãã
ãã°ãšèšºææ å ±ãèŠã
code scanningã¯ãšãªã¹ã€ãŒãã䜿ã£ãŠCodeQLããŒã¿ããŒã¹ãåæããéã«ã¯ãã¢ã©ãŒãã«é¢ãã詳现æ
å ±ãçæããã®ã«å ããŠãCLIã¯ããŒã¿ããŒã¹çæã¹ãããããã®èšºææ
å ±ãšãµããªã¡ããªã¯ã¹ãå ±åããŸãã SARIF åºåãçæããããšãéžæããå Žåã¯ã远å ããŒã¿ã SARIF ãã¡ã€ã«ã«ãå«ãŸããŸãã ã¢ã©ãŒããå°ãªããªããžããªã§ã¯ãå®éã«ã³ãŒãäžã®åé¡ãå°ãªãã®ãããããã¯CodeQLããŒã¿ããŒã¹ã®çææã«ãšã©ãŒããã£ãã®ãã倿ããã®ã«ãã®æ
å ±ã圹ç«ã€ãããããŸããã codeql database analyze
ããããã«è©³ããåºåãåŸãã«ã¯ã--verbose
ãªãã·ã§ã³ã䜿çšããŸãã
å©çšå¯èœãªèšºææ å ±ã®çš®é¡ã®è©³çްã«ã€ããŠã¯ããCode scanningãã°ã®è¡šç€ºããåç §ããŠãã ããã
CodeQL ã®åæã倱æããå Žåã§ããèšºææ å ±ã GitHub ã«ãšã¯ã¹ããŒãããŠã¢ããããŒãããããšãéžæã§ããŸãã 詳ããã¯ããCodeQL åæçµæã GitHub ã«ã¢ããããŒãããããã芧ãã ããã
次ã®ã¹ããã
- CodeQL ã®åæçµæã GitHub ã«ã¢ããããŒãããæ¹æ³ã«ã€ããŠã¯ããCodeQL åæçµæã GitHub ã«ã¢ããããŒãããããåç §ããŠãã ããã