UPnPºÍ̸CallStranger·ì϶ӰÏìÊý°ÙÍòÉ豸

°ä²¼¹¦·ò 2020-06-30

Ò»¡¢¡¢·ì϶¸ÅÊö


2020Äê6ÔÂ8ÈÕ £¬°²È«×êÑÐÔ±Yunus ?adirci°ä²¼UPnP£¨Í¨Óü´²å¼´Ó㩺Í̸·ì϶²¼¸æ£¨CVE-2020-12695£© £¬²¢½«Æä¶¨ÃûΪCallStranger·ì϶¡£¡£¸Ã·ì϶ÔÊÐí¹¥»÷ÕßÈÆ¹ýÄÚÍøµÄÊý¾Ý·Àй¶ϵͳ£¨DLP£©½øÐÐÊý¾ÝÌÓÒÝ £¬¿Éµ¼ÖÂÃô¸ÐÊý¾Ýй¶ £¬²¢ÇҿɶÔÉ豸µØµãÄÚ²¿ÍøÂç½øÐÐɨÃè £¬ÉõÖÁÄܽٳÖÉ豸½øÐÐÉ¢²¼Ê½»Ø¾ø·þÎñ£¨DDOS£©¹¥»÷¡£¡£OG¶«·½ÌüADLabÒÔij¿îÖÇÄܵçÊÓ×÷Ϊ²âÊÔÖ¸±ê £¬¶ÔCallStranger·ì϶µÄΣº¦ÐÔ½øÐÐÁËÑÝʾ·ÖÎö¡£¡£


¶þ¡¢¡¢·ì϶ӰÏì


Óë֮ǰµÄUPnP·ì϶·ÖÆç £¬CallStranger·ì϶´æÔÚÓÚºÍ̸Éè¼ÆÖÐ £¬Òò¶ø¸Ã·ì϶ӰÏìÏÕЩËùÓÐÖ§³ÖUPnPµÄÉ豸 £¬Ô̺¬Windows 10ËùÓа汾¡¢¡¢Â·ÓÉÆ÷¡¢¡¢½Ó¼û½ÓÈëµã¡¢¡¢´òÓ¡»ú¡¢¡¢ÓÎÏ·»ú¡¢¡¢ÃÅÁå¶Ô½²»ú¡¢¡¢Ã½ÌåÀûÓ÷¨Ê½ºÍÉ豸¡¢¡¢ÉãÏñÍ·¡¢¡¢µçÊÓ»úµÈ¡£¡£Æ¾¾ÝSHODANºÍZoomEyeµÄËÑË÷ÁË¾Ö £¬ÖÁÉÙº±¼ûÒÔ°ÙÍò¼ÆµÄÔÚÏßÉ豸Êܵ½Ó°Ïì¡£¡£


OG¶«·½Ìü¡¤(Öйú´ó½)


Èý¡¢¡¢·ì϶·ÖÎö


UPnPÈ«³ÆÎªUniversal Plug andPlay £¬¼´Í¨Óü´²å¼´Óà £¬UPnPÔÊÐí¸÷ÀàÍøÂçÉ豸ÔÚûÓÐÈκÎÌØÊâÉèÖûòÅäÖõÄÇé¿öϽøÐÐͨѶ £¬Ê¹É豸±Ë´Ë¿É×Ô¶¯ÏνӺÍЭͬ¹¤×÷¡£¡£ÀýÈçеĴòÓ¡»ú²åÉϵ粢ÏνÓÍøÂçÖ®ºó £¬¾ÖÓòÍøÄÚµÄÍÆËã»ú¾ÍÖªÏþÁË´òÓ¡»úµÄÐͺŵÈÐÅÏ¢ £¬·½±ã½øÐÐÇý¶¯×°Öᣡ£


ÔÚUPnPºÍ̸¹æ·¶ÖÐÓÐÒ»¸ö¼«¶ÈÖØÒªµÄÖ°ÄÜÄ£¿é £¬½Ð×öÊÂÎñ(Eventing)¡£¡£ÔÚUPnP·þÎñ½øÐеŦ·òÄÚ £¬Ö»ÓÐÉ豸ÓÃÓÚUPnP·þÎñµÄ±äÁ¿Öµ²úÉú±ä¶¯»òÕßģʽ²úÉúÁËŤת £¬¾Í»á²úÉúÒ»¸öÊÂÎñ £¬ËæÖ®ÏòÕû¸öÍøÂç½øÐй㲥¡£¡£»£»òÕßÓû§Äܹ»ÊÂÏÈÏòUPnPÉ豸·¢ËͶ©ÔÄÒªÇó £¬±£ÕÏUPnPÉ豸ʵʱµØ½«ÊÂÎñ´«Ë͹ýÀ´¡£¡£


UPnP DeviceArchitecture 2.0[1]ÖйØÓÚUPnPµÄNTÓëCALLBACK¶©ÔÄÄ£¿éÓÐÈçÏÂÌåʽ£º


OG¶«·½Ìü¡¤(Öйú´ó½)


publisher pathͨ³£Îª¶©ÔĵķþÎñ £¬ÒÔGENAÌåʽ´æ·ÅÔÚÉ豸µÄij¸öXMLÎļþÖÐ £¬ÀàËÆÏÂͼ¡£¡£


OG¶«·½Ìü¡¤(Öйú´ó½)


CALLBACKµÄֵͨ³£Îª»Øµ÷µØÖ·µÄURL¡£¡£NTÈ¡upnp:event°µÊ¾¶©ÔÄÊÂÎñ¡£¡£


UPnPºÍ̸¹æ·¶ÎĵµÖÐÌáµ½£ºCALLBACKÊDZØÌîÇøÓò £¬ËùÌîÐÅϢΪ·¢ËÍÊÂÎñÐÅÏ¢µÄURL¡£¡£Í¨³£Çé¿öÏÂΪUPnP¹©¸øÉÌÖ¸¶¨¡£¡£ÈôÊÇÆäÖнç˵Á˲»Ö¹Ò»¸öURL £¬É豸»á°´°¤´Î³¢ÊÔÏÎ½Ó £¬Ö±µ½ÓÐÒ»¸öÏνӳɹ¦¡£¡£Ã¿¸öURLͨ³£ÎªHTTPºÍ̸(¼´Ç°×ºÎª¡±http://¡±)¡£¡£É豸²»µÃÒÔÈκη½Ê½½Ø¶ÏÕâЩURL¡£¡£ÈôÊÇÄÚ´æ²»¼°ÒÔ´æ´¢ËùÓеÄCALLBACK URL £¬É豸»á»Ø¾ø¶©ÔÄ¡£¡£


Õû¸ö¶©ÔÄÁ÷³Ì»òÐíÄܹ»¼ò»¯ÈçÏÂͼ¡£¡£


OG¶«·½Ìü¡¤(Öйú´ó½)

ºÜÏÔÈ» £¬¸ÃºÍ̸²¢Ã»ÓжÔCALLBACK´«ÈëµÄURL½øÐÐÏ޶Ⱥ͹淶 £¬Ò²¾ÍÊÇ˵ £¬CALLBACKURLÊǹ¥»÷Õ߿ɿصÄ¡£¡£


ÏÂͼΪIntel UPnP SDKÖв鳭CALLBACK URLµÄÓйشúÂë £¬create_url_listº¯Êý½ö½ö²é³­ÁËURLÊÇ·ñºÏ·¨ £¬²¢Ã»ÓÐÈ·¶¨ÆäÊÇ·ñºÏÀí¡£¡£


OG¶«·½Ìü¡¤(Öйú´ó½)


ËÄ¡¢¡¢·ì϶Σº¦


CallStranger·ì϶ËùÔì³ÉµÄΣº¦Äܹ»·ÖÈý¸ö·½Ã棺DDoS¹¥»÷¡¢¡¢Êý¾ÝÌÓÒݺͶ˿ÚɨÃè¡£¡£ÆäÖÐÔì³ÉµÄDDoS¹¥»÷Äܹ»·ÖÁ½ÖÖ £¬SYNºéË®¹¥»÷ºÍTCP·´Éä·Å´ó¹¥»÷ £¬ÈçÏÂͼËùʾ¡£¡£


OG¶«·½Ìü¡¤(Öйú´ó½)


4.1 SYNºéË®¹¥»÷


Èç¹ûÎÒÃÇÒѾ­Í¨¹ýһЩ²½Öè(ÈçÔÚ¾ÖÓòÍø¹ã²¥µÈ)»ñµÃÁËijЩÉ豸UPnP·þÎñµÄeventSubURL £¬ÏÂÃæ¾ÍÄܹ»ÏòUPnPÉ豸ÌáÒéÒ»Ïî¶©ÔÄ·þÎñ £¬ÌåʽÈçÏÂ:


SUBSCRIBE eventSubURLHTTP/1.1

NT:upnp:enent

Callback: deliveryURL

Host: upnpÉ豸:upnp·þÎñ¶Ë¿Ú


ÈçǰÎĺÍ̸¹æ·¶ÖÐÌáµ½µÄ £¬ÈôCALLBACL ValueÖнç˵Á˲»Ö¹Ò»¸öURL £¬Ôò»á°´°¤´Î³¢ÊÔTCPÏÎ½Ó £¬Ö±µ½ÓÐÒ»¸öÏνӳɹ¦¡£¡£ÄÇô¹¥»÷Õß¿ÉÔÚCALLBACK ValueÖо«ÐÄ»ú¹Ø¶à¸öURL £¬Ê¹Ã¿Ò»¸ö¶¼ÎÞ·¨Ïνӳɹ¦ £¬ÕâÑùUPnPÉ豸¾Í»áÓöà¸öSYN°ü˳´Î¶Ôÿ¸öURL³¢ÊÔTCPÎÕÊÖ¡£¡£Èç¹û¹¥»÷ÕßÄܹ»²Ù¿ØºÃ¶à¸öÉ豸 £¬¾Í»áµ¼ÖÂÊܺ¦É豸Ôâ·êDDoS¹¥»÷¡£¡£


SYNÊý¾Ý°üµÄÊýÁ¿Æ¾¾ÝÉ豸²Ù×÷ϵͳºÍÅäÖÃµÄ·ÖÆç¶ø·ÖÆç £¬ÀûÓÃÄ³Æ·ÅÆÖÇÄܵçÊÓ¶ÔÊܺ¦É豸½øÐÐSYNºéË®¹¥»÷²âÊÔ £¬²âÊÔÁ˾ÖÈçÏÂͼËùʾ¡£¡£


OG¶«·½Ìü¡¤(Öйú´ó½)


¸ÃÖÇÄܵçÊÓÿÊÕµ½Ò»¸öCALLBACK Value¾Í»á·¢ËÍ8¸öSYNÊý¾Ý°ü³¢ÊÔÏνÓÊܺ¦É豸¡£¡£ÈôÎÒÃÇÿ¸öCALLBACKµÄURLֵΪ25×Ö½Ú £¬ÄÇô´ø¿í·Å´óÒò×Ó±ãÄܹ»´ïµ½8*60/25=19.2¡£¡£ÓÉÓÚCALLBACK ValueµÄ¸öÊýÊÇûÓÐÏÞ¶ÈµÄ £¬ËùÒÔÀíÂÛÉÏÊÇÄܹ»ÎÞÏÞ·Å´óµÄ¡£¡£


4.2 TCP·´Éä·Å´ó¹¥»÷


Windows Media PlayerÔÚ²¥·ÅÊÓÆµÊ±Ò²ÓÐÏàÓ¦µÄUPnP·þÎñ £¬ÎÒÃÇ»ñÈ¡µ½µÄUPnP·þÎñÁбíÈçÏ£º


OG¶«·½Ìü¡¤(Öйú´ó½)


ÎÒÃǰÎÈ¡ÆäÖÐÒ»Ïî·þÎñÀ´²âÊÔһϡ£¡£¹¥»÷ÕßÖ»±ØÒª·¢ËÍ210×Ö½Ú¶©Ôİü £¬ÈçÏÂͼ¡£¡£


OG¶«·½Ìü¡¤(Öйú´ó½)


Êܺ¦É豸֮ºó¾Í»áÊÕµ½½ü700×Ö½ÚµÄÊý¾Ý°ü £¬·Å´óÒò×Ó´ïÈý±¶¶à¡£¡£Æä·Å´ó³ÉЧͨ³£ÓëUPnPÉ豸µÄ²Ù×÷ϵͳºÍ³§ÉÌÅäÖÃÓйØ¡£¡£


4.3 Êý¾ÝÌÓÒÝ


OG¶«·½Ìü¡¤(Öйú´ó½)


ͨ³£Çé¿öÏ £¬ÆóÒµÄÚ²¿ÍøÂç¶¼ÓÐ·ÖÆçµÄ°²È«µÈ¼¶»®·Ö¡£¡£µ±¹¥»÷ÕßÉøÈëµ½ÆóÒµÄÚÍøÊ± £¬ÈôÄÚÍø¿ªÆôÊý¾Ýй¶·À»¤ÏµÍ³ £¬ÎÞ·¨½«»ñµÃµÄÃô¸ÐÊý¾Ý´«Êä³öÈ¥ £¬´ËʱUPnPÉ豸»áÊÇÒ»¸öºÜºÃµÄÌø°å¡£¡£


ÔÚRFC7230µÄ3.1.1½Ú[2]ÖÐ £¬²¢Ã»ÓжÔRequest LineµÄ³¤¶È×öÈκÎÏÞ¶È £¬ÕâʹµÃ¹¥»÷ÕßÄܹ»½«Êý¾Ýͨ¹ýCallbackµÄURLÖµ´«Êä³öÈ¥¡£¡£ÈçÏÂͼ £¬Ä³Æ·ÅÆÖÇÄܵçÊÓÒ»´ÎÒªÇó¾Í´«ÊäÁË2500KBµÄÊý¾Ý¡£¡£


OG¶«·½Ìü¡¤(Öйú´ó½)


4.4 ¶Ë¿ÚɨÃè


OG¶«·½Ìü¡¤(Öйú´ó½)


ÈçǰÎÄÌáµ½µÄ £¬ÈôCALLBACK½ç˵Á˲»Ö¹Ò»¸öURL £¬Ôò»á°´°¤´Î³¢ÊÔTCPÏÎ½Ó £¬Ö±µ½ÓÐÒ»¸ö³É¹¦ £¬ÄÇôÕâ¸ö¹æ¶¨ÏÔȻҲÄܹ»ÓÃÓÚ¶Ë¿ÚɨÃè £¬ÈçÏÂͼËùʾ £¬Èç¹û¹¥»÷Õß±ØÒªÉ¨ÃèIPΪ192.168.1.13µÄ555¶Ë¿ÚÊÇ·ñ¿ªÆô £¬ÄÇô¹¥»÷ÕßÖ»±ØÒª½«Ä³¸öÄܹ»¼à¿ØµÄURL¸éÖÃÔÚºó¼´¿ÉÈ·ÈÏ £¬Èô¹¥»÷ÕßÊÕµ½ÏνÓÒªÇó £¬Ôò¶Ë¿Ú먦Æô £¬·´Ö® £¬Ôò¿ªÆô¡£¡£


OG¶«·½Ìü¡¤(Öйú´ó½)


Îå¡¢¡¢·ì϶»º½â¼°ÐÞ¸´


¿ÉѡȡÈçÏ´ëÊ©½øÐзì϶»º½â£º

²é³­¿ÉÒÉÉ豸 £¬ÈôÊÇûÓбØÒª £¬Ôò¹Ø±ÕUPnP¶Ë¿Ú¡£¡£

ÔÚÍø¹ØµÈÉ豸ÖÐÉó¼ÆNOTIFYHTTPÊý¾Ý°ü¡£¡£

ÔÚ×îиüеÄUPnPºÍ̸¹æ·¶[1]4.1.1½ÚÖÐ £¬Äܹ»¿´³ö¿ª·¢ÕßÏÞ¶ÈÁ˶©ÔÄÊÂÎñµÄÔ´IPºÍÖ¸±êIP¶¼±ØÐëÔÚÄÚÍøÖÐ £¬Õâ´Ó¿Ï¶¨Ë®Æ½ÉÏÐÞ¸´Á˸÷ì϶¡£¡£


²Î¿¼Á´½Ó£º


[1]https://openconnectivity.org/upnp-specs/UPnP-arch-DeviceArchitecture-v2.0-20200417.pdf

[2]https://tools.ietf.org/html/rfc7230#section-3.1.1

[3]https://delaat.net/rp/2008-2009/p26/report.pdf

[4]https://kb.cert.org/vuls/id/339275

[5]https://zh-cn.tenable.com/blog/cve-2020-12695-callstranger-vulnerability-in-universal-plug-and-play-upnp-puts-billions-of

[6]https://www.youtube.com/watch?v=hJSxDHPyTBE




OG¶«·½Ìü»ý¼«·ÀÓù³¢ÊÔÊÒ£¨ADLab£©


ADLab³ÉÁ¢ÓÚ1999Äê £¬ÊÇÖйú°²È«ÐÐÒµ×îÔç³ÉÁ¢µÄ¹¥·À¼¼Êõ×êÑг¢ÊÔÊÒÖ®Ò» £¬Î¢ÈíMAPP´òËãÖ÷Ìâ³ÉÔ± £¬¡°ºÚȸ¹¥»÷¡±¸ÅÄîÊ×ÍÆÕß¡£¡£½ØÖ¹Ä¿Ç° £¬ADLabÒÑͨ¹ýCVEÀۼư䲼°²È«·ì϶1000Óà¸ö £¬Í¨¹ý CNVD/CNNVDÀۼư䲼°²È«·ì϶800Óà¸ö £¬³ÖÐøÎ¬³Ö¹ú¼ÊÍøÂ簲ȫÁìÓòÒ»Á÷Ë®×¼¡£¡£³¢ÊÔÊÒ×êÑз½Ïòº­¸Ç²Ù×÷ϵͳÓëÀûÓÃϵͳ°²È«×êÑС¢¡¢Òƶ¯ÖÇÄÜÖն˰²È«×êÑС¢¡¢ÎïÁªÍøÖÇÄÜÉ豸°²È«×êÑС¢¡¢Web°²È«×êÑС¢¡¢¹¤¿ØÏµÍ³°²È«×êÑС¢¡¢Ôư²È«×êÑС£¡£×êÑгɾÍÀûÓÃÓÚ²úÆ·Ö÷Ìâ¼¼Êõ×êÑС¢¡¢¹ú¶ÈÖØµã¿Æ¼¼ÏîÄ¿¹¥¹Ø¡¢¡¢×¨Òµ°²È«·þÎñµÈ¡£¡£



OG¶«·½Ìü¡¤(Öйú´ó½)