éçšç°å¢ã§çºèŠããããœãããŠã§ã¢ã®è匱æ§ãä¿®æ£ããã«ã¯ãéçºæ®µéã§çºèŠãããè匱æ§ã®ä¿®æ£ã«æ¯ã¹ãŠãå¹³åã§4åã®ã³ã¹ããããããŸããIBMã®2025幎çãããŒã¿äŸµå®³ã³ã¹ãã¬ããŒããã«ãããšã䟵害ã®å¹³åã³ã¹ãã¯4.88äžãã«ã§ãæ€åºãããªãã£ããœãŒã¹ã³ãŒãã®è匱æ§ã«èµ·å ãã䟵害ã¯ãæ ¹æ¬åå ã®ä¿®åŸ©ã«ã€ã³ã·ãã³ã察å¿ã ãã§ãªãã³ãŒãããŒã¹ã®ä¿®åŸ©ãå¿ èŠãšãªããããæãã³ã¹ãã®ãããã±ãŒã¹ã®äžã€ã§ããã³ãŒãã¹ãã£ã³ããŒã«ã¯ãè匱æ§ã®çºèŠã䟵害åŸã§ã¯ãªããéçºç°å¢ã®ã§ããã ãæ©ãæ®µéã§è¡ãããã«ååšããŸãã
ã³ãŒãã¹ãã£ã³ãšã¯ããœãããŠã§ã¢ãæ¬çªç°å¢ã«æå ¥ãããåã«ããœãŒã¹ã³ãŒããã³ã³ãã€ã«æžã¿ãã€ããªããŸãã¯å®è¡äžã®ã¢ããªã±ãŒã·ã§ã³ãèªåçã«åæããã»ãã¥ãªãã£è匱æ§ãå質äžã®æ¬ é¥ãã³ã³ãã©ã€ã¢ã³ã¹éåãããã³æè¡çè² åµãç¹å®ããããšã§ããããã¯ã¢ããªã±ãŒã·ã§ã³ã»ãã¥ãªãã£ã®åºç€ãšãªãã¬ã€ã€ãŒã§ãããäŸµå ¥ãã¹ããè åšã¢ããªã³ã°ã®ä»£æ¿ãšãªããã®ã§ã¯ãããŸããããå€§èŠæš¡ãªç°å¢ã§ã¯äººéã®ã¬ãã¥ãŒæ åœè ãäžè²«ããŠæ€åºã§ããªããäºæž¬å¯èœã§åçŸæ§ã®ããçš®é¡ã®ãšã©ãŒãææããäœç³»çãªããŒã¹ã©ã€ã³ãšãªããŸãã
ããŒã ãåºè·ãããã¹ãŠã®èšèªãã¹ãã£ã³ããŠãã ãã
SMART TS XL COBOLãJavaãPythonãJavaScriptããããŠã客æ§ã®ããŒããã©ãªãªå šäœã«å¯ŸããŠãéçã³ãŒãã¹ãã£ã³ãåæã«å®è¡ããŸãã
ããã«è©³ããâŠã³ãŒãã¹ãã£ã³ãšã¯äœã§ããïŒ
ã³ãŒãã¹ãã£ã³ãšã¯ããœãããŠã§ã¢ææç©ïŒãœãŒã¹ã³ãŒãããã€ãã³ãŒãããã€ããªãå®è¡äžã®ã¢ããªã±ãŒã·ã§ã³ãªã©ïŒãèªåçã«æ€æ»ãããã¹ãŠã®è¡ã人éãæåã§ç¢ºèªããããšãªãæ¬ é¥ãç¹å®ããææ³ã§ããã¹ãã£ã³ããŒã«ã¯ãã«ãŒã«ã»ããããã¿ãŒã³ãããã³ã°ãããŒã¿ãããŒåæããããŠããé«åºŠãªããŒã«ã§ã¯ããã·ãŒãžã£éæ±æè¿œè·¡ãªã©ãé©çšããããã§ãªããã°æ¬çªç°å¢ã«ãŸã§å°éããŠããŸããããªåé¡ãæ€åºããŸãã
ã³ãŒãã¹ãã£ã³ãšã¯äœãïŒã³ãŒãã¬ãã¥ãŒãã¢ãŒããã¯ãã£åæãäŸµå ¥ãã¹ããã©ã³ã¿ã€ã ã¢ãã¿ãªã³ã°ã®ä»£æ¿ãšãªããã®ã§ã¯ãããŸãããã³ãŒãã¹ãã£ã³ã¯ãã³ãŒãã¬ãã¥ãŒæ åœè ãã«ãŒãã³äœæ¥ã®ããã«èŠããããã«æ³šææ·±ã確èªããªãéšåãå«ããã³ãŒãããŒã¹å šäœã«ããã£ãŠæ¢ç¥ã®ãã¿ãŒã³ã確å®ãã€äžè²«ããŠæ€åºãããé«éã§äœç³»çãã€æ¡åŒµæ§ã®é«ãæåã®ãã£ã«ã¿ãŒã§ãã
ãã®æèã«ãããã³ãŒãæ€èšŒãšã¯ãã³ãŒãã仿§ã©ããã«åäœããŠããããšã確èªããããšã§ããã¹ãã£ã³ã¯æ€èšŒã®æ§æèŠçŽ ã®äžã€ã§ããããã¿ãŒã³æ€åºãšããŒã¿ãããŒåæãåŠçããèªååãããèŠçŽ ã§ããæåã¬ãã¥ãŒããã¹ããåœ¢åŒæ€èšŒã¯ãã®ä»ã®æ§æèŠçŽ ã§ããããããçµã¿åããã£ãŠæ€èšŒããã°ã©ã ãæ§æããŸããã¹ãã£ã³ã ãã§ã¯äžååã§ãã
éçã³ãŒãã¹ãã£ã³ãšåçã³ãŒãã¹ãã£ã³ïŒãã®æ žå¿çãªéã
ã¹ãã£ã³ããã°ã©ã ãæ§ç¯ããäžã§æãéèŠãªéžæã¯ãåææ³ããã€å®è¡ãããäœãèŠãããšãã§ããã®ããçè§£ããããšã§ãã
| 次å | éçïŒSASTïŒ | ãã€ãããã¯ïŒDASTïŒ |
|---|---|---|
| å®è¡æ | ãœãŒã¹ã³ãŒãäžã§ã¯ãå®è¡ã¯äžèŠã§ãã | å®è¡äžã®ã¢ããªã±ãŒã·ã§ã³ã«å¯Ÿã㊠|
| äœãèŠããã | ã³ãŒãæ§é ãããŒã¿ãããŒããã¿ãŒã³éå | å®è¡æåäœããµãŒããŒæ§æãAPIå¿ç |
| çºèŠ | SQLã€ã³ãžã§ã¯ã·ã§ã³ãã¿ãŒã³ãããŒãã³ãŒããããç§å¯æ å ±ãå®å šã§ãªãæå·åãã³ãŒãã®èã | èªèšŒãã€ãã¹ãã©ã³ã¿ã€ã ã€ã³ãžã§ã¯ã·ã§ã³ãã»ãã·ã§ã³ç®¡çã®æ¬ é¥ããµãŒããŒèšå®ãã¹ |
| ãã¹ | å®è¡æã®ã¿ã®è匱æ§ãèšå®ã®åé¡ | ãã¹ãäžã«ããªã¬ãŒãããªãã³ãŒãã¬ãã«ã®ãã¿ãŒã³ |
| é床 | éããæ°ç§ããæ°åã§å®äºããŸãã | åäœãé ããå®è¡ç°å¢ãå¿ èŠã§ã |
| éçºè ããã®ãã£ãŒããã㯠| 峿ãIDEããŸãã¯äºåã³ããã | é å»¶ããŠããŸããã¢ããªã±ãŒã·ã§ã³ã®ãããã€ãå¿ èŠã§ãã |
| åœéœæ§ç | ããé«ããå®è¡æã³ã³ããã¹ããæ¬ èœããŠãã | äœãå€ãæªçšå¯èœæ§ãç¢ºèª |
| æé©ãªçµ±å | IDEãããªã³ãããããã¹ãŠã®ãã«ãªã¯ãšã¹ãã«å¯ŸããCI/CD | ã¹ããŒãžã³ã°ç°å¢ããã¬ãªãªãŒã¹ã²ãŒã |
ã»ãšãã©ã®ããŒã ã«ãšã£ãŠçŸå®çãªè§£æ±ºçã¯ãäž¡æ¹ãå®è¡ããããšã§ããIDEãšCIãã€ãã©ã€ã³ã§ã®éçã¹ãã£ã³ã¯ãã³ãŒããã¿ãŒã³ã«é¢ããè¿ éãã€æ©æã®ãã£ãŒãããã¯ãæäŸããŸããã¹ããŒãžã³ã°ç°å¢ã«å¯Ÿããåçã¹ãã£ã³ã¯ãè匱æ§ã®å¯èœæ§ã確èªããéçè§£æã§ã¯æ€åºã§ããªãæ§æäžã®åé¡ãæ€åºããŸãã
ã³ãŒãã¹ãã£ã³ã®4ã€ã®ã¿ã€ã
SASTïŒéçã¢ããªã±ãŒã·ã§ã³ã»ãã¥ãªãã£ãã¹ãïŒ
SASTã¯ãå®è¡ããã«ãœãŒã¹ã³ãŒãããã€ãã³ãŒãããŸãã¯ãã€ããªãåæããŸããããã¯æãäžè¬çãªã³ãŒãã¹ãã£ã³ææ³ã§ãããIDEãCI/CDãã€ãã©ã€ã³ã«çµ±åãããŠããŸããSASTã¯ãæ±æåæïŒä¿¡é Œã§ããªãå ¥åããå±éºãªã·ã³ã¯ãŸã§ã远跡ïŒã«ããã€ã³ãžã§ã¯ã·ã§ã³è匱æ§ããã¿ãŒã³ãããã³ã°ã«ããæå·åã®æªçšãæåååæã«ããããŒãã³ãŒããããèªèšŒæ å ±ãããã³ã¡ããªã¯ã¹ãšãã¿ãŒã³ã«ãŒã«ã«ããæ§é çãªå質åé¡ãæ€åºããŸãã
æé©ãªããŒã«: SemgrepãSonarQubeãCheckmarxãCodeQLãVeracodeãSnyk Codeã SMART TS XL.
DASTïŒåçã¢ããªã±ãŒã·ã§ã³ã»ãã¥ãªãã£ãã¹ãïŒ
DASTã¯ã皌åäžã®ã¢ããªã±ãŒã·ã§ã³ã«å¯ŸããŠã现工ãããå ¥åãéä¿¡ããå¿çãç£èŠããããšã§åäœããŸãããœãŒã¹ã³ãŒããèŠãããšã¯ã§ãããæ»æè ãšåãããã«å€éšããã¢ããªã±ãŒã·ã§ã³ãšããåãããŸããDASTã¯ãå®è¡æã³ã³ããã¹ããå¿ èŠãšããããSASTã§ã¯æ€åºã§ããªãèªèšŒãã€ãã¹ãããžãã¹ããžãã¯ã®æ¬ é¥ããµãŒããŒãµã€ããªã¯ãšã¹ããã©ãŒãžã§ãªãæ§æäžã®è匱æ§ãªã©ãæ€åºããŸãã
æé©ãªããŒã«ïŒ OWASP ZAPãBurp SuiteãInvictiãAcunetixãHCL AppScanã
SCAïŒãœãããŠã§ã¢æ§æåæïŒ
SCA ã¯äŸåé¢ä¿ãããã§ã¹ããã¹ãã£ã³ããŸã (package.json, pom.xml, requirements.txt, go.modè匱æ§ããŒã¿ããŒã¹ã«å¯ŸããŠã¹ãã£ã³ãå®è¡ãããµãŒãããŒãã£ã©ã€ãã©ãªå
ã®æ¢ç¥ã®CVEãç¹å®ããŸããçŸä»£ã®ã¢ããªã±ãŒã·ã§ã³ã¯ãã¹ãŠãªãŒãã³ãœãŒã¹ã®äŸåé¢ä¿ã䜿çšããŠããŸããSCAã¯ããããã®äŸåé¢ä¿ãæ¢ç¥ã®è匱æ§ãåŒãèµ·ãããªãããšãä¿èšŒããã¹ãã£ã³ã¬ã€ã€ãŒã§ãã
æé©ãªããŒã«ïŒ SnykãOWASP Dependency-CheckãMendïŒæ§WhiteSourceïŒãGitHub Dependabotãnpm auditã
IASTïŒã€ã³ã¿ã©ã¯ãã£ãã»ã¢ããªã±ãŒã·ã§ã³ã»ã»ãã¥ãªãã£ã»ãã¹ãïŒ
IASTã¯ãã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã«çµã¿èŸŒãŸãããšãŒãžã§ã³ããŸãã¯ã»ã³ãµãŒã䜿çšããŠãå®è¡æã«ã¢ããªã±ãŒã·ã§ã³ãèšæž¬ããŸããã¢ããªã±ãŒã·ã§ã³å éšããå®éã®èŠæ±åŠçãç£èŠããDASTã®å®è¡æç²ŸåºŠãšSASTã®ã³ãŒãã¬ãã«ã®æŽå¯åãå ŒãåããŠããŸããIASTã¯4ã€ã®ã¿ã€ãã®äžã§èª€æ€ç¥çãæãäœãã§ãããèšæž¬æžã¿ã®ãããã€ã¡ã³ãç°å¢ãå¿ èŠã§ãã
æé©ãªããŒã«ïŒ Contrast SecurityãSeekerïŒSynopsysïŒãHCL IASTã
ããããçµã¿åãããæ¹æ³ïŒéçºè ãžã®è¿ éãªãã£ãŒãããã¯ã®ããã«ãã³ãããããšã«SASTãå®è¡ããŸããäŸåé¢ä¿ã®å€æŽããšã«SCAãå®è¡ããŸãããªãªãŒã¹åã«ã¹ããŒãžã³ã°ç°å¢ã«å¯ŸããŠDASTãå®è¡ããŸãã誀æ€åºçãæå°éã«æããå¿ èŠãããéèŠãªã¢ããªã±ãŒã·ã§ã³ã«ã¯ãIASTã远å ããŸãã
ã³ãŒãã¹ãã£ã³ã§å®éã«äœãèŠã€ããã
ã¹ãã£ã³ã¿ã€ãã«ãã£ãŠæ€åºã§ããè匱æ§ã®çš®é¡ãç°ãªããŸãããã®ãããã³ã°ã¯ãåããŒã ãããããã®ãªã¹ã¯ãããã¡ã€ã«ã«åãããŠã©ã®ã¹ãã£ããŒã«æè³ãã¹ãããçè§£ããã®ã«åœ¹ç«ã¡ãŸãã
| è匱æ§ã«ããŽãª | ãµã¹ã | ãã¹ã | SCA | IAST |
|---|---|---|---|---|
| SQLã€ã³ãžã§ã¯ã·ã§ã³ | 匷åïŒæ±æåæïŒ | 匷åïŒç©æ¥µçãªãã¹ãïŒ | ããã | 匷ã |
| XSS | ç©å¥æŽŸ | 匷ã | ããã | 匷ã |
| ããŒãã³ãŒããããç§å¯æ å ±ïŒèªèšŒæ å ± | 匷åãªïŒãã¿ãŒã³ãããã³ã°ïŒ | ããã | äžéš | ããã |
| å£ããèªèšŒ | éšåçãªïŒåçŽã®ã¿ïŒ | 匷ã | ããã | 匷ã |
| è匱ãªäŸåé¢ä¿ïŒCVEïŒ | ããã | ããã | 匷ã | ããã |
| æå·æè¡ã®æªçš | 匷åãªïŒæ¢ç¥ã®æªè³ªãªAPIïŒ | ããã | äžéš | äžéš |
| ã»ãã¥ãªãã£èšå®ã®èª€ã | éšåçïŒã³ãŒãå ã®èšå®ïŒ | 匷ã | ããã | äžéš |
| SSRF | 匷åïŒæ±æåæïŒ | 匷ã | ããã | 匷ã |
| ãã¹ãã©ããŒãµã« | 匷ã | ç©å¥æŽŸ | ããã | 匷ã |
| ã³ãã³ãã€ã³ãžã§ã¯ã·ã§ã³ | 匷åïŒæ±æåæïŒ | 匷ã | ããã | 匷ã |
| ã³ãŒãåè³ªïŒæè¡çè² åµ | 匷ã | ããã | ããã | ããã |
| ãããã³ãŒã | 匷ã | ããã | ããã | ããã |
SDLCã«ãããã³ãŒãã¹ãã£ã³ïŒãã€äœãå®è¡ããã¹ãã
ã»ãã¥ãªãã£ã«ããããã·ããã¬ãããã®ååãã€ãŸãè匱æ§ã®æ€åºãéçºã©ã€ããµã€ã¯ã«ã®ã§ããã ãæ©ãæ®µéã§è¡ããšããååããããã³ãŒãã¹ãã£ã³ãæšæºçãªææ³ãšãªã£ãçç±ã§ããéçºè ã®IDEã§SQLã€ã³ãžã§ã¯ã·ã§ã³ãçºèŠããã°ãä¿®æ£ã«ãããæéã¯ãããæ°åã§ãããããã䟵害ãçºçããåŸã«æ¬çªç°å¢ã§çºèŠããå Žåãã€ã³ã·ãã³ã察å¿ã修埩ãèŠå¶å ±åã«æ°é±éãã®æéãèŠããŸãã
IDEã§ã¯ã SonarLintãSnyk IDEæ¡åŒµæ©èœãSemgrep IDEãã©ã°ã€ã³ãªã©ããéçºè ãã³ãŒããèšè¿°ããéã«ã€ã³ã©ã€ã³ã§è匱æ§ãæ€åºããŸããè匱æ§ã®ããè¡ãèšè¿°ãããéã«è¡šç€ºãããSQLã€ã³ãžã§ã¯ã·ã§ã³ã®èŠåã¯ãä¿®æ£ã«æ°ç§ããããããŸããã
ããªã³ãããããã¯ïŒã³ãŒãããªããžããªã«å°éããåã«ãé«éãªSASTã«ãŒã«ãšã·ãŒã¯ã¬ããæ€åºãå®è¡ããŸããããªã³ãããããã¯ã¯10ç§ä»¥å ã«å®äºããé«éãªãã®ã§ãªããã°ãªãããããã§ãªããã°éçºè ãç¡å¹ã«ããŠããŸãã§ãããã
ãã¹ãŠã®ãã«ãªã¯ãšã¹ãã«å¯ŸããŠãå®å šãªSASTã¹ãã£ã³ãšSCAãã§ãã¯ã宿œããŸããå€ãã®ããŒã ã¯ããã§å質ã²ãŒããé©çšããæ°ããªé倧ãªåé¡ãçºèŠãããå Žåã¯ããŒãžããããã¯ããŸãã
æ¯æ©ãŸãã¯æ¯é±ïŒè©³çްãªããã»ã¹éåæãå®å šãªDASTã¹ãã£ã³ãå æ¬çãªSCAç£æ»ããããã¯ã³ãããããšã«å®è¡ããã«ã¯æéãããããããããã¡ã€ã³ãã©ã³ãã§å®æçã«å®è¡ãããã
å®å šãªCI/CDã¹ãã£ã³æ§æïŒ
ã€ã ã«
# GitHub Actions: layered scanning at the right pipeline stage
name: Code Scanning Pipeline
on:
push:
branches: [main, develop]
pull_request:
jobs:
sast:
name: Static Analysis
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Semgrep SAST scan
uses: semgrep/semgrep-action@v1
with:
config: >-
p/owasp-top-ten
p/security-audit
p/secrets
- name: SonarCloud quality gate
uses: SonarSource/sonarcloud-github-action@master
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
sca:
name: Dependency Scan
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Snyk dependency check
uses: snyk/actions/node@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: --severity-threshold=high
secrets:
name: Secret Detection
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: TruffleHog secret scan
uses: trufflesecurity/trufflehog@main
with:
extra_args: --only-verified
ã³ãŒãã¹ãã£ã³ããŒã«ïŒå®è·µçãªæŠèŠ
| ããŒã« | ã¿ã€ã | 以äžã®ããã«ãã¹ã | ãªãŒãã³ãœãŒã¹ |
|---|---|---|---|
| ã»ã ã°ã¬ãã | ãµã¹ã | ã«ã¹ã¿ã ã«ãŒã«ãé«éã¹ãã£ã³ãå€èšèªå¯Ÿå¿ | ã¯ãïŒã³ãã¥ããã£ã«ãŒã«ïŒ |
| SonarQube / SonarCloud | ãµã¹ã | å質ïŒã»ãã¥ãªãã£ãCI/CDçµ±åããã¬ã³ã远跡 | ã³ãã¥ããã£ãšãã£ã·ã§ã³ |
| ã³ãŒãQL | ãµã¹ã | æ·±ãæå³è§£æãGitHubãã€ãã£ã | ã¯ã |
| ãã§ãã¯ããŒã¯ | ãµã¹ã | ãšã³ã¿ãŒãã©ã€ãºã¢ããªã±ãŒã·ã§ã³ã»ãã¥ãªãã£ããã°ã©ã ãã³ã³ãã©ã€ã¢ã³ã¹ | ããã |
| ã¹ããã¯ã³ãŒã | ãµã¹ã | éçºè ã«åªãããIDEåªå ã®ã»ãã¥ãªã㣠| ããªãŒãã¢ã |
| OWASP ã¶ãã | ãã¹ã | ç¡æã®DASTãCI/CDäºæ | ã¯ã |
| ãã£ã·ã¹ã€ãŒã | ãã¹ã | æåããã³èªååãããWebã¢ããªã±ãŒã·ã§ã³ã»ãã¥ãªãã£ãã¹ã | ã³ãã¥ããã£ãšãã£ã·ã§ã³ |
| ã¹ãã㯠/ ã¡ã³ã | SCA | äŸåé¢ä¿ã®è匱æ§ç®¡ç | ããªãŒãã¢ã |
| OWASP äŸåé¢ä¿ãã§ã㯠| SCA | ãªãŒãã³ãœãŒã¹ã®äŸåé¢ä¿ã«é¢ããCVEã¹ãã£ã³ | ã¯ã |
| ã³ã³ãã©ã¹ãã»ãã¥ãªã㣠| IAST | å®è¡æã®ç²ŸåºŠãé«ãã誀æ€åºãå°ãªãã | ããã |
| SMART TS XL | SAST + æ§é | å€èšèªãCOBOLããšã³ã¿ãŒãã©ã€ãºãã¬ã¬ã·ãŒ | ããã |
广çãªã³ãŒãã¹ãã£ã³ã®ãã¹ããã©ã¯ãã£ã¹
ä¿¡é Œæ§ãé«ãããã€ãºã®å°ãªãã«ãŒã«ããå§ããŸãããã忥ããå©çšå¯èœãªãã¹ãŠã®ã«ãŒã«ã»ãããå®è¡ãããšãäœåãã®æ€åºçµæãåºãŠéçºè ãå§åããå°å ¥ãé»å®³ããŸãããŸãã¯ãéèŠåºŠãé«ãä¿¡é Œæ§ã®é«ãã«ãŒã«ãOWASP Top 10ãã¿ãŒã³ãç§å¯ã®æ€åºãæ¢ç¥ã®å±éºãªé¢æ°åŒã³åºããªã©ãå³éžãããã«ãŒã«ã»ããããå§ããŸããããããŒã ãããŒã«ãžã®ä¿¡é Œãæ·±ããã«ã€ããŠãã«ãŒã«ã段éçã«è¿œå ããŠãããŸãã
æ°èŠã³ãŒãã®ã¿ã«é©çšããŸããæ¢åã®äžå ·åãæ®ã£ãŠããã¬ã¬ã·ãŒã³ãŒãããŒã¹ã®å Žåãå質ã²ãŒããèšå®ããŠãçŸåšã®ãã«ãªã¯ãšã¹ãã§å°å ¥ãããäžå ·åã®ã¿ããããã¯ããããã«ããããšã§ïŒã³ãŒãããŒã¹å šäœããããã¯ããã®ã§ã¯ãªãïŒãæ¢åã®äžå ·åã®ããã¯ãã°ãäœæããŠéçºå šäœããããã¯ããããšãªããã»ãã¥ãªãã£ãã§ãã¯ãã¯ãŒã¯ãããŒã«çµã¿èŸŒãããšãã§ããŸãã
ã€ã ã«
# SonarQube: new-code quality gate configuration
# Block merges on new critical security hotspots only
sonar.qualitygate.wait=true
sonar.newCode.referenceBranch=main
# Existing findings in main don't block PRs
# Only new findings in the PR diff are gated
誀æ€åºãäœç³»çã«èª¿æŽããŸããããéçºè ãäžåºŠèª¿æ»ããŠç¡èŠãã誀æ€åºã¯è¿·æãªã ãã§ãããããã6ãæéãã¹ãŠã®ãã«ãªã¯ãšã¹ãã§èª€æ€åºãçºçãããšãéçºè ã¯æ€åºçµæãå®å šã«ç¡èŠããããã«ãªããŸããæå¶ã¬ãã¥ãŒããã»ã¹ã確ç«ããŸãããããã¹ãŠã®æå¶ã«ã¯ææžåãããæ£åœæ§ãå¿ èŠã§ãããæå¶ã¯ååæããšã«ã¬ãã¥ãŒãããŸãã
調æ»çµæãæ·±å»åºŠã¬ãã«ã«ãããã³ã°ããŸãããã¹ãŠã®èª¿æ»çµæã«å³æå¯Ÿå¿ãå¿ èŠãªããã§ã¯ãããŸãããæ®µéçãªå¯Ÿå¿ïŒ
- ã¯ãªãã£ã«ã« ïŒCVSS 9以äžãæªçšå¯èœãšç¢ºèªæžã¿ïŒïŒå±éããããã¯ãã24æé以å ã«ä¿®æ£ããã
- ã〠(CVSS 7-8): PRããŒãžããããã¯ããã¹ããªã³ãå ã§ä¿®æ£ãã
- ææ³ããã¯ãã°ã«è¿œå ããååæå ã«å¯Ÿå¿ããŸãã
- äœã¬ãã«ïŒæ å ±æäŸã¬ãã«: ãªãã¡ã¯ã¿ãªã³ã°äžã«è¿œè·¡ã察åŠãã
éèŠãªææšã枬å®ããŸããããæ·±å»åºŠã¬ãã«å¥ã®å¹³å修埩æéïŒMTTRïŒãã¹ããªã³ãããšã®æ€åºçµæãšè§£æ±ºæžã¿æ€åºçµæã®æ¯çãããã³çµæçãªèª€æ€åºçã远跡ããŸãããããã®ææšã¯ãã¹ãã£ããŒã皌åããŠãããã©ããã ãã§ãªããã¹ãã£ã³ããã°ã©ã ãæ£ããæ©èœããŠãããã©ããã瀺ããŸãã
ã³ãŒãã¹ãã£ã³ãæè¡çè² åµãé²ãæ¹æ³
æè¡çè² åµã¯ãå質åé¡ãå éãããããšèç©ãããŸããäŸãã°ãéçºæ®µéã§SASTã«ãŒã«ã«ãã£ãŠæ€åºã§ããã¯ãã®SQLã€ã³ãžã§ã¯ã·ã§ã³ãã¿ãŒã³ãæ¬çªç°å¢ã«ãŸã§éããä¿®æ£ã®ããã«ã»ãã¥ãªãã£ãããã®é©çšãååž°ãã¹ãããããã€ã¡ã³ãã®èª¿æŽãå¿ èŠã«ãªãå Žåãªã©ã§ããã³ãŒãã¹ãã£ã³ããŒã«ã¯ããã®èç©ãçºçæºã§é»æ¢ããŸãã
ã³ãŒãã¹ãã£ã³ãšæè¡çè² åµåæžãçŽæ¥çµã³ã€ãã3ã€ã®ã¡ã«ããºã ïŒ
è€éæ§ã®æ€åºãéŸå€ãè¶ ãã埪ç°çè€éæ§ãæ·±ããã¹ããããæ¡ä»¶åå²ãé·ã颿°ãªã©ã¯ãã¹ãã£ã³ããŒã«ãèŠåããã³ãŒãã®æªèã§ãããããã®ãã¿ãŒã³ãæŸçœ®ãããšãã³ãŒãããŒã¹ã¯æ¬¡ç¬¬ã«å€æŽãå°é£ãã€é«ã³ã¹ãã«ãªããŸããã¹ãã£ã³ã¯ãè€éæ§ãæ§é çãªãã®ã«ãªãåã«ãªãã¡ã¯ã¿ãªã³ã°ãä¿ããã¡ããªã¯ã¹ã«åºã¥ããæ©æèŠåãæäŸããŸãã
éè€æ€åºãã³ãŒãã®éè€ã¯ãæãã³ã¹ãã®ãããæè¡çè² åµã®äžã€ã§ãããã°ä¿®æ£ãæ©èœå€æŽã¯è€æ°ã®ç®æã«é©çšããå¿ èŠããããã³ããŒã¯å¿ ç¶çã«ä¹é¢ããŠãããŸããSonarQubeã®éè€æ€åºæ©èœãåæ§ã®ã«ãŒã«ã¯ãã³ãŒãããŒã¹å šäœã§ãã®ãã¿ãŒã³ãæããã«ããä¹é¢ã«ãã£ãŠäžæŽåãçããåã«çµ±åãå¯èœã«ããŸãã
ãããã³ãŒãã®ç¹å®ããããã³ãŒããšã¯ãæ¬çªç°å¢ã§å®è¡ãããéã«åŒã³åºãããããšã®ãªã颿°ãã¢ãžã¥ãŒã«ã®ããšã§ãã³ãŒãããŒã¹ã®ãµã€ãºãè¥å€§åãããéçºè ãæ··ä¹±ãããç§»è¡åæãè€éåãããŸããå°éå¯èœæ§åæãå®è¡ããã¹ãã£ã³ããŒã«ã¯ããããã³ãŒããäœç³»çã«ç¹å®ããèç©ãããåã«åé€ããããšãå¯èœã«ããŸãã
è€åçãªå¹æãšããŠãç¶ç¶çãªã¹ãã£ã³ãåããã³ãŒãããŒã¹ã¯ãã¹ãã£ã³ãåããŠããªãåçã®ã³ãŒãããŒã¹ãšæ¯èŒããŠãæ¬ é¥å¯åºŠã埪ç°çè€é床ãéè€çããããã³ãŒãçãäœããªããŸãããããã®ææšã¯ãæ©èœéçºã®è¿ éåãä¿å®ã³ã¹ãã®åæžãããã³æ¬çªç°å¢ã«ãããã€ã³ã·ãã³ããªã¹ã¯ã®äœæžã«çŽæ¥ã€ãªãããŸãã
èªå®æ¡ä»¶ SMART TS XL ãšã³ã¿ãŒãã©ã€ãºèŠæš¡ã®ã³ãŒãã¹ãã£ã³æ©èœãæäŸ
æšæºçãªã³ãŒãã¹ãã£ã³ããŒã«ã¯ãåäžã®èšèªå ã§åäœããŸããJavaãµãŒãã¹ãPythonãã€ãã©ã€ã³ãCOBOLãããããã°ã©ã ãJCLãžã§ãã¹ããªãŒã ãRPGã¢ãžã¥ãŒã«ãªã©ãå ±åããäŒæ¥ç°å¢ã§ã¯ãããããã«ç¬èªã®æ§æãšæ€åºçµæããã·ã¥ããŒããåããç¬èªã®ã¹ãã£ããå¿ èŠãšãªããããã³ãŒãã¹ãã£ã³ã®ç¶æ³ã¯æçåãããŠããŸããŸãã
SMART TS XLãã éçã³ãŒãåæ COBOLãJCLãJavaãPythonãRPGãPL/IãSQLãããã³ææ°ã®ã¹ã¿ãã¯ãšãã£ãç°å¢å ã®ãã¹ãŠã®èšèªãåæã«ã¹ãã£ã³ããåäžã®åæãã¹ã§ããŒããã©ãªãªå šäœã«ãããçµ±äžãããåè³ªææšãã»ãã¥ãªãã£äžã®æ€åºçµæãããã³æ§é ããŒã¿ãçæããŸããã¬ã¬ã·ãŒã¡ã€ã³ãã¬ãŒã ã¢ããªã±ãŒã·ã§ã³ãšææ°ã®ã¯ã©ãŠããµãŒãã¹ã䜵çšããŠããçµç¹ã«ãšã£ãŠããã®èšèªæšªæçãªå¯Ÿå¿ã¯ãææ°ã®ã¹ã¿ãã¯ã®ã¿ãã«ããŒããã¹ãã£ã³ããã°ã©ã ãšãã·ã¹ãã å šäœãã«ããŒããã¹ãã£ã³ããã°ã©ã ãšã®éããçã¿åºããŸãã
ã¢ããªã±ãŒã·ã§ã³äŸåé¢ä¿ãããã³ã°æ©èœã¯ãåã ã®ãã¡ã€ã«ã®ã¹ãã£ã³ã«ãšã©ãŸãããã¢ãŒããã¯ãã£åæãžãšæ¡åŒµããŸããã©ã®ã³ã³ããŒãã³ãã®çµå床ãæãé«ããã埪ç°äŸåé¢ä¿ãååšããç®æã¯ã©ãããã©ã®ããã°ã©ã ãæç€ºçãªAPIã§ã¯ãªãæé»çãªãã¡ã€ã«ã€ã³ã¿ãŒãã§ãŒã¹ãä»ããŠããŒã¿ãå ±æããŠããããªã©ãç¹å®ããŸãããããã®æ§é çãªçºèŠã¯ãåäžãã¡ã€ã«ã®ãã¿ãŒã³ãããã³ã°ããŒã«ã§ã¯æ€åºã§ããªããã¢ãŒããã¯ãã£äžã®ã»ãã¥ãªãã£ãšå質ã®åé¡ã§ãã
圱é¿åææ©èœã«ãããã¹ãã£ã³çµæãå€§èŠæš¡ã«æŽ»çšããããšãå¯èœã«ãªããŸããäŸãã°ã150ãã®ããã°ã©ã ãäŸåããé«ãã¡ã³ã€ã³ã³ã³ããŒãã³ãã«è匱æ§ãèŠã€ãã£ãå Žåã圱é¿åæã«ãã£ãŠä¿®åŸ©äœæ¥ã®ç¯å²ããã¹ããå¿ èŠãªããã°ã©ã ãæŽæ°ãå¿ èŠãªåŒã³åºãå ãä¿®æ£ã®åœ±é¿ç¯å²ãªã©ãæç¢ºã«ãªããŸããããã«ãããè匱æ§ã®çºèŠã¯åãªãåé¡ãªã¹ãã§ã¯ãªããç¯å²ãæç¢ºã«å®çŸ©ãããæ§é åããã修埩ããã°ã©ã ãžãšå€æãããŸãã
ãšã³ã¿ãŒãã©ã€ãºæ€çŽ¢æ©èœã«ãããã¹ãã£ã³çµæãããŒããã©ãªãªå šäœã«ããã£ãŠã¯ãšãªã§ããŸããç¹å®ã®å®å šã§ãªãAPIã䜿çšãããã¹ãŠã®ããã°ã©ã ãããŒãã³ãŒããããèªèšŒæ å ±ãå«ããã¹ãŠã®ãã¡ã€ã«ãè€éãã®ãããå€ãè¶ ãããã¹ãŠã®ã³ã³ããŒãã³ãããããããèšèªã®çµã¿åããã§èšè¿°ãããæ°çŸäžè¡ã®ã³ãŒããããæ°ç§ã§èŠã€ããããšãã§ããŸãã
管çããŒã åã ã¬ã¬ã·ãŒã®è¿ä»£å ããã°ã©ã ã SMART TS XLã®ã¹ãã£ã³ã¯ãç§»è¡åã®åè³ªåºæºãæäŸããŸããç§»è¡ç¯å²ããé€å€ããããããã³ãŒããç§»è¡ã®é åºã決å®ããè€éæ§ã®ååžãããã³å€æãããã³ãŒããã¯ã©ãŠãã€ã³ãã©ã¹ãã©ã¯ãã£ã«ãããã€ãããåã«ä¿®æ£ããå¿ èŠãããã»ãã¥ãªãã£äžã®åé¡ãªã©ãå«ãŸããŸãã
æ©ãã«ã¹ãã£ã³ãç¶ç¶çã«ã¹ãã£ã³ããã¹ãŠãã¹ãã£ã³
ã»ãã¥ãªãã£è匱æ§ã®ä¿®åŸ©ã«ãããå¹³åæéãæãçãçµç¹ã¯ãæãç©æ¥µçãªäŸµå ¥ãã¹ãããã°ã©ã ã宿œããŠããçµç¹ã§ã¯ãããŸãããããããçµç¹ã¯ãã³ãŒãã¬ãã¥ãŒæ®µéãéçºè ã®IDEãããªã³ãããããã¯ãCI/CDãã€ãã©ã€ã³ã«ãããŠãè匱æ§ãå°éããåã«æãå€ãã®è匱æ§ãæ€åºããŠããçµç¹ã§ããã³ãŒãã¹ãã£ã³ã¯ããããå€§èŠæš¡ã«å®çŸããããã®ææ®µã§ãã
ã¹ãã£ã³ããã°ã©ã ãæ§ç¯ãããšããããšã¯ããªã¹ã¯ãããã¡ã€ã«ã«åãããŠSASTãDASTãSCAãIASTã®é©åãªçµã¿åãããéžæããéçºã©ã€ããµã€ã¯ã«ã®é©åãªæ®µéã§ããããçµ±åããã«ãã¬ããžãç ç²ã«ããããšãªããã€ãºãæå°éã«æããããã«èª¿æŽããã¹ãã£ããŒã皌åããŠãããšããåæã§ã¯ãªããããã°ã©ã ã®æå¹æ§ãç¶ç¶çã«æž¬å®ããããšãæå³ããŸããã¹ãã£ããŒã皌åããŠããã®ã¯å§ãŸãã«éãããããã°ã©ã ãæ©èœããããšãç®æšã§ãã