ã¡ã¢
CodeQL ã¢ãã« ããã¯ã¯çŸåš ãããªã㯠ãã¬ãã¥ãŒ 段éã§ããã倿Žãããå¯èœæ§ããããŸãã ã¢ãã« ããã¯ã¯ C/C++ãC#ãJava/KotlinãPythonãRuby åæã§ãµããŒããããŸãã
Visual Studio Code çš CodeQL æ¡åŒµæ©èœã® CodeQL ã¢ãã« ãšãã£ã¿ãŒã§ã¯ãC#ãJava/KotlinãPythonãRuby ã«å¯ŸããäŸåé¢ä¿ã®ã¢ããªã³ã°ããµããŒããããŠããŸãã
CodeQL ã¢ãã« ãšãã£ã¿ãŒã«ã€ããŠ
CodeQL ã¢ãã« ããã¯ã䜿çšãããšãCodeQL code scanning åæãæ¡åŒµããŠãæ¢å®ã§ã¯ãµããŒããããŠããªãã³ãŒãããŒã¹ã§äœ¿çšãããã«ã¹ã¿ã ã©ã€ãã©ãªãšãã¬ãŒã ã¯ãŒã¯ãèªèã§ããããã«ãªããŸãã CodeQL ã¢ãã« ãšãã£ã¿ãŒã䜿çšãããšãç¬èªã®ã¢ãã« ããã¯ãäœæã§ããŸãã ã¢ãã« ãšãã£ã¿ãŒã¯ãã¢ããªã±ãŒã·ã§ã³å ã®å€éšäŸåé¢ä¿ã®åŒã³åºããã¢ãã«åããããå€éšäŸåé¢ä¿ã®ãã¹ãŠã®ãããªã㯠ãšã³ããªãã€ã³ããšçµäºãã€ã³ããå®å šã«ã¢ãã«åãããããäžã§ã®ã¬ã€ããšãªããŸãã
ã¢ãã« ããã¯ã䜿çšã㊠code scanning åæãã«ã¹ã¿ãã€ãºããæ¹æ³ã«ã€ããŠã¯ããæ¢å®ã®ã»ããã¢ããã®æ§æãç·šéããããšãã³ãŒã ã¹ãã£ã³çšã®é«åºŠãªã»ããã¢ããã®ã«ã¹ã¿ãã€ãºããåç §ããŠãã ããã
ã¢ãã« ãšãã£ã¿ãŒãéããšãçŸåšéžæãããŠãã CodeQL ããŒã¿ããŒã¹ãåæãããã¢ããªã±ãŒã·ã§ã³ãå€éš API ãšãã¹ãŠã®ãããªã㯠ã¡ãœããã䜿çšããå Žæãèå¥ãããŸãã å€éš (ãŸãã¯ãµãŒãããŒãã£) API ã¯ãéžæãã CodeQL ããŒã¿ããŒã¹ã«å«ãŸããŠããªã API ãæããŸãã
ã¢ãã« ãšãã£ã¿ãŒã«ã¯ã次㮠2 ã€ã®ç°ãªãã¢ãŒãããããŸãã
-
ã¢ããªã±ãŒã·ã§ã³ ã¢ãŒã (æ¢å®ã®ãã¥ãŒ): ãšãã£ã¿ãŒã«ã¯ãéžæãã CodeQL ããŒã¿ããŒã¹ã«ãã£ãŠäœ¿çšãããåå€éšãã¬ãŒã ã¯ãŒã¯ãäžèŠ§è¡šç€ºãããŸãã ãã¬ãŒã ã¯ãŒã¯ãæ¡åŒµãããšãå€éš API ãšã®éã®ãã¹ãŠã®åŒã³åºãã®äžèЧã衚瀺ãããååŒã³åºããéããŠããŒã¿ãããŒãã¢ãã«åãããªãã·ã§ã³ã䜿çšå¯èœã«ãªããŸãã ãã®ã¢ãŒãã¯ãç¹å®ã®ã³ãŒãããŒã¹ã® CodeQL ã®çµæãæ¹åããã®ã«ç¹ã«åœ¹ç«ã¡ãŸãã
-
äŸåé¢ä¿ã¢ãŒã: ãšãã£ã¿ãŒã¯ãéžæãã CodeQL ããŒã¿ããŒã¹å ã®ãããªãã¯ã«ã¢ã¯ã»ã¹å¯èœãªãã¹ãŠã® API ãèå¥ããŸãã ãã®ãã¥ãŒã¯ãã³ãŒãããŒã¹ã§äœ¿çšã§ããåãããªã㯠API ã®ã¢ããªã³ã°ãè¡ãäžã§ã®ã¬ã€ããšãªããŸãã API å šäœã®ã¢ããªã³ã°ãå®äºããããã¢ãã«ãä¿åããããã䜿çšããŠãäŸåé¢ä¿ã䜿çšãããã¹ãŠã®ã³ãŒãããŒã¹ã® CodeQL åæãæ¹åã§ããŸãã
ãã®èšäºã®æ®ãã®éšåã§ã¯ãCodeQL ã¢ãã« ãšãã£ã¿ãŒã䜿çšããã¢ããªã³ã°äŸåé¢ä¿ã®å®çšçãªåŽé¢ã«ã€ããŠèª¬æããŸãã æè¡æ å ±ã«ã€ããŠã¯ããJava ãš Kotlin ã®ã©ã€ãã©ãª ã¢ãã«ã®ã«ã¹ã¿ãã€ãºãããPython çšã©ã€ãã©ãª ã¢ãã«ã®ã«ã¹ã¿ãã€ãºãããRuby çšã©ã€ãã©ãª ã¢ãã«ã®ã«ã¹ã¿ãã€ãºãããC# çšã©ã€ãã©ãª ã¢ãã«ã®ã«ã¹ã¿ãã€ãºã(CodeQL èšèªããã¥ã¡ã³ã) ãåç §ããŠãã ããã
CodeQL ã¢ãã« ãšãã£ã¿ãŒã®è¡šç€º
ã¡ã¢
ãã® ãããªã㯠ãã¬ãã¥ãŒ æ©èœã䜿çšããã«ã¯ãVisual Studio Code çš CodeQL æ¡åŒµæ©èœã®ææ°ããŒãžã§ã³ãã€ã³ã¹ããŒã«ããŸãã
-
CodeQL ã¯ãŒã¯ã¹ããŒã¹ã VS Code ã§éããŸãã äŸ:
vscode-codeql-starter
ã¯ãŒã¯ã¹ããŒã¹ ã¹ã¿ãŒã¿ãŒ ã¯ãŒã¯ã¹ããŒã¹ã䜿çšããŠããå Žåã¯ãã¢ãã« ãšãã£ã¿ãŒã®ããŒã¿åéã«äœ¿çšããã¯ãšãªã確ä¿ããããã«ql
ãµãã¢ãžã¥ãŒã«main
ãæŽæ°ããŸãã -
Visual Studio Code ã§ãå·Šãµã€ãããŒã® [QL] ãã¯ãªãã¯ã㊠CodeQL æ¡åŒµæ©èœã衚瀺ããŸãã
-
[ããŒã¿ããŒã¹] ãã¥ãŒã§ãã¢ãã«åãã CodeQL ããŒã¿ããŒã¹ãéžæããŸãã
-
CodeQL ã® [ã¡ãœãã ã¢ããªã³ã°] ãã¥ãŒã§ã[ã¢ããªã³ã°ã®éå§] ãã¯ãªãã¯ããŠã¢ãã« ãšãã£ã¿ãŒã衚瀺ããŸãã ãŸãã¯ãVS Code Command Palette ã䜿çšããŠã[CodeQL: ã¢ãã« ãšãã£ã¿ãŒãéã (ããŒã¿) ã³ãã³ããå®è¡ããŸãã
-
CodeQL ã¢ãã« ãšãã£ã¿ãŒã¯ãäžé£ã®ãã¬ã¡ã㪠ã¯ãšãªãå®è¡ããŠã³ãŒãå ã® API ãèå¥ãããšãã£ã¿ãŒãæ°ããã¿ãã«è¡šç€ºãããŸãã
-
ãã¬ã¡ã㪠ã¯ãšãªãå®äºãããšãç¹å®ããã API ããšãã£ã¿ãŒã«è¡šç€ºãããŸãã
ãã³ã
åŒã³åºããŸãã¯ã¡ãœããã®ã¢ããªã³ã°äžã«é åãå¢ããå¿ èŠãããå Žåã¯ãCodeQL ã® [Method Modeling] ãã¥ãŒããã©ã€ã㪠ãµã€ã ããŒããã»ã«ã³ã㪠ãµã€ã ããŒã«ç§»åããããšãã§ããŸãã ãã¥ãŒãéããŠããVS Code ã® [衚瀺] ã¡ãã¥ãŒããã[ãã¥ãŒãéã] ãã¯ãªãã¯ãããšå床éãããšãã§ããŸãã
ã³ãŒãããŒã¹ãå€éš API ã«å¯ŸããŠè¡ãåŒã³åºããã¢ãã«åãã
éåžžããã®æ¹æ³ã¯ãç¹å®ã®ã³ãŒãããŒã¹ã調ã¹ãŠããŠãCodeQL ã®çµæã®ç²ŸåºŠãåäžãããå Žåã«äœ¿çšããŸãã ããã¯ãã³ãŒãããŒã¹ã CodeQL ã§ãµããŒããããŠããªããã¬ãŒã ã¯ãŒã¯ãŸãã¯ã©ã€ãã©ãªã䜿çšããŠããããã¬ãŒã ã¯ãŒã¯ãŸãã¯ã©ã€ãã©ãªã®ãœãŒã¹ ã³ãŒããåæã«å«ãŸããŠããªãå Žåã«äŸ¿å©ã§ãã
ãã®ã»ã¯ã·ã§ã³ã§ã¯ã"sofa-jraft" ãšãã ãªãŒãã³ãœãŒã¹ Java ãããžã§ã¯ããäŸãšããŠäœ¿çšããŸãã ä»ã®ã³ã³ãã€ã«æžã¿èšèªã§èšè¿°ãããå€éš API ã®åŒã³åºããã¢ãã«åãããšã¯ã¹ããªãšã³ã¹ãåæ§ã§ãã
-
Visual Studio Code ã§ãCodeQL ã®ã«ãã¬ããžãåäžããã察象㮠CodeQL ããŒã¿ããŒã¹ãéžæããŸãã
-
CodeQL ã¢ãã« ãšãã£ã¿ãŒã衚瀺ããŸãã æ¢å®ã§ã¯ããšãã£ã¿ãŒã¯ã¢ããªã±ãŒã·ã§ã³ ã¢ãŒãã§å®è¡ãããéžæããã³ãŒãããŒã¹ã§äœ¿çšãããå€éš API ã®äžèЧã衚瀺ãããŸãã
-
å€éš API ãå±éããã³ãŒãããŒã¹ããå€éšäŸåé¢ä¿ãžã®åŒã³åºãã®äžèЧã衚瀺ããŸãã
-
API åŒã³åºããŸãã¯ã¡ãœããã«é¢é£ä»ããããŠãã [ãã¥ãŒ] ãã¯ãªãã¯ããŠãã³ãŒãããŒã¹ã§äœ¿çšãããŠããå Žæã衚瀺ããŸãã
-
ã³ãŒãããŒã¹ãã API ãžã®æåã®åŒã³åºããå«ããã¡ã€ã«ãéããCodeQL ã® [ã¡ãœããã®äœ¿ç𿹿³] ãã¥ãŒã VS Code ã«è¡šç€ºãããŸã (éåžžã[åé¡] ãã¥ãŒãš [ã¿ãŒããã«] ãã¥ãŒã衚瀺ãããå Žæã§ã)ã CodeQL ã® [ã¡ãœããã®äœ¿ç𿹿³] ãã¥ãŒã§ã¯ãã³ãŒããã API ãžã®ãã¹ãŠã®åŒã³åºãã®äžèЧãã¡ãœããå¥ã«ã°ã«ãŒãåãããŠããŸãã åçšéãã¯ãªãã¯ããŠãã¡ãœããã®äœ¿ç𿹿³ãã¢ãã«åããæ¹æ³ã決å®ã§ããŸãã
-
ã¡ãœããã®äœ¿ç𿹿³ãã¢ãã«åããæ¹æ³ã決å®ããããå¥ã®ã¢ãã«ã®çš®é¡ãéžæã§ããŸãã CodeQL æ¡åŒµæ©èœã® [CodeQL ã¡ãœããã®ã¢ããªã³ã°] ã§ã[ã¢ãã«ã®çš®é¡] ã®ããããããŠã³ãã¯ãªãã¯ããŸãã ãã®å€æŽã¯ãã¡ã€ã³ ã¢ãã« ãšãã£ã¿ãŒã«èªåçã«åæ ãããŸãã
-
ãã®è¡ã®ä»ã®ãã£ãŒã«ãã¯ãéžæããã¢ãã«ã®çš®é¡ã§äœ¿çšã§ãããªãã·ã§ã³ã§æŽæ°ãããŸãã
- "Source": ã¢ãã«åãã "åºå" èŠçŽ ãéžæããŸãã
- "Sink": ã¢ãã«åãã "å ¥å" èŠçŽ ãéžæããŸãã
- "Flow summary": ã¢ãã«ã«å¯Ÿãã "å ¥å" èŠçŽ ãš "åºå" èŠçŽ ãéžæããŸãã
-
ã¢ãã«ã®ããŒã¿ãããŒã® "çš®é¡" ãå®çŸ©ããŸãã
-
ã¢ããªã³ã°ãå®äºããããã¡ã€ã³ ã¢ãã« ãšãã£ã¿ãŒã衚瀺ãã[ãã¹ãŠä¿å] ãŸã㯠[ä¿å] (å±éãããåã¡ãœããã®äžèЧã®å³äžã«è¡šç€º) ãã¯ãªãã¯ããŸãã ãšãã£ã¿ãŒã§ã¢ãã«åãããã¡ãœããã®å²åãæŽæ°ãããŸãã
ã¢ãã«ã¯ã¯ãŒã¯ã¹ããŒã¹ã® .github/codeql/extensions/CODEQL-MODEl-PACK
ã«æ ŒçŽãããŸããCODEQL-MODEL-PACK
ã¯ãéžæãã CodeQL ããŒã¿ããŒã¹ã®ååã§ãã ã€ãŸãããªããžããªåããã€ãã³ãCodeQL ã§åæãããèšèªãšãªã£ãŠããŸãã 詳ããã¯ããCodeQL ããã¯ã®äœæãšæäœããã芧ãã ããã
ã¢ãã«ã¯ãå€éš API ããšã« 1 ã€ãã€ãäžé£ã® YAML ããŒã¿æ¡åŒµãã¡ã€ã«ã«æ ŒçŽãããŸãã æ¬¡ã«äŸã瀺ããŸãã
.github/codeql/extensions/sofa-jraft-java # the model pack directory
models
jmh-core.model.yml # models calls to jmh-core@1.20
rocksdbjni.model.yml # models calls to rocksdbjni@7.7.3
ã³ãŒãããŒã¹ã®ãããªã㯠API ã®ã¢ãã«å
éåžžããã®ã¡ãœããã¯ãçµç¹ãè€æ°ã®ã³ãŒãããŒã¹ã§äœ¿çšãããã¬ãŒã ã¯ãŒã¯ãŸãã¯ã©ã€ãã©ãªãã¢ãã«åããå Žåã«äœ¿çšããŸãã ã¢ãã«ã®äœæãšãã¹ããå®äºããããCodeQL ã¢ãã« ããã¯ã GitHub Container registry ã«çºè¡ãããšãçµç¹å šäœã§äœ¿çšã§ããããã«ãªããŸãã
ãã®ã»ã¯ã·ã§ã³ã§ã¯ã"sofa-jraft" ãšãã ãªãŒãã³ãœãŒã¹ Java ãããžã§ã¯ããäŸãšããŠäœ¿çšããŸãã ä»ã®ã³ã³ãã€ã«æžã¿èšèªã§èšè¿°ãããå€éš API ã®åŒã³åºããã¢ãã«åãããšã¯ã¹ããªãšã³ã¹ãåæ§ã§ãã
-
ã¢ãã«åãã CodeQL ããŒã¿ããŒã¹ãéžæããŸãã
-
CodeQL ã¢ãã« ãšãã£ã¿ãŒã衚瀺ããŸãã æ¢å®ã§ã¯ããšãã£ã¿ãŒã¯ã¢ããªã±ãŒã·ã§ã³ ã¢ãŒãã§å®è¡ãããŸãã äŸåé¢ä¿ã¢ãŒãã衚瀺ããã«ã¯ã[äŸåé¢ä¿ã§ã¢ãã«è¡šç€º] ãã¯ãªãã¯ããŸãã ç»é¢ãå€ããããã¬ãŒã ã¯ãŒã¯ãŸãã¯ã©ã€ãã©ãªã®ãããªã㯠API ã衚瀺ãããŸãã
-
ã¯ãªãã¯ããŠããã±ãŒãžãå±éãã䜿çšå¯èœãªã¡ãœããã®äžèЧã衚瀺ããŸãã
-
ã¡ãœããã«é¢é£ä»ããããŠãã [ãã¥ãŒ] ãã¯ãªãã¯ããŠããã®å®çŸ©ã衚瀺ããŸãã
-
ã¡ãœããã®ã¢ãã«åæ¹æ³ã決å®ãããã"ã¢ãã«å" ãå®çŸ©ããŸãã
-
ãã®è¡ã®ä»ã®ãã£ãŒã«ãã¯ãéžæããã¢ãã«ã®çš®é¡ã§äœ¿çšã§ãããªãã·ã§ã³ã§æŽæ°ãããŸãã
- "Source": ã¢ãã«åãã "åºå" èŠçŽ ãéžæããŸãã
- "Sink": ã¢ãã«åãã "å ¥å" èŠçŽ ãéžæããŸãã
- "Flow summary": ã¢ãã«ã«å¯Ÿãã "å ¥å" èŠçŽ ãš "åºå" èŠçŽ ãéžæããŸãã
-
ã¢ãã«ã®ããŒã¿ãããŒã® "çš®é¡" ãå®çŸ©ããŸãã
-
ã¢ããªã³ã°ãå®äºãããã[ãã¹ãŠä¿å] ãŸã㯠[ä¿å] (å±éãããååŒã³åºãã®äžèЧã®å³äžã«è¡šç€º) ãã¯ãªãã¯ããŸãã ãšãã£ã¿ãŒã§ã¢ãã«åãããåŒã³åºãã®å²åãæŽæ°ãããŸãã
ã¢ãã«ã¯ã¯ãŒã¯ã¹ããŒã¹ã® .github/codeql/extensions/CODEQL-MODEL-PACK
ã«æ ŒçŽãããŸããCODEQL-MODEL-PACK
ã¯ãéžæãã CodeQL ããŒã¿ããŒã¹ã®ååã§ãã ã€ãŸãããªããžããªåããã€ãã³ãCodeQL ã§åæãããèšèªãšãªã£ãŠããŸãã 詳ããã¯ããCodeQL ããã¯ã®äœæãšæäœããã芧ãã ããã
ã¢ãã«ã¯ããããªã㯠ã¡ãœããããšã« 1 ã€ãã€ãäžé£ã® YAML ããŒã¿æ¡åŒµãã¡ã€ã«ã«æ ŒçŽãããŸãã æ¬¡ã«äŸã瀺ããŸãã
.github/codeql/extensions/sofa-jraft-java # the model pack directory
models
com.alipay.sofa.jraft.option.model.yml # models public methods in package
com.alipay.sofa.jraft.rhea.options.model.yml
ãšãã£ã¿ãŒã¯ãã¢ãã«åããããã±ãŒãžããšã«åå¥ã®ã¢ãã« ãã¡ã€ã«ãäœæããŸãã
è€æ°ã®æœåšçãªãããŒãæã€ã¢ããªã³ã° ã¡ãœãã
äžéšã®ã¡ãœããã§ã¯ãè€æ°ã®ããŒã¿ ãããŒããµããŒããããŠããŸãã ã¡ãœããã®ãã¹ãŠã®ããŒã¿ ãããŒãã¢ãã«åããããšãéèŠã§ããããããªããšãã¡ãœããã®äœ¿çšã«é¢é£ãããã¹ãŠã®æœåšçãªåé¡ãæ€åºã§ããªããªããŸãã ãŸããã¡ãœããã® 1 ã€ã®ããŒã¿ ãããŒãã¢ãã«åããæ¬¡ã«ã¡ãœããè¡ã® + ãã¿ã³ã§ 2 ã€ç®ã®ããŒã¿ ãã㌠ã¢ãã«ãæå®ããŸãã
VS Code ã§ CodeQL ã¢ãã« ããã¯ããã¹ããã
VS Code ã§äœæãã CodeQL ã¢ãã« ããã¯ã¯ã[å®è¡äžã®ã¯ãšãª: æ¡åŒµæ©èœããã¯ã䜿çšãã] èšå®ã§ãã¹ãã§ããŸãã 詳ããã¯ããèšå®ã®ã«ã¹ã¿ãã€ãºããã芧ãã ããã ãã®ã¡ãœããã¯ãããŒã¿ããŒã¹ãšããªã¢ã³ãåæãªããžããªã®äž¡æ¹ã§æ©èœããŸãã
-
ã¯ãŒã¯ã¹ããŒã¹ã®
.github/codeql/extensions
ãã£ã¬ã¯ããªå ã«æ ŒçŽãããŠããã¢ãã« ããã¯ã䜿çšã㊠CodeQL ããŒã¿ããŒã¹ã«å¯ŸããŠã¯ãšãªãå®è¡ããã«ã¯ã次ã®ã³ãã³ãã䜿çšããŠsettings.json
ãã¡ã€ã«ãæŽæ°ããŸãã"codeQL.runningQueries.useExtensionPacks": "all",
-
ã¢ãã« ããã¯ã䜿çšããã« CodeQL ããŒã¿ããŒã¹ã«å¯ŸããŠã¯ãšãªãå®è¡ããã«ã¯ã次ã®ã³ãã³ãã䜿çšããŠ
settings.json
ãã¡ã€ã«ãæŽæ°ããŸãã"codeQL.runningQueries.useExtensionPacks": "none",
ã¢ãã«ãæ£åžžã«åäœããŠããå Žåã¯ã2 ã€ã®å¥ã ã®å®è¡çµæãç°ãªã£ããã®ãšãªããŸãã çµæã«éãããªãå Žåã¯ãæ¢ç¥ã®ãã°ãå°å ¥ããŠãã¢ãã«ãæåŸ ã©ããã«åäœããããšã確èªããå¿ èŠããããŸãã