Windows PrintDemonÌáȨ©¶´·ÖÎö

Ðû²¼Ê±¼ä 2020-05-21

1.©¶´¸ÅÊö


΢ÈíÔÚ5ÔÂ12ÈÕµÄÄþ¾²¸üÐÂÖйûÈ»ÁËÒ»¸öWindowsµ±µØÌáȡ©¶´£¨CVE-2020-1048£©£¬¸Ã©¶´µÄÃèÊöΪ£º

¡°Windows Print Spooler·þÎñ²»Ç¡µ±µØÔÊÐíÈÎÒâµÄÎļþϵͳдÈ룬´æÔÚÌØȨÌáÉý©¶´¡£¹¥»÷ÕßÀûÓôË©¶´Äܹ»ÓÃϵͳÌØȨÔËÐÐÈÎÒâ´úÂ룬´Ó¶øʵÏÖ£º·¨Ê½µÄ°²×°¡¢¼ì²ì¡¢¸ü¸Ä»òÊý¾Ýɾ³ý£¬ÒÔ¼°´´½¨¾ßÓÐÍêÕûȨÏÞµÄÕÊ»§¡£ÒªÀûÓôË©¶´£¬¹¥»÷Õß±ØÐëµÇ¼µ½ÊÜÓ°ÏìµÄϵͳ²¢ÔËÐÐÌض¨½Å±¾»òÓ¦Ó÷¨Ê½¡±¡£


¸Ã©¶´ÓÉÄþ¾²Ñо¿ÈËÔ±Alex IonescuºÍYarden Shafir·¢ÏÖ£¬²¢±»ÃüÃûΪPrintDemon¡£Print SpoolerÊÇϵͳ×Ô´øµÄ´òÓ¡ºǫ́´¦Ö÷þÎñ£¬¹ÜÀíËùÓе±µØºÍÍøÂç´òÓ¡ÐÐÁУ¬¿ØÖÆ×ÅËùÓдòÓ¡ÊÂÇé¡£Print SpoolerÔÚWindowsϵͳÖÐÒÑ´æÔÚ¶àÄ꣬´Ó΢ÈíÐû²¼µÄ²¹¶¡Ò³Ãæ¿ÉÖª¸Ã©¶´Ó°ÏìWindows7ÖÁWindows10 1909µÄ¼¸ºõËùÓа汾¡£


2.©¶´ÑéÖ¤


¶«É­Æ½Ì¨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/