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Êý¾Ý°üµÄÊýÁ¿Æ¾¾ÝÉ豸²Ù×÷ϵͳºÍÅäÖõIJîÒì¶ø²îÒ죬ÀûÓÃijƷÅÆÖÇÄܵçÊÓ¶ÔÊܺ¦É豸½øÐÐ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¼Æ»®ºËÐijÉÔ±£¬¡°ºÚȸ¹¥»÷¡±¿´·¨Ê×ÍÆÕß¡£½ØֹĿǰ£¬ADLabÒÑͨ¹ýCVEÀÛ¼ÆÐû²¼Äþ¾²Â©¶´1000Óà¸ö£¬Í¨¹ý CNVD/CNNVDÀÛ¼ÆÐû²¼Äþ¾²Â©¶´800Óà¸ö£¬Á¬Ðø±£³Ö¹ú¼ÊÍøÂçÄþ¾²ÁìÓòÒ»Á÷Ë®×¼¡£ÊµÑéÊÒÑо¿Æ«Ïòº¸Ç²Ù×÷ϵͳÓëÓ¦ÓÃϵͳÄþ¾²Ñо¿¡¢Òƶ¯ÖÇÄÜÖÕ¶ËÄþ¾²Ñо¿¡¢ÎïÁªÍøÖÇÄÜÉ豸Äþ¾²Ñо¿¡¢WebÄþ¾²Ñо¿¡¢¹¤¿ØϵͳÄþ¾²Ñо¿¡¢ÔÆÄþ¾²Ñо¿¡£Ñо¿½á¹ûÓ¦ÓÃÓÚ²úÎïºËÐļ¼ÊõÑо¿¡¢¹ú¼ÒÖصã¿Æ¼¼ÏîÄ¿¹¥¹Ø¡¢×¨ÒµÄþ¾²·þÎñµÈ¡£