ã»ãã¥ãªãã£åéã®æåãªå°é家ã§ãããŠã©ãžããŒã«ã»ã³ãã§ãã³ãïŒ Positive Technologiesã®ã¢ããªã±ãŒã·ã§ã³ã»ãã¥ãªãã£åæç 究éšé·ïŒãšããã€ã«ã·ã¥ãã§ã«ãã³ãïŒæ å ±ã»ãã¥ãªãã£åéã®ç¬ç«ããéçºè ããã³ã³ã³ãµã«ã¿ã³ãïŒãšã®ã€ã³ã¿ãã¥ãŒãæäŸããŸãã
ãã®èšäºã®ç®çã¯äœã§ããïŒ ãã€ã±ã«ã®ã¬ããªã«ã®1ã€ãåŒçšããŸãã
ãå®å šãªã¢ããªã±ãŒã·ã§ã³ã®éçºã¯ããšã©ãŒããŸã£ããå«ãŸãªãã¢ããªã±ãŒã·ã§ã³ãéçºããç¹å¥ãªã±ãŒã¹ã§ãã ããã«ãã¢ããªã±ãŒã·ã§ã³ã¯ãã»ãã¥ãªãã£ãä¿èšŒãããŠããªããµãŒãããŒãã£ã©ã€ãã©ãªã䜿çšããOSããã³ããŒããŠã§ã¢äžã§å®è¡ãããŸãã å€ãã®å Žåãã©ã®OSãšã©ã®ããŒããŠã§ã¢ãããããããŸããã ãããŠããããã¯ãã¹ãŠæéã®çµéãšãšãã«å€åããŸãïŒã
ãŠã©ãžããŒã«ã»ã³ãã§ãã³ã -2006幎以æ¥ã圌ã¯æ å ±ã»ãã¥ãªãã£ã®åéã§åããŠããŸããã 圌ã¯ãWebã¢ããªã±ãŒã·ã§ã³ã»ãã¥ãªãã£åæã°ã«ãŒãã®ç¬¬äžäººè ãšããŠã2012幎ã«Positive Technologiesã«å ¥ç€ŸããŸããã 圌ã¯ãã¢ããªã±ãŒã·ã§ã³ã»ãã¥ãªãã£ã®åæãããžã§ã¯ãã«åå ããã¢ããªã±ãŒã·ã§ã³ãã¹ãæè¡ãç 究ããŸããã Vladimirã®åå ã«ããã補åPT Application Inspectorãå®è£ ãããŸããã 2014幎ãã2016幎ã«ãããŠã圌ã¯ã³ã³ãã€ã«æžã¿ã¢ããªã±ãŒã·ã§ã³çšã®ã¢ãã©ã€ã¶ãŒã®éçºã°ã«ãŒããçãããã€ããªã³ãŒãåæã¢ãžã¥ãŒã«ã®éçºãããžã§ã¯ããçããŸããã 2016幎9æ以æ¥ã圌ã¯ã¢ããªã±ãŒã·ã§ã³ã»ãã¥ãªãã£åæã®ç 究éšéãçããŠããŸãã 圌ã¯ãã¢ããªã±ãŒã·ã§ã³ã»ãã¥ãªãã£åæãšææãªäŒæ¥è£œåã®ãããã¿ã€ãã³ã°ã®æ¹åã®çè«çç 究ã«çŽæ¥é¢äžããŠããŸãã éèªHITB MagazineããHackerããããã³RSDN Magazineã®èšäºã®èè ã Positive Hack Daysåœéãã©ãŒã©ã ïŒäž»å¬è ããã³è¬æŒè ïŒããã³DotNext .NETéçºè äŒè°ã«ç¹°ãè¿ãåå ãããŠãŒã¶ãŒã°ã«ãŒãéçºè äŒè°ã§å®æçã«è¬æŒããŠããŸãã 圌ã¯RSDNã®ãã·ã¢èªã話ãéçºè ã®ã³ââãã¥ããã£ã®éçºã«åå ããŠããŸãã Positive Development User Groupã®äž»å¬è ã®1人ã¯ãéçºè ãã¢ããªã±ãŒã·ã§ã³ä¿è·ã®åéã«æ²¡é ãããããšãç®çãšããã€ãã·ã¢ããã§ãã 圌ã«ã¯ããã°kochetkov.github.ioããããŸãã
ã¢ã¹ã¯ã¯ã¯ã ã¬ããŒããWinning Injectionsãã§DotNext 2017ã«å°çããŸãã
Mikhail Shcherbakov -Microsoft .NET MVPã.NET Core Bug Bounty Programã®ã¡ã³ããŒã.NETããã°ã©ãã³ãã¥ããã£ã®å
±åäž»å¬è
ãç¬ç«ããéçºè
ããã³ã³ã³ãµã«ã¿ã³ãã å°éåéïŒéçããã³åçã³ãŒãåæãæ
å ±ã»ãã¥ãªãã£ãã³ãŒããããã°ã®èªååã.NET CLRå
éšããã€ã¹ã®èª¿æ»ã
ã¢ã¹ã¯ã¯ã¯ãASP.NET CoreïŒAttack Prevention Mechanisms 2.0ã®ãã¬ãŒã³ããŒã·ã§ã³ã§DotNext 2017ã«å°çããŸãã
-çŸåšã.NET Frameworkã«ã¯éåžžã©ã®ãããªçš®é¡ã®è匱æ§ããããŸããïŒ
Mikhail Shcherbakov ïŒããã§ã¯ã.NET Frameworkèªäœãš.NETãã©ãããã©ãŒã ã«åºã¥ããŠäœæãããã¢ããªã±ãŒã·ã§ã³ã®è匱æ§ãå ±æããå¿ èŠããããŸãã .NET Frameworkã¯ãWebãµã€ãããµãŒãã¹ãããã¹ã¯ãããã¢ããªã±ãŒã·ã§ã³ãŸã§ãããŸããŸãªçš®é¡ã®ã¢ããªã±ãŒã·ã§ã³ãéçºããããã®ãã©ãããã©ãŒã ã§ãã ãŸããããã¯Windowsãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®äžå¯æ¬ ãªéšåã§ããããã.NET Frameworkã»ãã¥ãªãã£ã¯OSãšããŠæ±ãå¿ èŠããããŸãã ãã®è匱æ§ã®äž»ãªéšåã¯ãéåžžã®Webéçºè XSSãCSRFãSQL / XML / JSONããã³ãã®ä»ã®ã€ã³ãžã§ã¯ã·ã§ã³ã§ã¯ãªããä»»æã®ã³ãŒãã®å®è¡ããŠãŒã¶ãŒç¹æš©ã®å¢å ãæ å ±æŒãããããã³ãµãŒãã¹æåŠã§ãã
-ASP.NETããã³.NET Coreã§æè¿çºèŠãããè匱æ§ã«ã€ããŠãäœãç¥ã£ãŠããŸããïŒ
ãã€ã±ã« ïŒè©³çŽ°ãªè©±ã¯1æéã¯è§£æ±ºããŸããã§ãã:)ã倧ããªã.NETãã¬ãŒã ã¯ãŒã¯ã®è匱æ§ã«ã€ããŠ1幎åã«DotNextã¢ã¹ã¯ã¯ã§å ±åããŸããã ãšã¯ã¹ããã€ãã®ãã¢ã³ã¹ãã¬ãŒã·ã§ã³ãšãããã®è匱æ§ã«ã€ãªãããã°ã®è§£æã ãã¡ããã45å以å ã«å¿ èŠãªãã®ãå«ãŸããããšãå€æãããããéçºè ã補åãäž»ã«Webã¢ããªã±ãŒã·ã§ã³ãASP .NETã§èš±å¯ããè匱æ§ã«çŠç¹ãåœãŠãããšããŸããã DoSãç¹æš©ã®ææ ŒãXXEãæ å ±é瀺ãããŒã¿ã®éã·ãªã¢ã«åã«å¯Ÿããæ»æã®äŸããããŸããã
ä»å¹Žã.NET Coreã®å€§ããªãããããªãªãŒã¹ãããŸããããã®ãããã§ã¯ãDoSãç¹æš©ã®ææ Œãä¿è·ã¡ã«ããºã ã®ãã€ãã¹ãªã©ãããã€ãã®è匱æ§ãä¿®æ£ãããŸããã ãªãŒãã³ãªãã€ã¬ã¯ãã«å¯Ÿããä¿è·ã§èŠã€ãã£ãè匱æ§CVE-2017-0256ãå«ã¿ãŸãã ããããåé¡ã¯ããŠãŒã¶ãŒå ¥åã®æ€èšŒãäžååã ã£ãããšã§ãã ãŸããã±ã¹ãã¬ã«ã«ã泚æãæã䟡å€ããããŸããç§ã¯ä»ããã®ã³ãŒããèªç±ãªæéã«ã¬ãã¥ãŒãããã€ã¯ããœãããš.NET Foundationã®ç«å ŽãšäžèŽããŸãã å¿ ãããã€ãã®ãªããŒã¹ãããã·ïŒNginxãApacheãIISïŒã§éããŠãã ããã ããã«ã€ããŠã¯ããã«ã話ã§ãããšæããŸãã
Vladimir Kochetkov ïŒéå»æ°å¹Žã«ããã£ãŠãXMLããã¥ã¡ã³ãã®åŠçã«é¢é£ãããã©ãããã©ãŒã ã®è匱æ§ãæ¥å¢ããŠããŸãã 2013幎ã«ãBlackHat EUäŒè°ã§XMLå€éšãšã³ãã£ãã£ã®å®è£ ãæ»æããããã®OOBãã¯ããã¯ã«é¢ããã¬ããŒãããã§ã«äœæããŸãããããã¯ãSystem.Xmlãããããããå«ãããŸããŸãªXMLã©ã€ãã©ãªã®å€æ°ã®è匱æ§ã®æé€ã䌎ããŸããã ãã ããé²æ©ã¯ãŸã æ¢ãŸã£ãŠããããæ°å¹ŽåŸãåã³.NETã§äžé£ã®éåžžã«äŒçµ±çãªXMLåŠçã®è匱æ§ã確èªããŠããŸãïŒXXEïŒCVE-2016-3255ïŒãXMLããã¥ã¡ã³ãã®çœ²åã®æ¹ããïŒCVE-2016-0132ïŒãDoS throughç¹å¥ãªçŽ°å·¥ããããXSLTããã¥ã¡ã³ãã«ãããååž°çãªå€æãè¡ãããŸãïŒCVE-2016-0033ïŒã ããé«ãã¬ãã«ã®ã»ãã¥ãªãã£ãçŽæ¥æ±ºå®ããOSã¬ãã«ã®è匱æ§ããªãããã§ã¯ãããŸããã ãã®ãããwin32k.sysïŒæ¬è³ªçã«ã¯Windowsã«ãŒãã«ïŒã®è匱æ§CVE-2016-0145ã«ãããæ»æè ã¯ããã¥ã¡ã³ãã«åã蟌ãŸããç¹å¥ã«çŽ°å·¥ããããã©ã³ãïŒ!!ïŒã䜿çšããŠã·ã¹ãã äžã§ä»»æã®ã³ãŒããå®è¡ã§ããŸãã ãã¡ããããã®è匱æ§ã«ãããé©åãªåœ¢åŒã®ããã¥ã¡ã³ãã§åäœãã.NETã¢ããªã±ãŒã·ã§ã³ãæ»æãããå¯èœæ§ããããŸãã
å¥ã«ãä»å¹Ž.NETã§çºèŠããããªã¢ãŒãã®ä»»æã®ã³ãŒãå®è¡ã®2ã€ã®è匱æ§ã CVE-2017-0160ãšCVE-2017-8759ã«æ³šç®ãã䟡å€ããããŸãã æåã®è©³çŽ°ãªåæïŒããã³ãã®æäœã®æŠå¿µå®èšŒã³ãŒãïŒã¯ã次ã®å Žæã«ãããŸãã https://www.exploit-db.com/exploits/41903/ ã 2ã€ç®ã¯ãFireEyeããã°ã®å¥ã®èšäºã§ãã ãã®è匱æ§ã¯ãç¹ã«ãFinSpyæ¿åºã®ã¹ãã€ãŠã§ã¢ã·ã¹ãã ãå®è£ ããããã«äœ¿çšãããããšã¯æ³šç®ã«å€ããŸããããã¯ãWikiLeaksã®å¥ã®åºçç©ã®ãããã§ç¥ãããããã«ãªããŸããã
-ããããæ»æããŠãã.NET Frameworkã®æšçã¯äœã§ããïŒ æ»æè ã®æšçã¯ãããšãã°5幎éã§å€åããŸãããïŒ
Michael ïŒäž»ãªç®æšã¯ãæ»æè ãæäœã§ããå ¥åããŒã¿ãæäœããããŸããŸãªããŒãµãŒã§ããWebã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããã³ã³ããŒãã³ãã§ãã .NET Frameworkã¯ãã¹ãŠã®ææ°ããŒãžã§ã³ã®Windowsã§å©çšã§ãããããæ å ±ã»ãã¥ãªãã£ç 究è ã«ãšã£ãŠããŒã«ã«ã³ã³ããŒãã³ãç¹æš©ãšã¹ã«ã¬ãŒã·ã§ã³æ»æãå®è£ ããããã®ã³ã³ããŒãã³ãã¯æœåšçã«èå³æ·±ããã®ã§ãã ããšãã°ãCVE-2014-0257ã䜿çšããŠInternet Explorer 11 SandboxãçµäºããCVE-2014-4073ãClickOnceããçµäºããŸããã ãµã³ãããã¯ã¹ã§å®è¡ãããã³ãŒããã.NETãªããžã§ã¯ããžã®ã¢ã¯ã»ã¹ã¯ãManaged DCOMãä»ããŠå®è£ ãããŸããã ä»å¹ŽãDCOMã®ç©èªãç¹°ãè¿ãããæ»æææ³ã䌌ãŠããCVE-2017-7293ãçºèŠãããŸããã Google Project ZeroããŒã ã®ããã°ã§ãé åçãªã¹ããŒãªãŒå šäœãèªãããšãã§ããŸãã
éå»æ°å¹Žéãæ»æè ã¯.NET Sandboxãçµäºããããã«æ»æã䜿çšããããšã«é¢å¿ã倱ã£ãŠããŸãããããã¯ããã¯ãããžãŒèªäœã䜿çšããã補åãå°ãªãããã§ãã .NET Coreã«ã¯å«ãŸããŠããŸããã§ãããASP.NETããŒã ã¯æçµçã«IISå ã®ã¢ããªã±ãŒã·ã§ã³ãåé¢ããããã«ãµã³ãããã¯ã¹ã®äœ¿çšãæŸæ£ããSilverlightã¯ã»ãŒæ»ã«ãŸãããIEã®ææ°ããŒãžã§ã³ã¯ããµãŒãããŒãã£ã®XBAPã¢ããªã±ãŒã·ã§ã³ã³ãŒãã®å®è¡ã«ã€ããŠãŠãŒã¶ãŒã«èŠåãå§ããŸããã 4幎åãCVE-2013-0073ãæªçšããŠãç¹å¥ã«æºåãããããŒãžããã©ãŠã¶ãŒã§éãã ãã§ããŠãŒã¶ãŒã®ã³ã³ãã¥ãŒã¿ãŒã§ãªã¢ãŒãã³ãŒãå®è¡æ»æãè¡ãããšãã§ããŸããã DotNext Moscow 2014ã§ãã®ãšã¯ã¹ããã€ãã®äŸã瀺ããŸããã
ç§ã¯.NET Coreã«èšåããã®ã§ãããã«åãçµããšããRyuJITã³ã³ãã€ã©ã®è匱æ§ãä¿®æ£ãããŸããïŒCVE-2015-2479ãCVE-2015-2480ãCVE-2015-2481ã æ倧15,000ãã«ã®å ±é ¬ãæ〠.NET Coreã®è匱æ§ãæ€çŽ¢ããããã®ãªãŒãã³ãšã³ãã®Bug Bountyããã°ã©ã ãçŸåšå ¬éãããŠããã.NET Coreã®ã³ã³ããŒãã³ãã¯ãã¡ãããæ å ±ã»ãã¥ãªãã£ç 究è ã®åªããã¿ãŒã²ããã«ãªããŸããã
ãŠã©ãžããŒã« ïŒãŸã第äžã«ãæ»æè ã誰ã§ãããã©ã®ãããªæ»æãè¡ããã«äŸåããŸãã èªå倧éæ»æã®å Žåãç®æšã¯ãããšãã°ãã§ããã ãå€ãã®ãããã¯ãŒã¯ãã¹ããå¶åŸ¡ããããšã§ãã ãããã£ãŠããã®å Žåããã©ãããã©ãŒã ã®æ°ããè匱æ§ãäžè¬çãªãã¬ãŒã ã¯ãŒã¯ããšã³ãžã³ãããã³ã©ã€ãã©ãªãã©ã³ãã ã«æ»æãããå°ããªèŸæžã䜿çšããŠæ¢ç¥ã®ãšã³ããªãã€ã³ãã®è³æ Œæ å ±ãéžæãããŸãã
æšçãçµã£ãæšçåæ»æã®å Žåãæªåé«ããã«ãã§ãŒã³ã®æé«ã®äŒçµ±ã«åŸã£ãŠã·ããªãªãå±éãããŸãïŒåµå¯ãå®è¡ããããšã¯ã¹ããã€ããæºåãããã·ã¹ãã ã§å®è£ ãå®è¡ãããã·ã¹ãã ã§ä¿®æ£ãããæ»æè ã®ç®æšãéæããããã®ã¢ã¯ã·ã§ã³ãå®è¡ãããŸãã ãã®å Žåã®ç®æšã¯ãååãšããŠãæ©å¯æ å ±ã®1åéãã®åä¿¡ãŸãã¯ç¶ç¶çãªç£èŠã§ãã .NETã®å Žåãããã¯ãæ»æãããã¢ããªã±ãŒã·ã§ã³ïŒãã©ãããã©ãŒã èªäœã®ãœãŒã¹ãå«ãïŒã«é¢é£ããå©çšå¯èœãªãœãŒã¹ã®æ»æè ã«ãã綿å¯ãªåæãæå³ããããŒã¿ããŒã¹ïŒSystem.DataãORMãšçŽæ¥ããåãããã³ãŒãã«éç¹ã眮ãããç¹å®ã®ãŒããã€è匱æ§ã®äœ¿çšïŒ ïŒãŸãã¯æœåºãããæ å ±ã®ä»ã®å€éšãªããžããªã
çŽç²ã«æè¡çãªèŠ³ç¹ããèŠããšãæ»æè ã®ç®æšã¯éå»5幎éã»ãšãã©å€åããŠããŸãã-åãè匱æ§ãæ»æãè åšã®ã»ããã§ããã幎ã«ãã£ãŠãããã«ç°ãªããŸãïŒWebã¢ããªã±ãŒã·ã§ã³ã«ã€ããŠã¯OWASP Top 10ãåç §ïŒã 泚ç®ãã¹ãå€æŽç¹-éå»2ã3幎ã§ãWindowsã·ã¹ãã ã§ã®ä¿®æ£æè¡ã®éèŠãªéçºã«åããåŸåããããŸãããããã¯ã.NETã¢ããªã±ãŒã·ã§ã³ã®è匱æ§ã®æªçšã®æåã«å¿ ç¶çã«åœ±é¿ããŸãã
ãåºæ¬çãªçš®é¡ã®æ»æãç¥ãããšã¯ãå®å šãªã¢ããªã±ãŒã·ã§ã³ã®éçºã«åœ¹ç«ã¡ãŸããïŒ
ãã€ã±ã« ïŒå©ãã«ãªããã å€ãã®å Žåãéçºè ã®èŠè§£ã¯ãããã³ãã¬ãŒããWebè匱æ§ïŒXSSããã¹ãã©ããŒãµã«ãããŸããŸãªã€ã³ãžã§ã¯ã·ã§ã³ïŒã«é¢ããç¥èã«ãã£ãŠãããŸãã«ãããã¢ããªã±ãŒã·ã§ã³ã»ãã¥ãªãã£éåã«ã€ãªããè«çãšã©ãŒã«ã¯ã»ãšãã©æ³šæãæããŸããã ãããã£ãŠãéçºäžã®ãã©ãããã©ãŒã ã§æåããæ»æã®äŸã¯ãèŠéãåºããã³ãŒããå確èªããããšãå¯èœã«ããŸãã ããããå®å šãªã¢ããªã±ãŒã·ã§ã³ãéçºããã«ã¯ãäœç³»çãªã¢ãããŒããå¿ èŠã§ãã ãŠã©ãžããŒã«ãšç§ã¯ã.NETã¢ããªã±ãŒã·ã§ã³ã®ã»ãã¥ãªãã£ã«ç¹åããæåã®SPB .NETã³ãã¥ããã£äŒè°ã®1ã€ãéå¬ããçè«çåŽé¢ãšå®è·µçåŽé¢ã®äž¡æ¹ãããããã¯ãæããã«ããããšããŸããã ãã®äŒè°ã®ãªã³ã©ã€ã³ãããªããããŸãã
ãŠã©ãžããŒã« ïŒãèªåèªèº«ãããã¯ããããšããååã«ã€ããŠè©±ããšãããã¯åã«æ©èœããŸããã éçºè ãã¢ããªã±ãŒã·ã§ã³ãå¹æçã«ä¿è·ããã«ã¯ãæ»æè ã®èŠ³ç¹ããèããŠãå°ãªããšãå¹³åçãªæ»æè ãããã§ãããšããç¹ã§ã圌ã¯ãã®ç¹ã§ããã§ãªããã°ãªããŸããã éçºè ã«ãšã£ãŠãããã¯å®éã«ã¯2çªç®ã®å°éåéãååŸããããšãæå³ããŸãã æ»æãšã®æŠãã¯ã圌ãã®è²¬ä»»ç¯å²ã§ã¯ãããŸããã éçºãã§ãŒãºã®äž»ãªç®çã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã»ãã¥ãªãã£ã確ä¿ãããšãã芳ç¹ããã ããŸããŸãªæ»æã«å¯Ÿããè匱æ§ã«ã€ãªãããã¢ããªã±ãŒã·ã§ã³ã»ãã¥ãªãã£ãã¡ã€ã³ã³ã³ãããŒã«ã³ã³ãããŒã«ã®éå¹ççãªå®è£ ã§ããæ¬ é¥ãšæŠãããšã§ãã ãã®ãããã¯ã¯ãæšå¹Ž4æã«ã¢ã¹ã¯ã¯ã§éå¬ãããCodeFreezeã³ãã¥ããã£ã®äŒè°ã§åå詳现ã«è°è«ãããŸãã ã ãŸããæ¬ é¥ã§ã¯ãªãæ»æã«å¯Ÿããéçºè ã®éãããã¢ããªã±ãŒã·ã§ã³ã®è匱æ§ã«ã©ã®ããã«ã€ãªãããã«ã€ããŠãããã€ãã®äŸãæ€èšããŸããã
ãã¡ãããéçºè ã¯ãå°ãªããšãäžè¬çãªéçºã«ã€ããŠã¯ãäž»ãªçš®é¡ã®æ»æãç¥ã£ãŠããå¿ èŠããããŸãã ãã ããã¢ããªã±ãŒã·ã§ã³ã®ä¿è·ã«é¢ãã決å®ãè¡ãããã«ãã®ç¥èã䜿çšããªãã§ãã ããã ASP.NETã¢ããªã±ãŒã·ã§ã³ã«å¯Ÿããç¹å®ã®æ»æã«é¢å¿ã®ããéçºè ã¯ãç§ã®èšäºã ASP.NETã®ãµã€ããããã¯ããŸããïŒ é£ããã§ãããå¯èœã§ãïŒ ããããã«ãŒèªã®ç¬¬165å·ã«æ²èŒïŒpã63ïŒã
-éçºè ã¯ã.NET Frameworkã®ã©ã®ã»ãã¥ãªãã£é¢ã«çŠç¹ãåœãŠãå¿ èŠããããŸããïŒ
Michael ïŒéçºè ã«ãšã£ãŠãããã¯ãŸã第äžã«ããã¹ãŠã®å ¥åããŒã¿ã®æ€èšŒãåºåããŒã¿ã®ãµãã¿ã€ãºã§ãã 圌ãã¯åŠæ ¡ããå ¥åã®æ€èšŒã«ã€ããŠè©±ããŠããŸããã ãŠãŒã¶ãŒïŒã»ãã¥ãªãã£ã¢ãã«ã®èŠä»¶ãå«ãïŒã«æºæ ããŠãããã©ããã確èªããå¿ èŠããããŸãã ãããŠãäž»ãªããšã¯ãããæ£ããè¡ãããšã§ãïŒå¯èœãªå Žåã¯ãã¯ã€ããªã¹ããã§ãã¯ã䜿çšããŠãå ¥åããŒã¿åœ¢åŒã®ææ³ãæ£ããèšè¿°ããŸãïŒããã¯ã æ£èŠè¡šçŸã§ XMLãŸãã¯HTMLã解æããå¿ èŠããªããšããããšã§ãïŒã ããã¯ã Secure by Design / Default / Deployã®ãã¹ãŠã®ç²ããååã«åŸã£ãŠããŸãã
ããã«ã OWASPéçºè ã¬ã€ã ã ASP.NETã§ããŠã¯ãªããªãããšã代ããã«è¡ãããšãªã©ãå®å šãªã¢ããªã±ãŒã·ã§ã³ãéçºããããã®äžé£ã®ãã¹ããã©ã¯ãã£ã¹ããããŸã ã ããããç¥ã£ãŠåŸãããšã¯ãSOLIDã®ã¢ãŒããã¯ãã£ãã¿ãŒã³ãšååãç¥ãããšãšåããããéèŠã§ãã
ãŠã©ãžããŒã« ïŒãŸã第äžã«ãå ¥åããŒã¿ãšåºåããŒã¿ã®äºååŠçã«çŠç¹ãåœãŠãŠããŸãã .NETã®å Žåãããã¯æ¬¡ã®ããšãæå³ããŸãã
aïŒå€éšããåä¿¡ãããã¹ãŠã®ããŒã¿ã®åŒ·åãªã¿ã€ãã³ã°ã System.Stringã®åœ¢åŒã§åä¿¡ãããã¹ãŠã®å€éšããŒã¿ã¯ãããžãã¹ããžãã¯ã®ç¹å®ã®ãšã³ãã£ãã£ã«å€æããŠãããã®ãã©ãŒã ã§äœ¿çšããå¿ èŠããããŸãïŒãã¡ãããå ¥åããŒã¿ã®ã»ãã³ãã£ã¯ã¹ãããããã®æååãšã³ãã£ãã£ããã©ãŒã©ã »ïŒã ãã ãããã¹ãŠã®å ¥åããŒã¿ãå ¥åããå¿ èŠãããã«ãããããããéããªããã£ãåã«é¢ããŠã¯ãSSRFãéã·ãªã¢ã«åã®è匱æ§ãªã©ã®æ·±å»ãªã»ãã¥ãªãã£åé¡ãåŒãèµ·ããå¯èœæ§ãããããšãèŠããŠããå¿ èŠããããŸãã
bïŒå ¥åããããã¹ãŠã®å€éšããŒã¿ã®æå³æ€èšŒã çæ³çã«ã¯ãåãšã³ãã£ãã£ã®äžå€æ¡ä»¶ãå®çŸ©ããCodeContractsãPostSharp Contractsãªã©ã®ã³ã³ãã©ã¯ãããã°ã©ãã³ã°ããŒã«ã䜿çšããŠäžå€æ¡ä»¶ãé©çšããå¿ èŠããããŸãã
cïŒãã¹ãã®ææ³ã«åŸã£ãŠäžãããããã¹ãŠã®ããŒã¿ã®æ§æè¡çã ããã§ãç¹å®ã®ãµãã¿ã€ã¶ãŒã®äœ¿çšã®å¿
èŠæ§ã¯ãåä¿¡åŽã®ææ³ã ãã§ãªããããŒã¿ãéä¿¡ãããã³ã³ããã¹ãã«ãäŸåããããšãèŠããŠããå¿
èŠããããŸãã ãã®ãããããšãã°ãJavaScriptã³ãŒããªã©ã§éä¿¡ãããããŒã¿ã«HttpUtility.UrlEncode
ã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ãXSSæ»æã«å¯ŸããŠè匱ã«ãªããŸãã ã»ãšãã©ã®.NETãµãã¿ã€ã¶ãŒã¯ãã¯ã©ã¹HttpUtility
ã HttpServerUtility
ã WebUtility
ããã³System.Web.Security.AntiXss
éäžããŠããŸãã ãŸãã LibProtectionã©ã€ãã©ãªã«ã泚æãæã䟡å€ããããŸããLibProtectionã©ã€ãã©ãªã®æåã®å
¬éãªãªãŒã¹ã¯ä»å¹Žã®11æ13æ¥ã«äºå®ãããŠãããä»åŸã®DotNext Moscow 2017ã§ã®ç§ã®ã¬ããŒãã察象ã§ãã
-.NET Frameworkã®ã©ã®ã¿ã€ãã®è匱æ§ãããªãã®ä»äºã«å¹²æžããŸããïŒãŸãã¯ã以åã«å¹²æžããŸãããïŒãååãä»ããããšãã§ããŸããïŒ
Michael ïŒã©ããªè匱æ§ããå¹²æžãããç§ã®ä»äºã«åœ¹ç«ã¡ãŸã:) .NET FWã®è匱æ§ãåæãããšããã³ãŒããæžãããã®æ°ããã¿ã€ãã®æ»æãšïŒã¢ã³ãïŒãã¿ãŒã³ã調ã¹ãããšãã§ããŸãã ããã¯ãå®å šãªã¢ããªã±ãŒã·ã§ã³ã®éçºãšã»ãã¥ãªãã£ã·ã¹ãã ã®åæã«åœ¹ç«ã¡ãŸãã
ãŠã©ãžããŒã« ïŒç§ã®ä»äºã®æ§è³ªäžã.NETã®è匱æ§ã¯ããã劚ããã®ã§ã¯ãªããè²¢ç®ãããã®ã§ãã ãããããæ°ã«å ¥ãã®.NETè匱æ§ã«ã€ããŠè©±ããšãããã¯æããã«ãASP.NET WebFormsïŒCVE-2010-3332ïŒã®æå·åãããããŒã¯ã³ãã¿ãŒã³ã®å®è£ ã«ãããOracleã«å¯Ÿããã»ã³ã»ãŒã·ã§ãã«ãªæ»æã§ããã2010幎ã«ã»ã³ã»ãŒã·ã§ãã«ã§ãããä»»æã®WebãµãŒããŒãã¡ã€ã«ãšåœã®èªèšŒãèªã¿åãããšãã§ããŸãããŒã¯ã³ã ãã®æ»æã®è©³çŽ°ãªåæã¯ã ãã¬ãŒã³ããŒã·ã§ã³ã§èŠã€ããããšãã§ããŸãã
-.NET Frameworkã¢ããªã±ãŒã·ã§ã³éçºè ãæãé »ç¹ã«è¡ãã»ãã¥ãªãã£ã®åŽé¢ã®ãšã©ãŒã¯äœã§ããïŒ
Michael ïŒWebãããžã§ã¯ãã®ã»ãã¥ãªãã£ã¬ãã¥ãŒãè¡ã£ãç§ã®çµéšã§ã¯ããããã¯ãã¹ãŠã®çš®é¡ã®ãåºçŸ©ã®ãã€ã³ãžã§ã¯ã·ã§ã³ã§ããXSSãSQLiãXXEããã¹ãã©ããŒãµã«ãããã³ã¢ããªã±ãŒã·ã§ã³æ§æã®åé¡ã§ãã ããã¯ãä»å¹Žã®æåãªOWASPããã10æ Œä»ããšæ å ±ã»ãã¥ãªãã£äŒç€Ÿã®å ±åæžãäœæãããåºç€ãšãªãããŒã¿ã«ãã£ãŠã確èªãããŠããŸãã
æ³šå ¥ã¯ãå ¥åããŒã¿ã®æ€èšŒãäžååã§ãé±æ«ã®äžé©åãªè¡çç¶æ ã§ã®ã¿å¯èœã§ããããã«ã€ããŠã¯ãäžèšã§èª¬æããŸããã èšå®ã®ãšã©ãŒã¯ããã¹ããã©ã¯ãã£ã¹ã«åŸã£ãŠè匱æ§ã¹ãã£ããŒã䜿çšããããšã§è§£æ±ºãããŸãã
ãŠã©ãžããŒã« ïŒäžã§èšã£ãããã«ãã»ãã¥ãªãã£ã®åé¡ã®éåžžã«éèŠãªéšåã¯ãããŒã¿ã®éå¹ççãªååŠçã«é¢é£ããŠããŸãã ããã¯ãPositive Technologiesãå ¬éããŠããè匱ãªWebã¢ããªã±ãŒã·ã§ã³ã®å¹Žæ¬¡çµ±èšã§ã確èªãããŠããŸãã ãããã£ãŠã 2016幎ã®ããŒã¿ã«ãããšã ASP.NETã¢ããªã±ãŒã·ã§ã³ã®æãç¹åŸŽçãªã®ã¯ãã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°æ»æãè³æ Œæ å ±ã®éžæãããã³æ å ±æŒããã«å¯Ÿããè匱æ§ã§ãã
-ååãä»ãããã.NETã¢ããªã±ãŒã·ã§ã³ãžã®æ»æã«å¯Ÿæããæãå¹æçãªæ¹æ³ã¯äœã§ããïŒ
Michael ïŒéåžžããœãããŠã§ã¢ã¡ãŒã«ãŒã®ç®æšã¯æ»æãšæŠãããšã§ã¯ãªããå®å šãªã¢ããªã±ãŒã·ã§ã³ãéçºãããŠãŒã¶ãŒããŒã¿ã®æ©å¯æ§ãä¿èšŒããããšã§ãã ãããã£ãŠãã»ãã¥ãªãã£ã§ã¯ãæ»æã§ã¯ãªãä¿è·ã®èŠ³ç¹ããã¢ãããŒãããå¿ èŠããããŸãã
å®å šãªã¢ããªã±ãŒã·ã§ã³ã®éçºã¯ãäœããããŸãææ ®æ·±ããªã¹ã¯ç®¡çã§ãã éçºè ã®è³æ Œã®ãããã§ããå¶ç¶ãã§æãå®å šãªã¢ããªã±ãŒã·ã§ã³ãéçºããããšã¯ã§ããŸããã ã¢ããªã±ãŒã·ã§ã³ã®åã³ã³ããŒãã³ãã®ã»ãã¥ãªãã£ã¬ãã«ã¯åãèŠä»¶ã§ããããã®å®çŸã«ã¯éçºæ®µéãšãã¹ã段éã®äž¡æ¹ã§ãªãœãŒã¹ãå¿ èŠã§ãã åã³ã³ããŒãã³ãã«å¯Ÿããæ»æã®ãªã¹ã¯ã®äŸ¡æ Œãç解ããããã«åºã¥ããŠããã®ãªã¹ã¯ã®é²æ¢ã«è²»ããåªåã決å®ããå¿ èŠããããŸãã ãããŠããããã«ããããªã¹ã¯ãå®çŸããå Žåã®è¡åèšç»ãããªãã¡ ã¢ããªã±ãŒã·ã§ã³ãæ£åžžã«æ»æãããŸããã
ãŸã è¿œå ã®è²»çšãå¿ èŠãªå Žåã¯ãäœç³»çãªã¢ãããŒããéèŠã§ãã ã»ãã¥ã¢éçºã©ã€ããµã€ã¯ã«ïŒSDLïŒæè¡ãéçºããã»ã¹ã«äœç³»çã«å°å ¥ãã瀟å ã®éçºæåãæ¹åããå¿ èŠããããŸãïŒè£œåã¬ãã¥ãŒããã»ã¹ã«ã»ãã¥ãªãã£ã¬ãã¥ãŒã¹ããŒãžãè¿œå ããã»ãã¥ã¢ã¢ããªã±ãŒã·ã§ã³ãäœæããããã®ãã¹ããã©ã¯ãã£ã¹ãéçºããã³å®è£ ãã瀟å ã®éçºè ããã¬ãŒãã³ã°ãããã®æ®µéã§ã»ãã¥ãªãã£ã«æ³šæãæããŸããã¹ããäŸµå ¥ãã¹ãïŒå éšããã³å€éšã®äž¡æ¹ïŒãå®æœããåžžã«ããã¯ã€ãããã¯ã¹ãã¹ãã£ããŒãšããã©ãã¯ããã¯ã¹ãã¹ãã£ããŒã䜿çšããŠãå¯èœãªéãè匱æ§ãèŠã€ããããã»ã¹ãèªååãã Webã¢ããªã±ãŒã·ã§ã³ãã¡ã€ã¢ãŠã©ãŒã«ïŒWAFïŒã®äœ¿çšãªã©ã®äºé²æªçœ®ã
ãŠã©ãžããŒã« ïŒ.NETã®ä»æ§ã«é¢ä¿ãªããã¢ããªã±ãŒã·ã§ã³ã®ã»ãã¥ãªãã£ã確ä¿ããããã®äžè¬ååã¯æ¬¡ã®ãšããã§ãã
- ãœãããŠã§ã¢éçºãµã€ã¯ã«å šäœã«SSDLïŒSecure Software Developent LifecycleïŒãçµã¿èŸŒãã
- ã³ãŒãã®æ¬ é¥ãšæŠãããã«éçºè ã«çŠç¹ãåãããŸãã
- éçšæ®µéã§ã®ã¢ããªã±ãŒã·ã§ã³ã¬ãã«ã®ãã¡ã€ã¢ãŠã©ãŒã«ã®äœ¿çšã
ããã«ã.NETã¢ããªã±ãŒã·ã§ã³ã®éçºè ã¯ã OWASP .NETã»ãã¥ãªãã£ããŒãã·ãŒããšãæå·åã®åãããã.NETã¢ããªã±ãŒã·ã§ã³ã®ã»ãã¥ãªãã£ä¿è·ã®è©³çŽ°ãæããã«ããStan Drapkin ã®ãã°ãããæ¬ãSecurity Driven .NETãã«ç¹ã«æ³šæãæãå¿ èŠããããŸãã
-ç¬èªã®.NETã¢ããªã±ãŒã·ã§ã³ã®ãããã³ã°ã«ééããŸãããïŒ ãããããªããããã«ã€ããŠãã£ãšæããŠãã ããã ãã¶ããããªãã¿ã®éçºè ã®ã¢ããªã±ãŒã·ã§ã³ã§åæ§ã®ç¶æ³ã«é¢ããããã€ãã®ã±ãŒã¹ãäŒããããšãã§ããŸããïŒ
ãã€ã±ã« ïŒé¢çœãäŸã¯ãããŸããã§ããã æåã«æãæµ®ãã¶ã®ã¯ãSCADA StrangeloveããŒã ã«ããç ââ究ã§ãSiemens WinCC SCADA / HMIã·ã¹ãã ã«å¯Ÿããæ»æããã·ãã¥ã¬ãŒããããŸããã WinCC Web NavigatorãµãŒããŒã¯.NETãã©ãããã©ãŒã ã§èšè¿°ãããŠãããç 究è ã¯XPathã€ã³ãžã§ã¯ã·ã§ã³ããã¹ãã©ããŒãµã«ã20以äžã®XSSãCSRFãSQLiãªã©ã®è匱æ§ãçºèŠããŸããã ãããã®è匱æ§ã䜿çšããŠãå®äžçã®ããã«ãæ»æè ãæ»æããããããã¯ãŒã¯ã®å¢çã®èåŸã«ããå Žåãå®éã®SCADAã·ã¹ãã ã«å¯Ÿããæ»æãã©ã®ããã«èŠããããææ¡ããŸããã ãã®æ»æã«é¢ããPHDaysããã®ã¬ããŒããèŠãããšãã§ããŸãã
Vladimir ïŒæãèšæ¶ã«æ®ãã±ãŒã¹ã¯ã2014幎5æã®RSDN.org Webãµã€ãã®ãã©ãŒã©ã ã®ãŠãŒã¶ãŒã«å¯Ÿããæ»æã§ããããã®ãšã³ãžã³ã¯çŸåšASP.NET MVCã§å®è¡ãããŠããŸãã ã¢ãã¬ãŒãããªã·ãŒã«è ¹ãç«ãŠãåžžé£ã®1人ã¯ãä»ã®ãŠãŒã¶ãŒã®è³æ Œæ å ±ã培åºçã«ç·åœããæ»æãããããã䜿çšããŠç¡æå³ãªã¡ãã»ãŒãžãŸãã¯in蟱çãªã¡ãã»ãŒãžã®éªåŽ©ãå ¬éããŸããã åœæããµã€ããšã³ãžã³ã¯äœ¿çšãããã¹ã¯ãŒãã®è€éããå¶åŸ¡ããæ段ã䜿çšããŠããªãã£ããããæ»æè ã¯æ»æãåæ¢ããåã«12å以äžã®ã¢ã«ãŠã³ãã®ãã¹ã¯ãŒããååŸããããšãã§ããŸããã ç»é²ããã³ãã¹ã¯ãŒãå€æŽãã©ãŒã ã§ã¯ããã®è€éãã®å¶åŸ¡ãå®è£ ãããæ»æè ãååŸããã¢ã«ãŠã³ããæã€ãŠãŒã¶ãŒã®ãã¹ã¯ãŒãããªã»ãããããŸããã
ãã®åŸããŠãŒã¶ãŒãã¹ã¯ãŒãããã·ã¥ã®ããŒã¿ããŒã¹ãååŸããã250Kã®èŠçŽ ã®èŸæžã䜿çšããŠãã¹ã¯ãŒãéžæã«å¯ŸããŠãªãã©ã€ã³æ»æãå®è¡ããŸããã ãã®çµæããã®æç¹ã§ç»é²ããã83,015人ã®ãŠãŒã¶ãŒã11,017人ãå ãããã®ãã¹ã¯ãŒãã¯åŠ¥åœãªæéå ã«èŠã€ãããŸããã ãã¹ã¯ãŒãããªã»ããããããã¹ã¯ãŒãå埩æé ãå®è¡ããå¿ èŠããããšããéç¥ãã¡ãŒã«ã«éä¿¡ãããŸããã
ãã®ãã¹ãŠã®åŸãæ»æè ããŸã ãã°ã€ã³ã«ç®¡çããŠããã¢ã«ãŠã³ããšãæ»æã®æŽçã«äœ¿çšããèªèšŒCookieã䜿çšããæ©äŒããã£ãããšã¯æ³šç®ã«å€ããŸãã å®éã®ãšãããASP.NETèªèšŒããŒã¯ã³ã¯ããããã ãåæãããèªèšŒãã¯ãASP.NETã®èšèšã«ãããç¹å®ã®ãŠãŒã¶ãŒãããããæãåºãããšãªããäžçæå¹ã§ãã
ãããã£ãŠã圱é¿ãåãããŠãŒã¶ãŒã®ãã¹ã¯ãŒããå€æŽããåŸã§ããæ»æè ã¯ãŸã èªèšŒããŒã¯ã³ã䜿çšããŠãããããå°æ¥ãããã®ãŠãŒã¶ãŒã®äžã«èªç±ã«å ¥åã§ããŸãã 圌ãå©çšã§ãããã¹ãŠã®ããŒã¯ã³ãç¡å¹ã«ããã«ã¯ãèªèšŒãã±ããã®æå·åã«äœ¿çšãããã·ã³ããŒãå€æŽããå¿ èŠããããŸãããããã«ããã以åã«çºè¡ããããã¹ãŠã®ããŒã¯ã³ã䜿çšã§ããªããªãããã¹ãŠã®ãµã€ããŠãŒã¶ãŒã®åŒ·å¶çãªå€§éåèªèšŒã®çç±ã«ãªããŸããã
-.NET Frameworkã䜿çšããŠ100ïŒ å®å šãªã¢ããªã±ãŒã·ã§ã³ãäœæããããšã¯å¯èœã§ããïŒ ããã«ã¯äœãå¿ èŠã§ããïŒ
ãã€ã±ã« ïŒãããã ã©ã®ãã©ãããã©ãŒã ã§ã100ïŒ å®å šãªã¢ããªã±ãŒã·ã§ã³ãäœæããããšã¯ã§ããŸããã éæ³ãšæªéãšã®ååŒã䜿çšããŠ100ïŒ å®å šãªã¢ããªã±ãŒã·ã§ã³ãäœæãããšãããã«æªãããšã«ã100ïŒ å®å šã§ããããšã蚌æããããšã¯ã§ããŸããïŒ ã»ãã¥ãªãã£èŠä»¶ãå«ããååãªæéã§éèŠãªã¢ã«ãŽãªãºã ãæ€èšŒããããšã¯çè«çã«äžå¯èœã§ãã
å®å šãªã¢ããªã±ãŒã·ã§ã³ã®éçºã¯ããšã©ãŒããŸã£ããå«ãŸãªãã¢ããªã±ãŒã·ã§ã³ãéçºããç¹å¥ãªã±ãŒã¹ã§ãã ãã¹ãŠã®éçºè ã¯ããããéæäžå¯èœãªçæ³çãªçµæã§ããããšãçŽæçã«ç解ããŠãããšæããŸãã ããã«ãã¢ããªã±ãŒã·ã§ã³ã¯ãã»ãã¥ãªãã£ãä¿èšŒãããŠããªããµãŒãããŒãã£ã©ã€ãã©ãªã䜿çšããOSããã³ããŒããŠã§ã¢äžã§å®è¡ãããŸãã
å€ãã®å Žåãã©ã®OSãšã©ã®ããŒããŠã§ã¢ãããããããŸããã ãããŠããããã¯ãã¹ãŠæéã®çµéãšãšãã«å€åããŸãïŒ 100ïŒ ã«å°éããããšããè©Šã¿ã¯ãéåžžã«å€ãã®æªç¥æ°ã§å€±æããéåœã«ãããšæããŸãã
ç§ã®æèŠã§ã¯ã.NET Frameworkã¯å®å šãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããã®ã«é©ããéžæè¢ã§ãã ç§ã¯ãã§ã«.NET Coreã«è³ããŠããŸããã ããã¯ãã»ãã¥ã¢ãªã·ã¹ãã ã®éçºã«è±å¯ãªçµéšãæã€å€§äŒæ¥ããµããŒããããå°ããªã¯ãã¹ãã©ãããã©ãŒã ã®ãªãŒãã³ãœãŒã¹ãã¬ãŒã ã¯ãŒã¯ã§ãã æåŸã®ãã¬ãŒãºã«ã€ããŠã¯Linuxã®æçè«ãäºæ³ãããŸã:)çºèŠããä¿®æ£ãããè匱æ§ã®çµ±èšã«å ¥ããªãå ŽåããWindows vs. Linuxãã¯ZeroNightsã® 1ã€ã§ãããæçµçã«èŽè¡ã¯ãããããå®å šãªãã©ãããã©ãŒã ã§ãããšå€æããŸãã...倧å€æ°ãWindowsã«æ祚ããŸããïŒ
ãŠã©ãžããŒã« ïŒå°ã倢èŠãŠããããæ¬åœã«å¯èœã§ãããšæ³åããŠã¿ãŸãããã èšãæããã°ãã«ãŒã«ã®æéã»ããããããšä»®å®ããŸããããã«ãããéçºè ã¯åºåã§å®å šãªã¢ããªã±ãŒã·ã§ã³ãåãåãããšãä¿èšŒãããŸãã ãã®ãããªåã«ãŒã«ã¯äœã§ããïŒ ããã¯ãéçºè ã®ã¢ã¯ã·ã§ã³ã段éçã«èª¬æããŠãéçºè ã®ããã®å®å šãªã¢ããªã±ãŒã·ã§ã³ãäœæããç¹å®ã®ã¢ã«ãŽãªãºã ã§ãã ãã§ã«åæããããã«ããã®ãããªã¢ã«ãŽãªãºã ã®ã»ããã¯ãã¹ãŠæéã§ãããããåæå¯èœããã³æ±ºå®å¯èœã§ãã ãã®ã»ããã®è£å®ãã€ãŸã ã¢ããªã±ãŒã·ã§ã³ã®ã»ãã¥ãªãã£ã«åœ±é¿ãäžããªããçè«çã«å¯èœãªä»ã®å€ãã®ã¢ã«ãŽãªãºã ã æããã«ãããã¯ç¡éã§ãããéåžžã«ç¹å®ã®éèªæã§äžå€ã®ããããã£ã®ååšã«åºã¥ãã¢ã«ãŽãªãºã ãå«ãŸããŠããŸãã ãããŠããã¯ãã©ã€ã¹ã®å®çã§ã¯è§£æ±ºã§ããªãããšãæå³ããŸãã ããããããã¯è§£æ±ºäžå¯èœã§ããããããã¹ãå®çã®çµæãšããŠã®è£å®ïŒã€ãŸããå®å šãªã¢ããªã±ãŒã·ã§ã³ãéçºããããã®éåžžã«å€ãã®ã«ãŒã«ïŒã¯åæã§ããŸããã ãããã£ãŠãæéã«ããããšã¯ã§ããŸããã
çè«é¢ããé©çšé¢ã«ç§»è¡ãããšãå¶åŸ¡ã³ãŒããšå³å¯ãªåå¶åŸ¡ã®æŠå¿µã«ããã.NETéçºè ã¯ãã¡ã¢ãªç Žæãnullãã€ã³ã¿ãŒã®éåç §ããã©ãŒãããæååãåã®æ··åãªã©ã«é¢é£ããäœã¬ãã«ã®ã»ãã¥ãªãã£åé¡ã«ã€ããŠèããå¿ èŠããªããªããŸãã ãã ããããŒã¿ã®ååŠçãã¢ã¯ã»ã¹å¶åŸ¡ãããã³ãªãœãŒã¹ãžã®ãã«ãã¹ã¬ããã¢ã¯ã»ã¹ã«é¢é£ãããã¹ãŠã®é«ã¬ãã«ã®ã»ãã¥ãªãã£äžã®æ¬ é¥ã¯äŸç¶ãšããŠå¯èœã§ãã ããžãã¹ããžãã¯ã®æ¬ ç¹ã¯èšããŸã§ããªããçŸæç¹ã§ã¯æ確ãªåé¡ãæ£åŒãªã¢ãã«ããååšããªããããããããåé¿ããæ¹æ³ã«é¢ããæšå¥šäºé ã¯ãããŸããã
-ããªãã®æèŠã§ã¯ãã»ãã¥ãªãã£ã®èŠ³ç¹ãã.NETã«æ¬ ããŠãããã®ã¯äœã§ããïŒ
ãã€ã±ã« ïŒããã°ã©ããŒããã®ããŒã¿ãæ¿å ¥ãããã³ã³ããã¹ããèããªãããã«ãããŒã¿ããµãã¿ã€ãºããããã»ã¹ãéçºè ã«ãšã£ãŠããééçã«ããããšèããŠããŸãã ããã¯çŸåšã®ã¢ãããŒãã§éšåçã«å®è£ ã§ããŸãã ããšãã°ãcshtmlããŒãžã®ããŒãµãŒã¯ãããŒã¿ãæ¿å ¥ãããã³ã³ããã¹ããèªèããŸããã€ãŸãã解æããªãŒã®çŸåšã®ããŒãã®ãã¹ãããããã¹ãŠã®ææ³ãèªèããŸãã ããã¯ãæ³šå ¥ã®çè«çãªå¯èœæ§ãããåé¿ããããã«ããã®ã³ã³ããã¹ãã§ããŒã¿ãæ£ãããµãã¿ã€ãºã§ããããšãæå³ããŸãã ããã°ã©ããŒã¯ãããåŠçããé©åãªè¡çã¢ã«ãŽãªãºã ãéžæããå¿ èŠããããŸãã ãšã³ã³ãŒããŒã®åŒã³åºããŸãã¯äžé£ã®åŒã³åºãã
.NET Coreã¯å®å šã«ãªãŒãã³ãªãããžã§ã¯ãã§ãããããè¿ãå°æ¥ãå°ãªããšããã®ã¢ã€ãã¢ã®æŠå¿µå®èšŒå®è£ ã«ç§ã®æãå±ãããšãé¡ã£ãŠããŸãã ãŸãã¯ãèªè ã®èª°ãããã®ã¢ã€ãã¢ãåãäžããŠãããå®è£ ããŠãããã°å¹žãã§ãã
次ã«ãã»ãã·ã§ã³ããŒã¿ãä¿è·ããŸãã ãã®åé¡ã¯ãã倧ããªã.NET Framework以æ¥ç¥ãããŠããŸãã .NET Coreã§ã¯ãå°ãæªåããæ»æè ã¯ã»ãã·ã§ã³åºå®æ»æãå®è¡ããæ©äŒãå¢ããŸããã ããã«ã€ããŠã¯ãDotNext 2017 Moscowã®ã¬ããŒããASP.NET CoreïŒAttack Prevention Mechanisms 2.0ãã§æ°æ¥ä»¥å ã«è©³ãã説æããŸã ã
ãããŠ3çªç®ã«ãç§ã®æèŠã§ã¯ãASP.NETãã³ãã¬ãŒãã¯ãå®å šãªã·ã¹ãã ãéçºããããã®é©åãªã¢ãããŒããæã蟌ãããã«ãããã©ã«ãã§Webã¢ããªã±ãŒã·ã§ã³ãæžãéã«æé«ã®ã»ãã¥ãªãã£ãã¿ãŒã³ã課ãã¹ãã§ãã åºæ¬çã«ãå«ãŸããŠé©åã«æ§æãããCSPããã¹ãŠã®POST / PUT / DELETEèŠæ±ã«å¯ŸããCSRFä¿è·ããµãŒããŒå¿çã«ã»ãã¥ãªãã£ããããŒãè¿œå ãããªã©ãå°ããªå€æŽãå¿ èŠã§ãã ãã ããå€ãã®å Žåããããã®å°ããªãã®ãååšããªãããšããã¢ããªã±ãŒã·ã§ã³ãžã®æ»æãæåãããå¯èœæ§ããããŸãã
ãŠã©ãžããŒã« ïŒãŸã第äžã«ãã»ãã¥ãªãã£ã«é¢é£ãããã¬ãŒã ã¯ãŒã¯ã®æåã®ããŒãžã§ã³ããæç¶ãããå°å çŸæ£ãã®æé€ã å°ãªããšãBinarySerializerïŒåãRemotingã§äœ¿çšïŒãååŸããŸãã ãã·ãªã¢ã©ã€ãºãããšãããã®ã·ãªã¢ã©ã€ã¶ãŒã¯ãã€ã³ã¹ã¿ã³ã¹åããåã«ãæåŸ ãããã¿ã€ããšãã·ãªã¢ã©ã€ãºãããã¿ã€ãããã§ãã¯ããŸããã ããã«ãããæ»æè ã¯ä»»æã®åããã·ãªã¢ã©ã€ã¶ãŒã«æž¡ãããšãã§ãããã®çµæããã®åã®ã³ã³ã¹ãã©ã¯ã¿ãŒãå®è¡ããããã®ãã¹ãŠã®ããããã£ãèšå®ããããã®ãã¡ã€ãã©ã€ã¶ãŒãåŸã§å®è¡ãããŸãã ããã¯ãBinarySerializerã䜿çšããŠå ¥åããŒã¿ãéã·ãªã¢ã«åããã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠãæ»æè ã«ãã£ãŠå¶åŸ¡ãããSMBãµãŒããŒäžã®ä»»æã®ãã¡ã€ã«ããã³SSRFã®åé€ã«å¯Ÿããæ»æã«å¯ŸããŠç¡æ¡ä»¶ã«åœ±é¿ãåããããããŸãïŒç¹å®ã®æ¡ä»¶ãæºããããå ŽåïŒä»»æã®ã³ãŒãã®å®è¡ã«å¯Ÿããæ»æã«å¯ŸããŠãååã§ãïŒ https://blog.scrt.ch/2016/05/12/net-serialiception/ BinarySerializerã§ãäºæ³ãããåãšãã·ãªã¢ã©ã€ãºãããBEFOREã€ã³ã¹ã¿ã³ã¹åãšã®å¯Ÿå¿ã®äºåãã§ãã¯ãå®è£ ããããšã劚ãããã®ã¯äœããããŸããã ãŸããäžäœäºææ§ã®ããã«çŸåšã®åäœããªãã·ã§ã³ã«ããŸãã
CïŒã«ã€ããŠè©±ããšãã»ãã¥ãªãã£ã®èŠ³ç¹ããèŠããšãçµã¿èŸŒã¿ã®ã³ã³ãã©ã¯ãããã°ã©ãã³ã°ããŒã«ãå®éã«ã¯ãããŸããã å°ãªããšããNemerleèšèªã§å®è£ ãããã¬ãã«ã§ã¯ãã©ã®ã¡ãœãããŸãã¯ã¯ã©ã¹ã«å¯ŸããŠãé¢æ°ãå®çŸ©ã§ããã¡ãœããã®äºåããã³äºåŸæ¡ä»¶ã®å 足ã確èªããããã¯ã©ã¹ã®å Žåã¯äžå€åŒã®å¶åŸ¡ãæäŸãããã§ããŸãã CïŒã§ã¯ãããã«å ãžé²ãã§ããã®ãããªãå³æ Œãªãã¡ãœãããšã¯ã©ã¹ãå®çŸ©ãããstrictãã¿ã€ãã®ããŒã¯ãŒãã§ããããããŒã¯ããããšãã§ããŸãããã®ããã«ã¯ãå¥çŽã®æ瀺çãªãã§ãã¯ãå¿ é ã§ãã ããã¯ãããŒã¿ã®ååŠçã®æ¬ ç¹ãšããžãã¹ããžãã¯ã®è匱æ§ã®äž¡æ¹ã«é¢é£ããåé¡ã®å€§éšåãã«ããŒããŸãã