Windows PrintDemonÌáȨ·ì϶·ÖÎö
°ä²¼¹¦·ò 2020-05-211.·ì϶¸ÅÊö
΢ÈíÔÚ5ÔÂ12Èյݲȫ¸üÐÂÖй«¿ªÁËÒ»¸öWindows±¾µØÌáÈ¡·ì϶£¨CVE-2020-1048£©£¬£¬¸Ã·ì϶µÄÃèÊöΪ£º£º
¡°Windows Print Spooler·þÎñ²»Ç¡±¾µØÔÊÐíËÁÒâµÄÎļþϵͳдÈ룬£¬´æÔÚÌØÈ¨ÌáÉý·ì϶¡£¹¥»÷ÕßÀûÓô˷ì϶¿ÉÄÜÓÃÏµÍ³ÌØÈ¨ÔËÐÐËÁÒâ´úÂ룬£¬´Ó¶øÊµÏÖ£º£º·¨Ê½µÄ×°Öᢡ¢¡¢²é¿´¡¢¡¢¡¢¸ü¸Ä»òÊý¾Ýɾ³ý£¬£¬ÒÔ¼°´´½¨ÓµÓÐÆëȫȨÏÞµÄÕÊ»§¡£ÒªÀûÓô˷ì϶£¬£¬¹¥»÷Õß±ØÐëµÇ¼µ½ÊÜÓ°ÏìµÄϵͳ²¢ÔËÐÐÌØ¶¨¾ç±¾»òÀûÓ÷¨Ê½¡±¡£
¸Ã·ì϶Óɰ²È«×êÑÐÈËÔ±Alex IonescuºÍYarden Shafir·¢ÏÖ£¬£¬²¢±»¶¨ÃûΪPrintDemon¡£Print SpoolerÊÇϵͳ×Ô´øµÄ´òÓ¡ºó¶Ü´¦Ö÷þÎñ£¬£¬ÖÎÀíËùÓб¾µØºÍÍøÂç´òÓ¡¶ÓÁУ¬£¬½ÚÖÆ×ÅËùÓдòÓ¡¹¤×÷¡£Print SpoolerÔÚWindowsϵͳÖÐÒÑ´æÔÚ¶àÄ꣬£¬´Ó΢Èí°ä²¼µÄ²¹¶¡Ò³Ãæ¿ÉÖª¸Ã·ì϶ӰÏìWindows7ÖÁWindows10 1909µÄÏÕЩËùÓа汾¡£
2.·ì϶ÑéÖ¤
OG¶«·½ÌüADLab°²È«×êÑÐÔ±¶Ô¸Ã·ì϶½øÐÐÁË·ÖÎöºÍÑéÖ¤£¬£¬ÊµÏÖÁËÔÚµÍȨÏ޵ij߶ÈÓû§ÏÂдÈëϵͳĿ¼£¬£¬²âÊÔ²Ù×÷ϵͳΪWindows 10 x64ÆóÒµ°æ2016£¨³Ö¾Ã·þÎñ°æ£©£¬£¬²âÊÔ²½ÖèÈçÏ£º£º
£¨1£©ÔÚ²âÊÔϵͳÖд´½¨Ò»¸ö³ß¶ÈÓû§test£¬£¬²¢Ê¹Óøó߶ÈÓû§µÇ¼ϵͳ¡£²é¿´ÆäËùÊôÓû§×飬£¬È·ÈÏÆä²»ÊÇÖÎÀíÔ±Óû§×é¡£
£¨2£©ÔÚtestÕË»§Ï£¬£¬³¢ÊÔÔÚϵͳĿ¼Ï´´½¨Îļþ¼Ð»òÕßдÈëÎļþ£¬£¬¾ùʧ°Ü¡£
£¨3£©¶øºóÖ´ÐÐÈçÏÂPowerShellºÅÁ£¬ÒÔÆÚÔÚϵͳĿ¼Ï´´½¨Îļþmyport.txt¡£
£¨4£©ÖØÆô²âÊÔϵͳ²¢µÇ¼testÓû§£¬£¬Äܹ»¿´µ½ÔÚϵͳĿ¼ÏÂÒÑÌìÉúÁËmyport.txtÎļþ£¬£¬²é¿´ÄÚÈݵÄÈ·Ô̺¬Á˲âÊÔ×Ö·û´®¡£¸ÃÁ˾ÖÅú×¢£º£ºµÍȨÏÞµÄ testÓû§Í»ÆÆÁËÎÞ·¨Åú¸Äϵͳ×ÊÔ´µÄ°²È«ÏÞ¶È¡£
3.·ì϶µÀÀí
¸Ã·ìÏ¶Éæ¼°µ½Windows´òÓ¡»úµÄ¹¤×÷»úÖÆ£¬£¬Îª¸üºÃµÄÀí½â·ì϶³ÉÒò£¬£¬Ê×Ïȵ¥Ò»½éÉÜ´òÓ¡»ú»ù´¡ÖªÊ¶£¬£¬¶øºóÔÙ·ÖÎö·ì϶³ÉÒò¡£
´òÓ¡»ú¹¤×÷»úÖÆ
WindowsϵͳµÄ´òÓ¡»úÓÐÁ½¸öÖ÷Ìâ×é¼þ£º£º´òÓ¡»úÇý¶¯ºÍ´òÓ¡»ú¶Ë¿Ú¡£
¡ö ´òÓ¡»úÇý¶¯
ÔÚÔö³¤Ò»¸ö´òÓ¡»úʱ£¬£¬±ØÒª×°ÖôòÓ¡»úÇý¶¯¡£ÔÚMSDNÎĵµÃèÊöÖУ¬£¬ÔçÆÚϵͳҪÇóÖ»Óо߱¸SeLoadDriverPrivilegeȨÏÞµÄÓû§ÄÜÁ¦×°ÖôòÓ¡Çý¶¯£¬£¬µ«ÎªÁ˱ãÓڳ߶ÈÓû§×°ÖÃÇý¶¯£¬£¬´ÓWindows VistaÆðÍ·£¬£¬Ö»ÓдòÓ¡»úÇý¶¯ÊÇÒѾ´æÔڵĿÉÁ¢¼´±ãÓõÄÇý¶¯£¬£¬¾Í²»±ØÒªÈκÎÌØÈ¨¼´¿É×°Öá£ÀýÈ磬£¬Í¨¹ýÒ»ÌõPowerShellºÅÁî¼´¿É×°Öá°Generic / Text-Only¡±Çý¶¯¡£
¡ö ´òÓ¡»ú¶Ë¿Ú
ÔÚÔö³¤Ò»¸ö´òÓ¡»úʱ£¬£¬±ØÒªÉèÖôòÓ¡»úµÄ¶Ë¿Ú¡£WindowsÖ§³Ö¶àÖÖÀàÐ͵ĴòÓ¡»ú¶Ë¿Ú£º£ºLPT1¶Ë¿Ú¡¢¡¢¡¢USB¶Ë¿Ú¡¢¡¢¡¢ÍøÂç¶Ë¿ÚºÍÎļþµÈ¡£ÈôÊÇÉèÖö˿ÚΪÎļþ£¬£¬ÔòÒâζ×Å´òÓ¡»ú½«Êý¾Ý´òÓ¡µ½Ö¸¶¨Îļþ¡£ÀýÈ磬£¬Í¨¹ýÒ»ÌõPowerShellºÅÁî¼´¿ÉÔö³¤Ò»¸öÊä³öµ½Ö¸¶¨ÎļþµÄ´òÓ¡¶Ë¿Ú£º£º
Add-PrinterPort -Name "C:\windows\Temp\myport.txt"
ÏÖʵÉÏ£¬£¬¸Ã²Ù×÷ÊÇÔÚ×¢²á±íÖÐÔö³¤Ò»¸öREG_SZÀàÐ͵ÄÖµ¡£
³ï±¸ºÃÇý¶¯ºÍ¶Ë¿Úºó£¬£¬Í¨¹ýÒ»ÌõPowerShellºÅÁî¼´¿É´´½¨Ò»¸ö´òÓ¡»ú¡£
´òÓ¡»ú´´½¨½áÊøºó£¬£¬Í¨¹ýÒ»ÌõPowerShellºÅÁî¼´¿É´òÓ¡Êý¾Ýµ½Ö¸¶¨¶Ë¿Ú£º£º
"PrintTest!" | Out-Printer -Name "PrintTest"
ÓÉÓÚPrintTest´òÓ¡»úµÄ¶Ë¿ÚÊÇÎļþc:\windows\Temp\myport.txt£¬£¬Òò¶ø´òÓ¡ºÅÁîÖ´Ðк󣬣¬Êý¾Ý¡°Print Test!¡±½«»á±»Ð´È루¼´´òÓ¡£©µ½¸ÃÎļþ¡£
Õë¶Ô¶Ë¿ÚÊÇÎļþµÄ´òÓ¡¹ý³Ì£¬£¬spooler´òÓ¡·þÎñ·¨Ê½ÒÔimpersonating·½Ê½À´·ÂÕÕµ±Ç°Óû§µÄÌØÈ¨½øÐÐÎļþдÈë¡£Òò¶ø£¬£¬ÈôÊǶ˿ÚÎļþÔÚÊܱ£»£»£»¤µÄϵͳĿ¼£¨ÀýÈçC:\Windows\system32£©£¬£¬ Ôò·ÇÖÎÀíԱϵÄPowerShell´òÓ¡×÷Òµ¾Í»áʧ°Ü¡£
ÍÑ»ú´òÓ¡µÄ»úÖÆ
ÔÚWindowsϵͳÉÏ£¬£¬ÈôÊÇϵͳÅäÖÃÆôÓÃÁ˼ÙÍÑ»ú·þÎñ£¬£¬ÔòËùÓеĴòÓ¡¹¤×÷¶¼²»ÊÇÁ¢¼´Ö´ÐС£Ïà·´£¬£¬ÏµÍ³Ê¹ÓÃPrint SpoolerÀ´ÖÎÀíÍÑ»ú´òÓ¡¹¤×÷¡£¾ßÌåÀ´Ëµ£¬£¬µ±Óû§Å²ÓôòÓ¡²Ù×÷ºó£¬£¬ÏµÍ³½«´òÓ¡×÷Òµ´æ´¢ÔÚÌØ¶¨µÄ¼ÙÍÑ»úÎļþ¼ÐÖС£
ĬÈÏÇé¿öÏ£¬£¬WindowsÌìÉúµÄÍÑ»ú´òÓ¡¹¤×÷ÎļþΪ.SPLÎļþ£¬£¬´ËÍâWindows»¹»á´´½¨ºó׺ÃûΪ.SHDµÄshadowÎļþ²¢Í¬SPLÎļþ×ö¹ØÁª¡£´´½¨shadowÎļþµÄÓô¦ÊÇ£º£ºÔÚ´òÓ¡·¨Ê½³öÏÖÎÊÌâ»òÕß´òÓ¡¹¤×÷±»¹ÒÆðºó£¬£¬PrintSpoolerÒÀÈ»Äܹ»Í¨¹ýSHDÎļþ¸´Ô´òÓ¡¹¤×÷¡£
ÔÚWindowsÏµÍ³ÖØÆô»òPrint Spooler·þÎñÖØÆôÖ®ºó£¬£¬.SHDºÍ.SPLÎļþ»á±»ÖØÐ¶ÁÈ¡ÒÔ¸´Ô´òÓ¡¹¤×÷¡£
´òÓ¡ÌáȨµÄµÀÀí
ÍÑ»ú´òÓ¡»úÖÆÊ¹µÃWindowsϵͳÔÚÖØÆôºó»á¸´Ô¿ÉÄÜ´æÔÚµÄδִÐдòÓ¡¹¤×÷¡£µ«ÊÇ£¬£¬ÖØÆôºóµÄPrinter Spooler·þÎñ·¨Ê½Ö±½ÓʹÓÃÁËSystemȨÏÞÀ´¸´ÔδִÐеĴòÓ¡×÷Òµ¡£¶ÔÓÚ´òÓ¡»ú¶Ë¿ÚΪÎļþµÄ´òÓ¡¹¤×÷£¬£¬´òÓ¡ÎļþµÄдÈëÒ²¾ÍÔÚSystemȨÏÞϱ»Ö´ÐС£Òò¶ø£¬£¬ÏµÍ³ÖØÆôʹµÃÍÑ»ú´òÓ¡¹¤×÷¾ß±¸ÁËSystemȨÏÞµÄËÁÒâÎļþдÈëÄÜÁ¦¡£
´òÓ¡»úµÄÉèÖóýPowerShell¾ç±¾Í⣬£¬Í¨¹ýϵͳ½ÚÖÆÃæ°åÒ²ÄÜÉèÖ᣾ßÌåÀ´Ëµ£¬£¬Í¨¹ý¡°É豸ºÍ´òÓ¡»ú¡±ÄÜÔö³¤´òÓ¡»ú²¢ÉèÖö˿ڡ£
µ«ÈôÊÇÉèÖôòÓ¡¶Ë¿ÚÃûΪ¡°C:\Windows\system32\myport.txt¡±£¬£¬Ôò»áʧ°Ü¡£
ΪºÎÉèÖÃͬÑùÎļþÃûµÄ´òÓ¡»ú¶Ë¿Ú£¬£¬Í¨¹ý½ÚÖÆÃæ°å»áʧ°Ü£¬£¬¶øÍ¨¹ýPowerShell ºÅÁîÔòÄܹ»³É¹¦ÄØ£¿£¿£¿Í¨¹ý¶ÈÎöÕâÁ½ÖÖ·½Ê½¶Ôspooler·¨Ê½Ö´ÐÐÁ÷³ÌµÄÓ°Ï죬£¬·¢ÏÖspooler·¨Ê½¶Ôͨ¹ýPowerShellºÅÁîÐÐÔö³¤´òÓ¡»ú¶Ë¿Ú·½Ê½²»×㰲ȫУÑé¡£
¾ßÌåÀ´½²£¬£¬Õë¶ÔPowerShellºÅÁîÔö³¤´òÓ¡»ú¶Ë¿Ú£¬£¬spooler·¨Ê½Ö±½ÓÉèÖÃÁËÏàÓ¦µÄ´òÓ¡»ú¶Ë¿Ú×¢²á±íÏ£»£»Õë¶Ô½ÚÖÆÃæ°åÔö³¤´òÓ¡»ú¶Ë¿Ú£¬£¬spooler·¨Ê½»áÊ×Ïȳ¢ÊÔ´´½¨¸Ã¶Ë¿ÚÎļþ£¬£¬´´½¨Ê§°Üºó¾Í²»»áÔÙÉèÖÃÏàÓ¦µÄ×¢²á±íÏî¡£
½øÒ»²½·ÖÎöÓйØAPI·¢ÏÖ£¬£¬WindowsϵͳÌṩÁËÁ½ÖÖÔö³¤´òÓ¡»ú¶Ë¿ÚµÄAPI£¬£¬±ðÀëÊÇAddPortº¯ÊýºÍXcvDataº¯Êý¡£ÆäÖÐMSDN¶ÔAddPortµÄÃèÊö£º£º
¡°AddPortº¯Êýä¯ÀÀÍøÂçÒÔ²éÕÒÏÖÓж˿ڣ¬£¬²¢µ¯³ö¶Ô»°¿ò¹©Óû§Ñ¡Ôñ¡£AddPortº¯ÊýÓ¦¸Ãͨ¹ýŲÓÃEnumPortsÀ´ÑéÖ¤Óû§ÊäÈëµÄ¶Ë¿ÚÃû³Æ£¬£¬ÒÔÈ·±£²»´æÔÚ·´¸´µÄÃû³Æ¡£AddPortº¯ÊýµÄŲÓ÷½±ØÐëÓµÓнӼû¶Ë¿ÚËùÏνӵķþÎñÆ÷µÄSERVER_ACCESS_ADMINISTERȨÏÞ¡£ÒªÔö³¤¶Ë¿Ú¶ø²»ÏÔʾ¶Ô»°¿ò£¬£¬¿ÉŲÓÃXcvDataº¯Êý¶ø²»ÊÇAddPort ¡±¡£
ͨ¹ý½ÚÖÆÃæ°åÔö³¤´òÓ¡»úÔڵײãÊÇŲÓÃÁËAddPortº¯Êý£¬£¬¸Ãº¯Êý»á´¥·¢spooler·¨Ê½¶Ô¶Ë¿ÚµÄºÏ·¨ÐÔУÑ顣ͨ¹ýPowerShellºÅÁîÔö³¤´òÓ¡»úÔڵײãÔòÊÇÖ±½ÓŲÓÃXcvDataº¯Êý£¬£¬¸Ãº¯Êý²»»á´¥·¢spooler·¨Ê½¶ÔÓû§Ôö³¤µÄ¶Ë¿Ú½øÐа²È«Ð£Ñé¡£Òò¶ø£¬£¬²âÊÔ·¨Ê½AddPort.exeͨ¹ý¸Ãº¯ÊýÔڳ߶ÈÓû§È¨ÏÞÏÂÒ²ÄÜÉèÖôòÓ¡»ú¶Ë¿ÚΪÊܱ£»£»£»¤Ä¿Â¼ÖеÄÎļþ¡£
·ì϶²¹¶¡µÄ·ÖÎö
·ÖÎö·ì϶ÐÞ¸´ºóµÄ°æ±¾·¢ÏÖ£¬£¬Î¢ÈíÔڹؼüº¯ÊýLcmCreatePortEntry£¨×îÖÕ´´½¨´òÓ¡»ú¶Ë¿ÚµÄº¯Êý£©ÖÐÔö³¤ÁËÏàÓ¦µÄ¶Ë¿ÚºÏ·¨ÐԲ鳴úÂë¡£ÏÂͼÊǹؼüº¯ÊýLcmCreatePortEntryÔÚÐÞ¸´Ç°ºÍÐÞ¸´ºóµÄCall Graph¶Ô±È£¬£¬Äܹ»¿´³ö£º£º²¹¶¡µÄÖ÷ÌâÊÇͨ¹ýº¯ÊýPortIsValid¶Ô¶Ë¿Ú½øÐкϷ¨ÐԲ鳡£
ƾ¾ÝÉÏÎĵķÖÎö¿ÉÖª£¬£¬³ß¶ÈÓû§ÊÇÎÞ·¨ÔÚϵͳĿ¼Öд´½¨ÎļþµÄ£¬£¬°Ñ¶Ë¿ÚÉèÖÃΪϵͳĿ¼ÏµÄÎļþ»áµ¼ÖÂPortIsValid¼ì²â²»µ½Ö¸±êÎļþ£¬£¬´Ó¶øÅж¨ÒªÉèÖõĶ˿ڳ¤¶Ì·¨µÄ¡£Òò¶ø£¬£¬ÔÚ²¹¶¡ÐÞ¸´ºó£¬£¬³ß¶ÈÓû§Ôö³¤´òÓ¡¶Ë¿ÚΪϵͳĿ¼ÏÂÎļþµÄ´òÓ¡»ú¾Í»áʼÖÕʧ°Ü£¬£¬´Ó¶øÔ¤·ÀÁËÏµÍ³ÖØÆôʱ¸´Ô¶ñÒâµÄ´òÓ¡·þÎñ¡£
4.ÐÞ¸´½¨Òé
ÓÉÓڸ÷ì϶ÄÜÓ°ÏìÖÚ¶àµÄWindowsϵͳ°æ±¾£¬£¬²¢ÇÒÄܹ»Ôڳ߶ÈÓû§ÏÂÌáÒé·ì϶¹¥»÷£¬£¬½¨ÒéÊÜÓ°ÏìµÄÓû§ÊµÊ±½øÐÐϵͳ¸üлò×°Ö÷ì϶²¹¶¡¡£
´ËÍ⣬£¬Î¢ÈíµÄ°²È«¸üÐÂÖ»ÊǶԴòÓ¡¶Ë¿ÚAPI½øÐÐÁ˸üÑϸñµÄУÑé¡£µ«ÊÇ£¬£¬ÈôÊǶñÒâÎļþ¶Ë¿ÚÔÚ·ì϶ÐÞ¸´Ç°ÒѾ´´½¨£¬£¬Ôò·ì϶¹¥»÷ÏÖʵÒѾÉúЧ£¬£¬´Ëʱ½øÐÐϵͳ¸üÐÂÒÀÈ»ÊDz»°²È«µÄ¡£½¨ÒéÓû§ÏÈʹÓÃPowerShellºÅÁîGet-PrinterPortÀ´²é³ÏµÍ³ÖÐÊÇ·ñ´æÔÚ¿ÉÒɵĴòÓ¡»ú¶Ë¿Ú£¬£¬ÔÚɾ³ý¿ÉÒɶ˿ںóÔÙÖ´ÐÐϵͳ¸üС£
²Î¿¼Á´½Ó£º£º
[1]https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2020-1048
[2]https://docs.microsoft.com/en-us/windows/win32/printdocs/addport
[3]https://docs.microsoft.com/en-us/previous-versions/ff564255(v%3dvs.85)
[4]https://windows-internals.com/printdemon-cve-2020-1048/


¾©¹«Íø°²±¸11010802024551ºÅ