誀æ€ç¥ã«ã€ããŠã¯ãããã§ã¯ãã¹ãŠãåçŽã§ãã誀æ€ç¥ã®çãã§è匱æ§ãçºèŠãããã³ãŒãå ã®å ŽæãçŽæ¥ç¢ºèªã§ããŸãã確ãã«ããããã®ããã€ãã¯èª€æ€ç¥ã§ããããšã倿ããå¯èœæ§ããããŸãïŒæããã«å šäœã®ååã§ã¯ãããŸãããïŒã
ããããäœãéèŠã§äœãéèŠã§ãªããã«ã€ããŠãç§ã¯ãã£ãšå®è³ªçã«è©±ããããšæããŸããSHA-1ã䜿çšã§ããªããªã£ãçç±ãšãã;ãããšã¹ã±ãŒãããçç±ãçè§£ããŠããã°ããããããã®èšäºã§ã¯æ°ããããšã¯ã§ããŸãããããããèŠã€ãã£ãè匱æ§ã®ã¹ãã£ã³çµæãç®ããããå Žåã¯ãã«ããã®äžã§æè¿ããŸã-ã¢ãã€ã«ããã³Webã¢ããªã±ãŒã·ã§ã³ã§æãé »ç¹ã«èŠãããã穎ãããããã®åäœãä¿®æ£æ¹æ³ããããŠæãéèŠãªããš-ç®ã®åã«ãããã®ãçè§£ããæ¹æ³ã説æããŸã-ã³ãŒãã®å±éºãªæ¬ é¥ãŸãã¯è»œåŸ®ãªãšã©ãŒã
å®è£
ããããã¿ã€ãã®è匱æ§ã§ãããããã¯ãSQLãLDAPãXMLãXPathãXSLTãXqueryã¯ãšãªãªã©ãããããå Žæã«åã蟌ãŸããŠããŸãããããã®ã€ã³ãžã§ã¯ã·ã§ã³ã¯ãã¹ãŠãä¿¡é Œã§ããªãããŒã¿ã®äœ¿çšã«ãã£ãŠåºå¥ãããŸããããã«ãããæ»æè ã¯æ å ±ã«ã¢ã¯ã»ã¹ããããã¢ããªã±ãŒã·ã§ã³ã®åäœã倿Žãããã§ããŸããããšãã°ãååã«æ€èšŒãããŠããªããŠãŒã¶ãŒå ¥åãããå Žåã
è匱æ§OWASPã®åœéåé¡ã«ãããšãã€ã³ãžã§ã¯ã·ã§ã³æ¹åŒã䜿çšããæ»æã¯ãWebã¢ããªã±ãŒã·ã§ã³ã®ã»ãã¥ãªãã£ã«å¯Ÿããè åšã®é倧床ã®ã¬ãã«ã§æåã«ã©ã³ã¯ä»ããããŸããæãå žåçãªã¿ã€ãã®å®è£ ã«ã€ããŠèããŠã¿ãŸãããã
SQLã€ã³ãžã§ã¯ã·ã§ã³ãä¿¡é Œã§ããªãããŒã¿ã¯ãããŒã¿ããŒã¹ãžã®SQLã¯ãšãªã«å ¥ããŸãã
ããŒã¿ããŒã¹ãžã®ã¯ãšãªãå ¥åããŒã¿ã®æ£ããèªèšŒãå®è£ ããŠããªãå Žåãæ»æè ã¯SQLã¯ãšãªãç Žå£ããå¯èœæ§ããããŸãã
- æªæã®ããã³ãŒããéä¿¡ããŸãã
- èšå·ã-ããŸãã¯ã;ãã远å ããŸã æ£ããSQLã³ãã³ããçµäºããŸããã-ãã®åŸã®ãã¹ãŠã¯ã³ã¡ã³ããšããŠè§£éãããæåã;ã㯠ã³ãã³ãã®çµããã瀺ããŸãã
- äžé£ã®SQLã¯ãšãªãé çªã«å®è¡ããŠããã¹ã¯ãŒããæšæž¬ããŸãã
èªåãå®ãæ¹æ³ã¯ïŒOWASPããã®ããã€ãã®æšå¥šäºé ã¯æ¬¡ã®ãšããã§ãã
- ãã©ã¡ãŒã¿åãããã€ã³ã¿ãŒãã§ã€ã¹ãŸãã¯ãªããžã§ã¯ããªã¬ãŒã·ã§ãã«ãããã³ã°ïŒORMïŒããŒã«ãæäŸããAPIã䜿çšããŸãã
- ãŠãŒã¶ãŒãå ¥åããããŒã¿ã®æ€èšŒã¡ã«ããºã ãå®è£ ããŸãããµãŒããŒåŽã®æ€èšŒãã¯ã€ããªã¹ãã䜿çšããŸãã
- ç¹æ®æåããšã¹ã±ãŒãããŸãïŒ ";"ã "-"ã "/ *"ã "* /"ã "'";æ£ç¢ºãªãªã¹ãã¯ããŒã¿ããŒã¹ã«ãã£ãŠç°ãªããŸãïŒã
- ã¹ãã¢ãããã·ãŒãžã£ããã©ã¡ãŒã¿ã®ãã£ã«ã¿ãªã³ã°ã¡ã«ããºã ãšçµã¿åãããŠäœ¿çšââããŠããŠãŒã¶ãŒå ¥åãæ€èšŒããŸãã
XMLã€ã³ãžã§ã¯ã·ã§ã³ãã¢ããªã±ãŒã·ã§ã³ã¯XMLã䜿çšããŠããŒã¿ãä¿åãŸãã¯äº€æããããã貎éãªæ å ±ãå«ããããšãã§ããŸãã
æ»æè ãXMLããã¥ã¡ã³ãã«ããŒã¿ãæžã蟌ãããšãã§ããå Žåãæ»æè ã¯ãã®ã»ãã³ãã£ã¯ã¹ã倿Žã§ããŸãããã®å Žåãæãç¡å®³ãªã·ããªãªã§ã¯ãããã¥ã¡ã³ãã«è¿œå ã®ã¿ã°ãæ¿å ¥ã§ããŸãããã®çµæãXMLããŒãµãŒã¯ãšã©ãŒã§çµäºããŸãããã ããããæ·±å»ãªåé¡ã«çŽé¢ããå¯èœæ§ããããŸããããšãã°ã顧客ããŒã¹ã®èªèšŒããŒã¿ãã¹ãã¢ã®è£œåããŒã¿ããŒã¹ã®äŸ¡æ Œã眮ãæããå Žåãªã©ã§ãã XMLã€ã³ãžã§ã¯ã·ã§ã³ã¯ãã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒïŒããŒãžãéããããšãã«ãŠãŒã¶ãŒã®ãã©ãŠã¶ãŒã§å®è¡ãããæªæã®ããã³ãŒãã®ã€ã³ãžã§ã¯ã·ã§ã³ïŒã«ã€ãªããå¯èœæ§ããããŸãã
äœãã¢ããã€ã¹ã§ããŸããïŒ
- ä¿¡é Œã§ããªããœãŒã¹ããã®ããŒã¿ïŒãŠãŒã¶ãŒãå ¥åãããã®ãªã©ïŒããååãæŽŸçããã¿ã°ã屿§ãäœæããªãã§ãã ããã
- XMLããã¥ã¡ã³ãã«æžã蟌ãåã«ããŠãŒã¶ãŒãå ¥åããããŒã¿ããšã³ã³ãŒãïŒXMLãšã³ãã£ãã£ãšã³ã³ãŒãïŒããŸãã
XQueryã€ã³ãžã§ã¯ã·ã§ã³ã¯åŸæ¥ã®SQLã€ã³ãžã§ã¯ã·ã§ã³ã®åœ¢åŒã§ããããã®å Žåãæ»æã¯XMLããŒã¿ããŒã¹ãæšçãšããä¿¡é Œã§ããªãããŒã¿ã¯XQueryåŒã«ãªããŸãã
以äžã®äŸã§ã¯ãã¢ããªã±ãŒã·ã§ã³ãäœæããããã©ã¡ãŒã¿ã«åºã¥ããŠXQueryåŒãå®è¡
usernameããpasswordHTTPãªã¯ãšã¹ãïŒä¿¡é Œã§ããªããœãŒã¹ïŒããã®ïŒ
XQDataSource xqs = new XQDataSource();
XQConnection conn = xqs.getConnection();
String query = "for \$user in doc(users.xml)//user[username='" + request.getParameter("username") + "'and pass='" + request.getParameter("password") + "'] return \$user";
XQPreparedExpression xqpe = conn.prepareExpression(query);
XQResultSequence rs = xqpe.executeQuery();
ããŒã¿ãæ£ããå Žåããªã¯ãšã¹ãã¯é©åãªååãšãã¹ã¯ãŒãã§ãŠãŒã¶ãŒã«é¢ããæ å ±ãè¿ããŸãã
for \$user in doc(users.xml)//user[username='test_user' and pass='pass123'] return \$user
æ»æè ãç¹æ®ãªæåïŒããšãã°
admin' or 1=1 or ''='ïŒãå«ãæååããã©ã¡ãŒã¿ãŒãšããŠæå®ãããšãèŠæ±ã®ã»ãã³ãã£ã¯ã¹ã倿ŽãããŸãã
//user[username='admin']
åä¿¡ãããªã¯ãšã¹ãã¯ããã¹ãŠã®ãŠãŒã¶ãŒã«é¢ããããŒã¿ãè¿ããŸãã
å®å šãªãªãã·ã§ã³ïŒäœ¿çš
prepared statementsïŒïŒ
XQDataSource xqs = new XQDataSource();
XQConnection conn = xqs.getConnection();
String query = "declare variable $username as xs:string external; declare variable $password as xs:string external; for \$user in doc(users.xml)//user[username='$username' and pass='$password'] return \$user";
XQPreparedExpression xqpe = conn.prepareExpression(query);
xqpe.bindString(new QName("username"), request.getParameter("username"), null);
xqpe.bindString(new QName("password"), request.getParameter("password"), null);
XQResultSequence rs = xqpe.executeQuery();
ã¢ããªã±ãŒã·ã§ã³ãXSLãæäœãããšãã«ä¿¡é Œã§ããªããœãŒã¹ããã®ããŒã¿ã䜿çšããå ŽåãXSLTïŒXMLããã¥ã¡ã³ã倿èšèªïŒãžã®åã蟌ã¿ãå¯èœã§ãã
ã¢ããªã±ãŒã·ã§ã³ã¯XSLã䜿çšããŠXMLããã¥ã¡ã³ãã倿ããŸããXSLã¹ã¿ã€ã«ã®ãã¡ã€ã«ã«ã¯ã倿ã説æãã颿°ãå«ãŸããŠãããæ£ããå®è£ ãããŠããªãå Žåã¯ãè匱æ§ãå«ãŸããå¯èœæ§ããããŸãããã®å Žåãæ»æè ãXSLã¹ã¿ã€ã«ãã¡ã€ã«ã®æ§é ãšã³ã³ãã³ãããããã£ãŠå¯Ÿå¿ããXMLãã¡ã€ã«ã倿Žããæ»æã·ããªãªã®ãªã¹ã¯ãé«ãŸããŸããåºå£ã§äœãåŸãããŸããïŒ
ãŸããXSSæ»æïŒWebã·ã¹ãã ã«ãã£ãŠçºè¡ãããããŒãžã«æªæã®ããã³ãŒããæ¿å ¥ãããã®ã³ãŒããæ»æè ã®ãµãŒããŒãšçžäºäœçšãããŸããæ¬¡ã«ãããã«ãŒã¯ã·ã¹ãã ãªãœãŒã¹ã«ã¢ã¯ã»ã¹ã§ããŸãã第äžã«ãä»»æã®ã³ãŒãã®å®è¡ããããŠãã¶ãŒãã®å Žå-XXEæ»æïŒXML eXternalãšã³ãã£ãã£-XMLãžã®å€éšãšã³ãã£ãã£ã®æ³šå ¥ïŒã軜éãã£ã¬ã¯ããªã¢ã¯ã»ã¹ãããã³ã«ïŒ
LDAPïŒãã³ãã³ãã«æ¿å ¥ãããšãããŒã¿ã倱ãããã倿Žããããããå¯èœæ§ããããŸãããã®å Žåãä¿¡é Œã§ããªãããŒã¿ãLDAPèŠæ±ã«å ¥ããŸãã
æªæã®ããã€ã³ã¿ãŒããªã¿ãŒã³ãã³ãã®æ¿å ¥ãä¿¡é Œã§ããªãããŒã¿ãã€ã³ã¿ããªã¿ã³ãã³ãã«å ¥ããŸããæ»æè ã¯ãã®ãããªå ¥åãéžæããŠãã³ãã³ããæ£åžžã«å®è¡ãããã¢ããªã±ãŒã·ã§ã³ã®è¿œå ã®ã¢ã¯ã»ã¹èš±å¯ãå©çšã§ããããã«ããããšãã§ããŸãã
以äžã®äŸã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã¯ã¹ã¯ãªãããå®è¡ããŠããŒã¿ããŒã¹ã®ããã¯ã¢ãããäœæããŸããã¢ããªã±ãŒã·ã§ã³ã¯ãããã¯ã¢ããã¿ã€ãããã©ã¡ãŒã¿ãŒãšããŠåãåããææ Œãããç¹æš©ã§ã¹ã¯ãªãããå®è¡ããŸãã
String btype = request.getParameter("backuptype");
String cmd = new String("cmd.exe /K
\"c:\\util\\rmanDB.bat "+btype+"&&c:\\utl\\cleanup.bat\"")
System.Runtime.getRuntime().exec(cmd);
ããã§ã®åé¡ã¯ããã©ã¡ãŒã¿ãŒã
backuptypeæ€èšŒãããªãããšã§ããéåžžRuntime.exec()ãè€æ°ã®ã³ãã³ããå®è¡ããããšã¯ãããŸãããããã®å Žåãcmd.exeãæåã«èµ·åããŠããåŒã³åºããŠè€æ°ã®ã³ãã³ããå®è¡ããŸãRuntime.exec()ãã³ãã³ãã©ã€ã³ã·ã§ã«ãéå§ããããšãã&&ãæåã§åºåãããè€æ°ã®ã³ãã³ããå®è¡ã§ããŸããæ»æè
&& del c:\\dbms\\*.*ãæåå " "ããã©ã¡ãŒã¿ãšããŠæå®ãããšãã¢ããªã±ãŒã·ã§ã³ã¯æå®ããããã£ã¬ã¯ããªãåé€ããŸãã
éçºè åãã®ãã³ãïŒ
- ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããã³ãã³ãããŠãŒã¶ãŒãçŽæ¥å¶åŸ¡ã§ããªãããã«ããŠãã ãããã¢ããªã±ãŒã·ã§ã³ã®åäœããŠãŒã¶ãŒãå ¥åããããŒã¿ã«äŸåããå¿ èŠãããå Žåã¯ãèš±å¯ãããã³ãã³ãã®ç¹å®ã®ãªã¹ããããŠãŒã¶ãŒã«éžæè¢ãæäŸããŸãã
- , . , . , .
- , , . . .
å®å šã§ãªããã¡ã€ã«ã®ã¢ããããŒãããã®å Žåãåã ã®ããŒã¿ã¯ä¿¡é Œã§ããªããœãŒã¹ããã®ãã®ã ãã§ãªãããã¡ã€ã«å šäœããã®ãã®ã§ãããããã£ãŠãæ»æè ã¯æªæã®ããããŒã¿ãŸãã¯ã³ãŒããã¿ãŒã²ãããµãŒããŒã«ã¢ããããŒãã§ããŸããããšãã°ãäŒæ¥ãããã¯ãŒã¯äžã®ãŠãŒã¶ãŒãå ¬çã«ã¢ã¯ã»ã¹å¯èœãªãã£ã¬ã¯ããªã«ãã¡ã€ã«ãã¢ããããŒãããããšãèš±å¯ãããŠããå Žåãããã«ãŒã¯äŒæ¥ã®ãµãŒããŒäžã§æªæã®ããã³ãŒãããªã¢ãŒãã§å®è¡ã§ããŸãã
HTMLã«å€éšãã¡ã€ã«ãå®å šã«å«ããªãããã¡ã€ã«ã€ã³ã¯ã«ãŒãã®è匱æ§ã¯ããŠãŒã¶ãŒãã€ã³ã¯ã«ãŒãããããã¡ã€ã«ãžã®ãã¹ãå ¥åãããšãã«çºçããŸããäºå®ãææ°ã®ã¹ã¯ãªããèšèªã§ã¯ããµãŒãããŒãã£ã®ãã¡ã€ã«ããã³ãŒããåçã«ãªã³ã¯ããŠåå©çšããããšãã§ããŸãããã®ã¡ã«ããºã ã¯ãããŒãžã®å€èгãçµ±äžããããã³ãŒããå°ããªã¢ãžã¥ãŒã«ã«åå²ãããããããã«äœ¿çšãããŸãããã ããæ»æè ã¯ãã¹ã倿ŽããŠãã¡ã€ã«ãæ¥ç¶ããããšã«ããããã®å å«ãæªçšããå¯èœæ§ããããŸãã
äŒæ¥ã®æ å ±ã»ãã¥ãªãã£ã®å°éå®¶ã¯ãæå¹ãªãã¡ã€ã«æ¥ç¶ãã¹ã®ããã¯ã€ããªã¹ãããäœæããŠãåŸæ¥å¡ããã®ãªã¹ãã®ã¹ã¯ãªããã«åŸã£ãŠã®ã¿ãã¡ã€ã«ã远å ã§ããããã«ããããšããå§ãããŸãã
ããã¯ããŒã¯
ããã¯ããŒã¯ã¯ãã¢ããªã±ãŒã·ã§ã³ã³ãŒãã«æå³çã«å°å ¥ãããéšåã§ãããç¹å®ã®æ¡ä»¶äžã§ãã¢ããªã±ãŒã·ã§ã³ã«å«ãŸããŠããªãã¢ã¯ã·ã§ã³ãå®è¡ã§ããŸããæãäžè¬çãªçš®é¡ã®ããã¯ããŒã¯ã«ã€ããŠèããŠã¿ãŸãããã
ç¹å¥ã¢ã«ãŠã³ããã¢ããªã±ãŒã·ã§ã³ããã¹ã¯ãŒããŸãã¯ãã°ã€ã³å€æ°ã®å€ã倿ŽãããŠããªãå€ãšæ¯èŒããå Žåã¯ã泚æããŠãã ããããã®ã¢ã«ãŠã³ãã¯ããã¯ããŒã¯ã®äžéšã§ããå¯èœæ§ããããŸãããããã©ã®ããã«èµ·ãããèŠãŠã¿ãŸãããã
ã¢ããªã±ãŒã·ã§ã³ã®éçºè ã¯ããããã°æã«ç¹å¥ãªã¢ã«ãŠã³ãïŒããããææ Œãããç¹æš©ãæã€ïŒã䜿çšããã³ãŒãã®å¯Ÿå¿ããã»ã¯ã·ã§ã³ãæçµããŒãžã§ã³ã®ãŸãŸã«ããŠãã¢ããªã±ãŒã·ã§ã³ãžã®ã¢ã¯ã»ã¹ãä¿æããŸããæ»æè ã¯ãã¢ããªã±ãŒã·ã§ã³ã®å ã®ã³ãŒãã埩å ããç¹å¥ãªã¢ã«ãŠã³ãã®å®æ°å€ãæœåºããŠãã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ããããšãã§ããŸãã
ãã°ã€ã³ããã¹ã¯ãŒããããŒãã¢ããªã±ãŒã·ã§ã³ã®ãœãŒã¹ã³ãŒãã«ä¿åããããšã¯æåºãšããŠäžå¯èœã§ããé ãæ©èœïŒNDVïŒãéè¡šç€ºã®æ©èœã³ãŒãã¯ãç¹å®ã®ããªã¬ãŒãèµ·åãããšãã«å®è¡ãããŸããWebã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããªã¬ãŒã¯ãé衚瀺ãã®ã¯ãšãªãã©ã¡ãŒã¿ãŒã§ããããšããããããŸããããã«ãããªã¬ãŒä»ãã®ãªã¯ãšã¹ããã©ã®IPããéä¿¡ããããããã§ãã¯ããŠãäœæè ã ããããã¯ããŒã¯ãã¢ã¯ãã£ãåã§ããå ŽåããããŸãããã®ãããªãã§ãã¯ã¯ãå¯èœãªããã¯ããŒã¯ã®ã·ã°ãã«ãšããŠæ©èœããŸãã
ææžåãããŠããªããããã¯ãŒã¯ã¢ã¯ãã£ããã£ããã®ã¿ã€ãã®ã¢ã¯ãã£ããã£ã«ã¯ãããã¯ã°ã©ãŠã³ãã§ã®ãµãŒãããŒãã£ãªãœãŒã¹ãžã®æ¥ç¶ãææžåãããŠããªãããŒãã®ãªãã¹ã³ãSMTPãHTTPãUDPãICMPãä»ããæ å ±ã®è»¢éãå«ãŸããŸãã
æ¢ç¥ã®å®å šãªã¢ãã¬ã¹ã®ãªã¹ãã«ãªãã¢ãã¬ã¹ã®çãããæ¥ç¶ãã³ãŒãã§èŠã€ããå Žåã¯ããããåé€ããããšã匷ããå§ãããŸããã»ãã¥ãªãã£èšå®ã倿ŽããŸããã¢ããªã±ãŒã·ã§ã³ã«ã¯ãèªèšŒã®æåãæ ŒçŽãã倿°ã®å€ã倿Žããã³ãŒããå«ãŸããŠããŸããããããééãã¯ãæ¯èŒïŒ==ïŒã®ä»£ããã«å²ãåœãŠïŒ=ïŒã䜿çšããããšã§ããèªèšŒæ¹æ³ã§ã¯ãããã¯ãã¢ã®äžéšã«ãªãå¯èœæ§ããããããç¹ã«å±éºã§ãã
if (isAuthenticated = true)
{
someDangerousAction();
}
ã¿ã€ã ããªã¬ãŒïŒæéç匟ïŒãç¹å®ã®æç¹ã§èµ·åããããã¯ããŒã¯ãã¢ããªã±ãŒã·ã§ã³ã¯ãçŸåšã®æ¥ä»ãç¹å®ã®å¹Žãæãæ¥ãšæ¯èŒããŸãã2021幎1æ1æ¥ã«ãé©ããçãåŸ ã£ãŠããŸãã
Date now = java.util.Date(); // current time
if ((now.getYear() == 2021) && (now.getMonth() == 1) && (now.getDate() == 1))
{
activateNewYearBackdoor();
}
ãŸãã¯ããã§ã¯ãªããããããŸãã...å®éã«ã¯ãäžæçãªããªã¬ãŒãæ€çŽ¢ãããšãã«ã誀æ€ç¥ãé »ç¹ã«çºçããŸããããšãã°ãtime APIãæå³ãããç®çïŒãã®ã³ã°ãå®è¡æéã®èšç®ãHTTPèŠæ±ã«å¯ŸãããµãŒããŒå¿çã®ã¿ã€ã ã¹ã¿ã³ãïŒã«äœ¿çšãããŠããå Žåã
ã ãïŒãã®ãããªè匱æ§ã®å®éã®äŸãç¥ã£ãŠããã®ã§ããã®ãããªãã¹ãŠã®ã¢ã©ãŒã ã«ç®ãéããªãããšããå§ãããŸãã
ãããã³ãŒããäœã圹ã«ç«ããªãæ¿å ¥ãããã³ãŒãã®æçããããã³ãŒãèªäœã¯å±éºã§ã¯ãããŸããããè€æ°ã®ãã¡ã€ã«ã«åæ£ãããŠããããã¯ããŒã¯ã®äžéšã§ããå¯èœæ§ããããŸãããŸãã¯ãããã¯ããŒã¯ããªã¬ãŒã¯åŸã§å®è£ ãããäºå®ã§ãããããã«ããããããã³ãŒãã¯çãããã¯ãã§ãã
æå·åã®æ¬ åŠãšåŒ±ãæå·åã¢ã«ãŽãªãºã ã®äœ¿çš
æå·åã®äž»ãªåé¡ã¯ãæå·åããŸã£ãã䜿çšãããŠããªããã匱ãã¢ã«ãŽãªãºã ã䜿çšãããŠããããšãšãããŒãšãœã«ããåçŽãããããå®å šã«ä¿åãããŠããªãããšã§ããããããã¹ãŠã®è匱æ§ã®çµæã¯åãã§ã-æ©å¯ããŒã¿ãçãã®ã¯ç°¡åã§ãã
ãã®äŸã¯ãåŸæ¥ã®DESã¢ã«ãŽãªãºã ã䜿çšããæå·åã®åæåã瀺ããŠããŸãã
Cipher cipher = Cipher.getInstance("DES");
èåŒ±ãªæå·åã¢ã«ãŽãªãºã ã®äŸïŒRC2ãRC4ãDESãå®å šãªãªãã·ã§ã³ïŒ
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
OWASPã® åœéåé¡ã«ãããšããæ©å¯ããŒã¿æŒæŽ©ããªã©ã®è匱æ§ã¯ãWebã¢ããªã±ãŒã·ã§ã³ã®ã»ãã¥ãªãã£è åšã®é倧床ã®èгç¹ãã3çªç®ã«ã©ã³ã¯ä»ããããŠããŸãã
éçºè ãžã®æšå¥šäºé ïŒã»ãã¥ãªãã£ã念é ã«çœ®ããŠæå·åã䜿çšããŠãã ããã
HTTPSã®ä»£ããã«å®å šã§ãªãHTTPãããã³ã«ã䜿çšãããšãæ»æã®éäžã§ManãçºçããŸãã
å®å šãªHTTPSãããã³ã«ã¯HTTPã«åºã¥ããŠããŸãããSSL / TLSæå·åãããã³ã«ãä»ããæå·åããµããŒãããŠããŸãã HTTPSã¯ãHTTPSãä»ããŠéä¿¡ããããã¹ãŠã®ããŒã¿ãç¹ã«ãã°ã€ã³ãšãã¹ã¯ãŒãã®å ¥åããŒãžãŸãã¯ãŠãŒã¶ãŒã®éè¡ã«ãŒãããŒã¿ãæå·åããäžæ£ã¢ã¯ã»ã¹ã倿Žããä¿è·ããŸããéä¿¡ãããããŒã¿ãä¿è·ããªãHTTPãšã¯ç°ãªããŸãããã®çµæãæ»æè ã¯HTTPãä»ããŠæ å ±Webãµã€ããåœè£ ãããŠãŒã¶ãŒã«åœã®ããŒãžã«ããŒã¿ãå ¥åãããå¯èœæ§ããããŸãïŒãã£ãã·ã³ã°æ»æïŒã
æå·åããŒã¯ãœãŒã¹ã³ãŒãã§æå®ãããŠããŸãããã®çµæããã®ãããªããŒã¯ãã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³éçºè ãå©çšã§ããŸããããã«ãã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ã¹ããŒã«åŸã¯ãæŽæ°ã䜿çšããŠã®ã¿ã³ãŒãããããŒãåé€ã§ããŸãã
äžè¬ã«ã宿°æååã¯ããœãŒã¹ã³ãŒãå埩ããã°ã©ã ïŒãã³ã³ãã€ã©ãŒïŒã䜿çšããŠå®è¡å¯èœãã¡ã€ã«ããç°¡åã«æœåºãããŸãããããã£ãŠãæ»æè ã¯ã䜿çšãããŠããããŒã®å€ãèŠã€ããããã«ãœãŒã¹ã³ãŒãã«ã¢ã¯ã»ã¹ããå¿ èŠã¯ãããŸãããç§ãã¡ã®å®è·µã§ã¯ãéçºè ãããŒå€ãšããŠ
nullç©ºã®æååãæå®ããå ŽåããããããŸãããããã¯åã«åãå
¥ããããŸããã
ç§ãã¡ã®ã¢ããã€ã¹ïŒæå·çã«åŒ·åãªç䌌ã©ã³ãã çªå·ãžã§ãã¬ãŒã¿ãŒïŒPRNGïŒã䜿çšããŠããŒãçæããç¹å¥ãªã¢ãžã¥ãŒã«ã䜿çšããŠããããä¿åããŸãã
æå·åã®ããã®å®å šã§ãªãããã£ã³ã°ã¢ã«ãŽãªãºã ã RSAæå·åã¢ã«ãŽãªãºã ãOAEPããã£ã³ã°ãªãã§äœ¿çšãããšãæå·åãããããŒã¿ãè匱ã«ãªããŸãã
RSAã䜿çšããåã«ã¡ãã»ãŒãžãåŠçããã«ã¯ãOAEPã¢ã«ãŽãªãºã ãå¿ èŠã§ããã¡ãã»ãŒãžã¯æåã«OAEPã䜿çšããŠåºå®é·ã«ããã£ã³ã°ãããæ¬¡ã«RSAã䜿çšããŠæå·åãããŸãããã®æå·åã¹ããŒã ã¯RSA-OAEPãšåŒã°ããçŸåšã®æšæºã®äžéšã§ãã
ããã¯ãããã£ã³ã°ãªãã§RSAæå·åãåæåããäŸã§ãã
rsa = javax.crypto.Cipher.getInstance("RSA/NONE/NoPadding");
å®å šãªãªãã·ã§ã³ïŒ
rsa = javax.crypto.Cipher.getInstance("RSA/ECB/OAEPWithMD5AndMGF1Padding");
æå·åããŒã®ãµã€ãºãäžååã§ããçãããŒã䜿çšããå Žåããã®æå·åã¯ãã«ãŒããã©ãŒã¹æ»æã«å¯ŸããŠè匱ã§ãã
æå·åæã¯éæ¢ããŠããããæ°ããæ»æã¢ã«ãŽãªãºã ãçµ¶ããåºçŸããŠãããã³ã³ãã¥ãŒã¿ãŒã¯ãã匷åã«ãªã£ãŠããŸãã以åã¯å®å šã§ãããšèŠãªãããŠããæå·åèšå®ã¯å»æ¢ããã䜿çšãæšå¥šãããªããªããŸããããã®ãããããŒã®é·ãã1024ãããã®RSAã¯ã2010ã2015幎ã«ã¯å®å šã§ãããšã¯èŠãªãããªããªããŸããã
匱ãããã·ã¥ã¢ã«ãŽãªãºã ãåã®æ®µèœã§èª¬æããçç±ã«ãããããã·ã¥é¢æ°MD2ãMD5ãSHA1ã¯å®å šã§ã¯ãããŸããã MD2ããã³MD5颿°ã®è¡çªãèŠã€ããããã«ãå€å€§ãªãªãœãŒã¹ãå¿ èŠãšããŸããã
SHA1ã®å Žåãåãããã·ã¥ãæã€2ã€ã®ç°ãªããã¡ã€ã«ã®äŸããããŸããææ¡ããããããã³ã°ã¢ã«ãŽãªãºã Googleãšã¢ã ã¹ãã«ãã ã®æ°åŠããã³ã³ã³ãã¥ãŒã¿ãµã€ãšã³ã¹ã»ã³ã¿ãŒã®åŸæ¥å¡ã
ãŠãŒã¶ãŒãã¹ã¯ãŒããããã·ã¥ãšããŠä¿åãããŠããããå®å šã§ãªãããã·ã¥æ©èœã䜿çšããŠããå Žåãæ»æè ã¯æ¬¡ã®ã·ããªãªãå®è£ ããããšã§ç°¡åã«ã¢ã¯ã»ã¹ã§ããŸãããã¹ã¯ãŒãã®ããã·ã¥ãç¥ããããã·ã¥ã¢ã«ãŽãªãºã ã®è匱æ§ãå©çšããããšã§ãããã·ã¥ããã¹ã¯ãŒããšåãã§ããæååãèšç®ããããšãã§ããŸããæ»æè ã¯ãèšç®ãããæååã䜿çšããŠèªèšŒããŸãã
ãã¹ã¯ãŒããä¿åããããã®ããã·ã¥é¢æ°ã¯ããã«ãŒããã©ãŒã¹æ»æãå®è£ ã§ããªãããã«ãè¡çªã«åŒ·ããéãããªãããã«ããå¿ èŠããããŸããå®å šãªã¢ã«ãŽãªãºã PBKDF2ãbcryptãscryptã䜿çšããå¿ èŠããããŸãã
ããã€ãã®è峿·±ãæ°åïŒPBKDF2ã䜿çšããŒã®æ€çŽ¢é床ã¯ãIntel Core2ã§ã¯æ¯ç§70åãFPGA Virtex-4FX60ã§ã¯çŽ1,000åã«äœäžããŸãããæ¯èŒãããšãåŸæ¥ã®LANMANãã¹ã¯ãŒãããã·ã¥æ©èœã®æ€çŽ¢é床ã¯ã1ç§ãããçŽæ°åã®ãªãã·ã§ã³ã§ãã
匱ãæå·åã¢ã«ãŽãªãºã ãããã·ã¥ã¢ã«ãŽãªãºã ãšåæ§ã«ãæå·åã¢ã«ãŽãªãºã ã®ã»ãã¥ãªãã£ã¯ã埩å·åã«è²»ããå¿ èŠã®ããæéãšãªãœãŒã¹ã«ãã£ãŠæ±ºãŸããŸãã RC2ãRC4ãDESã¯è匱ãªã¢ã«ãŽãªãºã ãšèŠãªãããŸããåŸè ã¯ãããŒã®é·ããçãïŒ56ãããïŒããããã«ãŒããã©ãŒã¹ã«ãã£ãŠã¯ã©ãã¯ãããå¯èœæ§ããããŸãã
匱ãç䌌ã©ã³ãã æ°ãžã§ãã¬ãŒã¿ãŒïŒPRNGïŒã¯ãäºæž¬å¯èœãªã·ãŒã±ã³ã¹ãçæããŸããããã«ãŒã¯èªèšŒããã€ãã¹ããŠããŠãŒã¶ãŒã®ã»ãã·ã§ã³ãä¹ã£åãããšãã§ããŸãã
PRNGã®æ§è³ªã«ã€ããŠããå°ã詳ããèŠãŠãããŸãããããããã¯ããã©ã¡ãŒã¿ã®åæå€ã«åºã¥ããŠæ°å€ã®æååãçæããŸã
seedã PRNGã«ã¯ãçµ±èšãšæå·ã®2çš®é¡ããããŸãã
çµ±èšçPRNGã¯ãã©ã³ãã ãªã·ãŒã±ã³ã¹ãšçµ±èšçã«é¡äŒŒããäºæž¬å¯èœãªã·ãŒã±ã³ã¹ãçæããŸããã»ãã¥ãªãã£ç®çã§äœ¿çšããããšã¯ã§ããŸããã
éã«ã
seedãšã³ããããŒã®é«ããœãŒã¹ãããã©ã¡ãŒã¿å€ãååŸããå Žåãæå·åPRNGã®åäœçµæãäºæž¬ããããšã¯ã§ããŸãããçŸåšã®æéå€ã«ã¯ãšã³ããããŒãã»ãšãã©ãªããå質ãå®å
šã§ã¯ãããŸããseedã Javaã§ã¯ãã¯ã©ã¹ããã®PRNGjava.util.Randomãšjava.lang.Mathäºæž¬å¯èœãªã·ãŒã±ã³ã¹ãçæããæ
å ±ã»ãã¥ãªãã£ã®ç®çã®ããã«äœ¿çšãã¹ãã§ã¯ãããŸããã
ç䌌乱æ°ãžã§ãã¬ãŒã¿ã®åŒ±ãã·ãŒãã
seedä¿¡é Œã§ããªããœãŒã¹ããã®å€ã䜿çšãããšãäºæž¬å¯èœãªã·ãŒã±ã³ã¹ãçæããããããå®å
šã§ã¯ãããŸããã
å€ãã®æå·åã¢ã«ãŽãªãºã ã®äœæ¥ã¯ãæå·åæã«èæ§ã®ããPRNGã®äœ¿çšã«åºã¥ããŠããŸããäžéšã®ã¢ã«ãŽãªãºã ã¯ãå€ã远å ã®åŒæ°ãšããŠåãåãã
seedãã®ãã©ã¡ãŒã¿ãŒã®å€ããšã«äºæž¬å¯èœãªã·ãŒã±ã³ã¹ãçæã§ããŸãããã®å Žåãã·ã¹ãã ã®ã»ãã¥ãªãã£ã¯ãå€seedãäºæž¬ã§ããªããšããä»®å®ã«åºã¥ããŠããŸãã
å¡©ã¯ãœãŒã¹ã³ãŒãã§äžããããŸã..ãå¡©ã®ç®çãæãåºããŸãããããã«ãŒããã©ãŒã¹æ¹åŒã§ãã¹ã¯ãŒããè§£èªããã«ã¯ãäžè¬çãªãã¹ã¯ãŒãã®ããã·ã¥é¢æ°ã®å€ãå«ãã³ã³ãã€ã«æžã¿ã®ããŒãã«ã䜿çšããŸããSaltã¯ããã®ãããªæ»æãããå°é£ã«ããããã«ããã¹ã¯ãŒããšãšãã«ããã·ã¥é¢æ°ã®å ¥åã«äŸçµŠãããä»»æã®æååã§ãã
ãœã«ãããœãŒã¹ã³ãŒãã«ä¿åãããŠããå Žåããã¹ã¯ãŒããããŒã®å ŽåãšãŸã£ããåãåé¡ãçºçããŸãããœã«ãã®äŸ¡å€ã¯éçºè ãå©çšã§ããäŸµå ¥è ãç°¡åã«å ¥æã§ããŸãããœã«ãã¯ãã¢ããªã±ãŒã·ã§ã³ã®æ¬¡ã®ã¢ããããŒãã§ã®ã¿ãã¢ããªã±ãŒã·ã§ã³ã®æçµããŒãžã§ã³ããåé€ã§ããŸãã
ãã°ã«ããæäœ
ãã°å ã®ããŸããŸãªãšã©ãŒã¯ãæªæã®ããã³ãŒããã¢ããªã±ãŒã·ã§ã³ã«å°å ¥ãããããšã§çºçããŸãããã®ã³ã°ã«é¢é£ããæãäžè¬çãªè匱æ§ã¯ããã°ãã¡ã€ã«ã®æ¹ãããšéæ§é åãã®ã³ã°ã§ãã
ãã°ãã¡ã€ã«ã®æ¹ããã¯ãã¢ããªã±ãŒã·ã§ã³ãä¿¡é Œã§ããªãããŒã¿ãã€ãã³ããã°ïŒãã°ïŒã«æžã蟌ããšãã«çºçããŸããããã«ãŒã¯ãã°ãšã³ããªãåœé ããããæªæã®ããã³ãŒããæ¿å ¥ãããããå¯èœæ§ããããŸãã
éåžžãã¢ããªã±ãŒã·ã§ã³ã¯ããã©ã³ã¶ã¯ã·ã§ã³å±¥æŽããã°ã«æžã蟌ãã§ãããã«åŠçããããã°ããŸãã¯çµ±èšãåéããŸãããã°ã¯æåãŸãã¯èªåã§è§£æã§ããŸãã
ããŒã¿ããçŸç¶ã®ãŸãŸããã°ã«æžã蟌ãŸããå Žåãæ»æè ã¯åœã®ã¬ã³ãŒãããã°ã«æ¿å ¥ãããããã°ããã»ããµã倱æãããŠãã¡ã€ã«æ§é ãç Žå£ããããããã»ããµã®æ¢ç¥ã®è匱æ§ãæªçšããæªæã®ããã³ãŒããæ¿å ¥ãããã§ããŸãã
ãã®äŸã§ã¯ãWebã¢ããªã±ãŒã·ã§ã³ãèŠæ±ãã©ã¡ãŒã¿ãŒããæŽæ°å€ãèªã¿åãããšããŸããå ¥åããå€ãæŽæ°ã«å€æã§ããªãã£ãå Žåãã¢ããªã±ãŒã·ã§ã³ã¯ãã®å€ããšã©ãŒã¡ãã»ãŒãžãšãšãã«ãã°ã«èšé²ããŸãã
String val = request.getParameter("val");
try {
int value = Integer.parseInt(val);
}
catch (NumberFormatException nfe) {
log.info("Failed to parse val = " + val);
}
æ»æè ã¯ãã°ã«ä»»æã®ãšã³ããªã远å ã§ããŸããããšãã°ãè¡
twenty-one%0a%0aINFO:+User+logged+out%3dbadguyã¯æ¬¡ã®ããã«ãã°ã«åæ ãããŸãã
INFO: Failed to parse val=twenty-one
INFO: User logged out=badguy
åæ§ã«ãä»»æã®ã¬ã³ãŒãããã°ã«åã蟌ãããšãã§ããŸãã
å®å šãªãªãã·ã§ã³ïŒäœ¿çš
NumberFormatExceptionïŒïŒ
public static final String NFE = "Failed to parse val. The input is required to be an integer value."
String val = request.getParameter("val");
try {
int value = Integer.parseInt(val);
}
catch (NumberFormatException nfe) {
log.info(NFE);
}
éæ§é åãã®ã³ã°ãã€ãŸãããšã©ãŒã¡ãã»ãŒãžãæšæºã®outãŸãã¯errã¹ããªãŒã ã«åºåããããšã¯å®å šã§ãªãæ¹æ³ã§ãã代ããã«ãæ§é åãã®ã³ã°ã䜿çšããããšããå§ãããŸããåŸè ã䜿çšãããšãã¬ãã«ãã¿ã€ã ã¹ã¿ã³ããæšæºãã©ãŒãããã§ãã°ãçæã§ããŸããããã°ã©ã ãæ§é åããããã®ã³ã°ã¡ã«ããºã ãå®è£ ããŠãããããšã©ãŒã¡ãã»ãŒãžãæšæºã¹ããªãŒã ã«åºåãããå Žåããã°ã«éèŠãªæ å ±ãå«ãŸããŠããªãå¯èœæ§ããããŸãã
éçºã®åææ®µéã§ã®ã¿ããšã©ãŒã¡ãã»ãŒãžãæšæºã¹ããªãŒã ã«åºåããããšãèš±å¯ãããŠããŸãã
å®å
šã§ãªãCookieã®åŠç
ãŠãŒã¶ãŒCookieã®åéã«é¢é£ããè匱æ§ã¯éåžžã«å€æ§ã§ãã
ã¯ãããŒã®å®å šã§ãªãåãæ±ããã¢ããªã±ãŒã·ã§ã³ã®Cookieã«ã¯ãä¿¡é Œã§ããªããœãŒã¹ããã®ããŒã¿ãå«ãŸããŠããŸããããã«ããããã£ãã·ã¥ãã€ãºãã³ã°ãXSSïŒã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒãããã³å¿çå岿»æãçºçããå¯èœæ§ããããŸãã
æªæã®ããã³ãŒãïŒã¯ãã¹ãµã€ãã¹ã¯ãªããïŒãã¢ããªã±ãŒã·ã§ã³ã«æ¿å ¥ãããå Žåãæ»æè ã¯ãŠãŒã¶ãŒã®Cookieã倿Žã§ããŸãã
HTTPå¿çããããŒã«Cookieãèšå®ãããŠãããããCookieã«å«ãŸããŠããããŒã¿ã®ç¢ºèªã«å€±æãããšãåå²å¿çæ»æãçºçããå¯èœæ§ããããŸãã ãHTTPå¿çåå²ãã¯ãããã«ãŒããã®ãããªHTTPèŠæ±ãéä¿¡ããæ»æã§ããããã®å¿çã¯ãïŒæ£ããå¿çã§ã¯ãªãïŒ2ã€ã®HTTPå¿çã§è¢«å®³è ã«ãã£ãŠåãå ¥ããããŸãã
æ»æè
authorããã©ãŒã ã®æååããã©ã¡ãŒã¿ãšããŠæå®ããå ŽåãHacker \r\nHTTP/1.1 200 OK\r\n...çãã¯æ¬¡ã®ããã«2ã€ã«åå²ãããŸãã
HTTP/1.1 200 OK
...
Set-Cookie: author=Hacker
HTTP/1.1 200 OK
...
2çªç®ã®å¿çã®å 容ã¯å®å šã«æ»æè ã®å¶åŸ¡äžã«ããããã£ãã·ã¥ãã€ãºãã³ã°ãXSSãæªæã®ãããªãã€ã¬ã¯ããããã³ãã®ä»ã®æ»æã«ã€ãªãããŸãã
HttpOnlyã®ãªãCookieãã¢ããªã¯ãã©ã°ãªãã§CookieãäœæããŸã
httpOnlyãhttpOnlyå¿çããããŒã«å«ãŸããŠããå Žåhttpãæ»æè
ã¯JavaScriptã³ãŒãã䜿çšããŠCookieãååŸã§ããŸããããŸãããŠãŒã¶ãŒãã¯ãã¹ãµã€ãã¹ã¯ãªããïŒXSSïŒã®è匱æ§ãããããŒãžãéããå Žåããã©ãŠã¶ãŒã¯CookieããµãŒãããŒãã£ã«é瀺ããŸããããã©ã°ãhttpOnlyèšå®ãããŠããªãå Žåãã¹ã¯ãªããã䜿çšããŠCookieïŒéåžžã¯ã»ãã·ã§ã³CookieïŒãçãããšãã§ããŸãã
ãã©ã°ãªãã§CookieãäœæããäŸ
httpOnlyïŒ
Cookie cookie = new Cookie("emailCookie", email);
response.addCookie(cookie);
httpOnlyCookieãäœæãããšã
ã«ãã©ã°ãèšå®ããŸãããã ããæ»æãåé¿ããæ¹æ³ã¯ããã€ãããhttpOnlyãããå
¥åãæ
éã«æ€èšŒããããšã«ã泚æããå¿
èŠãããããšã«æ³šæããŠãã ããã
泚æïŒOWASPã®åœéåé¡ã«ãããšããæ©å¯ããŒã¿æŒæŽ©ãã®è匱æ§ã¯ãWebã¢ããªã±ãŒã·ã§ã³ã®ã»ãã¥ãªãã£è åšã®é倧床ã§3çªç®ã«ã©ã³ã¯ä»ããããŠããŸãã
äžè¬çããããã¡ã€ã³ã®Cookieã cookieãã¡ã€ã³ãäžè¬çãããå ŽåïŒããšãã°
.example.comïŒã1ã€ã®ã¢ããªã±ãŒã·ã§ã³ã®è匱æ§ã«ãããåããã¡ã€ã³å
ã®ä»ã®ã¢ããªã±ãŒã·ã§ã³ãè匱æ§ã«ãããããŸãã
次ã®äŸã§ã¯ãã¢ãã¬ã¹ã«ã€ã³ã¹ããŒã«ãããå®å šãªWebã¢ããªã±ãŒã·ã§ã³
http://secure.example.comãããã¡ã€ã³å€ã䜿çšããŠCookieãèšå®ããŸã.example.comã
Cookie cookie = new Cookie("sessionID", sessionID);
cookie.setDomain(".example.com");
http://insecure.example.comããšãã°ãXSSãå«ãã¢ããªã±ãŒã·ã§ã³ã
ã¢ãã¬ã¹ã«ã€ã³ã¹ããŒã«ãããŠããå Žåããã®ã¢ãã¬ã¹ã«http://insecure.example.comã¢ã¯ã»ã¹ããå®å
šãªã¢ããªã±ãŒã·ã§ã³ã®èš±å¯ããããŠãŒã¶ãŒã®Cookieãå±éºã«ãããããå¯èœæ§ããããŸãã
æ»æè ã¯Cookieãã€ãºãã³ã°æ»æãå®è¡ããããšãã§ã
http://insecure.example.comãŸãhttp://secure.example.comãå
±éãã¡ã€ã³ãäœæãããCookieã¯CookieãäžæžãããŸãã
å®å šãªãªãã·ã§ã³ïŒ
Cookie cookie = new Cookie("sessionID", sessionID);
cookie.setDomain("secure.example.com");
äžè¬çãªãã©ã¡ãŒã¿ãå€ãããCookie
pathãCookieã®ãã¹ãäžæ£ç¢ºãªå ŽåïŒããšãã°ã/ïŒãå
±æãã¡ã€ã³ã®å Žåãšåãåé¡ãçºçããŸããããã¢ããªã±ãŒã·ã§ã³ã®è匱æ§ã«ãããåããã¡ã€ã³å
ã®ä»ã®ã¢ããªã±ãŒã·ã§ã³ãå
¬éãããŸãã
次ã®äŸã§ã¯ãURLã«ã€ã³ã¹ããŒã«ãããã¢ããªã±ãŒã·ã§ã³
http://pages.example.com/forumãããã¹/ã§Cookieãèšå®ããŸãã
Cookie cookie = new Cookie("sessionID", sessionID);
cookie.setPath("/");
次ã«ããã®ã¢ãã¬ã¹ã«ã€ã³ã¹ããŒã«ãããæªæã®ããã¢ããªã±ãŒã·ã§ã³
http://pages.example.com/evilããŠãŒã¶ãŒã®Cookieãå±éºã«ãããå¯èœæ§ããããŸããæ»æè
ã¯Cookieãã€ãºãã³ã°æ»æãå®è¡ããããšãã§ã/evilãŸã/forumãå
±æãã¹ãäœæãããCookieã¯CookieãäžæžãããŸãã
å®å šãªãªãã·ã§ã³ïŒ
Cookie cookie = new Cookie("sessionID", sessionID);
cookie.setPath("/forum");
Cookieã¯SSLçµç±ã§ã¯ãããŸãããã¢ããªã±ãŒã·ã§ã³ã¯ããã©ã°ã
secureçããèšå®ããã«CookieãäœæããŸãtrueããããã®Cookieã¯ãæå·åããã«HTTPçµç±ã§éä¿¡ã§ããŸãããå®å
šã§ãªãHTTPãããã³ã«ã®äœ¿çšããšããè匱æ§ã¯ããã«æãåºãããŸãã
次ã®äŸã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã¯ãã©ã°ãªãã§CookieãäœæããŸã
secureã
Cookie cookie = new Cookie("emailCookie", email);
response.addCookie(cookie);
ã¢ããªã±ãŒã·ã§ã³ãHTTPSãšHTTPã®äž¡æ¹ã䜿çšããŠããå Žåãã»ãã¥ã¢ãã©ã°ããªãå ŽåãHTTPSèŠæ±ã®äžéšãšããŠäœæãããCookieã¯ãåŸç¶ã®HTTPèŠæ±ã§æå·åãããã«éä¿¡ãããã¢ããªã±ãŒã·ã§ã³ã®äŸµå®³ã«ã€ãªããå¯èœæ§ããããŸãã Cookieã«è²ŽéãªããŒã¿ãç¹ã«ã»ãã·ã§ã³IDãå«ãŸããŠããå Žåãããã¯ç¹ã«å±éºã§ãã
å®å šãªãªãã·ã§ã³ïŒ
Cookie cookie = new Cookie("emailCookie", email);
cookie.setSecure(true);
response.addCookie(cookie);
æå¹æ§ãç¡å¶éã®Cookieã貎éãªCookieãé·æéä¿åãããšãæ»æè ããããã«ã¢ã¯ã»ã¹ããå¯èœæ§ããããŸãã
ããã©ã«ãã§ã¯ãéæ°žç¶ïŒã»ãã·ã§ã³ïŒCookieã䜿çšãããŸããããã¯ãã£ã¹ã¯ã«ä¿åãããããã©ãŠã¶ãŒãéããåŸã«åé€ãããŸãããã ããWebã¢ããªã±ãŒã·ã§ã³ã®éçºè ã¯ãCookieãä¿æããæéãæå®ã§ããŸãããã®å ŽåãCookieã¯ãã£ã¹ã¯ã«æžã蟌ãŸãããã©ãŠã¶ã®åèµ·åãšã³ã³ãã¥ãŒã¿ã®åèµ·åã®éã«ä¿åãããŸããããã«ãããæ»æè ã¯æ»æèšç»ãç«ãŠãã®ã«é·ãæéãè²»ããããšãã§ããŸãã
éçºè ã®æšå¥šäºé ïŒã¢ããªãé·æéæå¹ãªCookieãäœæããªãããã«ããŠãã ããã
Cookie cookie = new Cookie("longCookie", cookie);
cookie.setMaxAge(5*365*24*3600); // 5 !
OWASP ã¬ã€ãã©ã€ã³ã«åŸã£ãŠåŠ¥åœãªæå€§æéå¶éãæäŸããŸãã
æ å ±æŒãã
ãããããã¢ããªã±ãŒã·ã§ã³ãŠãŒã¶ãŒã«ãšã£ãŠæãææãªã¿ã€ãã®è匱æ§ã§ãã
ãšã©ãŒããŒãžããã®å€éšæ å ±æŒãããã¢ããªã±ãŒã·ã§ã³ã¯ãã·ã¹ãã æ§æã«é¢ããæ å ±ãå«ãããšãã§ããæšæºã®ãšã©ãŒããŒãžã䜿çšããŸãã
ãšã©ãŒã¡ãã»ãŒãžãšãããã°æ å ±ã¯ããã°ã«æžã蟌ãŸããããã³ã³ãœãŒã«ã«è¡šç€ºããããããŠãŒã¶ãŒã«éä¿¡ãããŸãããšã©ãŒã¡ãã»ãŒãžãããæ»æè ã¯ã·ã¹ãã ã®è匱æ§ã«ã€ããŠç¥ãããšãã§ããŸããããã«ãããæ»æè ã®çæŽ»ãæ¥œã«ãªããŸããããšãã°ãããŒã¿ããŒã¹ãšã©ãŒã¯ãSQLã€ã³ãžã§ã¯ã·ã§ã³ã«å¯Ÿããäžå®å®ãã瀺ããŠããå¯èœæ§ããããŸãããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ããŒãžã§ã³ãã¢ããªã±ãŒã·ã§ã³ãµãŒããŒãããã³ã·ã¹ãã æ§æã«é¢ããæ å ±ã«ãããããã«ãŒãã¢ããªã±ãŒã·ã§ã³ãžã®æ»æãèšç»ãããããªããŸãã
貎éãªæ å ±ã®å€éšæŒæŽ©..ããã®å Žåãã¢ããªã±ãŒã·ã§ã³ã«é¢ããæè¡æ å ±ããããã¯ãŒã¯çµç±ã§å¥ã®ã³ã³ãã¥ãŒã¿ãŒã«è»¢éãããããšã«ããæŒæŽ©ã«ã€ããŠè©±ããŸããäžè¬ã«ãå€éšãªãŒã¯ã¯å éšãªãŒã¯ãããå±éºã§ãã
貎éãªæ å ±ã®å éšæŒæŽ©ãæäœã¡ã«ããºã ã¯åã®2çš®é¡ã®ãªãŒã¯ãšäŒŒãŠããŸããããã®å Žåãã·ã¹ãã ã«é¢ããæ å ±ããã°ã«æžã蟌ãŸãããããŠãŒã¶ãŒã®ç»é¢ã«è¡šç€ºãããŸãã
æ©å¯ããŒã¿ã®æŒæŽ©ããŠãŒã¶ãŒã®è²Žéãªå人ããŒã¿ã¯ããŠãŒã¶ãŒèªèº«ãããŸããŸãªããŒã¿ããŒã¹ããµãŒãããŒãã£ã®ã¹ãã¬ãŒãžãªã©ãããŸããŸãªãœãŒã¹ããã¢ããªã±ãŒã·ã§ã³ã«å ¥åãããŸãããã®ããŒã¿ãæ©å¯ãšããŠããŒã¯ãããŠããªãå Žåããããèªäœã§ã¯ãªãç¹å®ã®ã³ã³ããã¹ãã§ã®ã¿äŸ¡å€ãããããšã倿ããå ŽåããããŸãã
ããã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã»ãã¥ãªãã£ãšå人ããŒã¿ã®ãã©ã€ãã·ãŒãäºãã«ççŸããå Žåã«åœãŠã¯ãŸããŸããã»ãã¥ãªãã£äžã®çç±ãããæªæã®ããã¢ã¯ãã£ããã£ãæ€åºããããã«ãã·ã¹ãã å ã®ã¢ã¯ãã£ããã£ã«é¢ãã詳现æ å ±ãèšé²ããããšããå§ãããŸããéã«ãããŒã¿ã®ãã©ã€ãã·ãŒã®èгç¹ãããæ©å¯æ å ±ããã°ã«èšé²ããå Žåããã®æŒæŽ©ã®ãªã¹ã¯ã¯å€§ãããªããŸããäžè¬ã«ãã¢ããªã±ãŒã·ã§ã³ãŠãŒã¶ãŒã®å人ããŒã¿ã®æ©å¯æ§ã確ä¿ããããšãããåªå ãããŸãã
ããšãã
ãã®èšäºã§æ€èšããè匱æ§ã®çš®é¡ã¯ãããŸããŸãªããã°ã©ãã³ã°èšèªã§èšè¿°ãããã¢ããªã±ãŒã·ã§ã³ã®ãæ®éçãªãã®ã£ããã®ã»ãšãã©ãã«ããŒããŠããŸãããã ããäžéšã®èšèªã«ã¯åºæã®è匱æ§ããããŸããããããããã¯ãã§ã«å¥ã®èšäºã®ãããã¯ã§ããæåŸã«ãã¢ããªã±ãŒã·ã§ã³ãäœæãããšãã¯ãäžèšã®æšå¥šäºé ã«åŸãããšãå¿ããªãã§ãã ãããããã¥ã¡ã³ããæ³šææ·±ãèªã¿ãå°çšã®ãœãããŠã§ã¢ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã®è匱æ§ã確èªããŠãã ããã
èè ïŒElizaveta Kharlamovaãåæéšéé·ãSolar appScreener