çŸä»£ã®ãšã³ã¿ãŒãã©ã€ãºã¢ããªã±ãŒã·ã§ã³ããŒããã©ãªãªã§ã¯ãiOSããã³ããšã³ããå ±æã¢ãã€ã«ãã¬ãŒã ã¯ãŒã¯ããããŠãµãŒããŒãµã€ããµãŒãã¹ã«è³ããŸã§ãSwiftããŸããŸãå€ãæ¡çšãããŠããŸããSwiftã®å°å ¥ããç¬ç«ããã¢ããªéçºããŒã ããèŠå¶å¯Ÿè±¡é åããããŠé¡§å®¢å¯Ÿå¿é åãžãšæ¡å€§ããã«ã€ããéçã³ãŒãè§£æã¯éçºè ã®å©äŸ¿æ§ãšããããããããåºç¯ãªç®¡çåºç€ã®äžéšãžãšå€åããŠããŸããSwiftã«ãããã³ãŒãã¹ãã£ã³ã¯ãç°çš®ã¹ã¿ãã¯ã«ãŸãããã¢ãŒããã¯ãã£ã¬ããã³ã¹ã¢ãã«ãæ§é åããããªã¹ã¯è©äŸ¡ããããŠãšã³ã¿ãŒãã©ã€ãºITãªã¹ã¯ç®¡çããã»ã¹ãšæŽåãããå¿ èŠããããŸãã
Swiftãšã³ã·ã¹ãã ã¯ããã€ãã£ãã¢ãã€ã«ã³ã³ããŒãã³ãããµãŒãããŒãã£SDKãããã¯ãšã³ãçµ±åãçµã¿åãããããšãå€ããåŸæ¥ã®ã¡ã¢ãªå®å šæ§ã®æ³å®ãè¶ ãããªã¹ã¯ããããããŸããSwiftã¯ç¹å®ã®çš®é¡ã®å®è¡æãšã©ãŒã軜æžããŸãããè«ççãªæ¬ é¥ãå®å šã§ãªãäŸåé¢ä¿ã®äœ¿çšããŸãã¯æ§æäžã®è匱æ§ãæé€ããããã§ã¯ãããŸããããããã£ãŠãSwiftã®ãšã³ã¿ãŒãã©ã€ãºéçè§£æã§ã¯ããœãŒã¹ã³ãŒãæ€æ»ããœãããŠã§ã¢ã³ã³ããžã·ã§ã³è§£æããã³SBOMã®å¯èŠæ§ãšé£æºãããæšç§»çãªãªã¹ã¯äŒæãå¶åŸ¡ã§ããããã«ããå¿ èŠããããŸãã
Swiftã³ãŒããªã¹ã¯ã®åæ
Smart TS XL ã¯ãå®è¡ãã¹ãšã¢ãŒããã¯ãã£äžã®ãªã¹ã¯é²åºãçžé¢ãããããšã«ãããSwift ã®éçæ€åºçµæã匷åããŸãã
ä»ããæ¢çŽ¢ããç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ãã€ãã©ã€ã³ã¯ããã®ç¶æ³ãããã«è€éåãããŸããSwift ã³ãŒãã¯ã決å®è«çãªå質ã²ãŒããå¿ èŠãšããèªåããªããªãŒãã§ãŒã³å ã§é »ç¹ã«ãã«ãããã¹ãã眲åãããŸããäžè²«æ§ã®ãªãã«ãŒã«é©çšãéå°ãªèª€æ€ç¥ãè匱ãªåªå é äœä»ãããžãã¯ã¯ãããªããªãŒé床ãäœäžããããªãªãŒã¹æºåç¶æ³ã«å¯Ÿããä¿¡é Œæ§ãäœäžãããå¯èœæ§ããããŸããCI/CD ãã€ãã©ã€ã³ã«éçè§£æãçµ±åããã®ãšåæ§ã®æ§é åãããã¢ãããŒãã¯ãã«ãŒã«æ°ãã®ãã®ããããã·ã°ãã«å質ãšããªã·ãŒé©çšã®èŠåŸãéèŠã§ããããšã瀺ããŠããŸãã
ãã€ããªãããªãšã³ã¿ãŒãã©ã€ãºã¢ãŒããã¯ãã£ã¯ããããã®èª²é¡ãããã«æ·±å»åãããŸããSwiftããŒã¹ã®ããã³ããšã³ãã¯ãéå»ã®æè¡çè² åµãæªä¿®æ£ã®è匱æ§ãæ±ããŠããå¯èœæ§ã®ããã¬ã¬ã·ãŒãµãŒãã¹ã忣APIãããŒã¿ãã©ãããã©ãŒã ãšé£æºããŸãããã®ãããéçã³ãŒãåæã¯ãSwiftãªããžããªãå€ç«ããã³ãŒãã¢ã€ã©ã³ããšããŠæ±ãã®ã§ã¯ãªããã¯ãã¹ãã©ãããã©ãŒã ãžã®é²åºãäŸåé¢ä¿ã®ãªã¹ã¯ããããŠã¢ããã€ãŒãŒã·ã§ã³ã®å¶çŽãèæ ®ããéå±€åãããã¬ããã³ã¹ãã¬ãŒã ã¯ãŒã¯ã®äžã«äœçœ®ä»ããå¿ èŠããããŸãã
Swift ã®éçã³ãŒãåæãšãªã¹ã¯çžé¢ã«ããã Smart TS XL
Swiftç°å¢ã«ãããéçè§£æã§ã¯ãã¢ãŒããã¯ãã£çãªã³ã³ããã¹ããæ¬ ããã«ãŒã«ããŒã¹ã®çµæãé »ç¹ã«çæãããŸããæ§ææ€èšŒãè€é床枬å®ãã»ãã¥ã¢ã³ãŒãã£ã³ã°ãã§ãã¯ã¯å¿ èŠãªå¯èŠæ§ãæäŸããŸãããç¹å®ã®åé¡ãã¢ãžã¥ãŒã«ããµãŒãã¹ãã©ã³ã¿ã€ã ãã¹ãŠã§ã€ã«ã©ã®ããã«äŒæãããã説æããããšã¯ã»ãšãã©ã§ããŸãããSmart TS XLã¯ãæ§é çãªã³ãŒãæ€åºçµæãšå®è¡ãèæ ®ããäŸåé¢ä¿ãããã³ã°ããã³ã¯ãã¹ã¬ã€ã€ãŒãã¬ãŒãµããªãã£ã¢ãã«ãçžé¢ãããããšã§ãåŸæ¥ã®éçæ€æ»ãæ¡åŒµããŸãã
ãšã³ã¿ãŒãã©ã€ãºã«ãããSwiftã®å°å ¥ãç¹ã«iOSã¢ããªã±ãŒã·ã§ã³ãšãµãŒããŒãµã€ãã®SwiftãµãŒãã¹ãçµã¿åãããå Žåããªã¹ã¯ãåäžã®ãã¡ã€ã«ã«ååšããããšã¯ã»ãšãã©ãããŸãããè匱æ§ãå質äœäžã¯ãã€ã³ã¿ã©ã¯ã·ã§ã³ãã¿ãŒã³ãå ±æããŒã¿ã¢ãã«ã鿥çãªåŒã³åºããã§ãŒã³ãéããŠçºçããŸããSmart TS XLã¯ãåäœãšæ§é ã®çžé¢é¢ä¿ãå°å ¥ããããšã§ãåã ã®ã«ãŒã«éåã«ãšã©ãŸãããåªå é äœä»ãã®å€æã匷åããŸãããã®åææ©èœã¯ãéçã³ãŒãåæã眮ãæããã®ã§ã¯ãªããè£å®ãããã®ã§ãã
Swift ã¢ãžã¥ãŒã«éã®å®è¡ãã¹ã®çžé¢
Swift ãããžã§ã¯ãã«ã¯ãUI ã³ã³ããŒãã³ãããã¡ã€ã³ãµãŒãã¹ããããã¯ãŒã¯å±€ãæ°žç¶åã¢ãžã¥ãŒã«ãªã©ãéå±€åãããã¢ãŒããã¯ãã£ãå«ãŸããããšããããããŸããåŸæ¥ã®éçã¢ãã©ã€ã¶ãŒã¯ãåã ã®ãã¡ã€ã«å ã®ã«ãŒã«éåããã©ã°ä»ãããŸããããããã®éåãããåºç¯ãªå®è¡ãããŒã«ã©ã®ããã«åœ±é¿ããããäžè²«ããŠã¢ãã«åããããšã¯ã§ããŸããã
Smart TS XL ã¯ä»¥äžããµããŒãããŸã:
- Swift ããã±ãŒãžéã®ã¢ãžã¥ãŒã«éåŒã³åºãã°ã©ãã®åæ§ç¯
- UI ãšã³ã㪠ãã€ã³ãããããã¯ãšã³ãã®åŒã³åºãããžãã¯ãŸã§ã®è¿œè·¡å¯èœæ§
- éåæå®è¡ãã§ãŒã³ãšã³ãŒã«ããã¯äŒæã®ãããã³ã°
- éçã«ãŒã«ãšã³ãžã³ãç¬ç«ããã€ãã³ããšããŠæ±ãå¯èœæ§ã®ãã鿥çãªé²åºãã¹ã®èå¥
ãã®å®è¡ãèæ ®ããã¢ããªã³ã°ã«ãããåç¬ã§ã¯è»œåŸ®ã«èŠããŠãã圱é¿ã®å€§ãããã©ã³ã¶ã¯ã·ã§ã³ ãããŒå ã§åäœããçµæãéå°è©äŸ¡ãããªã¹ã¯ã軜æžãããŸãã
äŸåé¢ä¿ã®ç¯å²ãšæšç§»çãªã¹ã¯ã®å¯èŠæ§
Swiftã®ãšã³ã·ã¹ãã ã¯ãããã±ãŒãžãããŒãžã£ãŒãšãµãŒãããŒãã£è£œã©ã€ãã©ãªã«å€§ããäŸåããŠããŸããéçè§£æããŒã«ã¯å®å šã§ãªãAPIã®äœ¿çšãéæšå¥šã®åŒã³åºããç¹å®ã§ããŸãããäŸåé¢ä¿ã®æ·±ãã«ãã£ãŠè匱æ§ã®å®éã®åœ±é¿ç¯å²ãäžæçã«ãªãããšããããããŸãã
Smart TS XL ã¯ã以äžã®æ©èœãéããŠå¯èŠæ§ã匷åããŸãã
- Swift ããã±ãŒãž ãããŒãžã£ãŒéå±€éã®æšç§»çãªäŸåé¢ä¿ã®ãããã³ã°
- äŸåé¢ä¿ã®äœ¿çšãšå®è¡é »åºŠããã³å®è¡æã®éèŠåºŠãšã®çžé¢é¢ä¿
- è匱ãªã©ã€ãã©ãªãæŽæ°ãŸãã¯çœ®ãæããããå Žåã®æ§é ç圱é¿åæ
- ãªããžããªéã®å ±æäŸåé¢ä¿ã®é²åºã«åºã¥ããªã¹ã¯ã®ã¯ã©ã¹ã¿ãªã³ã°
ãã®ã¢ãã«ã«ãããã¬ããã³ã¹ ããŒã ã¯çè«äžã®é²åºãšæ§é çã«çµã¿èŸŒãŸããäŸåãªã¹ã¯ãåºå¥ã§ããããã«ãªããŸãã
ããŒã«éã®çžé¢ãšä¿¡å·äœæž
äŒæ¥ãåäžã®åæã¡ã«ããºã ã«é Œãããšã¯ã»ãšãã©ãããŸãããSwiftã®ã³ãŒãããŒã¹ã¯éåžžããªã³ã¿ãŒãSASTããŒã«ãSCAãã©ãããã©ãŒã ããã€ãã©ã€ã³ã¬ãã«ã®ããªã·ãŒãšã³ãžã³ãçšããŠã¹ãã£ã³ãããŸããããããã®ããŒã«ã¯ç¬ç«ããçµæãçæããŸããããããã¯äºãã«éè€ãããççŸãããããå ŽåããããŸãã
Smart TS XL ã¯ãæ¬¡ã®æ¹æ³ã§ä¿¡å·åè³ªãæ¹åããŸãã
- éçè§£æãšæ§æè§£æã®åºåããåŸãããçµæãéçŽãã
- æ§é çã«é¢é£ããåé¡ã®éè€æé€
- ã¢ãŒããã¯ãã£ã®å¢çå ã§ã®ã«ãŒã«éåã®æèå
- åã ã®é倧床ã§ã¯ãªããããŒã«éã®åæã«åºã¥ããŠèª¿æ»çµæãåªå é äœä»ããã
ãã®çžäºçžé¢æ©èœã«ãããéå°ãªã¢ã©ãŒãã«ãã£ãŠæœè¡èŠåŸãäœäžãã CI ç°å¢ã«ãããä¿¡å·å¯Ÿé鳿¯ãåäžããŸãã
æ§æã¬ãã«ã®æ€æ»ãè¶ ããåäœã®å¯èŠæ§
Swift ã®åå®å šæ§ãšã¡ã¢ãªç®¡çæ©èœã¯ãç¹å®ã®æ¬ é¥ã«ããŽãªã軜æžããŸãããå®å šã§ãªãããžãã¯æ§é ãäžé©åãªçµ±åãå®å šã«æé€ãããã®ã§ã¯ãããŸãããéçã«ãŒã«ãšã³ãžã³ã¯ãäž»ã«æ§æããã³ã»ãã³ãã£ãã¯è§£æã¬ã€ã€ãŒã§åäœããŸãã
Smart TS XL ã¯ã以äžãéããŠåäœã®å¯èŠæ§ãå®çŸããŸãã
- æ©èœå¢çãè¶ããããŒã¿ãããŒãããã³ã°
- éèŠãªããŒã¿å€æãã€ã³ãã®ç¹å®
- ãšã©ãŒåŠçã®äŒæãã§ãŒã³ã®åæ
- ç¹çŽ°ãªæäœã«åœ±é¿ãäžããæ¡ä»¶åå²ã®å¯èŠå
ãã®è¡åã¬ã³ãºã¯ãéçãªèª¿æ»çµæãéçšãªã¹ã¯ ã¢ãã«ãšäžèŽãããã¬ããã³ã¹ç£èŠã匷åããŸãã
ãªã¹ã¯ã®åªå é äœä»ããšã¬ããã³ã¹ã®èª¿æŽ
éçè§£æã®æ€åºçµæã¯ãå€ãã®å Žåãé倧床ã¬ãã«ãŸãã¯ã«ãŒã«ã«ããŽãªã«åºã¥ããŠåªå é äœãä»ããããŸãããšã³ã¿ãŒãã©ã€ãºSwiftã®å°å ¥ã§ã¯ãã¢ãŒããã¯ãã£ã«åºã¥ããéã¿ä»ãã®ãªãé倧床ã¯ã修埩èšç»ãæªããå¯èœæ§ããããŸããé«é »åºŠã³ãŒããã¹ã«ãããé倧床ã®äœãæ€åºçµæã¯ãäŒæ¢ã¢ãžã¥ãŒã«ã«ãããå€ç«ããé倧床ã®é«ãåé¡ãããããã倧ããªéçšãªã¹ã¯ã瀺ãå¯èœæ§ããããŸãã
Smart TS XL ã¯ãæ¬¡ã®æ¹æ³ã§ã¬ããã³ã¹ã®èª¿æŽããµããŒãããŸãã
- å®è¡é »åºŠãšã¢ãŒããã¯ãã£ã®äžå¿æ§ã«å¿ããŠèª¿æ»çµæãéã¿ä»ããã
- æ§é ãªã¹ã¯ææšã修埩ããã·ã¥ããŒãã«çµ±åãã
- çµ±åãªã¹ã¯ãããã³ã°ã«ããåç· åœ¹äŒã¬ãã«ã®å ±åã®ãµããŒã
- CI ãã€ãã©ã€ã³å ã§ããªã·ãŒäž»å°ã®ã²ãŒãã£ã³ã°æ±ºå®ãæå¹ã«ãã
Smart TS XLã¯ãæ§é ãåäœããããŠããŒã«éã®çžé¢é¢ä¿ãçµã¿åãããããšã§ãSwiftã®éçã³ãŒãè§£æã®åºç€ãšãªãåæã匷åããŸããã³ãŒãå質ãšã»ãã¥ãªãã£ã¹ãã£ã³ããã«ãŒã«ã®åæãããšã³ã¿ãŒãã©ã€ãºã¢ãŒããã¯ãã£å ã®ã³ã³ããã¹ãã«åºã¥ãããªã¹ã¯ã€ã³ããªãžã§ã³ã¹ãžãšåæ§ç¯ããŸãã
ãšã³ã¿ãŒãã©ã€ãº CI ã²ãŒãããŒãã³ã°ãšå質ã¬ããã³ã¹ã®ããã® Swift éçã³ãŒãè§£æããŒã«
ãšã³ã¿ãŒãã©ã€ãºç°å¢ã«ãããSwiftã®å°å ¥ã¯ãå€ç«ããã¢ãã€ã«éçºããŒã ãããå ±æãã¬ãŒã ã¯ãŒã¯ãããã¯ãšã³ããµãŒãã¹ã忣APIçµ±åãå«ãã¯ãã¹ãã©ãããã©ãŒã ã¢ãŒããã¯ãã£ãžãšæ¡å€§ããŠããŸããSwiftã³ãŒããèŠå¶ãããã¯ãŒã¯ãããŒã顧客察å¿ã®ãã©ã³ã¶ã¯ã·ã§ã³ãã¹ã®äžéšãšãªãã«ã€ããéçã³ãŒãè§£æã¯éçºè äžå¿ã®ãªã³ãã£ã³ã°ãããCIããã³ãªãªãŒã¹ãã€ãã©ã€ã³ã«çµã¿èŸŒãŸãã匷å¶å¯èœãªã¬ããã³ã¹ã¡ã«ããºã ãžãšç§»è¡ããŠããŸãã
ãšã³ã¿ãŒãã©ã€ãº Swift ã·ã¹ãã ã¯ãã¢ãã€ã«ã¯ã©ã€ã¢ã³ããã¬ã¬ã·ãŒããã¯ãšã³ããã¯ã©ãŠããã€ãã£ããã€ã¯ããµãŒãã¹ããµãŒãããŒãã£è£œ SDK ãšé£æºãããã€ããªããç°å¢ã§é »ç¹ã«éçšãããŸããSwift ã¢ãžã¥ãŒã«ã®ã³ãŒãå質åé¡ã¯ããããã®çžäºæ¥ç¶ãããã¬ã€ã€ãŒå šäœã«æ³¢åããéçšäžã®é害ãããã©ãŒãã³ã¹ã®äœäžãã³ã³ãã©ã€ã¢ã³ã¹éåã«ã€ãªããå¯èœæ§ããããŸãããã®ãããéçè§£æã¯ãã¹ã¿ã³ãã¢ãã³ã®å質ããŒã«ãšããŠæ©èœããã®ã§ã¯ãªããã¢ãŒããã¯ãã£ã®ãã¬ãŒãµããªãã£ããµããŒãããããåºç¯ãªãšã³ã¿ãŒãã©ã€ãº IT ãªã¹ã¯ç®¡çãã©ã¯ãã£ã¹ãšé£æºããå¿ èŠããããŸãã
ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ãã€ãã©ã€ã³ã¯ãé©çšèŠä»¶ã匷åããŸããSwiftãªããžããªã¯ãå€ãã®å Žåãèªååãããã¯ãŒã¯ãããŒãéããŠæ§ç¯ããã¹ãã眲åãããŠãããã«ãŒã«éåã¯ãªãªãŒã¹ã®é©æ Œæ§ã«åœ±é¿ãäžããŸããäžè²«æ§ã®ãªãããªã·ãŒèšå®ãéå°ãªèª€æ€ç¥ãè匱ãªåªå é äœä»ãã¢ãã«ã¯ãCIã²ãŒãããŒãã³ã°ãžã®ä¿¡é ŒãæãªããŸããéçåæãCI/CDãã€ãã©ã€ã³ã«çµ±åããããšã§åŸãããæèšã¯ã決å®è«çãªã«ãŒã«é©çšãšæ§é åããã修埩ã¯ãŒã¯ãããŒããã¹ã±ãŒã©ãã«ãªå°å ¥ã®æ žãšãªãããšã瀺ããŠããŸãã
æåŸã«ãSwiftãšã³ã·ã¹ãã ã¯ãæšç§»çãªãªã¹ã¯ããããããµãŒãããŒãã£è£œã®ã©ã€ãã©ãªãããã±ãŒãžãããŒãžã£ã«å€§ããäŸåããŠããŸããå質ã¬ããã³ã¹ã¯ãã¹ã¿ã€ã«ãã§ãã¯ã«ãšã©ãŸãããäŸåé¢ä¿ã®å¯èŠåãã»ãã¥ãªãã£ã«ãŒã«ã®é©çšç¯å²ãè€éãã®ç®¡çãŸã§ãç¶²çŸ ããå¿ èŠããããŸãããã®åºç¯ãªèŠåŸã¯ããœãããŠã§ã¢æ§æåæãSBOMã®éææ§ãšèåããSwiftã³ãŒãããŒã¹ãçµç¹ã®ã»ãã¥ãªãã£ããŒã¹ã©ã€ã³ãšã¢ããã€ãŒãŒã·ã§ã³ã®ç®æšã«åžžã«é©åããŠããããšãä¿èšŒããŸãã
ãšã³ã¿ãŒãã©ã€ãºCIãšã¬ããã³ã¹ã®ããã®Swiftéçã³ãŒãåæããŒã«ã®æ¯èŒ
Swiftã®éçè§£æããŒã«ããšã³ã¿ãŒãã©ã€ãºã¬ãã«ã§è©äŸ¡ããã«ã¯ãæ©èœãã§ãã¯ãªã¹ãã®æ¯èŒã§ã¯ãªããã¢ãŒããã¯ãã£ã粟æ»ããå¿ èŠããããŸãããœãªã¥ãŒã·ã§ã³ã«ãã£ãŠã¯ãäž»ã«éçºè ã¯ãŒã¯ãããŒã«çµ±åããã軜éãªãªã³ã¿ãŒãšããŠæ©èœãããã®ãããã°ãããªã·ãŒé©çšãè匱æ§åé¡ãã³ã³ãã©ã€ã¢ã³ã¹ã¬ããŒãæ©èœãåãããšã³ã¿ãŒãã©ã€ãºã°ã¬ãŒãã®SASTæ©èœãæäŸãããã®ããããŸãããã®éãã¯ãå°å ¥ã¢ãã«ãçµ±åã®è€éãããããŠé·æçãªã¬ããã³ã¹ã®äŸ¡å€ã«åœ±é¿ãäžããŸãã
ããŒã«ã®éžæã«ãããŠã¯ãCIå ã§ã®æ€åºçµæã®çæãçžé¢ãé©ç𿹿³ãèæ ®ããå¿ èŠããããŸããã¢ãŒããã¯ãã£ã¢ãã«ãã«ãŒã«ã®ã«ã¹ã¿ãã€ãºã®æ·±ãããªããžããªéã®æ¡åŒµæ§ããã±ããã·ã¹ãã ãã¬ããŒãã·ã¹ãã ãšã®çµ±åãªã©ããã¹ãŠãéçšã®å®çŸå¯èœæ§ãå·Šå³ããŸãã以äžã«æããããŒã«ã¯ãSwiftãã€ãã£ãã®å質ã¢ãã©ã€ã¶ãŒãããèŠå¶å¯Ÿè±¡ã®ããªããªãŒç°å¢ã«å¯Ÿå¿ã§ããå€èšèªå¯Ÿå¿ã®ãšã³ã¿ãŒãã©ã€ãºã»ãã¥ãªãã£ãã©ãããã©ãŒã ãŸã§ãå¹ åºãããŒã«ãç¶²çŸ ããŠããŸãã
ç¹å®ã®äŒæ¥ç®æšã«æé©
- éçºè
ã¬ãã«ã®ãªã³ãã£ã³ã°ãšã¹ã¿ã€ã«ã®åŒ·å¶
SwiftLintãSwiftFormat - CI ãã€ãã©ã€ã³ã«ãããã»ãã¥ãªãã£éèŠã®éçè§£æ
CheckmarxãFortify éçã³ãŒãã¢ãã©ã€ã¶ãŒãGitHub é«åºŠãªã»ãã¥ãªã㣠- å€§èŠæš¡ããŒããã©ãªãªã«ãããå€èšèªãšã³ã¿ãŒãã©ã€ãºã¬ããã³ã¹
SonarQubeãCoverity - 軜éãªã«ãŒã«ã«ã¹ã¿ãã€ãºãšDevSecOpsçµ±å
ã»ã ã°ã¬ãã - ã³ã³ãã©ã€ã¢ã³ã¹ãéèŠããåçšiOSã«ç¹åããã»ãã¥ãªãã£è©äŸ¡
NowSecure
ã¹ãŠã£ãããªã³ã
å ¬åŒãµã€ãïŒ https://github.com/realm/SwiftLint
SwiftLintã¯ãiOSããã³ãµãŒããŒãµã€ãSwiftãããžã§ã¯ãã«ãããã¹ã¿ã€ã«åŒ·å¶ãã³ãŒãå質ã®äžè²«æ§ãã«ãŒã«ããŒã¹ã®ãªã³ãã£ã³ã°ãäž»ãªç®çãšããŠèšèšãããããªãŒãã³ãœãŒã¹ã®Swiftãã€ãã£ãéçè§£æããŒã«ã§ããã¢ãŒããã¯ãã£çã«ã¯ãSwiftLintã¯ã³ã³ãã€ã©äºæã®æ§ææ§é ãçšããŠSwiftãã¡ã€ã«ãè§£æãããœãŒã¹ã¬ãã«ã¢ãã©ã€ã¶ãŒãšããŠåäœããŸããSwiftLintã¯ãããã·ãŒãžã£éã®è匱æ§ã¢ããªã³ã°ã詳现ã«è¡ãã®ã§ã¯ãªããæ§æããªãŒãšèšå®å¯èœãªã¹ã¿ã€ã«å¶çŽã«åºã¥ãã«ãŒã«è©äŸ¡ã«éç¹ã眮ããŠããŸãã
å»ºç¯æš¡å
SwiftLintã¯ãXcodeã®ãã«ããã§ãŒãºãã³ãã³ãã©ã€ã³å®è¡ãCIã©ã³ããŒãéããŠéçºè
ã®ã¯ãŒã¯ãããŒã«çŽæ¥çµ±åãããŸããã¢ãŒããã¯ãã£ã¯è»œéã§ãå€éšã¬ããŒãã·ã¹ãã ãšçµã¿åãããªãéããéäžåãµãŒããŒãå¿
èŠãšããŸãããèšå®ã¯ .swiftlint.yml ãã¡ã€ã«ã¯ãªããžããªå
ã«ä¿åãããããããããžã§ã¯ãããšãŸãã¯çµç¹å
šäœã®ã«ãŒã«ã®æšæºåãå¯èœã«ãªããŸãã
ã«ãŒã« ãšã³ãžã³ã¯ä»¥äžããµããŒãããŸãã
- æ§æããŒã¹ã®ã«ãŒã«è©äŸ¡
- æ£èŠè¡šçŸããŒã¹ã®ã«ã¹ã¿ã ã«ãŒã«å®çŸ©
- éžæããéåã®èªåä¿®æ£
- è¡ã®é·ãããã¡ã€ã«ãµã€ãºãªã©ã®ã¡ããªãã¯ã®ãããå€èšå®
SwiftLintã¯ç¬èªã®è匱æ§ããŒã¿ããŒã¹ãä¿æããŠããããCVEåé¡ãè¡ããŸããããã®ç¯å²ã¯ãœãŒã¹ã³ãŒãæ€æ»ãšãã¹ã¿ã€ã«ãæ§é ã«é¢ããã«ãŒã«ã®æ€èšŒã«éå®ãããŠããŸãã
CIã«ãããå®è¡åäœ
CIç°å¢ã«ãããŠãSwiftLintã¯éåžžãããŒãžåãŸãã¯ãã«ãåã®ã¹ããããšããŠå®è¡ãããŸããCIã·ã¹ãã ãã²ãŒãå€å®ã«äœ¿çšã§ããæ§é åãããåºåãçæããŸããå®è¡æéã¯æŠãäºæž¬å¯èœã§ããªããžããªãµã€ãºã«æ¯äŸããŠå¢å ãããããé«é »åºŠãã€ãã©ã€ã³ã«é©ããŠããŸãã
ããããé©çšèŠåŸã¯ã«ãŒã«èšå®ã®æç床ã«äŸåããŸããæ éã«éžå®ãããã«ãŒã«ã»ããããªããã°ãçµç¹ã¯æ¬¡ã®ãããªåé¡ã«çŽé¢ããå¯èœæ§ããããŸãã
- éå°ãªæäœãã€ãº
- äžè²«æ§ã®ãªãã«ãŒã«æå¶ã®å®è·µ
- ãªããžããªéã§ç°ãªãæ§æ
SwiftLint ã¯ããªã¹ã¯ãã¢ãŒããã¯ãã£ãžã®åœ±é¿ã«åºã¥ããŠæ€åºçµæãåªå é äœä»ããããã®ã§ã¯ãããŸããããã¹ãŠã®éåã¯ãèšå®ã§å®çŸ©ãããé倧床ã¬ãã«ã«åŸã£ãŠåŠçãããŸãããããã®é倧床ã¬ãã«ã¯ãããªã·ãŒã¬ã€ã€ãŒã«ãã£ãŠæ¡åŒµãããªãéãã倧éšåã衚é¢çãªãã®ã§ãã
ãšã³ã¿ãŒãã©ã€ãºã¹ã±ãŒãªã³ã°ã®çŸå®
ãšã³ã¿ãŒãã©ã€ãºèŠæš¡ã§ã¯ãSwiftLintã¯äž»èŠãªã»ãã¥ãªãã£ç®¡çã§ã¯ãªããããŒã¹ã©ã€ã³ã®ã»ãã¥ãªãã£å¯ŸçãšããŠäœçœ®ä»ãããšæã广çã§ããSwiftLintã¯ãæ§ææšæºãå ±æãã³ãã¬ãŒããŸãã¯ç€Ÿå ãã©ãããã©ãŒã ãšã³ãžãã¢ãªã³ã°ãã©ã¯ãã£ã¹ãéããŠç®¡çãããŠããå Žåã«ã®ã¿ãéäžç®¡çãããã¬ããã³ã¹ããµããŒãããŸãã
匷ã¿ã¯æ¬¡ã®ãšããã§ã:
- æå°éã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãªãŒããŒããã
- Swift ããŒã ã®è¿ éãªãªã³ããŒãã£ã³ã°
- 匷åãªã³ãã¥ããã£ãµããŒããšã«ãŒã«ã®æ¡åŒµæ§
- CIã«ãããæ±ºå®è«çãªããã©ãŒãã³ã¹
å€§èŠæš¡ãªããŒããã©ãªãªã§ã¯å¶éãæããã«ãªããŸãã
- ãã¡ã€ã«éã®äŸåé¢ä¿ã¢ããªã³ã°ãªã
- æšç§»çäŸåé¢ä¿ã®ãªã¹ã¯å¯èŠæ§ããªã
- ãã€ãã£ãã®è匱æ§åé¡ã®æŽåãªã
- å€éšããŒã«ãªãã§ã¯ã¬ããŒãã®éèšãå¶éããã
èŠå¶ã®å³ããæ¥çã§ã¯ãSwiftLintã ãã§ã¯ã»ãã¥ãªãã£ã³ã³ãã©ã€ã¢ã³ã¹ã®æ€èšŒã«ã¯äžååã§ããæ§é åãããã¬ããã³ã¹ã«å¿ èŠãªç£æ»ã¬ããŒãæ©èœãè匱æ§ã¹ã³ã¢ãªã³ã°æ©èœãçµã¿èŸŒãŸããŠããªãããã§ãã
äŸ¡æ Œç¹æ§
SwiftLintã¯ãªãŒãã³ãœãŒã¹ã§ç¡æã§ãå©çšããã ããŸããäŒæ¥ã³ã¹ãã¯ãæ§æç®¡çãããªã·ãŒã¬ããã³ã¹ãCIçµ±åãã¡ã³ããã³ã¹ãªãŒããŒããããªã©ãéããŠéæ¥çã«çºçããŸããäžå 管çãããããã·ã¥ããŒããã³ã³ãã©ã€ã¢ã³ã¹ã¬ããŒããå¿ èŠãšããçµç¹ã¯ããµãŒãããŒãã£ã®éçŽããŒã«ãçµ±åããå¿ èŠããããŸãã
æ§é äžã®å¶é
SwiftLintã¯ãæ§æã¬ãã«ãšå±æçãªæå³ã¬ãã«ã§ã®ã¿åäœããŸããã°ããŒãã«ãªã³ãŒã«ã°ã©ãã®æ§ç¯ãæ±æåæãå®è¡æã®å°éå¯èœæ§ã®è©äŸ¡ã¯è¡ããŸããããã®ãããç¹å®ã®éåãã¯ãªãã£ã«ã«ãªãã©ã³ã¶ã¯ã·ã§ã³ãã¹å ã«ååšããã®ãããããšãæªäœ¿çšã®ã³ãŒããã©ã³ãå ã«ååšããã®ãã倿ããããšã¯ã§ããŸããã
ãšã³ã¿ãŒãã©ã€ãºSwiftãšã³ã·ã¹ãã ã«ãããŠãSwiftLintã¯å質管çã®åºç€ã¬ã€ã€ãŒãšããŠæ©èœããŸããSwiftLintã¯äžè²«æ§ãšå¯èªæ§ãåäžãããŸãããå æ¬çãªã¬ããã³ã¹ãå®çŸããã«ã¯ãããé«åºŠãªéçã»ãã¥ãªãã£ãã¹ããšäŸåé¢ä¿åæãœãªã¥ãŒã·ã§ã³ãè£å®ããå¿ èŠããããŸãã
ãœããŒãã¥ãŒã
å ¬åŒãµã€ãïŒ https://www.sonarsource.com/products/sonarqube/
SonarQubeã¯ããšã³ã¿ãŒãã©ã€ãºãœãããŠã§ã¢ããŒããã©ãªãªå šäœã®å質ã¬ããã³ã¹ãäžå 管çããããã«èšèšããããå€èšèªå¯Ÿå¿ã®éçã³ãŒãè§£æãã©ãããã©ãŒã ã§ããSwiftãã€ãã£ãã®ãªã³ã¿ãŒãšã¯ç°ãªããSonarQubeã¯ãµãŒããŒããŒã¹ã®è§£æã»ã¬ããŒãã·ã¹ãã ãšããŠåäœãããªããžããªãèšèªãããŒã ããŸããã§çµæãéçŽããŸããSwiftã®ãµããŒãã¯ãã³ãŒãå質ã«ãŒã«ãã»ãã¥ãªãã£ãããã¹ããããä¿å®æ§ã¡ããªã¯ã¹ãè©äŸ¡ã§ããå°çšã¢ãã©ã€ã¶ãŒã«ãã£ãŠæäŸãããŸãã
å»ºç¯æš¡å
SonarQubeã¯ã¯ã©ã€ã¢ã³ããµãŒããŒã¢ãŒããã¯ãã£ãæ¡çšããŠããŸããCIå®è¡äžã«èšèªåºæã®ã¹ãã£ããŒãçšããŠã³ãŒããåæããããã®çµæã¯éäžç®¡çãããSonarQubeãµãŒããŒã«ã¢ããããŒããããŸãããµãŒããŒã¯ãå±¥æŽãã¬ã³ããå質ã²ãŒããããªã·ãŒèšå®ããããžã§ã¯ãéããã·ã¥ããŒãã管çããŸãã
Swift ç°å¢ã®å ŽåãSonarQube ã¯ä»¥äžãæäŸããŸãã
- éçã«ãŒã«ããŒã¹ã®ã³ãŒãåæ
- OWASP ã«ããŽãªã«æºæ ããã»ãã¥ãªã㣠ã«ãŒã« ãã§ãã¯
- ã³ãŒãã®èããšä¿å®æ§ã®æ€åº
- è€éããšéè€ã®ææš
- å質ã²ãŒã宿œããžãã¯
ãšã³ã¿ãŒãã©ã€ãºãšãã£ã·ã§ã³ã¯ãããŒããã©ãªãªã¬ãã«ã®ã¬ããã³ã¹ããã«ããã©ã³ãåæãIDããã³ã¢ã¯ã»ã¹ç®¡çã·ã¹ãã ãšã®çµ±åããµããŒãããŸããæ€åºçµæã¯ãã°ãè匱æ§ãã»ãã¥ãªãã£ãããã¹ããããä¿å®æ§ã®åé¡ã«åé¡ãããæ§é åãããããªã¢ãŒãžãå¯èœã«ãªããŸãã
SonarQubeã¯ãå€éšã®äŸåæ§åæããŒã«ãšçµã¿åãããªãéããæ€åºçµæãCVEèå¥åã«çŽæ¥ãããã³ã°ããŸããããã®ã»ãã¥ãªãã£ã«ãŒã«ã¯ããµãŒãããŒãã£ã®è匱æ§ããŒã¿ããŒã¹ã§ã¯ãªããå®å šãªã³ãŒãã£ã³ã°ãã¿ãŒã³ã«éç¹ã眮ããŠããŸãã
CIã«ãããå®è¡åäœ
CIãã€ãã©ã€ã³ã§ã¯ãSonarQubeã«ããåæã¯éåžžããã«ãã¹ããŒãžäžã«ã¹ãã£ããŒãã©ã°ã€ã³ã䜿çšããŠå®è¡ãããŸããçµæã¯äžå€®ãµãŒããŒã«éä¿¡ãããããã§å質ã²ãŒãã«ãã£ãŠååŠãå€å®ãããŸãããã®ã¢ãã«ã§ã¯ãåæã®å®è¡ãšã¬ããã³ã¹è©äŸ¡ãåé¢ãããŠããŸãã
å®è¡ç¹æ§ã¯æ¬¡ã®ãšããã§ã:
- ãã«ãªã¯ãšã¹ãã®å¢ååæãµããŒã
- æ¯åºåºæã®å ±å
- ããªã·ãŒé§ååããŒãžã²ãŒãã£ã³ã°
- äž»èŠãªCIãã©ãããã©ãŒã ãšã®çµ±å
å€§èŠæš¡ãªSwiftãªããžããªã§ã¯ããã©ãŒãã³ã¹ã¯ååã«åäžããŸãããå€èšèªã¢ããªããžããªãæ±ãå Žåã¯ãã¥ãŒãã³ã°ãå¿ èŠã«ãªãå ŽåããããŸããéäžåãµãŒããŒã¯ãåæåæè² è·ã«å¯Ÿå¿ã§ããããé©åã«ããããžã§ãã³ã°ããå¿ èŠããããŸãã
ãšã³ã¿ãŒãã©ã€ãºã¹ã±ãŒãªã³ã°ã®çŸå®
SonarQube ã®æå€§ã®äŒæ¥äŸ¡å€ã¯ãéäžç®¡çã«ãããŸããSwift ã·ã¹ãã ãšéSwift ã·ã¹ãã ãçµ±åããããã·ã¥ããŒããæäŸããç°æ©ç𮿷·åšç°å¢ã«ãããäžè²«ããã¬ããã³ã¹åºæºããµããŒãããŸãã
匷ã¿ã¯æ¬¡ã®ãšããã§ã:
- ããŒããã©ãªãªå šäœã®å質ã®å¯èŠæ§
- éå»ã®åŸåã®è¿œè·¡
- å質ã²ãŒãèªåå
- äŒæ¥èªèšŒããã³ãã±ããã·ã¹ãã ãšã®çµ±å
ãã ããæ§é äžã®å¶çŽãèªèããå¿ èŠããããŸãã
- éå®çãªæ·±å±€ããã·ãŒãžã£éè匱æ§ã¢ããªã³ã°
- ãã€ãã£ãã®æšç§»çäŸåé¢ä¿ã®è匱æ§è¿œè·¡æ©èœããªã
- ã»ãã¥ãªãã£ã®æ€åºçµæã¯ãåäœå®è¡ã¢ãã«ã§ã¯ãªããäºåå®çŸ©ãããã«ãŒã«ã»ããã«äŸåããŸãã
- çµç¹ã®èŠæš¡ã«å¿ããŠæ§æã®è€éããå¢ã
SwiftãJavaãC#ããã®ä»ã®èšèªéã§çµ±äžãããã«ãŒã«é©çšãæ±ããäŒæ¥ã«ãšã£ãŠãSonarQubeã¯ã¬ããã³ã¹ã®äžè²«æ§ãæäŸããŸããé«åºŠãªã»ãã¥ãªãã£ãã¹ããäŸåé¢ä¿ã¬ãã«ã®è匱æ§ç®¡çã«ã¯ãå°çšã®SASTãŸãã¯SCAãã©ãããã©ãŒã ãšã®é£æºãå¿ èŠã§ãã
äŸ¡æ Œç¹æ§
SonarQube Community Editionã¯ç¡æã§ãããé«åºŠãªã»ãã¥ãªãã£æ©èœãšãã©ã³ãåææ©èœã¯å¶éãããŠããŸããDeveloperãEnterpriseãData Centerã®åãšãã£ã·ã§ã³ã§ã¯ãåæå¯Ÿè±¡ã®ã³ãŒãè¡æ°ã«åºã¥ããåçšã©ã€ã»ã³ã¹ãæäŸãããŸããEnterpriseãšãã£ã·ã§ã³ã§ã¯ãããŒããã©ãªãªç®¡çãé«åºŠãªã»ãã¥ãªãã£ã«ãŒã«ããããŠèŠå¶ç°å¢ã«å¿ èŠãªã¹ã±ãŒãªã³ã°æ©èœã远å ãããŸãã
ã³ã¹ãã«é¢ããèæ ®äºé ã¯æ¬¡ã®ãšããã§ãã
- ãµãŒããŒã€ã³ãã©ã¹ãã©ã¯ãã£
- ã©ã€ã»ã³ã¹éå±€ã®éžæ
- ã«ãŒã«ã¬ããã³ã¹ã®ç®¡çãªãŒããŒããã
- å質ã²ãŒã管çã®ç ä¿®
æ§é äžã®å¶é
SonarQubeã®ã«ãŒã«ãšã³ãžã³ã¯ãå®å šãªã·ã³ããªãã¯å®è¡ãé«åºŠãªæ±æè¿œè·¡ãããããã¿ãŒã³ããŒã¹ã®æ€åºãéèŠããŠããŸããéåæãã¿ãŒã³ãè€éãªäžŠè¡æ§ã¢ãã«ãå«ãSwiftç°å¢ã§ã¯ãã«ãŒã«ã®ç²ŸåºŠãå€åããå¯èœæ§ããããŸãã
ããã«ãSonarQube ã¯ã¬ããŒããäžå 管çããŸãããã©ã³ã¿ã€ã ãã¬ã¡ããªãäŸåé¢ä¿ã®å°éå¯èœæ§ã¢ãã«éã§æ€åºçµæãçžé¢ãããããšã¯ãããŸãããåªå é äœä»ãããžãã¯ã¯ãå®è¡ãã¹ã®éã¿ä»ãã§ã¯ãªããé倧床ããŒã¹ãšã«ãŒã«ãââãªãã³ã§ãã
ãšã³ã¿ãŒãã©ã€ãºSwiftãšã³ã·ã¹ãã ã«ãããŠãSonarQubeã¯éäžåã®å質ã¬ããã³ã¹ã¬ã€ã€ãŒãšããŠå¹æçã«æ©èœããŸããCIã²ãŒãã®é©çšãšèšèªéããªã·ãŒã®æŽåæ§ã匷åããŸãããè匱æ§ã®æ·±ããšäŸåé¢ä¿ãªã¹ã¯ã®å¯èŠæ§ãæŠç¥çãªåªå äºé ã§ããå Žåã¯ãããåºç¯ãªã»ãã¥ãªãã£ã¢ãŒããã¯ãã£ã«çµ±åããå¿ èŠããããŸãã
Checkmarx éçã¢ããªã±ãŒã·ã§ã³ã»ãã¥ãªãã£ãã¹ã
å ¬åŒãµã€ãïŒ https://checkmarx.com/product/static-application-security-testing/
Checkmarx SASTã¯ãSwiftãå«ãè€æ°ã®ããã°ã©ãã³ã°èšèªã«ãããã»ãã¥ãªãã£è匱æ§ãç¹å®ããããã«èšèšãããããšã³ã¿ãŒãã©ã€ãºã°ã¬ãŒãã®éçã¢ããªã±ãŒã·ã§ã³ã»ãã¥ãªãã£ãã¹ããã©ãããã©ãŒã ã§ãã軜éã®LintããŒã«ãå質éèŠã®ã¢ãã©ã€ã¶ãŒãšã¯ç°ãªããCheckmarxã¯ãããŒã¿ãããŒãšå¶åŸ¡ãããŒã®è©³çްãªåæãéããŠãæªçšå¯èœãªã»ãã¥ãªãã£äžã®æ¬ é¥ãæ€åºããããšã«äž»çŒã眮ããŠããŸããããã¯ãã¹ã¿ã€ã«çãªå質管çããŒã«ã§ã¯ãªããã»ãã¥ãªãã£ã¬ããã³ã¹ã·ã¹ãã ãšããŠäœçœ®ä»ããããŠããŸãã
å»ºç¯æš¡å
Checkmarxã¯ãéäžåã®ã¹ãã£ã³ãšã³ãžã³ã¢ãŒããã¯ãã£ãæ¡çšããŠããŸãããœãŒã¹ã³ãŒãã¯ãå°å ¥ç°å¢ã«å¿ããŠãªã³ãã¬ãã¹ãŸãã¯ã¯ã©ãŠãããŒã¹ã®ãã©ãããã©ãŒã ã§ã¹ãã£ã³ãããŸãããšã³ãžã³ã¯ããã·ãŒãžã£éåæãå®è¡ããæœè±¡æ§ææšãšããŒã¿ãããŒã°ã©ããæ§ç¯ããããšã§ãä¿¡é Œã§ããªãå ¥åãã¢ããªã±ãŒã·ã§ã³å±€ãã©ã®ããã«äŒæããããã¢ãã«åããŸãã
Swift ã³ãŒãããŒã¹ã®å ŽåãCheckmarx ã¯ä»¥äžããµããŒãããŸãã
- ã€ã³ãžã§ã¯ã·ã§ã³è匱æ§ã®æ±æåæ
- å®å šã§ãªãAPIã®äœ¿çšã®æ€åº
- ããŒãã³ãŒããããç§å¯ã®èå¥
- ã«ã¹ã¿ã ã»ãã¥ãªã㣠ã¯ãšãªã®æ§æ
- è匱æ§åé¡ãã¬ãŒã ã¯ãŒã¯ãšã®çµ±å
çºèŠäºé ã¯ãOWASPã«ããŽãªãCWEèå¥åãªã©ã®æšæºåãããå顿³ã«ãããã³ã°ãããŸããCheckmarxã¯ãæ¬æ¥ã¯ãã¡ãŒã¹ãããŒãã£ã³ãŒãã«CVEèå¥åãçæããããã§ã¯ãããŸããããã³ã³ãã©ã€ã¢ã³ã¹ã¬ããŒããç£æ»ããã¥ã¡ã³ãäœæããµããŒãããè匱æ§åé¡ãšäžèŽãããããšã§ãçºèŠäºé ãæŽåãããŸãã
CIã«ãããå®è¡åäœ
Checkmarxã¯ããã©ã°ã€ã³ãšAPIããŒã¹ã®ããªã¬ãŒãéããŠCIãã€ãã©ã€ã³ã«çµ±åãããŸããã¹ãã£ã³ã¯ä»¥äžã®å¯Ÿè±¡ã«èšå®ã§ããŸãã
- å®å šãªããŒã¹ã©ã€ã³åæ
- å¢åãã«ãªã¯ãšã¹ãã¹ãã£ã³
- é倧床ãããå€ã«åºã¥ãããªã·ãŒé§ååã²ãŒãã£ã³ã°
- ãªãªãŒã¹æ€èšŒã®ããã®å æ¬çãªã¹ãã£ã³ãã¹ã±ãžã¥ãŒã«ãã
å®è¡æéã¯ãªããžããªã®ãµã€ãºãšåæã®æ·±åºŠã«äŸåããŸããå€§èŠæš¡ãªSwiftãããžã§ã¯ããç¹ã«éåæãŸãã¯ã¢ãžã¥ãŒã«åã¢ãŒããã¯ãã£ãå€çšãããããžã§ã¯ãã§ã¯ãããã·ãŒãžã£éã®æ·±ãã¹ãã£ã³ã«ãã£ãŠã¬ã€ãã³ã·ãçºçããå¯èœæ§ããããŸããäŒæ¥ã§ã¯ãé«éãªå¢åã¹ãã£ã³ãšå®å šãªã»ãã¥ãªãã£ç£æ»ãåé¢ããããšã§ãã¹ãã£ã³ã®æ·±åºŠãšCIã®å¿çæ§ã®ãã©ã³ã¹ãåãããšããããããŸãã
çµæã¯éäžç®¡çãããããã·ã¥ããŒãã«çµ±åãããããªã¢ãŒãž ã¯ãŒã¯ãããŒãšåé¡ç®¡çã·ã¹ãã ãšã®çµ±åãå¯èœã«ãªããŸãã
ãšã³ã¿ãŒãã©ã€ãºã¹ã±ãŒãªã³ã°ã®çŸå®
Checkmarxã¯ãèŠå¶ã®å³ããæ¥çãé«åºŠãªã»ãã¥ãªãã£ç°å¢åãã«èšèšãããŠããŸããã³ã³ãã©ã€ã¢ã³ã¹éèŠã®äŒæ¥ã«é©ãããããŒã«ããŒã¹ã®ã¢ã¯ã»ã¹å¶åŸ¡ãç£æ»èšŒè·¡ãã¬ããã³ã¹ã¬ããŒããæäŸããŸãã
匷ã¿ã¯æ¬¡ã®ãšããã§ã:
- 詳现ãªããŒã¿ãããŒãšæ±æè¿œè·¡æ©èœ
- åºç¯ãªã»ãã¥ãªãã£ã«ãŒã«ãã«ããŒ
- éäžããªã·ãŒç®¡ç
- DevSecOpsããŒã«ãã§ãŒã³ãšã®çµ±å
ãã ããã¹ã±ãŒãªã³ã°ã®èæ ®äºé ã¯æ¬¡ã®ãšããã§ãã
- ãªã³ãã¬ãã¹å±éã®ã€ã³ãã©ã¹ãã©ã¯ãã£èŠä»¶
- ã¢ããªã±ãŒã·ã§ã³ã®ãµã€ãºãŸãã¯ã¹ãã£ã³éã«åºã¥ãã©ã€ã»ã³ã¹è²»çš
- ã«ãŒã«ã®èª¿æŽãšèª€æ€ç¥ã®ç®¡çã®ããã®éçšãªãŒããŒããã
- å€§èŠæš¡ãª Swift ã¢ãã¬ããžããªã® CI ããã©ãŒãã³ã¹ãžã®æœåšçãªåœ±é¿
誀æ€ç¥ã®ç®¡çã«ã¯ãã»ãã¥ãªãã£ãšã³ãžãã¢ãªã³ã°ã«ããå°ä»»ã®ç£ç£ãå¿ èŠã§ããäœç³»çãªããªã¢ãŒãžããã»ã¹ããªããã°ãããŒã ã¯ã¢ã©ãŒãç²ãã«é¥ãå¯èœæ§ããããŸãã
äŸ¡æ Œç¹æ§
Checkmarxã¯ããšã³ã¿ãŒãã©ã€ãºã©ã€ã»ã³ã¹ã¢ãã«ãæ¡çšããåçšãœãªã¥ãŒã·ã§ã³ã§ããäŸ¡æ Œã¯éåžžãã¢ããªã±ãŒã·ã§ã³æ°ãã³ãŒãè¡æ°ããŸãã¯ã¹ãã£ã³é »åºŠã«å¿ããŠå€åããŸããã¯ã©ãŠããã¹ãã£ã³ã°ãªãã·ã§ã³ã¯ã€ã³ãã©ã¹ãã©ã¯ãã£ã®è² æ ã軜æžããŸããããµãã¹ã¯ãªãã·ã§ã³ããŒã¹ã®ã³ã¹ãã¯ç¶æãããŸãã
äŒæ¥ã¯ä»¥äžãèæ ®ããå¿ èŠããããŸãã
- ãã©ãããã©ãŒã ã©ã€ã»ã³ã¹
- å°çšã®ã»ãã¥ãªãã£ã¢ããªã¹ããªãœãŒã¹
- CIçµ±åãšã³ãžãã¢ãªã³ã°
- ç¶ç¶çãªã«ãŒã«èª¿æŽãšã¬ããã³ã¹ã®ç¶æ
æ§é äžã®å¶é
Checkmarxã¯éçãœãŒã¹ã¬ãã«ã®ã»ãã¥ãªãã£åæã«ç¹åããŠããŸããè£å®çãªã¢ãžã¥ãŒã«ãšçµã¿åãããªãéãããœãããŠã§ã¢ã³ã³ããžã·ã§ã³åæã¯ãã€ãã£ãã§ã¯æäŸãããŸãããäŸåé¢ä¿ãªã¹ã¯ã®å¯èŠåã«ã¯ãå€éšã®SCA補åãšã®çµ±åãå¿ èŠã«ãªãå ŽåããããŸãã
ããã«ãããŒã¿ãããŒã¢ããªã³ã°ã¯è»œéã¢ãã©ã€ã¶ãŒãããé«åºŠã§ãããéçè§£æã¯æ¬è³ªçã«å®å šãªå®è¡æã³ã³ããã¹ããæ¬ ããŠããŸããSwiftã®è€éãªäžŠè¡åŠçãã¿ãŒã³ããªãã¬ã¯ã·ã§ã³ã¡ã«ããºã ã¯ãç¹å®ã®ãšããžã±ãŒã¹ã«ãããŠç²ŸåºŠãå¶éããå¯èœæ§ããããŸãã
ãšã³ã¿ãŒãã©ã€ãºSwiftãšã³ã·ã¹ãã ã«ãããŠãCheckmarxã¯æ§é åãããDevSecOpsããªã·ãŒãé©çšã§ããäž»èŠãªã»ãã¥ãªãã£ã¹ãã£ã³ãšã³ãžã³ãšããŠæ©èœããŸãã匷åãªèåŒ±æ§æ€åºèœåãåããŠããŸãããå æ¬çãªã¬ããã³ã¹ãå®çŸããã«ã¯ãããåºç¯ãªå質ã¡ããªã¯ã¹ãäŸåé¢ä¿ç®¡çãã©ãããã©ãŒã ãšã®çµ±åãå¿ èŠã§ãã
Fortify éçã³ãŒãã¢ãã©ã€ã¶ãŒ
å ¬åŒãµã€ãïŒ https://www.microfocus.com/en-us/cyberres/application-security/static-code-analyzer
Fortify Static Code Analyzerã¯ãå€§èŠæš¡ã§ç°æ©ç𮿷·åšã®ã¢ããªã±ãŒã·ã§ã³ããŒããã©ãªãªå šäœã«ããã詳现ãªèåŒ±æ§æ€åºãç®çãšããŠèšèšããããšã³ã¿ãŒãã©ã€ãºSASTãã©ãããã©ãŒã ã§ããSwiftãã¯ãããšãã倿°ã®èšèªããµããŒãããã»ãã¥ãªãã£éèŠã®çµç¹ãã³ã³ãã©ã€ã¢ã³ã¹éèŠã®çµç¹ã§å€ãå°å ¥ãããŠããŸããFortifyã¯ã粟床éèŠã®è匱æ§ã¢ããªã³ã°ãç£æ»ãã¬ãŒãµããªãã£ããããŠæ£åŒãªã¬ããã³ã¹ããã»ã¹ãšã®çµ±åãéèŠããŠããŸãã
å»ºç¯æš¡å
Fortifyã¯ãããŒã¿ãããŒãå¶åŸ¡ãããŒãã»ãã³ãã£ãã¯ã¢ããªã³ã°æè¡ãçšããå æ¬çãªéçè§£æãå®è¡ããã¹ãã£ã³ãšã³ãžã³ãä»ããŠåäœããŸãããã®è§£æãšã³ãžã³ã¯ãã³ãŒãããŒã¹ã®äžé衚çŸãæ§ç¯ãã颿°ãã¡ãœãããã¢ãžã¥ãŒã«ãä»ããããŒã¿äŒæã远跡ããŸããSwiftã®å Žåãããã«ã¯ã€ã³ãžã§ã¯ã·ã§ã³è匱æ§ãå®å šã§ãªãæå·ã®äœ¿çšãäžé©åãªãšã©ãŒåŠçãå®å šã§ãªãAPIåŒã³åºããã¿ãŒã³ãªã©ãäžè¬çãªã»ãã¥ã¢ã³ãŒãã£ã³ã°ãªã¹ã¯ã®ã¢ããªã³ã°ãå«ãŸããŸãã
ãã®ãã©ãããã©ãŒã ã¯ãéäžç®¡çãããããã·ã¥ããŒããããŒã«ããŒã¹ã®ã¢ã¯ã»ã¹å¶åŸ¡ãè匱æ§ã©ã€ããµã€ã¯ã«ç®¡çãæäŸãã Fortify Software Security Center ãšçµ±åãããããšããããããŸãã
Swift ç°å¢ã«é¢é£ããæ©èœã¯æ¬¡ã®ãšããã§ãã
- ããã·ãŒãžã£éã®æ±æåæ
- OWASP ããã³ CWE ã«æºæ ããå®å šãªã³ãŒãã£ã³ã°ã«ãŒã«ã©ã€ãã©ãª
- çµç¹ããªã·ãŒã®ã«ã¹ã¿ã ã«ãŒã«äœæ
- ç£æ»å ±åã®ããã®æ§é åãããè匱æ§åé¡
Fortify ã¯ããã¡ãŒã¹ãããŒãã£ã® Swift ã³ãŒãã« CVE èå¥åãå²ãåœãŠãŸããããèŠå¶ææžããµããŒãããããã«ãçºèŠäºé ãæšæºåãããå顿³ãšäžèŽãããŸãã
CIã«ãããå®è¡åäœ
Fortifyã¯ãã³ãã³ãã©ã€ã³ããŒã«ãšãã©ã°ã€ã³ãä»ããŠCIãã€ãã©ã€ã³ã«çµ±åãããŸããçµç¹ã¯éåžžãæ¬¡ã®ããã«æ§æããŸãã
- ãã«ãªã¯ãšã¹ãæ€èšŒã®ããã®ã¯ã€ãã¯ã¹ãã£ã³
- ãªãªãŒã¹åè£ã®è©äŸ¡ã®ããã®ãã«ã¹ãã£ã³
- é倧床ã®é«ãçºèŠã«å¯Ÿããããªã·ãŒããŒã¹ã®ã²ãŒãã£ã³ã°
- äŒæ¥å šäœã®ååæãµã€ã¯ã«ã®ã¹ã±ãžã¥ãŒã«
詳现ãªåæã«ã¯ãç¹ã«è€éãªã¢ãžã¥ãŒã«äŸåé¢ä¿ãæã€å€§èŠæš¡ãªSwiftã³ãŒãããŒã¹ã§ã¯ãããªãã®å®è¡æéãå¿ èŠã«ãªãå ŽåããããŸããCIã®ã¬ã€ãã³ã·ã軜æžããããã«ãäŒæ¥ã§ã¯é«éãªå¢åãã§ãã¯ãšãéçºè ã®ãã£ãŒãããã¯ã«ãŒãã®å€ã§å®è¡ãããå æ¬çãªã»ãã¥ãªãã£ã¹ãã£ã³ãåé¢ããããšããããããŸãã
ã¹ãã£ã³çµæã¯éäžç®¡çã³ã³ãœãŒã«ã«ã¢ããããŒããããã»ãã¥ãªã㣠ããŒã ãããªã¢ãŒãžãå®è¡ãã修埩ã¢ã¯ã·ã§ã³ãå²ãåœãŠãŸãã
ãšã³ã¿ãŒãã©ã€ãºã¹ã±ãŒãªã³ã°ã®çŸå®
Fortifyã¯ãå€§èŠæš¡ãªãšã³ã¿ãŒãã©ã€ãºã¬ããã³ã¹ãšé«åºŠãªã³ã³ãã©ã€ã¢ã³ã¹ç°å¢åãã«èšèšãããŠããŸããæ§é åãããç£æ»èšŒè·¡ãè匱æ§ãšã€ãžã³ã°ã¡ããªã¯ã¹ãããŒã«ããŒã¹ã®ã¬ãã¥ãŒã¯ãŒã¯ãããŒãæäŸããŸãã
匷ã¿ã¯æ¬¡ã®ãšããã§ã:
- æçããè匱æ§ã¢ããªã³ã°ãšã³ãžã³
- 詳现ãªä¿®åŸ©ã¬ã€ãã³ã¹
- äžå åãããã¬ããã³ã¹ããã·ã¥ããŒã
- ã³ã³ãã©ã€ã¢ã³ã¹éèŠã®å ±åæ§é
éçšäžã®çŸå®ã¯æ¬¡ã®ãšããã§ãã
- ã€ã³ãã©ã¹ãã©ã¯ãã£ãŸãã¯ã¯ã©ãŠããµãã¹ã¯ãªãã·ã§ã³ã®å€§å¹ ãªã³ã¹ã
- ããªã¢ãŒãžãšãã¥ãŒãã³ã°ã«ã¯å°ä»»ã®ã»ãã¥ãªãã£æ åœè ãå¿ èŠ
- å€§èŠæš¡ãªè€æ°ããŒã çµç¹ã®æ§æã®è€éã
- é«åºŠãªè匱æ§ã®ãã¬ãŒã¹ãè§£éããããã®åŠç¿æ²ç·
æçãã DevSecOps ããã»ã¹ãæããªãçµç¹ã§ã¯ãFortify ã®å°å ¥ã«ãã£ãŠå€§éã®çµæãçæãããå¯èœæ§ãããã广çã«ç®¡çããã«ã¯èŠåŸããã¬ããã³ã¹ãå¿ èŠãšãªããŸãã
äŸ¡æ Œç¹æ§
Fortifyã¯åçšãšã³ã¿ãŒãã©ã€ãºãã©ãããã©ãŒã ã§ããã©ã€ã»ã³ã¹ã¢ãã«ã¯éåžžãã¢ããªã±ãŒã·ã§ã³æ°ãã³ãŒãè¡æ°ããŸãã¯ãµãã¹ã¯ãªãã·ã§ã³ã¬ãã«ã«åºã¥ããŠæ±ºå®ãããŸããç·ææã³ã¹ãã«ã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£ã®ããããžã§ãã³ã°ããã©ãããã©ãŒã ã©ã€ã»ã³ã¹ãã»ãã¥ãªãã£ãšã³ãžãã¢ãªã³ã°ãªãœãŒã¹ãå«ãŸããŸãã
äŒæ¥ã¯ä»¥äžãèšç»ããå¿ èŠããããŸãã
- é·æçãªã¬ããã³ã¹ã®ãªãŒããŒããã
- ã«ãŒã«èª¿æŽãµã€ã¯ã«
- éçºè ãã¬ãŒãã³ã°
- CI ããã³ãã±ããã·ã¹ãã ãšã®çµ±åãšã³ãžãã¢ãªã³ã°
æ§é äžã®å¶é
Fortify ã¯é«åºŠãªéçèåŒ±æ§æ€åºæ©èœãæäŸããŸããããœãŒã¹ã¬ãã«ã®åæã«éå®ãããŠããŸããåçãªæ§æã®èªã¿èŸŒã¿ãç°å¢äŸåã®å®è¡ãã¹ãšãã£ãå®è¡æåºæã®åäœã¯ãå®å šã«ã¯åçŸãããªãå¯èœæ§ããããŸãã
ããã«ãFortify ã¯ã³ã¢ SAST ãšã³ãžã³å ã§ãœãããŠã§ã¢æ§æåæããã€ãã£ãã«æäŸããŠããŸãããäŸåé¢ä¿ã¬ãã«ã®è匱æ§ç®¡çã«ã¯ãå¥ã®ã¢ãžã¥ãŒã«ãŸãã¯è£å®çãªããŒã«ãšã®çµ±åãå¿ èŠã§ãã
Fortifyã¯ããšã³ã¿ãŒãã©ã€ãºSwiftãšã³ã·ã¹ãã ã«ãããŠãèŠå¶å¯Ÿè±¡ã®ããªããªãŒããã»ã¹ããµããŒãã§ããå ç¢ãªã»ãã¥ãªãã£åŒ·åã¬ã€ã€ãŒãšããŠæ©èœããŸããè匱æ§ã«é¢ãã詳现ãªã€ã³ãµã€ããšåŒ·åãªã¬ããã³ã¹äœå¶ãæäŸããŸããããã®åæã®æ·±ââãããæç¶çãªäŸ¡å€ãåŒãåºãã«ã¯ãçµç¹å šäœã®æçåºŠãæ±ããããŸãã
ã³ããªãã£éçè§£æ
å ¬åŒãµã€ãïŒ https://www.synopsys.com/software-integrity/security-testing/static-analysis-sast.html
ã·ããã·ã¹ãéçºããCoverityã¯ãå質ãšã³ãžãã¢ãªã³ã°ãšã»ãã¥ãªãã£ä¿èšŒã®äº€å·®ç¹ã«äœçœ®ããéçè§£æãã©ãããã©ãŒã ã§ããCoverityã¯Cããã³C++ã·ã¹ãã ã®æ¬ 饿€åºã§åºãç¥ãããŠããŸãããSwiftãªã©ã®ææ°èšèªããµããŒãããŠããŸãããã®äŒæ¥äŸ¡å€ã¯ãã¹ã±ãŒã©ãã«ãªæ¬ é¥ã¢ããªã³ã°ããããžã§ã¯ãéã®ã¬ããã³ã¹ããããŠããåºç¯ãªãœãããŠã§ã¢æŽåæ§ãšã³ã·ã¹ãã ãšã®çµ±åã«ãããŸãã
å»ºç¯æš¡å
Coverityã¯ãèšèªåºæã®ãã«ããã£ããã£ã¡ã«ããºã ãšçµã¿åãããéäžåã®åæãµãŒããŒãä»ããŠåäœããŸããåæäžãã·ã¹ãã ã¯ã³ã³ãã€ã«ã¡ã¿ããŒã¿ããã£ããã£ããã¢ããªã±ãŒã·ã§ã³ã®äžé衚çŸãæ§ç¯ããŸãããã®ã¢ãã«ã«ããã軜éãªã³ã¿ãŒãããæ·±ãã»ãã³ãã£ãã¯è©äŸ¡ãå¯èœã«ãªãããã¡ã€ã«éããã³ããã·ãŒãžã£éã®åæãå¯èœã«ãªããŸãã
Swift ç°å¢ã§ã¯ãCoverity ã¯æ¬¡ã®ããšã«éç¹ã眮ããŠããŸãã
- è«çæ¬ é¥ãšä¿¡é Œæ§ã®åé¡ã®æ€åº
- ç¹å®ã®ã»ãã¥ãªãã£äžã®åŒ±ç¹ã®ç¹å®
- ãªãœãŒã¹ã®èª€çšãšåæå®è¡ã¢ããªã³ã°
- è€éããšä¿å®æ§ææšãå«ãã³ãŒãå質ã¡ããªã¯ã¹
ã»ãã¥ãªãã£äžã®çºèŠäºé ã¯ãCVEèå¥åã§ã¯ãªãCWEå顿³ã«åºã¥ããŠåé¡ãããŸãããã®ãã©ãããã©ãŒã ã¯ãäŸåé¢ä¿ã¬ãã«ã®è匱æ§ç®¡çã§ã¯ãªããæ§é çãªæ¬ 饿€åºãšã³ãŒãã®ä¿¡é Œæ§ãéèŠããŠããŸãã
CIã«ãããå®è¡åäœ
Coverityã¯ãåæåã«ã³ã³ãã€ã«ã¢ãŒãã£ãã¡ã¯ãããã£ããã£ãããã«ãçµ±åããŒã«ã䜿çšããŠCIãã€ãã©ã€ã³ã«çµ±åãããŸããããã¯åçŽãªãœãŒã¹ã¹ãã£ã³ãšã¯ç°ãªããSwiftãããžã§ã¯ãã®ãã«ãæ§æã®èª¿æŽãå¿ èŠã«ãªãå ŽåããããŸãã
äžè¬ç㪠CI ãã¿ãŒã³ã¯æ¬¡ã®ãšããã§ãã
- æ°èŠãŸãã¯å€æŽãããã³ãŒãã®å¢ååæ
- å€éã®å®å šåæã¹ãã£ã³
- é倧床ã®é«ãæ¬ é¥ã«å¯Ÿããããªã·ãŒããŒã¹ã®ã²ãŒãã£ã³ã°
- 確èªãããçºèŠäºé ã«å¯Ÿããèªåãã±ããäœæ
å®è¡æéã¯ãªããžããªã®ãµã€ãºãšåæã®æ·±åºŠã«ãã£ãŠç°ãªããŸããCoverityã¯è©³çްãªã»ãã³ãã£ãã¯ã¢ãã«ãæ§ç¯ãããããæ§æããŒã¹ã®ã¢ãã©ã€ã¶ãŒãããã¹ãã£ã³æéãé·ããªãå ŽåããããŸããäŒæ¥ã§ã¯ããã€ãã©ã€ã³ã®ããã©ãŒãã³ã¹ãç¶æããããã«ãé »åºŠãšæ·±åºŠã®ãã©ã³ã¹ãåãããšããããããŸãã
çµæã¯ Coverity Connect ããã·ã¥ããŒãã«éäžç®¡çãããåé¡ã®è¿œè·¡ãããªã¢ãŒãž ã¯ãŒã¯ãããŒãéå»ã®æ¬ é¥ã®åŸåãªã©ãæäŸãããŸãã
ãšã³ã¿ãŒãã©ã€ãºã¹ã±ãŒãªã³ã°ã®çŸå®
Coverityã¯ãé·æã«ãããã©ã€ããµã€ã¯ã«èŠä»¶ãæã€å€§èŠæš¡ãªã³ãŒãããŒã¹ã管çããçµç¹åãã«èšèšãããŠããŸããã»ãã¥ãªãã£ã«å ããä¿¡é Œæ§ãšäžå ·åã®é²æ¢ãåªå ãããç°å¢ã§ç¹ã«åšåãçºæ®ããŸãã
匷ã¿ã¯æ¬¡ã®ãšããã§ã:
- 深局æå³æ¬ 饿€åº
- ã¯ãã¹èšèªããŒããã©ãªãªã®å¯èŠæ§
- æ§é åãããããªã¢ãŒãžã¯ãŒã¯ãããŒ
- éå»ã®æ¬ é¥å¯åºŠã®è¿œè·¡
ãã ããæ§é äžã®å¶çŽã«ã¯æ¬¡ã®ãããªãã®ããããŸãã
- å°çšã®ã¢ãã€ã« ã»ãã¥ãªã㣠ããŒã«ãšæ¯èŒããŠãSwift ç¹æã®å®å šãªã³ãŒãã£ã³ã°ã®ãã¥ã¢ã³ã¹ã«ã¯ããŸãéç¹ã眮ãããŠããªã
- ãã€ãã£ãã®æšç§»çäŸåé¢ä¿ã®è匱æ§ç®¡çããªã
- ãã«ããã£ããã£æ§æã®æœåšçãªè€éã
- äŒæ¥ããŒããã©ãªãªã«åãããã©ã€ã»ã³ã¹ã³ã¹ã
è€æ°ããŒã ã®ç°å¢ã§ã¯ãã«ãŒã« ã»ãããšæ¬ é¥ã®åé¡ã®çžéãé²ãããã«ãäžè²«ããæ§æç®¡çãå¿ èŠã§ãã
äŸ¡æ Œç¹æ§
Coverityã¯ãã³ãŒãè¡æ°ãŸãã¯ãããžã§ã¯ãæ°ã«åºã¥ããã©ã€ã»ã³ã¹ã¢ãã«ãæ¡çšããåçšãšã³ã¿ãŒãã©ã€ãºãã©ãããã©ãŒã ã§ããè²»çšã«ã¯ããã©ãããã©ãŒã ã©ã€ã»ã³ã¹ããµãŒããŒã€ã³ãã©ã¹ãã©ã¯ãã£ãŸãã¯ã¯ã©ãŠããµãã¹ã¯ãªãã·ã§ã³ãéçšã¬ããã³ã¹ãªãœãŒã¹ãå«ãŸããŸãã
äŒæ¥ã¯ä»¥äžãèæ ®ããå¿ èŠããããŸãã
- Swift ãã«ãã·ã¹ãã ã®çµ±åãšã³ãžãã¢ãªã³ã°
- ç¶ç¶çãªã«ãŒã«èª¿æŽ
- å°çšã®ããªã¢ãŒãžã¯ãŒã¯ãããŒ
- æ¬ é¥ä¿®æ£è§£éã«é¢ããéçºè ãã¬ãŒãã³ã°
æ§é äžã®å¶é
Coverityã®åŒ·ã¿ã¯ã深局è匱æ§ã®æªçšã¢ãã«åã§ã¯ãªããæ§é çãªæ¬ é¥åæã«ãããŸããç¹å®ã®ã»ãã¥ãªãã£äžã®åŒ±ç¹ãç¹å®ããŸãããå æ¬çãªã»ãã¥ãªãã£å¯Ÿçã®ããã«å°éçãªSASTãã©ãããã©ãŒã ã«åã£ãŠä»£ãããã®ã§ã¯ãããŸããã
ããã«ãäŸåé¢ä¿ã¬ãã«ã® CVE ã¢ãã¿ãªã³ã°ãšãœãããŠã§ã¢æ§æåæã«ã¯ãSynopsys ãšã³ã·ã¹ãã å ã®åå¥ã®ããŒã«ãŸãã¯å€éšãã©ãããã©ãŒã ãšã®çµ±åãå¿ èŠã§ãã
ãšã³ã¿ãŒãã©ã€ãºèŠæš¡ã®Swiftå°å ¥ã«ãããŠãCoverityã¯å ç¢ãªä¿¡é Œæ§ãšæ§é çæ¬ 饿€åºãã©ãããã©ãŒã ãšããŠæ©èœããŸããé·æçãªä¿å®æ§ã匷åããæ¬çªç°å¢ãžã®æ¬ é¥ã®æŒæŽ©ãäœæžããŸãããå æ¬çãªè匱æ§ã¬ããã³ã¹ãå®çŸããã«ã¯ãéå±€åãããã»ãã¥ãªãã£ã¢ãŒããã¯ãã£ã«çµ±åããå¿ èŠããããŸãã
ã»ã ã°ã¬ãã
å ¬åŒãµã€ãïŒ https://semgrep.dev
Semgrepã¯ãSwiftãå«ãè€æ°ã®èšèªã察象ãšãããæè»ã§ãã¿ãŒã³ããŒã¹ã®ã»ãã¥ãªãã£ããã³å質ã¹ãã£ã³ãå®çŸããã«ãŒã«é§ååã®éçè§£æãã©ãããã©ãŒã ã§ãã軜éã§ãããªããæ¡åŒµæ§ã«åªããDevSecOpsãœãªã¥ãŒã·ã§ã³ãšããŠäœçœ®ä»ããããŠãããçµç¹ã¯å€§èŠæš¡ãªã¹ãã£ã³ã€ã³ãã©ãå°å ¥ããããšãªããã«ã¹ã¿ã ã«ãŒã«ã®å®çŸ©ãšé©çšãå¯èœã§ããäŒæ¥ã®Swiftç°å¢ã«ãããŠãSemgrepã¯éçºè äžå¿ã®Lintãšæ¬æ ŒçãªSASTãã©ãããã©ãŒã ãã€ãªãæ©æž¡ããšããŠæ©èœããŸãã
å»ºç¯æš¡å
Semgrepã¯ã宣èšåã«ãŒã«èšèªãçšããŠæœè±¡æ§ææšäžã®ãã¿ãŒã³ãããã³ã°ãè¡ããŸããæ·±å±€ã·ã³ããªãã¯å®è¡ãšã³ãžã³ãšã¯ç°ãªããããã°ã©ã å šäœã®ã¢ããªã³ã°ã¯è¡ããŸããããã®ä»£ããã«ãå®å šã§ãªãäœ¿çšæ³ãã¢ãŒããã¯ãã£éåããŸãã¯ããªã·ãŒéžè±ã衚ãå®çŸ©æžã¿ãã¿ãŒã³ã«ç §ãããŠã³ãŒãæ§é ãè©äŸ¡ããŸãã
Swift ã³ãŒãããŒã¹ã®å ŽåãSemgrep ã¯ä»¥äžããµããŒãããŸãã
- å®å šã§ãªãAPI䜿çšãã¿ãŒã³ã®æ€åº
- ããŒãã³ãŒããããç§å¯ãšæ©å¯ããŒã¿ã®æŒæŽ©ã®ç¹å®
- 瀟å ã³ãŒãã£ã³ã°ããªã·ãŒã®æœè¡
- çµç¹ã®æšæºã«åãããŠã«ã¹ã¿ãã€ãºãããã«ãŒã«ã®äœæ
- å³éžãããã»ãã¥ãªãã£ã«ãŒã«ããã¯ãšã®çµ±å
Semgrepã«ãŒã«ã¯ãæ€åºçµæãCWEåé¡ãšç §åã§ããŸãããã ãããã¡ãŒã¹ãããŒãã£ã®Swiftã³ãŒãã«CVEèå¥åãå²ãåœãŠããæšç§»çäŸåé¢ä¿ã®è匱æ§ç®¡çããã€ãã£ãã«æäŸããŠããŸããã
Semgrep ã¯ãªãŒãã³ãœãŒã¹ãšåçšã¯ã©ãŠãããŒã¹ã®åœ¢åŒã§æäŸãããŠãããåŸè ã¯éäžç®¡çãããããã·ã¥ããŒããããªã¢ãŒãž ã¯ãŒã¯ãããŒãããªã·ãŒå¶åŸ¡ãæäŸããŸãã
CIã«ãããå®è¡åäœ
Semgrepã¯ãé床ãšCIçµ±åã«æé©åãããŠããŸããã³ãã³ãã©ã€ã³ããŒã«ãšããŠããŸãã¯CIãã©ã°ã€ã³çµç±ã§å®è¡ãããã³ãŒããã¹ãã£ã³ã°ãã©ãããã©ãŒã ãšçµ±åã§ããæ§é åãããJSONãŸãã¯SARIFåºåãçæããŸãã
äžè¬ç㪠CI ã®äœ¿çšãã¿ãŒã³ã¯æ¬¡ã®ãšããã§ãã
- æ°ããã³ãŒãã®ãã«ãªã¯ãšã¹ãã¹ãã£ã³
- å®çŸ©ãããã«ãŒã«éåã«å¯Ÿããããªã·ãŒããŒã¹ã®ããŒãžãããã¯
- ãªããžããªå šäœã®ã¹ã±ãžã¥ãŒã«ãããã¹ãã£ã³
- GitHub ãŸã㯠GitLab ã»ãã¥ãªãã£ããã·ã¥ããŒããšã®çµ±å
æ·±ãããã·ãŒãžã£éè§£æã§ã¯ãªããã¿ãŒã³ããŒã¹ã®è©äŸ¡ãè¡ããããå®è¡æéã¯éåžžé«éã§ãããã®ãããSemgrepã¯ãã¬ã€ãã³ã·å¶çŽã«ããé«è² è·ãªSASTãšã³ãžã³ã®é©çšãå¶éãããé«é »åºŠãã€ãã©ã€ã³ã«æé©ã§ãã
ãã ããã«ãŒã«ã®ç²ŸåºŠã¯èšå®ã®å質ã«å€§ããäŸåããŸãããã¿ãŒã³ãåºããããšèª€æ€ç¥ãçºçããå¯èœæ§ããããã«ãŒã«ãçããããšã³ã³ããã¹ãäŸåã®è匱æ§ãèŠéããŠããŸãå¯èœæ§ããããŸãã
ãšã³ã¿ãŒãã©ã€ãºã¹ã±ãŒãªã³ã°ã®çŸå®
Semgrepã¯ãæè»ãªã«ãŒã«ç®¡çã¢ãã«ã«ããã忣ããŒã éã§å¹æçã«æ¡åŒµã§ããŸããéäžåãããããªã·ãŒãªããžããªã«ãããé©çšãæšæºåããªãããåã ã®Swiftãããžã§ã¯ãã«åãããã«ã¹ã¿ãã€ãºãå¶åŸ¡ã§ããŸãã
匷ã¿ã¯æ¬¡ã®ãšããã§ã:
- è¿ éãªCIå®è¡
- ã«ã¹ã¿ã ã«ãŒã«ã®æ¡åŒµæ§
- éçºè ã«åªããçµ±å
- ã¯ã©ãŠãããŒã¹ã®éäžç®¡çãªãã·ã§ã³
å¶éäºé ã¯æ¬¡ã®ãšããã§ã:
- éå®çãªãã£ãŒãããŒã¿ãããŒã¢ããªã³ã°
- ãã€ãã£ãã³ãŒã«ã°ã©ãå šäœã®èåŒ±æ§æšè«ããªã
- çµã¿èŸŒã¿äŸåé¢ä¿ã®CVE远跡ãªã
- 粟床ã远æ±ããã«ãŒã«äœæå質ãžã®äŸå
DevSecOpsã®æç床ãé«ãäŒæ¥ã§ã¯ãSemgrepã¯é©å¿æ§ã®é«ãããªã·ãŒé©çšãšã³ãžã³ãšããŠæ©èœããŸããäžæ¹ãæ§é åãããã«ãŒã«ã¬ããã³ã¹ãæ¬ åŠããŠããçµç¹ã§ã¯ãèšå®ã®ç¡ç§©åºãªæ¡æ£ã«ãã£ãŠå¹æãäœäžããå¯èœæ§ããããŸãã
äŸ¡æ Œç¹æ§
Semgrepã¯ç¡æã®ãªãŒãã³ãœãŒã¹çãšåçšSaaSãã©ãããã©ãŒã ãæäŸããŠããŸãããšã³ã¿ãŒãã©ã€ãºäŸ¡æ Œã¯éåžžããªããžããªæ°ãéçºè ã©ã€ã»ã³ã¹æ°ããŸãã¯äœ¿çšç¶æ³ã«åºã¥ããŠæ±ºå®ãããŸãã
ç·ã³ã¹ãã®èæ ®äºé ã¯æ¬¡ã®ãšããã§ãã
- éäžåããã·ã¥ããŒãã®ãµãã¹ã¯ãªãã·ã§ã³æé
- ã«ãŒã«ã®äœæãšã¡ã³ããã³ã¹ã®ãªãŒããŒããã
- CIçµ±åãšã³ãžãã¢ãªã³ã°
- ã»ãã¥ãªãã£ãšã³ãžãã¢ãªã³ã°ã®ã¬ãã¥ãŒããã»ã¹
ãªãŒãã³ãœãŒã¹ ãšãã£ã·ã§ã³ã§ã¯ãçŽæ¥çãªã©ã€ã»ã³ã¹ ã³ã¹ãã¯åæžãããŸãããã¬ããã³ã¹ã®è²¬ä»»ã¯å®å šã«ç€Ÿå ããŒã ã«ç§»ããŸãã
æ§é äžã®å¶é
Semgrep ã¯å®å šãªããã·ãŒãžã£éããŒã¿ãããŒã°ã©ããæ§ç¯ããŸãããè€é㪠Swift äžŠè¡æ§ã¢ãã«ãéåæãã¿ãŒã³ããŸãã¯éæ¥çãªåŒã³åºããã§ãŒã³ã¯ããã¿ãŒã³ããŒã¹ã®æ€åºã§ã¯å®å šã«è¡šçŸãããªãå¯èœæ§ããããŸãã
ããã«ãSemgrep ã¯ãã€ãã£ãã®ãœãããŠã§ã¢æ§æåææ©èœãæäŸããŠããŸãããäŒæ¥ã¯ãäŸåé¢ä¿ã¬ãã«ã®ãªã¹ã¯ã«å¯ŸåŠããããã«ãå¥é SCA ããŒã«ãçµ±åããå¿ èŠããããŸãã
ãšã³ã¿ãŒãã©ã€ãºSwiftãšã³ã·ã¹ãã ã«ãããŠãSemgrepã¯DevSecOpsã«æºæ ããæè»ãªéçã¹ãã£ã³ãšã³ãžã³ãšããŠæ©èœããŸããé«ãé©å¿æ§ãšCIå¹çãæäŸããŸãããæ·±å±€ããã°ã©ã ã¢ããªã³ã°æ©èœã®éçãè£ãããã«ãéå±€åã»ãã¥ãªãã£ã¢ãŒããã¯ãã£ã«çµ±åããå¿ èŠããããŸãã
GitHub ã®é«åºŠãªã»ãã¥ãªãã£
å ¬åŒãµã€ãïŒ https://github.com/security/advanced-security
GitHub Advanced Securityã¯ãGitHubãªããžããªã«çŽæ¥çµ±åããããã©ãããã©ãŒã ã¬ãã«ã®ã»ãã¥ãªãã£æ©èœã§ããéçã¢ããªã±ãŒã·ã§ã³ã»ãã¥ãªãã£ãã¹ããäŸåé¢ä¿ã®è匱æ§ç£èŠãã·ãŒã¯ã¬ããã¹ãã£ã³ãçµ±åéçºã¯ãŒã¯ãããŒã«çµ±åããŸããGitHubã§ãã¹ãããããšã³ã¿ãŒãã©ã€ãºSwiftç°å¢ã§ã¯ãå€éšãµãŒããŒã€ã³ãã©ã¹ãã©ã¯ãã£ãå¿ èŠãšããã«ãCIã«æºæ ãããã€ãã£ããªã»ãã¥ãªãã£å¶åŸ¡ãæäŸããŸãã
å»ºç¯æš¡å
GitHub Advanced Securityã¯ããªããžããªãã¹ãã£ã³ã°ãã©ãããã©ãŒã ã«çµã¿èŸŒãŸããã¯ã©ãŠãããŒã¹ã®åæã¬ã€ã€ãŒãšããŠåäœããŸããéçåæã¯CodeQLã«ãã£ãŠå®è¡ããããœãŒã¹ã³ãŒããã¯ãšãªå¯èœãªããŒã¿æ§é ã«å€æããããšã§ã»ãã³ãã£ãã¯ã³ãŒãåæãå®è¡ããŸããã»ãã¥ãªãã£ã¯ãšãªã¯ãã€ã³ãžã§ã¯ã·ã§ã³è匱æ§ãå®å šã§ãªãããŒã¿åŠçãå®å šã§ãªãAPIã®äœ¿çšã«é¢é£ãããã¿ãŒã³ãè©äŸ¡ããŸãã
Swift ãããžã§ã¯ãã®å ŽåãGitHub Advanced Security ã¯æ¬¡ã®æ©èœãæäŸããŸãã
- CodeQLããŒã¹ã®éçã»ãã¥ãªãã£åæ
- CVE ãããã³ã°ã«ããäŸåé¢ä¿ã®è匱æ§ç£èŠ
- ãœãŒã¹å±¥æŽãšã³ãããã«ãããç§å¯ã®æ€åº
- ãã«ãªã¯ãšã¹ãã¬ãã«ã®ã»ãã¥ãªãã£æ³šé
- ãã©ã³ãä¿è·ã«ãŒã«ã«ããããªã·ãŒã®é©çš
ã¹ã¿ã³ãã¢ãã³ã®ãªã³ã¿ãŒãšã¯ç°ãªãããã®ãã©ãããã©ãŒã ã¯ãã¡ãŒã¹ãããŒãã£ã³ãŒãã®æ€åºçµæãšäŸåé¢ä¿ã¬ãã«ã®CVEé²åºãçžé¢ãããŸããäŸåé¢ä¿ã¹ãã£ã³ã«ããè匱ãªããã±ãŒãžãç¹å®ãããå ¬éãããŠããè匱æ§ããŒã¿ããŒã¹ãšæŽåããé倧床ã¬ãã«ãæããã«ãªããŸãã
CIã«ãããå®è¡åäœ
éçè§£æã¯éåžžãGitHub Actions ã¯ãŒã¯ãããŒãéããŠå®è¡ãããŸããCodeQL ã¹ãã£ã³ã¯ã以äžã®å®è¡æ¹æ³ãèšå®ã§ããŸãã
- ãã«ãªã¯ãšã¹ãã«ã€ããŠ
- ä¿è·ããããã©ã³ããžã®ããã·ã¥æ
- ã¹ã±ãžã¥ãŒã«ãããééã§
- ãªãªãŒã¹åè£ã®æ€èšŒã®äžç°ãšããŠ
äŸåé¢ä¿ã¹ãã£ã³ã¯ãããã±ãŒãž ãããã§ã¹ããåæããè匱æ§ã®é瀺ãç£èŠããããšã§ç¶ç¶çã«å®è¡ãããŸãã
å®è¡æéã¯ãªããžããªã®ãµã€ãºãšã¯ãšãªã®è€éãã«ãã£ãŠç°ãªããŸããCodeQLåæã§ã¯ãã¹ãã£ã³ã®æ·±ããšãã€ãã©ã€ã³ã®å®è¡æéã®ãã©ã³ã¹ããšãããã«èª¿æŽãå¿ èŠã«ãªãå ŽåããããŸããåæã¯ãªããžããªãã©ãããã©ãŒã ã«çµ±åãããŠãããããçµæã¯ãã«ãªã¯ãšã¹ããšã»ãã¥ãªãã£ããã·ã¥ããŒãã«çŽæ¥è¡šç€ºãããŸãã
ãšã³ã¿ãŒãã©ã€ãºã¹ã±ãŒãªã³ã°ã®çŸå®
GitHub Advanced Securityã¯ãGitHub Enterpriseãæ¢ã«æšæºåããŠããçµç¹ã«å¹æçã«æ¡åŒµã§ããŸããäžå åãããããªã·ãŒé©çšãçµç¹ã¬ãã«ã®ã»ãã¥ãªãã£ããã·ã¥ããŒãããããŠã¢ã¯ã»ã¹å¶åŸ¡ã¯ãäŒæ¥ã®ã¬ããã³ã¹æ§é ã«é©åããŸãã
匷ã¿ã¯æ¬¡ã®ãšããã§ã:
- éçºã¯ãŒã¯ãããŒãšã®ãã€ãã£ãçµ±å
- ã³ãŒãã®è匱æ§ãšäŸåé¢ä¿ã® CVE ã®çµ±åãã¥ãŒ
- éå»ã®ãªããžããªãç¶²çŸ ããã·ãŒã¯ã¬ããã¹ãã£ã³
- æå°éã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãªãŒããŒããã
ãã ããæ§é äžã®èæ ®äºé ã¯æ¬¡ã®ãšããã§ãã
- ãã¹ãã£ã³ã°ãã©ãããã©ãŒã ãšããŠã®GitHubãžã®äŸå
- å°çšã® SAST ãšã³ãžã³ã«æ¯ã¹ãŠã«ã¹ã¿ãã€ãºã®æ·±ããéãããŠãã
- éçºè ã·ãŒãã©ã€ã»ã³ã¹ã«åºã¥ãæœåšçãªã³ã¹ã圱é¿
- å éšçã«æ¡åŒµãããªãéããåæã®æ·±ãã¯å®çŸ©æžã¿ã®ã¯ãšãª ããã¯ã«ãã£ãŠå¶éãããŸãã
ç°æ©çš®ãªããžã㪠ãã¹ãã£ã³ã°ãŸãã¯ãªã³ãã¬ãã¹ã®ãœãŒã¹ ã³ã³ãããŒã« ã·ã¹ãã ã䜿çšããŠããçµç¹ã§ã¯ãçµ±åã®èª²é¡ã«çŽé¢ããå¯èœæ§ããããŸãã
äŸ¡æ Œç¹æ§
GitHub Advanced Securityã¯ãGitHub Enterpriseãã©ã³åãã®åçšã¢ããªã³ã§ããäŸ¡æ Œã¯éåžžãã¢ã¯ãã£ããªã³ããã¿ãŒæ°ãŸãã¯ãªããžããªã®èŠæš¡ã«åºã¥ããŠæ±ºå®ãããŸãã
ã³ã¹ãèŠå ã«ã¯ä»¥äžãå«ãŸããŸãã
- ãŠãŒã¶ãŒããšã®ã©ã€ã»ã³ã¹
- CI ã³ã³ãã¥ãŒãã£ã³ã°æ¶è²»
- ç®¡çæ§æã®ãªãŒããŒããã
- é«åºŠãªããªã·ãŒã®ããã®ã«ã¹ã¿ã CodeQL ã¯ãšãªã®éçº
ã¯ã©ãŠã ãã€ãã£ã ã¢ãã«ã§ã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£ç®¡çã®è² æ ã¯è»œæžãããŸããããã©ãããã©ãŒã ã®äœ¿çšç¶æ³ã«é¢é£ãã宿çãªãµãã¹ã¯ãªãã·ã§ã³ ã³ã¹ããçºçããŸãã
æ§é äžã®å¶é
CodeQLã¯ã»ãã³ãã£ãã¯åæãå¯èœã«ããŸãããç¹å®ã®ãšããžã±ãŒã¹ã®è匱æ§ã¢ããªã³ã°ã·ããªãªã«ãããŠã¯ãå°éçãªãšã³ã¿ãŒãã©ã€ãºSASTãšã³ãžã³ã®æ·±åºŠã«å¹æµããªãå¯èœæ§ããããŸãããŸããéçåæã¯GitHubå ã§ãã¹ããããŠãããªããžããªã«éå®ãããŸãã
äŸåé¢ä¿ã¹ãã£ã³ã¯æ¢ç¥ã®CVEãç¹å®ããŸãããå®è¡æã®å°éå¯èœæ§ãã³ã³ããã¹ãã«åºã¥ãæªçšå¯èœæ§ãæ¬è³ªçã«å€æãããã®ã§ã¯ãããŸãããå°éå¯èœæ§åæãå¿ èŠãšããäŒæ¥ã¯ãè£å®çãªããŒã«ãçµ±åããå¿ èŠããããŸãã
GitHubã§ãã¹ãããããšã³ã¿ãŒãã©ã€ãºSwiftãšã³ã·ã¹ãã ã§ã¯ãGitHub Advanced Securityããéçè§£æãCVEç£èŠãã·ãŒã¯ã¬ããæ€åºãçµã¿åããããã¬ããã³ã¹ã«æºæ ããçµ±åã»ãã¥ãªãã£ã¬ã€ã€ãŒãæäŸããŸããããã¯ãèŠåŸããCIã²ãŒãããŒãã³ã°ãšé£æºããããšã§ç¹ã«å¹æçã§ãããèŠå¶ãå³ããç°å¢ãéåžžã«è€éãªã¢ãŒããã¯ãã£ç°å¢ã§ã¯ãæ©èœæ¡åŒµãå¿ èŠã«ãªãå ŽåããããŸãã
NowSecure
å ¬åŒãµã€ãïŒ https://www.nowsecure.com
NowSecureã¯ãiOSããã³Androidãšã³ã·ã¹ãã ã«ç¹åããŠéçºãããåçšã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã»ãã¥ãªãã£ãã©ãããã©ãŒã ã§ããæ±çšçãªéçã¢ãã©ã€ã¶ãŒãšã¯ç°ãªããNowSecureã¯éçè§£æãåçè§£æããããŠã¢ãã€ã«ã«ç¹åããã»ãã¥ãªãã£è©äŸ¡æ©èœãå ŒãåããŠããŸããç¹ã«ãããªãã¯ãŸãã¯ãšã³ã¿ãŒãã©ã€ãºã¢ããªã¹ãã¢ãéããŠé åžãããiOSã¢ããªã±ãŒã·ã§ã³ãäžå¿ãšãããšã³ã¿ãŒãã©ã€ãºSwiftç°å¢ã«ãããŠãNowSecureã¯å€èšèªå¯Ÿå¿ã®SASTãšã³ãžã³ã§ã¯ãªããã¢ãã€ã«ã»ãã¥ãªãã£ä¿èšŒã¬ã€ã€ãŒãšããŠæ©èœããŸãã
å»ºç¯æš¡å
NowSecureã¯ãäž»ã«ã¯ã©ãŠãããŒã¹ã®ãã©ãããã©ãŒã ãšããŠåäœãããœãŒã¹ã³ãŒãïŒå©çšå¯èœãªå ŽåïŒã«å ããŠãã³ã³ãã€ã«æžã¿ã®ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ãè§£æããŸããSwiftããŒã¹ã®iOSã¢ããªã±ãŒã·ã§ã³ã®å Žåããã®ãã©ãããã©ãŒã ã¯ä»¥äžã®ç¹ãè©äŸ¡ããŸãã
- å®å šã§ãªãAPIã®äœ¿çšãã¿ãŒã³
- ããŒã¿ã¹ãã¬ãŒãžãšæå·åã®èª€ã£ãæ§æ
- ãããã¯ãŒã¯éä¿¡ã®åŒ±ç¹
- ãã€ããªã¬ãã«ã®ã»ãã¥ãªãã£ããããã£
- èŠå¶ç£æ¥ã®ã³ã³ãã©ã€ã¢ã³ã¹æŽå
æ§æã¬ãã«ã®ãªã³ã¿ãŒãšã¯ç°ãªããNowSecure ã¯ã¢ããªã±ãŒã·ã§ã³ãã€ããªãè§£æããå®è¡æã«é¢é£ããèšå®ãã¹ãæ€åºã§ããŸããéçæ€æ»ãšåäœãã¹ããçµã¿åãããããšã§ããœãŒã¹ã¬ãã«ã®ãã¿ãŒã³è§£æã ãã§ã¯æããã«ãªããªãè匱æ§ãç¹å®ã§ããŸãã
調æ»çµæã¯ãOWASP Mobile Top 10ãCWEåé¡ãªã©ãæ¥çã§èªããããå顿³ã«åºã¥ããŠåé¡ãããŸããCVEèå¥åã¯éåžžããã¡ãŒã¹ãããŒãã£ã®Swiftã³ãŒãã§ã¯ãªãããµãŒãããŒãã£ã©ã€ãã©ãªã®è匱æ§ã«é¢é£ä»ããããŠããŸãã
CIã«ãããå®è¡åäœ
NowSecureã¯ãèªåã¢ããªã¢ããããŒããšã¹ãã£ã³ããªã¬ãŒãéããŠCIãã€ãã©ã€ã³ã«çµ±åãããŸããSwiftã¢ããªã±ãŒã·ã§ã³ã¯CIå ã§æ§ç¯ããã眲åãããåŸãNowSecureãã©ãããã©ãŒã ã«éä¿¡ãããåæãããŸãã
äžè¬ç㪠CI ãã¿ãŒã³ã¯æ¬¡ã®ãšããã§ãã
- ãªãªãŒã¹åã®ã»ãã¥ãªãã£æ€èšŒã¹ãã£ã³
- æ¬çªç°å¢ãã«ãã®ã»ãã¥ãªãã£è©äŸ¡ã宿çã«å®æœ
- ã³ã³ãã©ã€ã¢ã³ã¹éèŠã®å®æç£æ»
- 修埩远跡ã®ããã®ãã±ããã·ã¹ãã ãšã®çµ±å
åæã«ã¯ãã€ããªæ€æ»ãšåçã³ã³ããŒãã³ããå«ãŸãããããçŽç²ãªãœãŒã¹ã¬ãã«ããŒã«ãããå®è¡æéã¯éåžžé·ããªããŸãããã®ãããNowSecureã¹ãã£ã³ã¯ãé«é »åºŠã®ãã«ãªã¯ãšã¹ããã§ãã¯ã§ã¯ãªãããªãªãŒã¹æ€èšŒã²ãŒããšããŠäœçœ®ä»ããããããšãå€ãã§ãã
ãšã³ã¿ãŒãã©ã€ãºã¹ã±ãŒãªã³ã°ã®çŸå®
NowSecureã¯ãéèãå»çãæ¿åºæ©é¢ãªã©ãèŠå¶ã®å³ããåéãé«ãªã¹ã¯ã®åéã§ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ãé ä¿¡ããçµç¹åãã«èšèšãããŠããŸããæ¥åžžçãªéçºãªã³ãã£ã³ã°ããããã³ã³ãã©ã€ã¢ã³ã¹ææžã®äœæãšã»ãã¥ãªãã£æ€èšŒã«éç¹ã眮ããŠããŸãã
匷ã¿ã¯æ¬¡ã®ãšããã§ã:
- ã¢ãã€ã«åºæã®è匱æ§ã¢ããªã³ã°
- ãã€ããªã¬ãã«ã®æ€æ»æ©èœ
- ã³ã³ãã©ã€ã¢ã³ã¹å ±åãµããŒã
- ã©ã³ã¿ã€ã ã®èª€ã£ãæ§æã®ãªã¹ã¯ã®ã«ããŒ
æ§é äžã®å¶çŽã¯æ¬¡ã®ãšããã§ãã
- ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã®ã»ãã¥ãªãã£ã«çŠç¹ãçµã
- ãµãŒããŒãµã€ãã®SwiftãµãŒãã¹ãžã®é©çšç¯å²ãéãããŠãã
- æ·±ãæ§é ã®ã³ãŒãä¿å®æ§ã¡ããªã¯ã¹ããªã
- ã¯ã©ãŠãããŒã¹ã®ã¹ãã£ã³ã€ã³ãã©ã¹ãã©ã¯ãã£ãžã®äŸå
ããã¯ãšã³ã ãµãŒãã¹ãå«ãæ··å Swift ããŒããã©ãªãªã管çããäŒæ¥ã®å ŽåãNowSecure ã¯ã¢ãã€ã« ã»ã°ã¡ã³ãã®ã¿ã«å¯Ÿå¿ããŠãããããåºç¯ãªéçåæãœãªã¥ãŒã·ã§ã³ãšçµã¿åãããå¿ èŠããããŸãã
äŸ¡æ Œç¹æ§
NowSecureã¯åçšãµãã¹ã¯ãªãã·ã§ã³ããŒã¹ã®ãã©ãããã©ãŒã ã§ããäŸ¡æ Œã¯éåžžãã¢ããªã±ãŒã·ã§ã³ã®æ°ãã¹ãã£ã³é »åºŠãäŒæ¥ã®ã³ã³ãã©ã€ã¢ã³ã¹èŠä»¶ã«ãã£ãŠç°ãªããŸãã
ã³ã¹ãã«é¢ããèæ ®äºé ã¯æ¬¡ã®ãšããã§ãã
- ã¢ããªã±ãŒã·ã§ã³ããšã®ãµãã¹ã¯ãªãã·ã§ã³æé
- CIçµ±åãšã³ãžãã¢ãªã³ã°
- ã»ãã¥ãªãã£ã¬ãã¥ãŒãšããªã¢ãŒãžã®ãªãœãŒã¹
- ç¶ç¶çãªã³ã³ãã©ã€ã¢ã³ã¹ææžåããã»ã¹
ç¹æ®ãªã»ãã¥ãªãã£æ€èšŒãã©ãããã©ãŒã ãšããŠåäœãããããæ±çšã®ãªã³ãã£ã³ã° ããŒã«ã«æ¯ã¹ãŠã©ã€ã»ã³ã¹ ã³ã¹ããé«ããªãå¯èœæ§ããããŸãã
æ§é äžã®å¶é
NowSecureã¯ã深局ããã·ãŒãžã£éã³ãŒãè§£æã®ããã®ãœãŒã¹ã¬ãã«SASTãšã³ãžã³ã眮ãæãããã®ã§ã¯ãããŸããããã®éçæ€æ»ã³ã³ããŒãã³ãã¯ãã¢ãŒããã¯ãã£ã³ãŒãã®è€éæ§ã¢ããªã³ã°ã§ã¯ãªããã¢ãã€ã«ã»ãã¥ãªãã£ã®ãã¹ãã£ã«éç¹ã眮ããŠããŸãã
ããã«ãã¢ãã€ã« ã¢ããªã±ãŒã·ã§ã³å ã®äŸåé¢ä¿ã®è匱æ§ãèå¥ããŸãããæ¬è³ªçã«ã¯å®è¡ãã¹ã®å°éå¯èœæ§ãäŒæ¥å šäœã®èšèªéã¬ããã³ã¹ãã¢ãã«åããŸããã
ãšã³ã¿ãŒãã©ã€ãºSwiftãšã³ã·ã¹ãã ã«ãããŠãNowSecureã¯iOSã¢ããªã±ãŒã·ã§ã³ã®ãªã¹ã¯ã«ç¹åããã¢ãã€ã«ã»ãã¥ãªãã£ä¿èšŒã¬ã€ã€ãŒãšããŠæ©èœããŸããã³ã³ãã©ã€ã¢ã³ã¹æ€èšŒãšã©ã³ã¿ã€ã ã»ãã¥ãªãã£äœå¶ã匷åããŸãããå æ¬çãªãšã³ã¿ãŒãã©ã€ãºã«ãã¬ããžãå®çŸããã«ã¯ãããåºç¯ãªéçè§£æããã³äŸåé¢ä¿ã¬ããã³ã¹ã¢ãŒããã¯ãã£ã«çµ±åããå¿ èŠããããŸãã
ã¹ã€ãããã©ãŒããã
å ¬åŒãµã€ãïŒ https://github.com/nicklockwood/SwiftFormat
SwiftFormatã¯ãSwiftã³ãŒãããŒã¹å šäœã«ããã£ãŠäžè²«ããã³ãŒãã¹ã¿ã€ã«ãšæ§æã®æ£èŠåã匷å¶ããããšã«éç¹ã眮ãããªãŒãã³ãœãŒã¹ã®Swiftãã©ãŒãããã£ã³ã°ããŒã«ã§ããã»ãã¥ãªãã£éèŠã®éçã¢ãã©ã€ã¶ãŒãæ¬ é¥æ€åºãšã³ãžã³ãšã¯ç°ãªããSwiftFormatã¯èªåãã©ãŒãããã£ã³ã°ã«ãŒã«ã«ç¹åããŠããŸãããšã³ã¿ãŒãã©ã€ãºç°å¢ã§ã¯ãSwiftFormatã¯ã¹ã¿ã³ãã¢ãã³ã®å質ã¬ããã³ã¹ãœãªã¥ãŒã·ã§ã³ãšãããããããªã³ã¿ãŒãSASTãã©ãããã©ãŒã ãšé£æºããè£å®çãªè¡ç管çã¡ã«ããºã ãšããŠäœçœ®ä»ããããã®ãäžè¬çã§ãã
å»ºç¯æš¡å
SwiftFormatã¯ããœãŒã¹ãããœãŒã¹ãžã®å€æãšã³ãžã³ãšããŠåäœããŸããSwiftã³ãŒããæ§é åããã衚çŸã«è§£æãã倿Žãããã³ãŒãããã£ã¹ã¯ã«æžãæ»ãåã«ãèšå®å¯èœãªãã©ãŒããã倿ãé©çšããŸãããã®ã¢ãŒããã¯ãã£ã¯ãæ¬ é¥ã®ç¹å®ãããæ±ºå®è«çãªåºåãéèŠããŠããŸãã
äž»ãªç¹åŸŽã¯æ¬¡ã®ãšããã§ã:
- èšå®å¯èœãªã«ãŒã«ã«åºã¥ãèªåã³ãŒããã©ãŒããã
- ã«ã¹ã¿ã ã¹ã¿ã€ã«ã¬ã€ãã©ã€ã³ã®ãµããŒã
- CLIå®è¡ãšXcodeçµ±å
- äºåã³ããããšCIããã¯ã®äºææ§
SwiftFormatã¯ãã»ãã³ãã£ãã¯ãªè匱æ§åæãããã·ãŒãžã£éã¢ããªã³ã°ãäŸåé¢ä¿ã®æ€æ»ã¯è¡ããŸãããCVEã®æ€åºããçºèŠäºé ãè匱æ§åé¡ã«ãããã³ã°ããããšãã§ããŸãããSwiftFormatã®åœ¹å²ã¯ãæ§æããã³ã¹ã¿ã€ã«ã®äžè²«æ§ã®ç¶æã«éå®ãããŠããŸãã
CIã«ãããå®è¡åäœ
CI ãã€ãã©ã€ã³ã§ã¯ãSwiftFormat ã¯é垞次ã®ããã«äœ¿çšãããŸãã
- ã³ãŒãã®ããŒãžåã«äžè²«ãããã©ãŒãããã匷å¶ããã³ãããåããã¯
- ãã©ãŒãããã®éžè±ãçºçãããšãã«ãã倱æãã CI æ€èšŒã¹ããã
- ãã©ã³ãéã§ã³ãŒããæšæºåããèªåä¿®æ£ããŒã«
å€æã¯æ§æã¬ãã«ã®æ§é ã«åºã¥ããŠè¡ãããæ·±ãæå³è§£æã¯è¡ãããªããããå€§èŠæš¡ãªSwiftãªããžããªã§ãå®è¡æéã¯æå°éã«æããããŸãããã®ãããSwiftFormatã¯ã¬ã€ãã³ã·ãžã®æææ§ãéèŠãšãªãé«é »åºŠãã€ãã©ã€ã³ã«é©ããŠããŸãã
ãã ãããœãŒã¹ ãã¡ã€ã«ãçŽæ¥å€æŽãããããã¬ããã³ã¹ ããã»ã¹ã§ã¯ãæžåŒèšå®ã®ä¿®æ£ãèªåçã«é©çšããããéçºè ã®ä»å ¥ãå¿ èŠãšããéåããããã¯ããããã«åŒ·å¶ããããå®çŸ©ããå¿ èŠããããŸãã
ãšã³ã¿ãŒãã©ã€ãºã¹ã±ãŒãªã³ã°ã®çŸå®
SwiftFormatã¯ããšã³ã¿ãŒãã©ã€ãºèŠæš¡ã§è€æ°ã®ããŒã ããªããžããªã«ãããçµ±äžãããã¹ã¿ã€ã«é©çšããµããŒãããŸããäžå 管çããããã³ãã¬ãŒãã瀟å ãã©ãããã©ãŒã ãšã³ãžãã¢ãªã³ã°æšæºã«çµ±åããããšã§ãã³ãŒãã¬ãã¥ãŒãè€éåããå¯èœæ§ã®ããã¹ã¿ã€ã«ã®ã°ãã€ãã軜æžããŸãã
匷ã¿ã¯æ¬¡ã®ãšããã§ã:
- 決å®è«çãã€èªååããããã©ãŒããã
- äœãéçšãªãŒããŒããã
- éçºè ã¯ãŒã¯ãããŒãšã®ã·ãŒã ã¬ã¹ãªçµ±å
- ã©ã€ã»ã³ã¹è²»çšãŒã
å¶éã¯æ§é çãªãã®ã§ãã:
- æ¬ é¥æ€åºãªã
- è匱æ§ã¢ããªã³ã°ãªã
- è€éããä¿å®æ§ã®ææšããªã
- ã»ãã¥ãªãã£ãã³ã³ãã©ã€ã¢ã³ã¹ã®å顿³ãšã®çµ±åãªã
èŠå¶ãããç°å¢ã§ã¯ãSwiftFormat ã¯èªã¿ããããšã¬ãã¥ãŒã®å¹çæ§ãåäžãããããšã§éæ¥çã«ã¬ããã³ã¹ã«è²¢ç®ããŸãããã»ãã¥ãªãã£ãç£æ»ã®èŠä»¶ãæºãããã®ã§ã¯ãããŸããã
äŸ¡æ Œç¹æ§
SwiftFormatã¯ãªãŒãã³ãœãŒã¹ã§ç¡æã§ãå©çšããã ããŸããéçšã³ã¹ãã¯ãçµ±åãšã³ãžãã¢ãªã³ã°ãCIæ§æã瀟å ã«ãŒã«ã®æšæºå管çã«éå®ãããŸãã
ãµãŒã㌠ã³ã³ããŒãã³ãããµãã¹ã¯ãªãã·ã§ã³æéããšã³ã¿ãŒãã©ã€ãº ã©ã€ã»ã³ã¹å±€ã¯ãããŸããã
æ§é äžã®å¶é
SwiftFormatã¯ãã©ãŒãããå±€ã®ã¿ã§åäœããŸããå®è¡ãã¹ãããŒã¿ãããŒãåæå®è¡ãªã¹ã¯ãäŸåé¢ä¿ã®é²åºã¯è©äŸ¡ããŸããããã®ããããªã¹ã¯ã®åªå é äœä»ããå®å šã§ãªãã³ãŒãã£ã³ã°æ§é ã®æ€åºãã¢ãŒããã¯ãã£ã®å¥å šæ§è©äŸ¡ãè¡ãããšã¯ã§ããŸããã
ãšã³ã¿ãŒãã©ã€ãºSwiftãšã³ã·ã¹ãã ã«ãããŠãSwiftFormatã¯åºç€ãšãªãè¡ç管çããŒã«ãšããŠæ©èœããŸããSwiftFormatã¯äžè²«æ§ãé«ããå ±åéçºã«ãããæ©æŠã軜æžããŸãããå æ¬çãªå質ããã³ãªã¹ã¯ã¬ããã³ã¹ãã¬ãŒã ã¯ãŒã¯ãæ§ç¯ããã«ã¯ããªã³ãã£ã³ã°ãéçã»ãã¥ãªãã£ãã¹ããäŸåé¢ä¿åæãœãªã¥ãŒã·ã§ã³ãšçµã¿åãããå¿ èŠããããŸãã
Xcode éçã¢ãã©ã€ã¶ãŒ
å ¬åŒãµã€ãïŒ https://developer.apple.com/documentation/xcode/analyzing-your-app-s-code-for-problems
Xcode Static Analyzerã¯ãXcodeéçºç°å¢ã«çŽæ¥çµ±åãããAppleã®çµã¿èŸŒã¿éçè§£ææ©èœã§ãããšã³ã¿ãŒãã©ã€ãºèŠæš¡ã®ã¬ããã³ã¹ã§ã¯ãªããäž»ã«ããŒã«ã«éçºã«ãããæ©æã®æ¬ 饿€åºãç®çãšããŠèšèšãããŠããŸããSwiftããŒã¹ã®iOSããã³macOSãããžã§ã¯ãã§ã¯ããã€ãã£ãããŒã«ãã§ãŒã³ã«çµã¿èŸŒãŸãã第äžç·ã®èšºæã¡ã«ããºã ãšããŠæ©èœããŸãã
å»ºç¯æš¡å
Xcode Static Analyzerã¯ãClangããã³Swiftã³ã³ãã€ã©ããŒã«ãã§ãŒã³ã®äžéšãšããŠåäœããŸããè§£æäžã¯ããã¹ã»ã³ã·ãã£ããã§ãã¯ãå®è¡ããå®è¡ãã¹ã®ã·ãã¥ã¬ãŒã·ã§ã³ãè¡ãããšã§ãäžè¬çãªããã°ã©ãã³ã°ãšã©ãŒãæ€åºããŸããããã«ã¯ãã¡ã¢ãªç®¡çã®ç°åžžãããžãã¯ãšã©ãŒãç¹å®ã®å®å šã§ãªãAPIã®äœ¿çšãå«ãŸããŸãã
Swift ãããžã§ã¯ãã®å Žåãã¢ãã©ã€ã¶ãŒã¯æ¬¡ã®ç¹ã«éç¹ã眮ããŸãã
- ãã«å¯èœæ§ãšãªãã·ã§ã³ã®èª€çš
- ãªãœãŒã¹ç®¡çãšã©ãŒ
- åºæ¬çãªããŒã¿ãããŒã®äžæŽå
- APIã®èª€çšãã¿ãŒã³
- åæå®è¡é¢é£ã®èª€çšã·ããªãª
ã¢ãã©ã€ã¶ãŒã¯IDEå ã§ããŒã«ã«ã«åäœããã³ãã³ãã©ã€ã³ãã«ãã§ãåäœããŸããäžå 管çãããããã·ã¥ããŒãããšã³ã¿ãŒãã©ã€ãºããªã·ãŒç®¡çãããŒããã©ãªãªå šäœã®ã¬ããŒãæ§é ã¯æäŸãããŸãããçµæã¯éçºç°å¢å ã§çŽæ¥è¡šç€ºãããŸãã
CVEèå¥åã¯ã¢ãã«ã«å«ãŸããŠããŸãããã¢ãã©ã€ã¶ãŒã¯ãæ¢ç¥ã®è匱æ§ã·ã°ããã£ãäŸåé¢ä¿ã®ãªã¹ã¯ã§ã¯ãªããæœåšçãªã³ãŒãã£ã³ã°ãšã©ãŒãç¹å®ããŸãã
CIã«ãããå®è¡åäœ
Xcode Static Analyzerã¯ãCIãã€ãã©ã€ã³ã®ã³ãã³ãã©ã€ã³ããŒã«ããåŒã³åºãããšãã§ããŸãããã ããæãäžè¬çãªçšéã¯ãéçºè ãããªã¬ãŒããããŒã«ã«åæã§ãã
CI ã³ã³ããã¹ãã§ã¯ã以äžããµããŒãã§ããŸãã
- ããŒãžåã®æ€èšŒã¹ãã£ã³
- ãã«ãæã®èªå蚺æ
- éå€§ãªæ¬ é¥ã«å¯Ÿããåºæ¬çãªã²ãŒãã£ã³ã°
å®è¡æéã¯éåžžé«éã§ããã«ãæäœãšå¯æ¥ã«é£æºããŠããŸããã³ã³ãã€ã©ã®ã¯ãŒã¯ãããŒã«çµ±åãããŠããããã远å ã®èšå®ãªãŒããŒãããã¯æå°éã«æããããŸãã
ãã ããäŒæ¥ã調æ»çµæãäœç³»çã«åéããŠè¿œè·¡ãããå Žåã¯ãCI åºåã®ãã©ãŒããããšéäžéçŽã«ã¯è¿œå ã®ããŒã«ãå¿ èŠã§ãã
ãšã³ã¿ãŒãã©ã€ãºã¹ã±ãŒãªã³ã°ã®çŸå®
Xcode Static Analyzerã¯ã¢ã¯ã»ã¹æ§ã«åªããŠããŸããããšã³ã¿ãŒãã©ã€ãºã¬ããã³ã¹ã®ç¯å²ã¯éå®ãããŠããŸãã以äžã®çšéã«é©ããŠããŸãã
- æ©ææ¬ é¥é²æ¢
- ããŒã«ã«éçºè ã®ãã£ãŒãããã¯ã«ãŒã
- ããŒã¹ã©ã€ã³ä¿¡é Œæ§ãã§ãã¯
匷ã¿ã¯æ¬¡ã®ãšããã§ã:
- Swiftéçºãšã®ãã€ãã£ãçµ±å
- 远å ã®ã©ã€ã»ã³ã¹è²»çšã¯ããããŸãã
- ãã¹ã»ã³ã·ãã£ãæ€åºæ©èœ
- äœæ©æŠæ¡çš
æ§é äžã®å¶éã¯èŠæš¡ã«å¿ããŠæããã«ãªããŸãã
- äžå åãããã¬ããã³ã¹ããã·ã¥ããŒãããªã
- ãªããžããªéã®éçŽãªã
- äŸåé¢ä¿ã®è匱æ§ã®å¯èŠæ§ãªã
- ã«ãŒã«ããžãã¯ã®ã«ã¹ã¿ãã€ãºãå¶éãããŠãã
è€æ°ã® Swift ãªããžããªãšåæ£ããŒã ã管çããäŒæ¥ã®å ŽåãããŒããã©ãªãª ã¬ãã«ã®ç£èŠãäžè¶³ãããšãæŠç¥çãªã¬ããã³ã¹ã®äŸ¡å€ãå¶éãããŸãã
äŸ¡æ Œç¹æ§
Xcode Static Analyzerã¯Appleã®éçºãšã³ã·ã¹ãã ã«è¿œå æéãªãã§å«ãŸããŠããŸããå¥éã©ã€ã»ã³ã¹ããµãã¹ã¯ãªãã·ã§ã³ãã©ã³ãã€ã³ãã©ã¹ãã©ã¯ãã£èŠä»¶ã¯ãããŸããã
éçšã³ã¹ãã¯äž»ã«ä»¥äžã®é ç®ã«é¢é£ããŸãã
- éçºè ãã¬ãŒãã³ã°
- CIçµ±åã¹ã¯ãªãã
- éäžçãªè¿œè·¡ãå¿ èŠãªå Žåã®è£è¶³ã¬ããŒãããŒã«
æ§é äžã®å¶é
ãã®ã¢ãã©ã€ã¶ãŒã¯ã³ã³ãã€ã©çµ±åãã§ãã¯ã«éå®ãããŠãããå°çšã®SASTãšã³ãžã³ã«å¹æµãã詳现ãªããã·ãŒãžã£éè匱æ§ã¢ããªã³ã°ã¯å®è¡ã§ããŸããããŸãããœãããŠã§ã¢ã³ã³ããžã·ã§ã³åæãäŸåé¢ä¿CVE远跡æ©èœãçµ±åãããŠããŸããã
ããã«ã調æ»çµæã¯éåžžã¯ããŒã«ã©ã€ãºãããŠãããã¢ãŒããã¯ãã£ã®äžå¿æ§ãå®è¡æã®å°éå¯èœæ§ã«åºã¥ããã³ã³ããã¹ãã®åªå é äœä»ããæ¬ ããŠããŸãã
ãšã³ã¿ãŒãã©ã€ãºSwiftãšã³ã·ã¹ãã ã«ãããŠãXcode Static Analyzerã¯çµã¿èŸŒã¿ã®ä¿¡é Œæ§ä¿è·æ©èœãšããŠæ©èœããŸããéçºè ã¬ãã«ã®ã³ãŒãæ£ç¢ºæ§ãåäžãããŸããããšã³ã¿ãŒãã©ã€ãºã°ã¬ãŒãã®å質ã¬ããã³ã¹ãšãªã¹ã¯ç®¡çãå®çŸããã«ã¯ãéäžåã®éçè§£æããã³ã»ãã¥ãªãã£ãã©ãããã©ãŒã ãšã®é£æºãäžå¯æ¬ ã§ãã
Swift éçã³ãŒãè§£æãã©ãããã©ãŒã ã®æ¯èŒåæ
ãšã³ã¿ãŒãã©ã€ãºç°å¢ã«ãããSwiftã®éçè§£æãœãªã¥ãŒã·ã§ã³ãéžæããã«ã¯ãã¢ãŒããã¯ãã£ã®æ·±ããã¬ããã³ã¹æ©èœãCIçµ±åã¢ãã«ããããŠæ§é äžã®å¶çŽãè©äŸ¡ããå¿ èŠããããŸããäžèšã§èª¬æããããŒã«ã¯ã軜éãªãã©ãŒããããŠãŒãã£ãªãã£ãããšã³ã¿ãŒãã©ã€ãºèŠæš¡ã®ã»ãã¥ãªãã£ã¬ããã³ã¹ãã©ãããã©ãŒã ãŸã§ãå¹ åºãç¯å²ã«ããããŸãã以äžã®æ¯èŒã§ã¯ã衚é¢çãªæ©èœãã§ãã¯ãªã¹ãã§ã¯ãªããã¢ãŒããã¯ãã£ã®éãããªã¹ã¯ã¢ããªã³ã°ã¢ãããŒããå®è¡ç¹æ§ãéçšäžã®ã¹ã±ãŒã©ããªãã£ã«é¢ããèæ ®äºé ã«éç¹ã眮ããŠããŸãã
| ããŒã« | äž»ãªçŠç¹ | å»ºç¯æš¡å | CIçµ±åã¢ãã« | CVE / äŸåé¢ä¿ã®åŠç | ãšã³ã¿ãŒãã©ã€ãºã¬ããã³ã¹ã®åŒ·ã | æ§é äžã®å¶é |
|---|---|---|---|---|---|---|
| ã¹ãŠã£ãããªã³ã | ã¹ã¿ã€ã«ã®åŒ·å¶ãšåºæ¬çãªã«ãŒã«ãã§ã㯠| èšå®å¯èœãªã«ãŒã«ãšã³ãžã³ãåããããŒã«ã«ãœãŒã¹ã¬ãã«ã®ãªã³ã¿ãŒ | CLI å®è¡ããã«ããã§ãŒãºã®çµ±åãé«éãã«ãªã¯ãšã¹ã ãã§ã㯠| CVEãããã³ã°ãªããäŸåé¢ä¿åæãªã | äœã; ã¬ããã³ã¹ã®ããã«å€éšéçŽãå¿ èŠ | æé éã¢ããªã³ã°ããªã¹ã¯ã®åªå é äœä»ããããŒããã©ãªãªããã·ã¥ããŒãããªã |
| ã¹ã€ãããã©ãŒããã | èªåã³ãŒããã©ãŒããã | ãœãŒã¹é倿ãšã³ãžã³ | ã³ãããåã®ããã¯ãCIãã©ãŒãããã®æ€èšŒ | ãªã | æå°é; è¡çã®ã¿ | æ¬ é¥æ€åºãè匱æ§åæããªã |
| Xcode éçã¢ãã©ã€ã¶ãŒ | ã³ã³ãã€ã©çµ±åæ¬ é¥æ€åº | IDEçµ±åãã¹ã»ã³ã·ãã£ãè§£æ | ãã«ãæã®èšºæããªãã·ã§ã³ã®CIåŒã³åºã | ãªã | éå®çãéäžçãªå ±åã¯ãªãã | ããŒããã©ãªãªã®å¯èŠæ§ãäŸåé¢ä¿ã®è¿œè·¡ããªã |
| ãœããŒãã¥ãŒã | éäžåãããå質ã¬ããã³ã¹ | ãµãŒããŒããŒã¹ã®å€èšèªåæãã©ãããã©ãŒã | å質ã²ãŒããåããã¹ãã£ããŒããŒã¹ã® CI ã¢ããããŒã | Swift ã³ãŒãã«ã¯ãã€ãã£ã CVE ãããã³ã°ããªããããSCA çµ±åãå¿ èŠ | åè³ªææšãšããªã·ãŒæœè¡ã«ãããŠé«ã | éå®çãªãã£ãŒããã€ã³ãã¢ããªã³ã°ãçµã¿èŸŒã¿äŸåé¢ä¿ã® CVE å°éå¯èœæ§ãªã |
| ãã§ãã¯ããŒã¯ã¹SAST | ãã£ãŒãã»ãã¥ãªãã£èåŒ±æ§æ€åº | éäžåã€ã³ã¿ãŒããã·ãŒãžã£éçè§£æãšã³ãžã³ | ããªã·ãŒ ã²ãŒãã£ã³ã°ã«ãã CI ããªã¬ãŒã®ãã«ã¹ãã£ã³ãšå¢åã¹ãã£ã³ | CWEã«æºæ ãäŸåé¢ä¿ã®ã¹ãã£ã³ã«ã¯ã¢ããªã³ãå¿ èŠ | é«; ã³ã³ãã©ã€ã¢ã³ã¹éèŠã®ããã·ã¥ããŒããšããŒã«å¶åŸ¡ | CIã¬ã€ãã³ã·ã®å¢å ãã€ã³ãã©ã¹ãã©ã¯ãã£ã®ãªãŒããŒããã |
| SCAã匷åãã | ç£æ»é£æºãåãããšã³ã¿ãŒãã©ã€ãºSAST | éäžåã»ãã¥ãªãã£ã»ã³ã¿ãŒãåããã»ãã³ãã£ãã¯ã¢ããªã³ã°ãšã³ãžã³ | CLIãšãã©ã°ã€ã³ããŒã¹ã®CIçµ±å | CWE ã®èª¿æŽ; è£å®ããŒã«ã«ãã CVE | éåžžã«é«ããç£æ»èšŒè·¡ãšã¬ããã³ã¹ã¯ãŒã¯ãã㌠| è€éãªæ§æã倧ããªéçšã³ã¹ã |
| ã³ããªã㣠| æ§é æ¬ é¥ã®æ€åºãšä¿¡é Œæ§ | ãã«ããã£ããã£ã»ãã³ãã£ãã¯åæãã©ãããã©ãŒã | å¢åã¹ãã£ã³ãšãã«CIã¹ãã£ã³ | CWE æºæ ããã€ãã£ãäŸåé¢ä¿ã® CVE 管çã¯ãããŸããã | æ¬ é¥ã©ã€ããµã€ã¯ã«è¿œè·¡ã«é«ã | ã¢ãã€ã«ç¹æã®ã»ãã¥ãªãã£ã®æ·±ããå°ãªã |
| ã»ã ã°ã¬ãã | ãã¿ãŒã³ããŒã¹ã®ã»ãã¥ãªãã£ãšããªã·ãŒã®é©çš | ã«ã¹ã¿ã ã«ãŒã«èšèªãåãã AST ãã¿ãŒã³ãããã³ã°ãšã³ãžã³ | é«éãã«ãªã¯ãšã¹ãã¹ãã£ã³ãDevSecOpsçµ±å | ã«ãŒã«ããã¯ã«ããCWEã¢ã©ã€ã¡ã³ããCVEãã©ããã³ã°ã¯çµã¿èŸŒãŸããŠããªãã | ã«ãŒã«ã¬ããã³ã¹ã®æç床ã«å¿ããŠäžçšåºŠããé«ã | éå®çãªãã£ãŒãããŒã¿ãããŒã¢ããªã³ã° |
| GitHub ã®é«åºŠãªã»ãã¥ãªã㣠| çµ±åãããã³ãŒããšäŸåé¢ä¿ã®ã»ãã¥ãªã㣠| ãªããžããªçµ±åã«ããã¯ã©ãŠããã€ãã£ã CodeQL ã»ãã³ãã£ãã¯åæ | GitHub ActionsããŒã¹ã®ã¹ãã£ã³ããã©ã³ãä¿è·ã®åŒ·å¶ | äŸåé¢ä¿ã®ãã€ãã£ã CVE ãããã³ã° | GitHubäžå¿ã®äŒæ¥ã§ã¯é«ã | GitHub ã§ãã¹ããããŠãããªããžããªã«éå® |
| NowSecure | ã¢ãã€ã«ã»ãã¥ãªãã£æ€èšŒ | ã¯ã©ãŠãããŒã¹ã®ãœãŒã¹ããã³ãã€ããªåæãã©ãããã©ãŒã | ãªãªãŒã¹æ®µéã®CIçµ±å | ã¢ãã€ã«äŸåé¢ä¿ã®CVEãããã³ã° | ã¢ãã€ã«ã³ã³ãã©ã€ã¢ã³ã¹ç°å¢ã«æé© | ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã«çŠç¹ãçµã |
Swiftã®å°éçã§ããŸãç¥ãããŠããªãéçè§£æããã³å質ããŒã«
äž»æµã®ãã©ãããã©ãŒã ãäŒæ¥ã«ãããè°è«ã®äž»æµãšãªã£ãŠããäžæ¹ã§ãSwiftã®å質ãã»ãã¥ãªãã£ãã¢ãŒããã¯ãã£ã«é¢ããç¹å®ã®æžå¿µã«å¯ŸåŠããããã®ãããå°éçãŸãã¯ããéå®çãªããŒã«ãããã€ãååšããŸãããããã®ãœãªã¥ãŒã·ã§ã³ã¯ãå æ¬çãªã¬ããã³ã¹æ©èœãæäŸãããã®ã§ã¯ãªããããããŸããããç¹å®ã®ã·ããªãªã«ãããŠçãçµã£ã䟡å€ãæäŸã§ããŸãã
- åšèŸº
Swiftã«ç¹åããéçè§£æããŒã«ã§ãæªäœ¿çšã³ãŒããäžèŠãªå®£èšãåé·ãªã·ã³ãã«ãæ€åºããããã«èšèšãããŠããŸããPeripheryã¯ãã¢ã¯ã»ã¹ã§ããªãã³ã³ããŒãã³ãã廿¢ãããã³ã³ããŒãã³ããç¹å®ããããšã§ãã³ãŒãããŒã¹ã®è¥å€§åã軜æžããä¿å®æ§ãåäžãããŸããèåŒ±æ§æ€åºãCVEãããã³ã°ã¯æäŸããŠããŸããããæ©èœæ¡åŒµã«ãã£ãŠã¢ãŒãã£ãã¡ã¯ããæ®ã£ãŠããŸãå€§èŠæš¡ãªSwiftãããžã§ã¯ãã§ç¹ã«åœ¹ç«ã¡ãŸãããã®äŸ¡å€ã¯ãã»ãã¥ãªãã£åŒ·åã§ã¯ãªããã¢ããã€ãŒãŒã·ã§ã³ãžã®å¯Ÿå¿ãšæè¡çè² åµã®åæžã«ãããŸãã - æšè«ïŒã¡ã¿ïŒ
Inferã¯ãMetaã«ãã£ãŠéçºããããªãŒãã³ãœãŒã¹ã®éçè§£æããŒã«ã§ããSwiftããµããŒãããã·ã³ããªãã¯å®è¡æè¡ãçšããŠãnullåç §ããªãœãŒã¹ãªãŒã¯ãäžŠè¡æ§é¢é£ã®åé¡ã®æ€åºã«éç¹ã眮ããŠããŸããå æ¬çãªãšã³ã¿ãŒãã©ã€ãºã¬ããã³ã¹ãã©ãããã©ãŒã ãšããŠäœçœ®ä»ããããŠããããã§ã¯ãããŸããããInferã¯åºæ¬çãªãªã³ã¿ãŒãããè©³çŽ°ãªæ¬ é¥ã¢ããªã³ã°ãæäŸããŸããäŸåé¢ä¿ã®CVE远跡æ©èœã¯åããŠããããå€§èŠæš¡çµç¹ã«ãããCIã®ã¹ã±ãŒãªã³ã°ã«ã¯çµ±åäœæ¥ãå¿ èŠã§ãã - MobSFïŒã¢ãã€ã«ã»ãã¥ãªãã£ãã¬ãŒã ã¯ãŒã¯ïŒ
MobSFã¯ãSwiftããŒã¹ã®iOSã¢ããªã±ãŒã·ã§ã³ããœãŒã¹ã¬ãã«ãšãã€ããªã¬ãã«ã®äž¡æ¹ã§åæã§ãããªãŒãã³ãœãŒã¹ã®ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã»ãã¥ãªãã£ãã¹ããã¬ãŒã ã¯ãŒã¯ã§ããéçããã³åçæ€æ»æ©èœãæäŸããå®å šã§ãªãæ§æãæ©å¯ããŒã¿ã®é²åºãã¿ãŒã³ã衚é¢åãããããšãã§ããŸããMobSFã¯ãç ç©¶å¿åã®ã»ãã¥ãªãã£ããŒã ãå°èŠæš¡äŒæ¥ã«é©ããŠããŸããããšã³ã¿ãŒãã©ã€ãºã°ã¬ãŒãã®éäžç®¡çåã¬ããã³ã¹ããã·ã¥ããŒããã¯ãŒã¯ãããŒèªååæ©èœã¯åããŠããŸããã - OCLint
OCLintã¯ãåœåObjective-Cããã³Cãã¡ããªãŒèšèªåãã«éçºãããéçè§£æããŒã«ã§ãããSwiftã®æ··åèšèªãããžã§ã¯ãã«ãé©çšå¯èœã§ããã³ãŒãã®èããè€éæ§ææšãä¿å®æ§ææšã«éç¹ã眮ããŠããŸããOCLintã¯ã»ãã¥ãªãã£ãéèŠããŠããããè匱æ§åé¡ã®æŽåãæäŸããŠããŸããããã®ããããªäŸ¡å€ã¯ãObjective-CãšSwiftã®ãã€ããªããã¢ããã€ãŒãŒã·ã§ã³ç°å¢ã«ãããæè¡çè² åµã®æž¬å®ã«ãããŸãã - ãã³ãžã£ãŒã»ã¹ãŠã£ãã
Danger Swiftã¯ãCIãã€ãã©ã€ã³å ã§ã®ã³ãŒãã¬ãã¥ãŒããªã·ãŒã®é©çšãèªååããŸãããã«ãªã¯ãšã¹ããããã¹ãã®æ¬ èœãããã¥ã¡ã³ãã®ã®ã£ãããããªã·ãŒéåãªã©ã®äºåå®çŸ©ãããã«ãŒã«ã«ç §ãããŠè©äŸ¡ããŸããã»ãã³ãã£ãã¯ãªè匱æ§åæã¯è¡ããŸããããã¯ãŒã¯ãããŒã¬ããã³ã¹ã匷åããŸããæ§é åãããã³ãŒãã¬ãã¥ãŒããã»ã¹ãéèŠããäŒæ¥ã§ã¯ãDanger Swiftã¯æç¶ãåå質ã²ãŒããé©çšããããšã§éçè§£æãè£å®ããŸãã - AppSweepïŒã¬ãŒãã¹ã¯ãšã¢ïŒ
AppSweepã¯ãSwiftãã€ããªã®éçæ€æ»ããµãŒãããŒãã£è£œSDKã®ãªã¹ã¯ãªã©ãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã®ã»ãã¥ãªãã£åæã«ç¹åããŠããŸããã¢ãã€ã«ç¹æã®è匱æ§ãšã³ã³ãã©ã€ã¢ã³ã¹ç®¡çã«éç¹ã眮ããŠããŸããå€èšèªå¯Ÿå¿ã®SASTãšã³ãžã³ããã察象ç¯å²ã¯çããã®ã®ãé«ãªã¹ã¯ã®iOSã¢ããªã±ãŒã·ã§ã³ãé ä¿¡ããäŒæ¥ã«ãšã£ãŠæçšã§ãã - CodeClimate (Swift ãµããŒã)
CodeClimateã¯ãSwiftãªããžããªããµããŒãããä¿å®æ§ãšã³ãŒãå質ã®åæãæäŸããŸããæ·±å»ãªèåŒ±æ§æ€åºããããæè¡çè² åµã®è¿œè·¡ãè€éæ§ææšãå質åŸåã«éç¹ã眮ããŠããŸããCodeClimateãå©çšããäŒæ¥ã¯ãã³ã³ãã©ã€ã¢ã³ã¹éèŠã®ã»ãã¥ãªãã£åŒ·åãããããšã³ãžãã¢ãªã³ã°ã®çç£æ§ææšãåªå ããåŸåããããŸãã - DeepSourceïŒSwiftããŒã¿çãµããŒãïŒ
DeepSourceã¯ãã¯ã©ãŠãããŒã¹ã®ããã·ã¥ããŒããçšããèªåã³ãŒãã¬ãã¥ãŒãšéçè§£ææ©èœãæäŸããŸããSwiftã®ãµããŒãã¯é²åãç¶ããŠãããéçºè ã®ãã£ãŒãããã¯ã«ãŒããšãã«ãªã¯ãšã¹ãã¢ãããŒã·ã§ã³ãéèŠãããã©ãããã©ãŒã ãšãªã£ãŠããŸãããšã³ã¿ãŒãã©ã€ãºã°ã¬ãŒãã®SAST深床ãCVEäŸåæ§ã¢ããªã³ã°ã¯æäŸããŠããŸãããã軜éãã€é«å質ãªèªååãæ±ããçµç¹ã«ã¯é©ããŠãããããããŸããã - ShiftLeft OcularïŒSwift ã®é©çšç¯å²ãéå®çïŒ
ShiftLeftãã©ãããã©ãŒã ã¯ãã³ãŒãããããã£ã°ã©ãã¢ããªã³ã°ãšã»ãã¥ãªãã£åæã«éç¹ã眮ããŠããŸããSwiftã®ãµããŒãã¯JavaãJavaScriptã«æ¯ã¹ãŠéå®çã§ãããã°ã©ãããŒã¹ã®èåŒ±æ§æšè«ã®æŠå¿µçã¢ãããŒãã¯æ³šç®ã«å€ããŸããããããªã·ããªãªã§ã¯ããã¿ãŒã³ããŒã¹ã®ããŒã«ãããæ·±ãæ§é åæãæäŸã§ããå¯èœæ§ããããŸãããéçšã®æç床ã¯ããŸããŸã§ãã - Swift ãšã³ã·ã¹ãã ã«é©åãã Retire.js ã¹ã¿ã€ã«ã®äŸåé¢ä¿ã¹ãã£ã
äžéšã®äŒæ¥ã§ã¯ãã¹ã¯ãªããã軜éã¹ãã£ã³ãŠãŒãã£ãªãã£ãçšããŠãSwift Package Managerã®ã¢ãŒãã£ãã¡ã¯ãåãã«ã«ã¹ã¿ãã€ãºãããäŸåé¢ä¿ç£èŠãã€ãã©ã€ã³ãå®è£ ããŠããŸãããããã®ãœãªã¥ãŒã·ã§ã³ã¯ãå ¬éãããŠããè匱æ§ãã£ãŒããä»ããŠè匱ãªããã±ãŒãžãç¹å®ããŸãããçµ±åãããå°éå¯èœæ§åæããšã³ã¿ãŒãã©ã€ãºããã·ã¥ããŒããåããŠããŸããããããã¯ãå®å šãªSCAãã©ãããã©ãŒã ããªãç°å¢ã«ãããæ«å®çãªå¶åŸ¡ãšããŠæ©èœããŸãã
ãããã®å°éããŒã«ã¯ããããã³ãŒãæ€åºãã¢ãã€ã«ãã€ããªæ€æ»ãã¬ãã¥ãŒã¯ãŒã¯ãããŒã®é©çšãè€éåºŠã®æž¬å®ãšãã£ãç¹å®ã®æžå¿µäºé ã«å¯Ÿå¿ããŠããŸããããããã¹ã¿ã€ã«ã®é©çšãæ¬ é¥æ€åºãè匱æ§ã¢ããªã³ã°ãäŸåé¢ä¿ãªã¹ã¯ç®¡çãã³ã³ãã©ã€ã¢ã³ã¹ã¬ããŒããªã©ãå«ããšã³ã¿ãŒãã©ã€ãºSwiftã¬ããã³ã¹ã®éå±€åãããèŠä»¶ãåç¬ã§æºããããŒã«ã¯ååšããŸãããèŠå¶ã®å³ããçµç¹ãå€§èŠæš¡çµç¹ã®å€ãã«ãšã£ãŠãããããªããŒã«ã¯ãããåºç¯ãªéçè§£æãšDevSecOpsã¢ãŒããã¯ãã£ã«ãããè£å®çãªã³ã³ããŒãã³ããšããŠæã广çã«æ©èœããŸãã
äŒæ¥ãSwiftã®éçã³ãŒãè§£æããŒã«ãéžã¶ã¹ãçç±
ãšã³ã¿ãŒãã©ã€ãºç°å¢ã«ãããSwiftã®éçè§£æãœãªã¥ãŒã·ã§ã³ã®éžå®ã«ã¯ãæ€åºç¯å²ãäŸ¡æ Œåž¯ã®è©äŸ¡ä»¥äžã®ããšãæ±ããããŸããããŒã«éžå®ã¯ãã¢ãŒããã¯ãã£ã®è€éããCIããã©ãŒãã³ã¹ã®å¶çŽãèŠå¶äžã®çŸ©åããããŠã¬ããã³ã¹ã®æç床ãªã©ãèæ ®ããŠè¡ãå¿ èŠããããŸããSwiftã®ãšã³ã·ã¹ãã ã¯ãã¢ãã€ã«ããã³ããšã³ããå ±æãã¬ãŒã ã¯ãŒã¯ãããã¯ãšã³ããµãŒãã¹ããããŠã¬ã¬ã·ãŒã·ã¹ãã ãšã®ãã€ããªããçµ±åãªã©ãå€å²ã«ããããŸãããããã£ãŠãéçè§£æããŒã«ã¯ãç¬ç«ããéçºè åããŠãŒãã£ãªãã£ãšããŠã§ã¯ãªããéå±€åããããªã¹ã¯ç®¡çã¢ãã«ã®äžéšãšããŠè©äŸ¡ããå¿ èŠããããŸãã
æ¬¡ã®æ¬¡å ã¯ãæ§é åãããäŒæ¥è©äŸ¡ã¢ãã«ãå®çŸ©ããŸãã
ããªããªãŒã©ã€ããµã€ã¯ã«å šäœã«ãããæ©èœã«ãã¬ããž
Swiftç°å¢ã«ãããéçè§£æã¯ãããŒã«ã«éçºããã«ãªã¯ãšã¹ãã®æ€èšŒããªãªãŒã¹åè£çã®åŒ·åãããŒããã©ãªãªã¬ãã«ã®ã¬ããã³ã¹ãªã©ãã©ã€ããµã€ã¯ã«ã®è€æ°ã®æ®µéã§å®è¡ãããŸããåäžã®ããŒã«ã§ãã¹ãŠã®ãã§ãŒãºãåçã®å¹æã§ã«ããŒããããšã¯çšã§ããäŒæ¥ã¯ãã©ã€ããµã€ã¯ã«ã®ã©ã®ã³ã³ãããŒã«ãã€ã³ãã匷å¶é©çšããã©ã®ãã€ã³ããã¢ããã€ã¶ãªã«ããå¯èŠåã§å¯Ÿå¿ãã¹ãããæç¢ºã«å®çŸ©ããå¿ èŠããããŸãã
SwiftLintãXcode Static Analyzerãšãã£ãéçºè äžå¿ã®ããŒã«ã¯ãæ©æã®ãã£ãŒãããã¯ãæäŸããŸãããããªã·ãŒã®äžå çãªè¿œè·¡æ©èœã¯åããŠããŸããããšã³ã¿ãŒãã©ã€ãºåãSASTãã©ãããã©ãŒã ã¯è©³çްãªè匱æ§ã¢ããªã³ã°ãæäŸããŸãããCIã®é å»¶ãçºçããéçºè ã®çç£æ§ã«åœ±é¿ãäžããå¯èœæ§ããããŸãããããã£ãŠãããŒã«éžå®ã«ãããŠã¯ããœãããŠã§ã¢éçºã©ã€ããµã€ã¯ã«ã®å段éã«ãããŠãããŒã«ãã©ã®ããã«çžäºã«è£å®ãåãããèæ ®ããå¿ èŠããããŸãã
ã©ã€ããµã€ã¯ã«è©äŸ¡ã®äž»ãªè³ªåã¯æ¬¡ã®ãšããã§ãã
- ããŒã«ã¯ãã« ãªã¯ãšã¹ã ã²ãŒãã£ã³ã°ã«é©ããé«éå¢ååæãæäŸããŸãã?
- ãªãªãŒã¹æ€èšŒã®ããã®ã¹ã±ãžã¥ãŒã«ãããå®å šã¹ãã£ã³ããµããŒãã§ããŸãã?
- æ°ããã³ãŒãã®çºèŠãšéå»ã®æè¡çè² åµãåºå¥ããŠããŸãã?
- å°æ¥ã®ååž°ããã¹ã¯ããã«ããŒã¹ã©ã€ã³ãæå¶ãããµããŒãã¯ãããŸãã?
é«é »åºŠã®ã¢ãã€ã«ãªãªãŒã¹ãµã€ã¯ã«ãéçšããäŒæ¥ã¯ãã¹ãã£ã³ã®æ·±ããšå®è¡æéã®ãã©ã³ã¹ãåãå¿ èŠããããŸããééçŽã®ãšã³ãžã³ã¯å€éãŸãã¯ãªãªãŒã¹æ®µéã®æ€èšŒã«å²ãåœãŠã軜éã®ã«ãŒã«ãšã³ãžã³ã¯ãã¹ãŠã®ã³ãããã§é©åãªã»ãã¥ãªãã£å¯Ÿçã宿œããŸããã©ã€ããµã€ã¯ã«ãã§ãŒãºå šäœã«ãããã¢ãŒããã¯ãã£ã®æŽåæ§ã«ãããCIãã€ãã©ã€ã³ã®éè² è·ãé²ããªãããã»ãã¥ãªãã£ã®ä¿¡é Œæ§ã確ä¿ããŸãã
æ¥çãšèŠå¶ã®é£æº
éèãå»çãéèŠã€ã³ãã©ãšãã£ãèŠå¶ã®å³ããæ¥çã§ã¯ãéçè§£æããŒã«ã¯ç£æ»ãã¬ãŒãµããªãã£ãšæ§é åãããè匱æ§ã¬ããŒãããµããŒãããå¿ èŠããããŸããé倧床åé¡ã ãã§ã¯äžååã§ããäŒæ¥ã¯ãCWEãªã©ã®åºãèªããããå顿³ãžã®ãããã³ã°ãšãäŒæ¥ã®ITãªã¹ã¯ç®¡çããã°ã©ã ã§å®çŸ©ãããã¬ããã³ã¹ãã¬ãŒã ã¯ãŒã¯ãšã®æŽåæ§ãæ±ããŠããŸãã
è©äŸ¡ã§ã¯ä»¥äžãèæ ®ããå¿ èŠããããŸãã
- ããŒã«ã¯ããŒã«ããŒã¹ã®ã¢ã¯ã»ã¹å¶åŸ¡ãšç£æ»ãã°ãæäŸããŸãã?
- 調æ»çµæãã³ã³ãã©ã€ã¢ã³ã¹ ããã¥ã¡ã³ããšããŠãšã¯ã¹ããŒãã§ããŸãã?
- 修埩ã¯ãŒã¯ãããŒãããŒã éã§è¿œè·¡ã§ããŸãã?
- ã€ã³ã·ãã³ã管çããã³ã¬ããã³ã¹ ãã©ãããã©ãŒã ãšçµ±åãããŸãã?
ãããªãã¯ã¢ããªã¹ãã¢ãéããŠé åžãããã¢ãã€ã«åºæã®Swiftãããã€ã¡ã³ãã§ã¯ãã¢ãã€ã«ã»ãã¥ãªãã£æšæºãžã®ã³ã³ãã©ã€ã¢ã³ã¹æ€èšŒãå¿ èŠã«ãªãå ŽåããããŸããNowSecureãªã©ã®ãã©ãããã©ãŒã ã¯ãã®ããããªããŒãºã«å¯Ÿå¿ããŠãããããåºç¯ãªSASTãšã³ãžã³ã¯ãã€ããªããã¢ãŒããã¯ãã£å šäœã«ãããã¯ãã¹ã©ã³ã²ãŒãžã¬ããã³ã¹ããµããŒãããŸãã
èŠå¶ãžã®å¯Ÿå¿ã¯ãæ€ç¥èœåã ãã«ãšã©ãŸããŸããã蚌æ ã®åéãå±¥æŽã®è¿œè·¡ããããŠè¿œè·¡å¯èœãªæ¹åã©ã€ããµã€ã¯ã«ãå«ãŸããŸããäžå åãããã¬ããŒãæ©èœãæããªãäŒæ¥ã¯ãç£æ»æã«çµ±å¶ã®æå¹æ§ã蚌æããã®ã«èŠåŽããå¯èœæ§ããããŸãã
åè³ªææšãšä¿¡å·å¯Ÿé鳿¯ã®è©äŸ¡
éçè§£æãã©ãããã©ãŒã ã®æå¹æ§ã¯ãã·ã°ãã«ã®ç²ŸåºŠã«å€§ããäŸåããŸãã誀æ€ç¥çãé«ããšãéçºè ã®ä¿¡é Œãæãªãããé©çšèŠåŸã匱ãŸããŸããéã«ãã«ãŒã«ã»ãããçããããšãç²ç¹ãçããå¯èœæ§ããããŸãã
è©äŸ¡ããåè³ªææšã«ã¯æ¬¡ã®ãããªãã®ããããŸãã
- çŸå®çãªã³ãŒãè€é床ã«ããã誀æ€åºç
- ãªã¹ã¯ãæ°žä¹ ã«é ãããšãªã調æ»çµæãæå¶ããèœå
- 瀟å ããªã·ãŒã«æ²¿ã£ãã«ã¹ã¿ã ã«ãŒã«äœæã®ãµããŒã
- ã¹ã¿ã€ã«äžã®åé¡ãšã»ãã¥ãªãã£äžéå€§ãªæ¬ é¥ã®åºå¥
ããæ·±ãã»ãã³ãã£ãã¯ã¢ãã«ãæ§ç¯ããããŒã«ã¯ãããæ£ç¢ºãªèåŒ±æ§æ€åºãå¯èœã«ããäžæ¹ã§ãéçšäžã®è€éãã䌎ããŸãããã¿ãŒã³ããŒã¹ã®ãšã³ãžã³ã¯é«éã§ãããã«ãŒã«ã®å質ã«å€§ããäŸåããŸããäŒæ¥ã¯ããã³ããŒã®ããã¥ã¡ã³ãã ãã«é Œãã®ã§ã¯ãªãã代衚çãªSwiftãªããžããªã§åè£ããŒã«ããã¹ãããå®çšçãªã·ã°ãã«åè³ªãæž¬å®ããå¿ èŠããããŸãã
ä¿¡å·å¯Ÿé鳿¯ã¯ã修埩ã®é床ã«çŽæ¥åœ±é¿ããŸããèŠåŸããã¬ããã³ã¹ã¢ãã«ã§ã¯ãéçãªçºèŠäºé ããã§ãã¯ãªã¹ãé ç®ã§ã¯ãªããªã¹ã¯ææšãšããŠæ±ãããšã³ã¿ãŒãã©ã€ãºãªã¹ã¯ãããžã¡ã³ãã®å®è·µã§è°è«ãããŠãããããåºç¯ãªãªã¹ã¯ããŒã¹ã®åªå é äœä»ãã¢ãããŒããšæŽåãããŸãã
äºç®ãšéçšã®ã¹ã±ãŒã©ããªãã£
ããŒã«ã®ã©ã€ã»ã³ã¹ã³ã¹ãã¯ãç·ææã³ã¹ãã®ã»ãã®äžéšã«éããŸãããäŒæ¥ã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£èŠä»¶ãCIã³ã³ãã¥ãŒãã£ã³ã°ã®ãªãŒããŒããããã«ãŒã«èª¿æŽã®åŽåããããŠç¶ç¶çãªããªã¢ãŒãžã¯ãŒã¯ãããŒãèæ ®ããå¿ èŠããããŸãã
éçšäžã®ã¹ã±ãŒã©ããªãã£ã«é¢ããèæ ®äºé ã¯æ¬¡ã®ãšããã§ãã
- ãã®ããŒã«ã«ã¯å°çšã®ãµãŒã㌠ã€ã³ãã©ã¹ãã©ã¯ãã£ãå¿ èŠã§ãã?
- ã¯ã©ãŠãã®å±éã¯ããŒã¿äž»æš©ã®èŠä»¶ãšäºææ§ããããŸãã?
- ãªããžããªã®å¢å ã«å¿ããŠã¹ãã£ã³æéã¯ã©ã®ããã«å€åããŸãã?
- ã«ãŒã«æ§æã管çããã«ã¯å°éã®ã»ãã¥ãªã㣠ãšã³ãžãã¢ãå¿ èŠã§ãã?
è€æ°ã®ããŒã ã«ãŸãããå€§èŠæš¡ãªSwiftããŒããã©ãªãªã§ã¯ãéäžçãªæ§æç®¡çãæ±ããããŸããã¬ããã³ã¹ã®èŠåŸããªããã°ãç°ãªãã«ãŒã«ã»ãããåºçŸããäžè²«æ§ãäœäžããããŒã éã®æ¯èŒå¯èœæ§ã匱ãŸãå¯èœæ§ããããŸãã
äŒæ¥ã¯ãã³ãŒããã¬ãŒãµããªãã£ã¢ãã«ãªã©ã®ããŒããã©ãªãªã¬ãã«ã®å¯èŠæ§ã¡ã«ããºã ãšã®çµ±åãè©äŸ¡ããéçãªæ€åºçµæãå ±æãã¬ãŒã ã¯ãŒã¯ãããã¯ãšã³ãçµ±åã«ã©ã®ããã«äŒæããããçè§£ããå¿ èŠããããŸããããåºç¯ãªã¢ãŒããã¯ãã£ç£èŠãã¬ãŒã ã¯ãŒã¯ã«çµ±åã§ããªãããŒã«ã¯ããªã¹ã¯ã®èŠç¹ãæçåããŠããŸãå¯èœæ§ããããŸãã
æçµçã«ã¯ãéžæã®æ±ºå®ã¯çµç¹ã®æç床ãåæ ããå¿ èŠããããŸããå°èŠæš¡ãªããŒã ã§ã¯ãã¹ã ãŒãºãªçµ±åãšè¿ éãªãã£ãŒãããã¯ãåªå ããäžæ¹ãèŠå¶ã®å³ããäŒæ¥ã§ã¯ãäžå çãªç£èŠãç£æ»ææžããããŠãªããžããªéã®ããªã·ãŒé©çšãæ±ããããŸããéçºè ã¬ãã«ã®è¡ç管çããŒã«ãšäžå åãããã»ãã¥ãªãã£ã¬ããã³ã¹ãã©ãããã©ãŒã ãçµã¿åãããéå±€åã¢ãŒããã¯ãã£ã¯ãå€ãã®å Žåããšã³ã¿ãŒãã©ã€ãºSwiftç°å¢ã«ãšã£ãŠæãæç¶å¯èœãªã¢ãã«ãšãªããŸãã
ãšã³ã¿ãŒãã©ã€ãºç®æšã«ãããããã
ãšã³ã¿ãŒãã©ã€ãºSwiftç°å¢ã¯ãåäžã®éçè§£æãœãªã¥ãŒã·ã§ã³ã«äŸåããããšã¯ã»ãšãã©ãããŸãããããŒã«ã®éžæã¯ãäž»èŠãªãªã¹ã¯èŠå ãèŠå¶ãžã®å¯Ÿå¿ããªããžããªãã¹ãã£ã³ã°ã¢ãã«ãCIããã©ãŒãã³ã¹ã®èš±å®¹ç¯å²ãªã©ãåæ ããŠããŸãã以äžã®éžæè¢ã¯ãæ©èœããŒã±ãã£ã³ã°ã§ã¯ãªããã¢ãŒããã¯ãã£ã®é©åæ§ã«åºã¥ãããåæã«åºã¥ããçµã¿åããã瀺ããŠããŸãã
éçºè ã®è¡çãšã³ãŒãã®äžè²«æ§ã«æé©
èªã¿ããããäžè²«ãããã©ãŒããããæ©ææ®µéã§ã®æ¬ é¥é²æ¢ãåªå ããçµç¹ã®å Žå:
æšå¥šçµã¿åãã:
SwiftLint + SwiftFormat + Xcode éçã¢ãã©ã€ã¶ãŒ
ãã®ã¹ã¿ãã¯ã¯ãã¹ã¿ã€ã«ã®çµ±äžæ§ãç¶æããäºçŽ°ãªæ¬ é¥ãåæžããéçºè ã®ã¯ãŒã¯ãããŒã«ã·ãŒã ã¬ã¹ã«çµ±åãããŸããCIã®ã¬ã€ãã³ã·ãæå°éã«æããéäžåã€ã³ãã©ã¹ãã©ã¯ãã£ãå¿ èŠãšããŸããããã ãã詳现ãªè匱æ§ã¢ããªã³ã°ãäŸåé¢ä¿ã®CVEè¿œè·¡ã¯æäŸããŸããã瀟å ã¢ããªã±ãŒã·ã§ã³ãèŠå¶ã®å°ãªãç°å¢ããŸãã¯ããé«åºŠãªã»ãã¥ãªãã£å¶åŸ¡ã®äžã®åºç€ã¬ã€ã€ãŒãšããŠæé©ã§ãã
ã»ãã¥ãªãã£éèŠã§èŠå¶ã®å³ããäŒæ¥ã«æé©
æ£åŒãªã³ã³ãã©ã€ã¢ã³ã¹èŠä»¶ã«åŸã£ãŠéå¶ããŠããäŒæ¥ãæ©å¯æ§ã®é«ã顧客ããŒã¿ã管çããŠããäŒæ¥ã®å Žå:
æšå¥šçµã¿åãã:
Fortify ãŸã㯠Checkmarx + éäžåã¬ããã³ã¹ã¯ãŒã¯ãããŒ
ãããã®ãã©ãããã©ãŒã ã¯ãããã·ãŒãžã£éè匱æ§ã¢ããªã³ã°ãæ§é åãããCWEåé¡ãç£æ»å¯Ÿå¿ã¬ããŒãæ©èœãæäŸããŸããããŒã«ããŒã¹ã®ã¢ã¯ã»ã¹å¶åŸ¡ãšä¿®åŸ©ã©ã€ããµã€ã¯ã«ã®è¿œè·¡ããµããŒãããŸããå®è¡ãªãŒããŒããããšã©ã€ã»ã³ã¹ã³ã¹ãã¯é«ããªããŸãããã¬ããã³ã¹ã®æ·±ãã¯èŠå¶å¯Ÿè±¡ã®éçšã³ã³ããã¹ãã«é©åããŸãã
ãã®ã«ããŽãªã¯ãè匱æ§ã®èšŒæ ãããªã·ãŒé©çšã®è¿œè·¡å¯èœæ§ãããã³åç· åœ¹äŒã¬ãã«ã®ã¬ããŒããå¿ èŠãªå Žåã«é©ããŠããŸãã
GitHubäžå¿ã®çµç¹ã«æé©
ã¯ã©ãŠããã€ãã£ãé ä¿¡ã¢ãã«ã䜿çšã㊠GitHub Enterprise ãæšæºåããäŒæ¥ã®å Žå:
æšå¥šããã解決ç:
GitHub ã®é«åºŠãªã»ãã¥ãªãã£
ãã®ãã©ãããã©ãŒã ã¯ãCodeQLããŒã¹ã®éçè§£æãäŸåé¢ä¿ã®CVEç£èŠãã·ãŒã¯ã¬ããæ€åºããªããžããªã¯ãŒã¯ãããŒã«çµ±åããŸããã€ã³ãã©ã¹ãã©ã¯ãã£ã®è€éãã軜æžããçµ±åããããã«ãªã¯ãšã¹ããã£ãŒãããã¯ãæäŸããŸããç¹ã«ãGitHub Actionsäžã«CIãã€ãã©ã€ã³ãæ¢ã«æ§ç¯ãããŠããå Žåã«å¹æçã§ãã
ãã ãããã詳现ãªã«ã¹ã¿ã è匱æ§ã¢ããªã³ã°ã GitHub 以å€ã®ãã¹ãã£ã³ã° ãµããŒããå¿ èŠãšããäŒæ¥ã§ã¯ãè£å®çãªããŒã«ãå¿ èŠã«ãªãå ŽåããããŸãã
ã¢ãã€ã«ã³ã³ãã©ã€ã¢ã³ã¹ãšApp Storeã®ã»ãã¥ãªãã£äœå¶ã«æé©
èŠå¶å¯Ÿè±¡åžå Žãé«ãªã¹ã¯åžå Žã§ iOS ã¢ããªã±ãŒã·ã§ã³ãé åžããäŒæ¥ã®å Žå:
æšå¥šçµã¿åãã:
NowSecure + ããŒã¹ã©ã€ã³éçè§£æããŒã«
NowSecureã¯ãæ¥çæšæºã«æºæ ããã¢ãã€ã«åºæã®ã»ãã¥ãªãã£æ€èšŒããã€ããªæ€æ»ãã³ã³ãã©ã€ã¢ã³ã¹ã¬ããŒããæäŸããŸãããªãªãŒã¹æ®µéã®æ€èšŒã¡ã«ããºã ãšããŠäœçœ®ä»ãããšãæã广çã§ããã¢ãã€ã«ã«ç¹åããæ©èœã§ããããããµãŒããŒãµã€ãSwiftãµãŒãã¹åãã®ããåºç¯ãªéçè§£æãã©ãããã©ãŒã ãšçµ±åããå¿ èŠããããŸãã
å€§äŒæ¥ã«æé©ãªãã©ã³ã¹ã®åããéå±€åã¢ãã«
ã¢ãã€ã«ããã³ããã¯ãšã³ã ã·ã¹ãã å šäœã§ç°çš®ã® Swift ããŒããã©ãªãªã管çããå€§èŠæš¡ãªçµç¹ã®å Žå:
æšå¥šãããéå±€åã¢ãŒããã¯ãã£:
CI è¡çã®ããã® SwiftLint ãŸã㯠Semgrep
éäžç®¡çãããå質ã¬ããã³ã¹ã®ããã®SonarQube
深局è匱æ§ã¢ããªã³ã°ã®ããã®ãšã³ã¿ãŒãã©ã€ãº SAST ãšã³ãžã³
CIã«çµ±åãããäŸåé¢ä¿ã¹ãã£ã³
ãã®éå±€åã¢ãããŒãã«ãããæžå¿µäºé ãåé¢ãããŸãã
- éçºè ããã®è¿ éãªãã£ãŒãããã¯
- ããŒããã©ãªãªã¬ãã«ã®å¯èŠæ§
- 培åºããã»ãã¥ãªãã£åŒ·å
- äŸåãªã¹ã¯ç®¡ç
ãã®ãããªã¢ãŒããã¯ãã£ã¯ããªã¹ã¯ããŒã¹ã®åªå é äœä»ãã¢ãã«ãšäžèŽããççŸããç®çã§åäžã®ããŒã«ã«éè² è·ããããã®ãåé¿ããŸãã
Swift ã®éçè§£æã«ã¯åäžããŒã«ãžã®äŸåã§ã¯ãªãéå±€åãããã¬ããã³ã¹ãå¿ èŠ
ãšã³ã¿ãŒãã©ã€ãºSwiftã³ãŒãããŒã¹ã¯ãã¢ãã€ã«ã€ã³ã¿ãŒãã§ãŒã¹ã忣ãµãŒãã¹ãã¬ã¬ã·ãŒçµ±åãªã©ãå«ãè€éãªããªããªãŒãšã³ã·ã¹ãã å ã§éçšãããŠããŸãããã®ãããéçã³ãŒãåæã¯ãç¬ç«ããã³ã³ãã©ã€ã¢ã³ã¹ã¢ãŒãã£ãã¡ã¯ããšããŠã§ã¯ãªããéå±€åãããã¬ããã³ã¹ã¢ãŒããã¯ãã£ã®äžéšãšããŠäœçœ®ä»ããå¿ èŠããããŸãã
軜éããŒã«ã¯éçºè ã®èŠåŸã匷åããã¹ã¿ã€ã«ãšã³ããããŒãåæžããŸããéäžåãã©ãããã©ãŒã ã¯ãªããžããªéã®å¯èŠæ§ãæäŸããå質ã²ãŒãã匷åããŸãããã£ãŒãã©ãŒãã³ã°SASTãšã³ãžã³ã¯ãå®è¡ãã¹å šäœã«ãããè匱æ§ã®äŒæãã¢ãã«åããŸããäŸåé¢ä¿ã¹ãã£ããŒã¯ãå€éšããã±ãŒãžãå ¬éãããCVEã«é¢é£ããæšç§»çãªãªã¹ã¯ãæããã«ããŸããåã¬ã€ã€ãŒã¯ãããããç°ãªããªã¹ã¯æ¬¡å ã«å¯ŸåŠããŸãã
åäžã®éçè§£æãœãªã¥ãŒã·ã§ã³ãžã®äŸåã¯ãæ§é çãªç²ç¹ãçã¿åºããŸããéçºè äžå¿ã®ããŒã«ã¯ã¬ããã³ã¹ã®ãã¬ãŒãµããªãã£ã«æ¬ ããŠããŸãããšã³ã¿ãŒãã©ã€ãºSASTãšã³ãžã³ã¯ããã¹ãŠã®ã³ãããã«é©ããªãéçšäžã®ãªãŒããŒããããããããå¯èœæ§ããããŸãããã©ãããã©ãŒã çµ±åãœãªã¥ãŒã·ã§ã³ã¯ããã¹ãã£ã³ã°ãšã³ã·ã¹ãã ã«ãããã¢ãŒããã¯ãã£ã®æè»æ§ãå¶éããŸãã广çãªSwiftã¬ããã³ã¹ã«ã¯ãçµç¹ã®æç床ãšèŠå¶äœå¶ã«åãããé©åãªçµã¿åãããå¿ èŠã§ãã
Swiftãããã·ã§ã³ã¯ãªãã£ã«ã«ãªé åãèŠå¶å¯Ÿè±¡é åãžã®æ¡å€§ãç¶ããäžãäŒæ¥ã¯éçè§£æã®å®è·µãããªã³ãã£ã³ã°ãã¹ã¿ã€ã«ã®é©çšãè¶ ããé²åãžãšé²åãããå¿ èŠããããŸããã³ã³ããã¹ãã«å¿ããåªå é äœä»ããäŸåé¢ä¿ã®å¯èŠåããããŠCIã«æºæ ããé©çšã¯ãæç¶å¯èœãªã¬ããã³ã¹ã¢ãã«ãå®çŸ©ããŸããããŒã«ã®çµ±åã§ã¯ãªããéå±€åã¢ãŒããã¯ãã£ããããå ç¢ãªå質ãšã»ãã¥ãªãã£ãå®çŸããŸãã
