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

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

Ò»¡¢·ì϶¸ÅÊö


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


¶þ¡¢·ì϶ӰÏì


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


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


Èý¡¢·ì϶·ÖÎö


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


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


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


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


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


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


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


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


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


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾

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


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


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


ËÄ¡¢·ì϶·çÏÕ


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


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


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ºéË®¹¥»÷²âÊÔ £¬²âÊÔÁ˾ÖÈçÏÂͼËùʾ¡£


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


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


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


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


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


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


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


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


4.3 Êý¾ÝÌÓÒÝ


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


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


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


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


4.4 ¶Ë¿ÚɨÃè


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


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


±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾


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


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

²é³­¿ÉÒÉÉ豸 £¬ÈôÊÇûÓбØÒª £¬Ôò¹Ø¹Ø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




±¦ÔËÀ³¹Ù·½ÍøÕ¾»ý¼«·ÀÓù³¢ÊÔÊÒ£¨ADLab£©


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



±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾