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 £¬²¢Ê¹Óøó߶ÈÓû§µÇ¼ϵͳ¡£¼ì²ìÆäËùÊôÓû§×é £¬È·ÈÏÆä²»ÊǹÜÀíÔ±Óû§×é¡£


×ðÁú¶¶È¦ - Ϊdu¶øÉú


£¨2£©ÔÚtestÕË»§Ï £¬ÊµÑéÔÚϵͳĿ¼Ï´´½¨Îļþ¼Ð»òÕßдÈëÎļþ £¬¾ùʧ°Ü¡£


×ðÁú¶¶È¦ - Ϊdu¶øÉú


£¨3£©È»ºóÖ´ÐÐÈçÏÂPowerShellÃüÁî £¬ÒÔÆÚÔÚϵͳĿ¼Ï´´½¨Îļþmyport.txt¡£


×ðÁú¶¶È¦ - Ϊdu¶øÉú


£¨4£©ÖØÆô²âÊÔϵͳ²¢µÇ¼testÓû§ £¬¿ÉÒÔ¿´µ½ÔÚϵͳĿ¼ÏÂÒÑÉú³ÉÁËmyport.txtÎļþ £¬¼ì²ìÄÚÈÝȷʵ°üÂÞÁ˲âÊÔ×Ö·û´®¡£¸Ã½á¹û±íÃ÷£ºµÍȨÏÞµÄ testÓû§Í»ÆÆÁËÎÞ·¨ÐÞ¸Äϵͳ×ÊÔ´µÄÄþ¾²ÏÞÖÆ¡£


×ðÁú¶¶È¦ - Ϊdu¶øÉú

×ðÁú¶¶È¦ - Ϊdu¶øÉú


3.©¶´Ô­Àí


¸Ã©¶´Éæ¼°µ½Windows´òÓ¡»úµÄÊÂÇé»úÖÆ £¬Îª¸üºÃµÄÀí½â©¶´³ÉÒò £¬Ê×Ïȼòµ¥½éÉÜ´òÓ¡»ú»ù´¡ÖªÊ¶ £¬È»ºóÔÙ·ÖÎö©¶´³ÉÒò¡£


´òÓ¡»úÊÂÇé»úÖÆ


WindowsϵͳµÄ´òÓ¡»úÓÐÁ½¸öºËÐÄ×é¼þ£º´òÓ¡»úÇý¶¯ºÍ´òÓ¡»ú¶Ë¿Ú¡£


¡ö ´òÓ¡»úÇý¶¯

ÔÚÌí¼ÓÒ»¸ö´òÓ¡»úʱ £¬ÐèÒª°²×°´òÓ¡»úÇý¶¯¡£ÔÚMSDNÎĵµÃèÊöÖÐ £¬ÔçÆÚϵͳҪÇóÖ»Óо߱¸SeLoadDriverPrivilegeȨÏÞµÄÓû§²ÅÆø°²×°´òÓ¡Çý¶¯ £¬µ«ÎªÁ˱ãÓڳ߶ÈÓû§°²×°Çý¶¯ £¬´ÓWindows Vista¿ªÊ¼ £¬Ö»Òª´òÓ¡»úÇý¶¯ÊÇÒѾ­´æÔڵĿÉÁ¢¼´Ê¹ÓõÄÇý¶¯ £¬¾Í²»ÐèÒªÈκÎÌØȨ¼´¿É°²×°¡£ÀýÈç £¬Í¨¹ýÒ»ÌõPowerShellÃüÁî¼´¿É°²×°¡°Generic / Text-Only¡±Çý¶¯¡£


×ðÁú¶¶È¦ - Ϊdu¶øÉú


¡ö ´òÓ¡»ú¶Ë¿Ú


ÔÚÌí¼ÓÒ»¸ö´òÓ¡»úʱ £¬ÐèÒªÉèÖôòÓ¡»úµÄ¶Ë¿Ú¡£WindowsÖ§³Ö¶àÖÖÀàÐ͵ĴòÓ¡»ú¶Ë¿Ú£ºLPT1¶Ë¿Ú¡¢USB¶Ë¿Ú¡¢ÍøÂç¶Ë¿ÚºÍÎļþµÈ¡£Èç¹ûÉèÖö˿ÚΪÎļþ £¬ÔòÒâζ×Å´òÓ¡»ú½«Êý¾Ý´òÓ¡µ½Ö¸¶¨Îļþ¡£ÀýÈç £¬Í¨¹ýÒ»ÌõPowerShellÃüÁî¼´¿ÉÌí¼ÓÒ»¸öÊä³öµ½Ö¸¶¨ÎļþµÄ´òÓ¡¶Ë¿Ú£º

Add-PrinterPort -Name "C:\windows\Temp\myport.txt"


×ðÁú¶¶È¦ - Ϊdu¶øÉú


ʵ¼ÊÉÏ £¬¸Ã²Ù×÷ÊÇÔÚ×¢²á±íÖÐÔö¼ÓÒ»¸öREG_SZÀàÐ͵ÄÖµ¡£


×ðÁú¶¶È¦ - Ϊdu¶øÉú


×¼±¸ºÃÇý¶¯ºÍ¶Ë¿Úºó £¬Í¨¹ýÒ»ÌõPowerShellÃüÁî¼´¿É´´½¨Ò»¸ö´òÓ¡»ú¡£


×ðÁú¶¶È¦ - Ϊdu¶øÉú


´òÓ¡»ú´´½¨Íê±Ïºó £¬Í¨¹ýÒ»ÌõPowerShellÃüÁî¼´¿É´òÓ¡Êý¾Ýµ½Ö¸¶¨¶Ë¿Ú£º

"PrintTest!" | Out-Printer -Name "PrintTest"


ÓÉÓÚPrintTest´òÓ¡»úµÄ¶Ë¿ÚÊÇÎļþc:\windows\Temp\myport.txt £¬Òò´Ë´òÓ¡ÃüÁîÖ´Ðкó £¬Êý¾Ý¡°Print Test!¡±½«»á±»Ð´È루¼´´òÓ¡£©µ½¸ÃÎļþ¡£


×ðÁú¶¶È¦ - Ϊdu¶øÉú


Õë¶Ô¶Ë¿ÚÊÇÎļþµÄ´òÓ¡¹ý³Ì £¬spooler´òÓ¡·þÎñ·¨Ê½ÒÔimpersonating·½Ê½À´Ä£Ä⵱ǰÓû§µÄÌØȨ½øÐÐÎļþдÈë¡£Òò´Ë £¬Èç¹û¶Ë¿ÚÎļþÔÚÊܱ£»¤µÄϵͳĿ¼£¨ÀýÈçC:\Windows\system32£© £¬ Ôò·Ç¹ÜÀíԱϵÄPowerShell´òÓ¡×÷Òµ¾Í»áʧ°Ü¡£


×ðÁú¶¶È¦ - Ϊdu¶øÉú

×ðÁú¶¶È¦ - Ϊdu¶øÉú


ÍÑ»ú´òÓ¡µÄ»úÖÆ


ÔÚWindowsϵͳÉÏ £¬Èç¹ûϵͳÅäÖÃÆôÓÃÁ˼ÙÍÑ»ú·þÎñ £¬ÔòËùÓеĴòÓ¡ÈÎÎñ¶¼²»ÊÇÁ¢¼´Ö´ÐС£Ïà·´ £¬ÏµÍ³Ê¹ÓÃPrint SpoolerÀ´¹ÜÀíÍÑ»ú´òÓ¡ÈÎÎñ¡£¾ßÌåÀ´Ëµ £¬µ±Óû§µ÷ÓôòÓ¡²Ù×÷ºó £¬ÏµÍ³½«´òÓ¡×÷Òµ´æ´¢ÔÚÌض¨µÄ¼ÙÍÑ»úÎļþ¼ÐÖС£


ĬÈÏÇé¿öÏ £¬WindowsÉú³ÉµÄÍÑ»ú´òÓ¡ÈÎÎñÎļþΪ.SPLÎļþ £¬´ËÍâWindows»¹»á´´½¨ºó׺ÃûΪ.SHDµÄshadowÎļþ²¢Í¬SPLÎļþ×ö¹ØÁª¡£´´½¨shadowÎļþµÄÓÃ;ÊÇ£ºÔÚ´òÓ¡·¨Ê½·ºÆðÎÊÌâ»òÕß´òÓ¡ÈÎÎñ±»¹ÒÆðºó £¬PrintSpoolerÒÀÈ»¿ÉÒÔͨ¹ýSHDÎļþ»Ö¸´´òÓ¡ÈÎÎñ¡£


×ðÁú¶¶È¦ - Ϊdu¶øÉú


ÔÚWindowsϵͳÖØÆô»òPrint Spooler·þÎñÖØÆôÖ®ºó £¬.SHDºÍ.SPLÎļþ»á±»ÖØжÁÈ¡ÒÔ»Ö¸´´òÓ¡ÈÎÎñ¡£


×ðÁú¶¶È¦ - Ϊdu¶øÉú


´òÓ¡ÌáȨµÄÔ­Àí


ÍÑ»ú´òÓ¡»úÖÆʹµÃWindowsϵͳÔÚÖØÆôºó»á»Ö¸´¿ÉÄÜ´æÔÚµÄδִÐдòÓ¡ÈÎÎñ¡£µ«ÊÇ £¬ÖØÆôºóµÄPrinter Spooler·þÎñ·¨Ê½Ö±½ÓʹÓÃÁËSystemȨÏÞÀ´»Ö¸´Î´Ö´ÐеĴòÓ¡×÷Òµ¡£¶ÔÓÚ´òÓ¡»ú¶Ë¿ÚΪÎļþµÄ´òÓ¡ÈÎÎñ £¬´òÓ¡ÎļþµÄдÈëÒ²¾ÍÔÚSystemȨÏÞϱ»Ö´ÐС£Òò´Ë £¬ÏµÍ³ÖØÆôʹµÃÍÑ»ú´òÓ¡ÈÎÎñ¾ß±¸ÁËSystemȨÏÞµÄÈÎÒâÎļþдÈëÄÜÁ¦¡£


×ðÁú¶¶È¦ - Ϊdu¶øÉú


´òÓ¡»úµÄÉèÖóýPowerShell½Å±¾Íâ £¬Í¨¹ýϵͳ¿ØÖÆÃæ°åÒ²ÄÜÉèÖ᣾ßÌåÀ´Ëµ £¬Í¨¹ý¡°É豸ºÍ´òÓ¡»ú¡±ÄÜÌí¼Ó´òÓ¡»ú²¢ÉèÖö˿Ú¡£


×ðÁú¶¶È¦ - Ϊdu¶øÉú

×ðÁú¶¶È¦ - Ϊdu¶øÉú

×ðÁú¶¶È¦ - Ϊdu¶øÉú


µ«Èç¹ûÉèÖôòÓ¡¶Ë¿ÚÃûΪ¡°C:\Windows\system32\myport.txt¡± £¬Ôò»áʧ°Ü¡£


ΪºÎÉèÖÃͬÑùÎļþÃûµÄ´òÓ¡»ú¶Ë¿Ú £¬Í¨¹ý¿ØÖÆÃæ°å»áʧ°Ü £¬¶øͨ¹ýPowerShell ÃüÁîÔò¿ÉÒÔÀÖ³ÉÄØ£¿Í¨¹ý·ÖÎöÕâÁ½ÖÖ·½Ê½¶Ôspooler·¨Ê½Ö´ÐÐÁ÷³ÌµÄÓ°Ïì £¬·¢ÏÖspooler·¨Ê½¶Ôͨ¹ýPowerShellÃüÁîÐÐÌí¼Ó´òÓ¡»ú¶Ë¿Ú·½Ê½È±·¦Äþ¾²Ð£Ñé¡£


×ðÁú¶¶È¦ - Ϊdu¶øÉú


¾ßÌåÀ´½² £¬Õë¶ÔPowerShellÃüÁîÌí¼Ó´òÓ¡»ú¶Ë¿Ú £¬spooler·¨Ê½Ö±½ÓÉèÖÃÁËÏàÓ¦µÄ´òÓ¡»ú¶Ë¿Ú×¢²á±íÏÕë¶Ô¿ØÖÆÃæ°åÌí¼Ó´òÓ¡»ú¶Ë¿Ú £¬spooler·¨Ê½»áÊ×ÏÈʵÑé´´½¨¸Ã¶Ë¿ÚÎļþ £¬´´½¨Ê§°Üºó¾Í²»»áÔÙÉèÖÃÏàÓ¦µÄ×¢²á±íÏî¡£


×ðÁú¶¶È¦ - Ϊdu¶øÉú


½øÒ»²½·ÖÎöÏà¹ØAPI·¢ÏÖ £¬WindowsϵͳÌṩÁËÁ½ÖÖÌí¼Ó´òÓ¡»ú¶Ë¿ÚµÄAPI £¬·Ö±ðÊÇAddPortº¯ÊýºÍXcvDataº¯Êý¡£ÆäÖÐMSDN¶ÔAddPortµÄÃèÊö£º


¡°AddPortº¯Êýä¯ÀÀÍøÂçÒÔ²éÕÒÏÖÓÐ¶Ë¿Ú £¬²¢µ¯³ö¶Ô»°¿ò¹©Óû§Ñ¡Ôñ¡£AddPortº¯ÊýÓ¦¸Ãͨ¹ýµ÷ÓÃEnumPortsÀ´ÑéÖ¤Óû§ÊäÈëµÄ¶Ë¿ÚÃû³Æ £¬ÒÔÈ·±£²»´æÔÚÖظ´µÄÃû³Æ¡£AddPortº¯ÊýµÄµ÷Ó÷½±ØÐë¾ßÓзÃÎʶ˿ÚËùÁ¬½ÓµÄ·þÎñÆ÷µÄSERVER_ACCESS_ADMINISTERȨÏÞ¡£ÒªÌí¼Ó¶Ë¿Ú¶ø²»ÏÔʾ¶Ô»°¿ò £¬¿Éµ÷ÓÃXcvDataº¯Êý¶ø²»ÊÇAddPort ¡±¡£


ͨ¹ý¿ØÖÆÃæ°åÌí¼Ó´òÓ¡»úÔڵײãÊǵ÷ÓÃÁËAddPortº¯Êý £¬¸Ãº¯Êý»á´¥·¢spooler·¨Ê½¶Ô¶Ë¿ÚµÄºÏ·¨ÐÔУÑ顣ͨ¹ýPowerShellÃüÁîÌí¼Ó´òÓ¡»úÔڵײãÔòÊÇÖ±½Óµ÷ÓÃXcvDataº¯Êý £¬¸Ãº¯Êý²»»á´¥·¢spooler·¨Ê½¶ÔÓû§Ìí¼ÓµÄ¶Ë¿Ú½øÐÐÄþ¾²Ð£Ñé¡£Òò´Ë £¬²âÊÔ·¨Ê½AddPort.exeͨ¹ý¸Ãº¯ÊýÔڳ߶ÈÓû§È¨ÏÞÏÂÒ²ÄÜÉèÖôòÓ¡»ú¶Ë¿ÚΪÊܱ£»¤Ä¿Â¼ÖеÄÎļþ¡£


×ðÁú¶¶È¦ - Ϊdu¶øÉú


©¶´²¹¶¡µÄ·ÖÎö


·ÖÎö©¶´ÐÞ¸´ºóµÄ°æ±¾·¢ÏÖ £¬Î¢ÈíÔÚÒªº¦º¯ÊýLcmCreatePortEntry£¨×îÖÕ´´½¨´òÓ¡»ú¶Ë¿ÚµÄº¯Êý£©ÖÐÌí¼ÓÁËÏàÓ¦µÄ¶Ë¿ÚºÏ·¨ÐÔ¼ì²é´úÂë¡£ÏÂͼÊÇÒªº¦º¯ÊýLcmCreatePortEntryÔÚÐÞ¸´Ç°ºÍÐÞ¸´ºóµÄCall Graph¶Ô±È £¬¿ÉÒÔ¿´³ö£º²¹¶¡µÄºËÐÄÊÇͨ¹ýº¯ÊýPortIsValid¶Ô¶Ë¿Ú½øÐкϷ¨ÐÔ¼ì²é¡£


×ðÁú¶¶È¦ - Ϊdu¶øÉú



ƾ¾ÝÉÏÎĵķÖÎö¿ÉÖª £¬³ß¶ÈÓû§ÊÇÎÞ·¨ÔÚϵͳĿ¼Öд´½¨ÎļþµÄ £¬°Ñ¶Ë¿ÚÉèÖÃΪϵͳĿ¼ÏµÄÎļþ»áµ¼ÖÂ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/