CVE-2020-10713 | GRUB2 BootHoleÎó²îͨ¸æ

Ðû²¼Ê±¼ä 2020-07-30

0x00 Îó²î¸ÅÊö


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


EclypsiumÑо¿Ö°Ô±ÔÚ´ó¶¼LinuxϵͳʹÓõÄGRUB2Ö¸µ¼³ÌÐòÖз¢Ã÷ÁËÒ»¸öÎó²î½«ÆäÃüÃûΪ¡°BootHole¡±£¨CVE-2020-10713£©£¬£¬ £¬×ÝÈ»ÆôÓÃÁËSecure Boot£¬£¬ £¬Ò²¿ÉÔÚÆô¶¯Àú³ÌÖÐÖ´ÐÐí§Òâ´úÂë¡£¡£¡£¡£¡£¡£¡£¡£¹¥»÷Õß¿ÉʹÓøÃÎó²î×°Öó¤ÆÚÇÒÒþÃØµÄbootkit»ò¶ñÒâÖ¸µ¼³ÌÐòÀ´¿ØÖÆ×°±¸¡£¡£¡£¡£¡£¡£¡£¡£

¸ÃÎó²îÓ°ÏìʹÓÃSecure BootµÄϵͳ£¬£¬ £¬×ÝÈ»ËüÃDz»Ê¹ÓÃGRUB2¡£¡£¡£¡£¡£¡£¡£¡£ËùÓÐÊðÃûµÄGRUB2¾ùÊÜÓ°Ï죬£¬ £¬ÕâÒâζ×ÅÏÕЩËùÓеÄLinux ¿¯Ðаæ¾ùÊÜÓ°Ïì¡£¡£¡£¡£¡£¡£¡£¡£±ðµÄGRUB2»¹Ö§³ÖÆäËü²Ù×÷ϵͳ¡¢Äں˺ÍÖÎÀí³ÌÐòÈçXen¡£¡£¡£¡£¡£¡£¡£¡£Õâ¸öÎó²î»¹Éæ¼°µ½ÈκÎʹÓþßÓбê×¼Microsoft Third Party UEFI Certificate AuthorityµÄSecure BootµÄWindows×°±¸£¬£¬ £¬ÀýÈ繤ҵ¡¢Ò½ÁÆ¡¢½ðÈÚµÈÐÐÒµÖÐʹÓõÄ×°±¸¾ùÊÜÓ°Ïì¡£¡£¡£¡£¡£¡£¡£¡£¸ÃÎó²îµ¼ÖÂÕâЩװ±¸Ò×Ôâµ½ÀýÈç×î½üʹÓöñÒâUEFIÖ¸µ¼³ÌÐòµÄ¹¥»÷»î¶¯¡£¡£¡£¡£¡£¡£¡£¡£

EclypsiumÒѺͶà¼ÒÐÐÒµÈçOS³§ÉÌ¡¢ÅÌËã»úÖÆÔìÉ̺ÍÓ¦¼±ÏìÓ¦ÖÐÐÄЭµ÷Åû¶¸ÃÎó²î¡£¡£¡£¡£¡£¡£¡£¡£»£» £» £» £»£»£»£»º½â²½·¥ÒªÇóÊðÃûºÍ°²ÅÅеÄÖ¸µ¼³ÌÐò£¬£¬ £¬ÕâÑù¿ÉÒÔ±ÜÃâ¹¥»÷ÕßʹÓÃÀϾɡ¢Ò×Êܹ¥»÷°æ±¾¡£¡£¡£¡£¡£¡£¡£¡£ÕâÒ»Àú³Ì¿ÉÄܺÜÊÇÂþ³¤£¬£¬ £¬ÓÉÓÚ×éÖ¯»ú¹¹Íê³ÉÐÞ¸´ÐèÒª´ó×Úʱ¼ä¡£¡£¡£¡£¡£¡£¡£¡£


0x01 Îó²îÏêÇé


BootHoleÎó²îÊÇÆÊÎögrub.cfgÎļþʱÔÚGRUB2Öб¬·¢µÄ»º³åÇøÒç³ö¡£¡£¡£¡£¡£¡£¡£¡£´ËÉèÖÃÎļþÊÇͨ³£Î»ÓÚEFIϵͳ·ÖÇøÖеÄÍⲿÎļþ£¬£¬ £¬Òò´Ë¿ÉÒÔÓɾßÓÐÖÎÀíÔ±ÌØÈ¨µÄ¹¥»÷ÕßÐ޸쬣¬ £¬¶øÎÞÐè¸ü¸ÄÒÑÊðÃû¹©Ó¦ÉÌshimºÍGRUB2 bootloader¿ÉÖ´ÐÐÎļþµÄÍêÕûÐÔ¡£¡£¡£¡£¡£¡£¡£¡£»£» £» £» £»£»£»£»º³åÇøÒç³öʹ¹¥»÷Õß¿ÉÒÔÔÚUEFIÖ´ÐÐÇéÐÎÖлñµÃí§Òâ´úÂëÖ´ÐÐȨÏÞ£¬£¬ £¬¸Ã´úÂë¿ÉÒÔÓÃÓÚÔËÐжñÒâÈí¼þ£¬£¬ £¬¸ü¸ÄÆô¶¯Àú³Ì£¬£¬ £¬Ö±½ÓÐÞ²¹OSÄں˻òÖ´ÐжñÒâ´úÂë¡£¡£¡£¡£¡£¡£¡£¡£

ΪÁË´¦Öóͷ£À´×ÔÍⲿÉèÖÃÎļþµÄÏÂÁ£¬ £¬GRUB2ʹÓÃflexºÍbison´ÓÓïÑÔÐÎòÎļþºÍ×ÊÖú³ÌÐòº¯ÊýÌìÉúÕë¶ÔÌØ¶¨ÓòÓïÑÔ£¨DSL£©µÄÆÊÎöÒýÇæ¡£¡£¡£¡£¡£¡£¡£¡£

ºÍΪÿ¸öDSLÊÖ¶¯±àд×Ô½ç˵ÆÊÎöÆ÷Ïà±È£¬£¬ £¬Í¨³£ÒÔΪÕâÊÇÒ»ÖÖ¸üºÃµÄÒªÁì¡£¡£¡£¡£¡£¡£¡£¡£¿ÉÊÇGRUB2¡¢flexºÍbison¶¼ÊÇÖØ´óµÄÈí¼þ°ü£¬£¬ £¬¾ßÓÐ×Ô¼ºµÄÉè¼Æ¼ÙÉ裬£¬ £¬ºÜÈÝÒ׺öÂÔ¡£¡£¡£¡£¡£¡£¡£¡£ÕâЩ²»Æ¥ÅäµÄÉè¼Æ¼ÙÉè¿ÉÄܻᵼÖÂÒ×Êܹ¥»÷µÄ´úÂë¡£¡£¡£¡£¡£¡£¡£¡£

flexÌìÉúµÄÆÊÎöÆ÷ÒýÇæ½«´Ë½ç˵°üÀ¨ÎªÁîÅÆ´¦Öóͷ£´úÂëµÄÒ»²¿·Ö£º


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


ÔÚÕâ¸öºêÖУ¬£¬ £¬ÌìÉúµÄ´úÂë¼ì²âµ½ËüÓöµ½µÄÁîÅÆÌ«´ó¶øÎÞ·¨·ÅÈëflexµÄÄÚ²¿ÆÊÎö»º³åÇø²¢Å²ÓÃYY_FATAL_ERROR()£¬£¬ £¬ÕâÊÇʹÓÃflexÌìÉúµÄÆÊÎöÆ÷µÄÈí¼þÌṩµÄ×ÊÖúº¯Êý¡£¡£¡£¡£¡£¡£¡£¡£

¿ÉÊÇ£¬£¬ £¬YY_FATAL_ERROR()GRUB2Èí¼þ°üÖÐÌṩµÄʵÏÖÊÇ£º


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


Ëü²»»á×èÖ¹Ö´ÐлòÍ˳ö£¬£¬ £¬¶øÖ»Êǽ«¹ýʧÊä³öµ½¿ØÖÆÌ¨²¢·µ»Øµ½Å²Óú¯Êý¡£¡£¡£¡£¡£¡£¡£¡£²»ÐÒµÄÊÇ£¬£¬ £¬ÔÚ±àдflex´úÂëʱ¾ÍÆÚÍûYY_FATAL_ERROR()²»»áÔÙ·µ»ØÈκÎŲÓᣡ£¡£¡£¡£¡£¡£¡£Õâµ¼ÖÂyy_flex_strncpy()±»Å²Ó㬣¬ £¬²¢½«Ô´×Ö·û´®´ÓÉèÖÃÎļþ¸´ÖƵ½Ò»¸ö̫С¶øÎÞ·¨ÈÝÄÉËüµÄ»º³åÇøÖС£¡£¡£¡£¡£¡£¡£¡£


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


³ýÁËÕâ¸öÌØ¶¨µÄ·¾¶Ö®Í⣬£¬ £¬flexÌìÉúµÄ´úÂëÖеÄÐí¶àÆäËûµØ·½Ò²ÆÚÍû¶ÔYY_FATAL_ERROR()µÄÈκÎŲÓÃÓÀÔ¶²»»á·µ»Ø£¬£¬ £¬²¢ÇÒÔÚÆÚÍû±»ÆÆËðʱִÐв»Çå¾²µÄ²Ù×÷¡£¡£¡£¡£¡£¡£¡£¡£APIµÄÉú²úÕߺÍÏûºÄÕßÖ®¼äµÄ¼ÙÉ費ƥÅäÊÇÒ»¸ö·Ç¾­³£¼ûµÄÎó²îȪԴ¡£¡£¡£¡£¡£¡£¡£¡£

×îÖÕ£¬£¬ £¬Í¨¹ýΪÉèÖÃÎļþÌṩÊäÈëÁîÅÆ£¬£¬ £¬ÆÊÎöÆ÷ÎÞ·¨´¦Öóͷ£ÕâЩ̫³¤µÄÁîÅÆ£¬£¬ £¬´Ë»º³åÇøÒç³ö½«ÁýÕÖ¶ÑÖеÄÒªº¦½á¹¹¡£¡£¡£¡£¡£¡£¡£¡£ÕâЩ±»ÁýÕÖµÄ×ֶΰüÀ¨ÆÊÎöÆ÷½á¹¹ÔªËØ£¬£¬ £¬Ëü¿ÉÒÔÓÃ×÷í§ÒâµÄwrite-what-whereÔ­Ó£¬ £¬ÒÔ»ñÈ¡í§Òâ´úÂëÖ´Ðв¢Ð®ÖÆÖ¸µ¼Àú³Ì¡£¡£¡£¡£¡£¡£¡£¡£


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾


»¹Òª×¢ÖصÄÊÇ£¬£¬ £¬UEFIÖ´ÐÐÇéÐÎûÓеصã¿Õ¼ä½á¹¹Ëæ»ú»¯£¨ASLR£©»òÊý¾ÝÖ´Ðб£»£» £» £» £»£»£»£»¤£¨DEP / NX£©»òÆäËûϵͳÖг£¼ûµÄ»º½âÎó²îµÄÊÖÒÕ£¬£¬ £¬Òò´Ë£¬£¬ £¬´ËÀàÎó²îºÜÈÝÒ×ʹÓ㬣¬ £¬¶ÑÊÇÍêÈ«¿ÉÖ´ÐеÄ£¬£¬ £¬ÎÞÐè¹¹½¨ROPÁ´¡£¡£¡£¡£¡£¡£¡£¡£

¼øÓÚGRUB2 ÆÊÎöÉèÖÃÎļþµÄÒªÁìÖб£´æÒ»¸öÈõµã£¬£¬ £¬¹¥»÷Õß¿ÉÒÔÖ´ÐÐí§Òâ´úÂ룬£¬ £¬ÈƹýÊðÃûÑéÖ¤¡£¡£¡£¡£¡£¡£¡£¡£BootHoleÎó²î¿É±»ÓÃÓÚ×°Öÿɳ¤ÆÚºÍÒþÃØµÄbootkit»òÕß×ÝÈ»ÔÚÆôÓÃSecure Boot µÄÇéÐÎÏÂÒ²¿ÉÔËÐеĶñÒâÖ¸µ¼³ÌÐò¡£¡£¡£¡£¡£¡£¡£¡£¹¥»÷ÕßÄܹ»ÔÚ²Ù×÷ϵͳ֮ǰÔËÐжñÒâ´úÂë²¢¿ØÖƲÙ×÷ϵͳµÄ¼ÓÔØ·½·¨¡¢Ö±½ÓÐÞ¸´²Ù×÷ϵͳ¡¢ÉõÖÁʹָµ¼³ÌÐòÐÞ¸ÄOS¾µÏñ¡£¡£¡£¡£¡£¡£¡£¡£

ËùÓдÓgrub.cfgÎļþÖжÁÈ¡ÏÂÁîµÄGRUB2 ÊðÃû°æ±¾¾ùÒ×Êܹ¥»÷£¬£¬ £¬Ó°ÏìËùÓÐLinux ¿¯Ðаæ¡£¡£¡£¡£¡£¡£¡£¡£×èÖ¹ÏÖÔÚ£¬£¬ £¬ÒÑÓÐ80¶à¸öshimÊÜÓ°Ïì¡£¡£¡£¡£¡£¡£¡£¡£³ýÁËLinux ϵͳÍ⣬£¬ £¬ÈκÎʹÓþßÓбê׼΢ÈíUEFI CAµÄSecure BootµÄϵͳҲÊܸÃÎó²îÓ°Ïì¡£¡£¡£¡£¡£¡£¡£¡£Òò´Ë£¬£¬ £¬Ñо¿Ö°Ô±ÒÔΪĿ½ñʹÓõĴó´ó¶¼ÏµÍ³£¬£¬ £¬ÒÔ¼°´ó×Ú»ùÓÚLinux µÄOT ºÍIoTϵͳ£¬£¬ £¬¾ù¿ÉÄÜÊÜÕâЩÎó²îµÄÓ°Ïì¡£¡£¡£¡£¡£¡£¡£¡£

ÁíÍ⣬£¬ £¬ÈκÎÒÀÀµUEFI Secure Boot µÄÓ²¼þ¸ùÐÅÈλúÖÆ¾ù¿É±»Èƹý¡£¡£¡£¡£¡£¡£¡£¡£


0x02 ´¦Öóͷ£½¨Òé


ÊÜÓ°Ïì³§ÉÌÐû²¼Ç徲ͨ¸æºÍ¸üУº

? Microsoft

? Security advisory

? https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/ADV200011

? UEFI Forum

? Updated Revocation List

? https://uefi.org/revocationlistfile

? Debian

? Security advisory

? https://www.debian.org/security/2020-GRUB-UEFI-SecureBoot

? Canonical:

? Security advisory

? https://ubuntu.com/security/notices/USN-4432-1

? KnowledgeBase article

? https://wiki.ubuntu.com/SecurityTeam/KnowledgeBase/GRUB2SecureBootBypass

? Red Hat

? Customer documentation

? https://access.redhat.com/security/vulnerabilities/grub2bootloader

? CVE information

? https://access.redhat.com/security/cve/cve-2020-10713

? Vulnerability response article

? https://access.redhat.com/security/vulnerabilities/grub2bootloader

? SUSE

? Security advisory:

? https://www.suse.com/c/suse-addresses-grub2-secure-boot-issue/

? Knowledge Base article:

? https://www.suse.com/support/kb/doc/?id=000019673

? HP

? Security advisory

? HPSBHF03678 rev. 1 ¨C GRUB2 Bootloader Arbitrary Code Execution£ºhttps://support.hp.com/us-en/document/c06707446

? HPE

? Security advisory

? https://techhub.hpe.com/eginfolib/securityalerts/Boot_Hole/boot_hole.html

? VMware

? Knowledge Base article

? https://kb.vmware.com/s/article/80181

? Upstream Grub2 project

? GRUB2 Git Repository£ºhttp://git.savannah.gnu.org/gitweb/?p=grub.git&view=view+git+repository

? GRUB Developer Mailing List£ºhttps://lists.gnu.org/mailman/listinfo/grub-devel/

ÐèÒª×¢ÖØµÄÊǺÍUEFIÏà¹ØµÄ¸üÐÂÔøµ¼ÖÂ×°±¸²»¿ÉÓ㬣¬ £¬Òò´Ë³§ÉÌÐèÒªºÜÊÇÉóÉ÷¡£¡£¡£¡£¡£¡£¡£¡£ÈôÊÇÔÚ¸üеÄLinuxÖ¸µ¼¼ÓÔØ³ÌÐòºÍshim֮ǰ¸üÐÂÁ˵õÏúÁÐ±í£¨dbx£©£¬£¬ £¬Ôò½«²»»áÖ¸µ¼ÏµÍ³¡£¡£¡£¡£¡£¡£¡£¡£

¸üÖØ´óµÄÇéÐÎÊÇ£¬£¬ £¬ÆóÒµÔÖ±¸»úÖÆÒ²»áÓöµ½´ËÎÊÌ⣬£¬ £¬ÁíÍ⣬£¬ £¬µ±Ó²¼þ¹ÊÕ϶øÐèÒª¾ÙÐÐ×°±¸¸üÐÂʱ£¬£¬ £¬ÏàͬÐͺŵÄÐÂϵͳ¿ÉÄÜÒѾ­Ó¦ÓÃÁËdbx¸üУ¬£¬ £¬²¢ÇÒÔÚʵÑéÖ¸µ¼ÏÈǰװÖõIJÙ×÷ϵͳʱ»áʧ°Ü¡£¡£¡£¡£¡£¡£¡£¡£


½¨Ò飺

1¡¢¼à¿ØÖ¸µ¼³ÌÐò·ÖÇø£¨EFI³ÌÐò·ÖÇø£©µÄÄÚÈÝ£¬£¬ £¬Õ⽫ΪÆäÓàµÄÀú³Ì½ÚԼʱ¼ä£¬£¬ £¬²¢ÓÐÖúÓÚÈ·¶¨ÊÜÓ°ÏìµÄϵͳ£»£» £» £» £»£»£»£»

2¡¢¼ÌÐø¸üÐÂϵͳ£¬£¬ £¬ÒÔïÔÌ­¹¥»÷µÄ¿ÉÄÜÐÔ¡£¡£¡£¡£¡£¡£¡£¡£ÌØÊâÊǸüк󣬣¬ £¬¾ÉµÄÖ¸µ¼³ÌÐò½¨Òéɾ³ý¡£¡£¡£¡£¡£¡£¡£¡£Ëü°üÀ¨ÇÀ¾ÈÅÌ¡¢×°ÖóÌÐò¡¢ÆóÒµ»Æ½ð¾µÏñ¡¢ÐéÄâ»ú»òÆäËü¿ÉÖ¸µ¼Ç°ÑÔ£»£» £» £» £»£»£»£»

3¡¢²âÊÔ×÷·ÏÁбí¸üС£¡£¡£¡£¡£¡£¡£¡£È·±£²âÊÔµÄÊÇÔÚʹÓõĹ̼þ°æ±¾ºÍÐͺÅ¡£¡£¡£¡£¡£¡£¡£¡£

4¡¢Òª½â¾ö´ËÎó²îÎÊÌ⣬£¬ £¬Ê×ÏÈÒª°²ÅŵõÏú¸üС£¡£¡£¡£¡£¡£¡£¡£

5¡¢ÁªÏµ¹©Ó¦ÉÌ£¬£¬ £¬È·ÈÏËûÃÇÕýÔÚ½â¾ö´ËÎÊÌâ¡£¡£¡£¡£¡£¡£¡£¡£

Eclypsium¾ßÓпÉÓõÄpowershellºÍbash¾ç±¾£¬£¬ £¬ÓÃÓÚ¼ì²â´ËdbxupdateµõÏúµÄÖ¸µ¼³ÌÐò£¬£¬ £¬²Î¿¼Á´½Ó£ºhttps://github.com/eclypsium/BootHole/¡£¡£¡£¡£¡£¡£¡£¡£


0x03 Ïà¹ØÐÂÎÅ


https://www.zdnet.com/article/boothole-attack-impacts-windows-and-linux-systems-using-grub2-and-secure-boot/#ftag=RSSbaffb68


0x04 ²Î¿¼Á´½Ó


https://eclypsium.com/2020/07/29/theres-a-hole-in-the-boot/


0x05 ʱ¼äÏß


2020-07-29 EclypsiumÐû²¼±¨¸æ

2020-07-30 VSRCÐû²¼Îó²îͨ¸æ


¿­·¢¡¤k8(ÖйúÓÎ)¹Ù·½ÍøÕ¾