GA»Æ½ð¼×ADLab£ºCPU¡°¹í»ê¡±·ì϶·ÖÎöÓëÑéÖ¤
°ä²¼¹¦·ò 2018-01-081 ǰ ÑÔ
½üÈÕ£¬CPUµ×²ã·ì϶°²È«ÊÂÎñÒѾ²¨¼°È«ÇòÏÕЩËùÓеÄÊÖ»ú¡¢µçÄÔ¡¢ÔÆÍÆËã²úÆ·¡£Õâ´ÎµÄ·ì϶±ðÀëÆðÃûMeltdown(±ÀÀ£)ºÍSpectre(¹í»ê)¡£ÕâÁ½¸ö·ì϶¿ÉÄÜ»áÔì³ÉÊܱ£»¤µÄÃÜÂë¡¢Ãô¸ÐÐÅϢй¶¡£
GA»Æ½ð¼×ADLabÔÚÈý´ó²Ù×÷ϵͳ(windows¡¢macos¡¢linux)£¬ÑéÖ¤É豸£¨Ô̺¬Ó×ÎǪ̀ʽµçÄÔ¡¢±Ê¼Ç±¾¼°·þÎñÆ÷É豸£©ÉÏʵÏÖÁË¡°¹í»ê¡±·ì϶ÑéÖ¤¹¤×÷¡£
±¾ÎijÁµã¶Ô¡°¹í»ê¡±·ì϶µÄ·ì϶µÄµÀÀí¡¢·ì϶ÑéÖ¤¡¢·çÏÕ¼°·À»¤½øÐнéÉÜ¡£
2 ·ì϶µÀÀí
ÓÉÓڸ߿ìCPUºÍµÍ¿ìÄÚ´æÖ®¼äµÄI/OÆ¿¾±£¬ÏÖ´ú´¦ÖÃÆ÷»áÀûÓÃÁ÷Ë®Ïß¼¼ÊõÌá¸ß»úÄÜ£¬Í¨¹ýÔ¤²âÏÂÒ»²½ÒªÖ´ÐеÄÖ¸Áî²¢Ìáǰ°ÑÕâЩָÁî·ÅÔÚÁ÷Ë®ÏßÉÏ£¬ÒÔÌá¸ß¿ìÂÊ¡£µ«ÊÇÈôÊÇ·¨Ê½ÓзÖÖ§Ìø×ªµÄ»°£¬ÕâЩÁ÷Ë®ÏßÉϵÄԤȡµÄÖ¸ÁȫÊý×÷·Ï, CPU±ØÒªÇå¿ÕËùÓеÄÖ¸Áî, ¶øºó¼ÓÔØÉäÖеØÖ·µÄÖ¸ÁÔÙ½«ºóÐøÖ¸Áî¼ÓÔØÔËÐС£
ÈôÊÇ·¨Ê½ÓÐ10¸ö·ÖÖ§µÄ»°£¬ÄÇôÁ÷Ë®ÏßÉÏԤȡµÄÖ¸ÁîÖ»Óкܵ͵ĸÅÂÊ£¨1/10£©»áÉäÖС£Òò¶øCPU±ØÒªÒ»ÖÖÔ¤²â¼¼ÊõÀ´Ìá¸ßÁ÷Ë®ÏßԤȡָÁîµÄÉäÖÐÂÊ£¬ÕâÒ»¼¼Êõ±»³ÆÎªCPU·ÖÖ§Ô¤²â¼¼Êõ¡£
CPU·ÖÖ§Ô¤²â¼¼ÊõÓÉCPU¶Ôº¹ÇàÖ¸ÁîµÄÖ´ÐÐÇé¿ö½øÐж¯Ì¬·ÖÎöºÍ½ø½¨£¬²¢½øÐÐÔ¤²â¡£Ôڸ߻úÄÜÍÆËã»úÖУ¬CPU·ÖÖ§Ô¤²âµÄ³É¹¦¸ÅÂÊÔÚ95%~98%Ö®¼ä£¬Õâ´ó´óÌá¸ßÁËÍÆËã»úµÄÔËËã»úÄÜ¡£Intel¹«Ë¾ÔÚ1995Äê·ÉԾϵÁÐCPUÆð¾ÍÒѾѡȡCPUÁ÷Ë®Ïß¼°·ÖÖ§Ô¤²â¼¼Êõ£¬Ä¿Ç°Ö÷Á÷µÄ¸ß»úÄÜCPU¶¼Ñ¡È¡ÕâЩ¼¼Êõ¡£
ÈôÊÇCPU·ÖÖ§Ô¤²âµÄÖ´ÐÐõè¾¶²»ÕýÈ·£¬ÆäºóÔÚÁ÷Ë®ÏßÉÏÎóÅв¢Ô¤È¡µÄÖ¸Áî×îÖÕ²¢²»»áÏÖʵִÐУ¬µ«ÊÇΪÁËÌá¸ß»úÄܵıØÒª£¬Á÷Ë®ÏßÖ´ÐÐʵÏÖºó²¢Ã»ÓжÔËùÓÐÔ¤ÅÐÖ´ÐеÄÏÖ³¡×öÆëÈ«»Ø¹ö£¬TLB»ò»º´æ×´Ì¬²¢Ã»Óб»»Ø¹ö£¬Õâ¾ÍÒýÈëÁ˰²È«ÎÊÌâ¡£
ÔÚÍÆËã»úϵͳÖлº´æÊÇCPUÔÚÖ´Ðз¨Ê½ÔËÐÐʱ¹²ÏíµÄÇøÓò£¬¹¥»÷Õßͨ¹ýÅÔ·¹¥»÷(Side Channel Attack)µÄ·½Ê½»ñÈ¡µ½»º´æµÄÄÚÈÝ¡£
ÈôÊǹ¥»÷ÕßÄÜ´¥·¢ÀûÓÃÖ´ÐÐÈ¥½Ó¼ûÖ¸¶¨µÄÃô¸ÐÊý¾ÝÇøÓòµÄ»°£¬¾Í¿ÉÄܶÁÈ¡µ½Õý±¾ÊÇÆäËüÓû§»ò¸ü¸ßÌØÈ¨µÄÃô¸ÐÊý¾Ý¡£
¸ü½øÒ»²½µÄCPU·ÖÖ§Ô¤²âµÄ¹ý³ÌÊÇÄܹ»±»Í¨³£È¨Ï޵ĶñÒⷨʽӰÏìµÄ£¬¹¥»÷ÕßÄܹ»»ú¹Ø³öÀàËÆROP£¨Return-oriented Programming£©¹¥»÷µÄÂ߼ȥӰÏìCPUµÄ·ÖÖ§Ô¤²â¹ý³Ì¡£
ÀûÓø÷ì϶Äܹ»ÓÐÒÔÏÂÈýÖÖ¹¥»÷³¡¾°£º
CVE-2017-5753(ÈÆ¹ýÄÚ´æ¸ôÀëÌìǵ²é³)£ºÍ¨¹ý¶ñÒâ´úÂ봫Ⱦ·ÖÖ§Ô¤²â£¬À´ÈƹýÄں˻òÐé¹¹»úµÄÄÚ´æ¶ÔÏóÌìǵ¼ì²â¡£ºÃ±Èͨ¹ý»ú¹ØµÄ¶ñÒâ´úÂëÀ´´¥·¢ÓÐÔ½½çµÄÊý¾Ýϱ꣬Ôì³ÉÄÚ´æÔ½½ç½Ó¼û£¬ÓÉÓÚÕâ¸ö½Ó¼û²Ù×÷ÊÇÓÉCPU×Ô¼ºÊµÏֵģ¬Äں˻òÐé¹¹»úµÄ·À»¤ÎÞ·¨Æðµ½×÷Óá£
CVE-2017-5715(·ÖÖ§Ö¸±ê×¢Èë)£º ´«È¾·ÖÖ§Ô¤²â¡£ÔÚ´óÐÍÈí¼þϵͳÈçä¯ÀÀÆ÷µÈÈí¼þ£¬¸ß¶È³éÏóÄ£Ð͵ĴúÂëÖÐÍùÍù´øÓмä½Óº¯ÊýÖ¸ÕëŲÓõÄÇé¿ö£¬CPUÔÚ´¦ÖÃʱ±ØÒª½øÐбØÒªµÄº¯ÊýÖ¸Õë½Ó¼û£¬ÎªÁËÌá¸ßI/O»úÄÜ£¬CPU»á½øÐзÖÖ§Ô¤²â£¬ÕâÑùµÄ»°¹¥»÷ÕßÄܹ»Í¨¹ýÀàËÆµÄROPµÄ·½Ê½À´½øÐÐÐÅϢй¶º¯ÊýÖ¸Õ룬´Ó¶øÈƹýµØÖ·Ëæ»ú»¯µÄ·À»¤¡£
¡°¶ñÒâÊý¾Ý¼ÓÔØ¡±£ºÔÚ²¿ÃÅCPUÉÏ£¬ÎªÁËÌá¸ß»úÄÜ£¬²¢²»ÊÇÿ´Î¶¼¶ÔÖ¸Áî×÷ȨÏ޲鳵쬲鳵ÄǰÌá´æÔڿ϶¨µÄȱµã£¬Ê¹µÃ¶ñÒâµÄÊý¾ÝÄܹ»±»¼ÓÔØµ½Êܱ£»¤µÄÇøÓò¡£
3 ·ì϶ÑéÖ¤
¹È¸è¹«Ë¾Project Zero°²È«ÍŶӽüÈÕ¹«¿ªÁ˹í»ê·ì϶µÄPOC(¸ÅÏëÑéÖ¤·¨Ê½)£¬²Î¿¼Á´½Ó£ºhttps://googleprojectzero.blogspot.com/2018/01/reading-privileged-memory-with-side.html¡£
POCÑÝʾÁ˽«Ò»¶Î»úÃÜÎÄ×Ö"The Magic Words are Squeamish Ossifrage." ·ÅÔÚÄÚ´æÖУ¬²¢Í¨¹ý·ì϶ÀûÓÃÅÔ··ÖÎöµÄ·½Ê½´Ó»º´æÖв²â³öÁ˸öÎÎÄ×ÖµÄÄÚÈÝ¡£
POCµÄ¹¥»÷ÖØÒª·ÖÈý¸ö²½Ö裬±ðÀëÊÇ´¥·¢CPU½øÐзÖÖ§Ô¤²â£¬Ó°ÏìCPUµÄ·ÖÖ§Ô¤²âÎóÅУ¬Ì½²â»º´æÊý¾Ý»ñÈ¡Ãô¸ÐÊý¾Ý¡£
¹¥»÷ÖØÒªÓÉreadMemoryByteº¯ÊýʵÏÖ¡£readMemoryByteº¯ÊýÊ×ÏÈÂÅ´ÎŲÓÃvictim_functionÕâÑù»á´¥·¢CPU·ÖÖ§Ô¤²â¼¼Êõ£¬CPU·ÖÖ§Ô¤²â¼¼ÊõÒÔΪÕë¶Ôx²ÎÊýµÄµØÖ·½Ó¼û£¬±ÉÈËÒ»´ÎŲÓÃʱ¿ÉÄÜÊÇÓÐЧµÄÖµ£¬ËùÒÔCPU»áÌáǰ½«array1[x]µÄÖµ³ï±¸ÔÚ»º´æÖС£
¶øºó£¬readMemoryByteº¯ÊýÏòvictim_function´«ÈëÒ»¸öÔ½½çÁìÓòµÄxÖµ²ÎÊý£¬Õâʱ³½CPU·ÖÖ§Ô¤²â¼¼Êõ½«»á²úÉúÎóÅУ¬¶øºó·¨Ê½Í¨¹ý½Ó¼ûarray2[array1[x] * 512]Õâ¶ÎµØÖ·ÁìÓòµÄÄÚÈÝ£¬½«array1[x]µÄÄÚÈÝй©ÔÚ»º´æÖС£
×îºó£¬ÎÒÃÇÄܹ»Ê¹Óõ¥Ò»µÄ»º´æË¢Ð»ººÍ´æÊý¾Ý̽²â¼¼Êõ£¬²Â²âarray2Êý×é¼ÓÔØÔÚ»º´æcache lineÖеÄÖµ£¬´Ó¶ø¶ÁÈ¡»úÃÜÎÄ×ÖµÄÄÚÈÝ¡£ÔÚPOCÖУ¬Ñ¡È¡ÁËÍÆËãÄÚ´æ½Ó¼ûÖ¸ÁîµÄÖ´Ðй¦·òÀ´²âÊÔÊÇ·ñÉäÖлº´æ£¨ÈôÊÇÉäÖлº´æ£¬ÔòÖ¸ÁîÖ´Ðй¦·ò»á±ÈÁ¦¶Ì£©£¬´Ó¶øÅжÏÊÇ·ñ³É¹¦¶ÁÈ¡µ½»úÃÜÎÄ×Ö¡£
ÔÚPOCÖлúÃÜÎÄ×Ö×î³õ²¢Ã»Óгʴ˿̻º´æÀµ«Êǹ¥»÷¹ý³ÌµÄµÚÒ»Âֵĵü´ú¾Í°ÑÖ¸±êµØÖ·Ð¹Â©ÔÚ»º´æÖУ¬ËùÒÔ¹¥»÷¹ý³ÌÄܹ»±»ÂÅ´ÎŲÓ㬴Ӷø¶ÁÈ¡µ½»úÃÜÎÄ×ÖµÄÈ«ÊýÄÚÈÝ¡£
3.1 ÑéÖ¤Á˾Ö
ÎÒÃDZðÀëÔÚÈýÌ¨ÍÆËã»úÉ϶Էì϶½øÐÐÁËÑéÖ¤£¬ÕâÈýÌ¨ÍÆËã»úµÄCPU±ðÀëÊÇIntelµÄi5-3317U¡¢i5-7360U¡¢i7-4790K´¦ÖÃÆ÷£¬²Ù×÷ϵͳ±ðÀëÊÇMac¡¢linux¡¢windows¡£
3.1.1 ³¢ÊÔ1
²Ù×÷ϵͳ£ºMACOSX Yosemite °æ±¾10.10.5
´¦ÖÃÆ÷Ãû³Æ£º Intel Core i5-3317U 1.7 G*2
3.1.2 ³¢ÊÔ2
²âÊÔ»·¾³£º ubuntu 16.04 LTS
Äں˰汾 4.10.0-42 64λ
´¦ÖÃÆ÷Ðͺţºintel core i5-7360U cpu 2.30GHZ*4
3.1.3 ³¢ÊÔ3
²Ù×÷ϵͳ£ºwin10
CPUÐͺţºintel core i7-4790K cpu 4.00GHZ*4
4 ¹í»ê·ì϶µÄÓ°Ïì΢·çÏÕ
¹í»ê·ì϶ӰÏìµ½ÏÕЩËùÓеIJÙ×÷ϵͳ¼°ÍÆËã»úÉ豸¡£
ÓÉÓÚ¹í»ê·ì϶ÆðÒòÓÚCPU·ÖÖ§Ô¤²â¼¼ÊõµÄȱµã£¬¸Ã¼¼ÊõÔÚ1995ÄêÆð¾ÍÒ»ÏòÊǸ߻úÄÜCPU±êÅäµÄ¼¼Êõ¡£Ä¿Ç°Ö÷Á÷°²È«¼¼ÊõËùѡȡµÄ¹ý³Ì¸ôÀ룬Óû§¿Õ¼äºÍÄں˵ØÖ·¸ôÀ룬¶à×â»§µÄÐé¹¹¸ôÀë·À»¤¼¼Êõ¼°É³Ïä¸ôÀë¼¼ÊõÔÚÕâÒ»·ì϶ÏÂÈ«ÊýʧЧ¡£
¹í»ê·ì϶¶Ô¶à×⻧ϵÄÔÆ·þÎñϵͳӰÏì±ÈÁ¦´ó£¬¹¥»÷ÕßÔÚÔÆÆ½Ì¨Í¨¹ý±¾µØµÄͨ³£µÄ½Ó¼ûȨÏÞ¾ÍÄܹ»¶ÁÈ¡ÔÆÆ½Ì¨µÄÃô¸ÐÐÅÏ¢£¬Îª½øÒ»²½»ñµÃ¸ü¸ßµÄȨÏ޺ͻñµÃ»úÃÜÊý¾ÝÌṩÁË¿ÉÄÜ¡£
¸Ã·ì϶µÄ·çÏÕ»¹ÔÚÓÚ¹¥»÷ÕßÄܹ»Í¨¹ý¸Ã·ì϶Զ³ÌÌáÒé¹¥»÷£¬µ±Ö¸±êÉ豸½Ó¼ûÔ¶³Ì·þÎñÆ÷µÄÍøÒ³Ê±£¬¹¥»÷ÕßÄܹ»Í¨¹ý¶ñÒâjs½ÅÕý±¾»ñµÃÖ¸±êÉ豸ÉϵÄÃô¸ÐÐÅÏ¢£¬Èç±£ÁôÔÚÄÚ´æÖеÄÃÜÂëCookieµÈ¡£
¹í»ê·ì϶ÊÜÓ°ÏìµÄ´¦ÖÃÆ÷²»½öÔ̺¬intel£¬¸ßͨ£¬AMD,ARMµÈ³§¼Ò,ϱíΪÒÑÖªµÄÊÜÓ°ÏìµÄintel´¦ÖÃÆ÷ÁÐ±í£¨Êý¾ÝÀ´×Ôintel¹ÙÍø£©£º
5 ·ì϶µÄ·À»¤
1.Ãô¸ÐÊý¾Ý½Ó¼ûºÍÔËË㾡¿ÉÄÜÔÚ¶ÀÁ¢µÄ°²È«Ð¾Æ¬ÉÏÔËÐУ¬Ê¹µÃͨ³£È¨ÏÞµÄÖ´Ðл·¾³ºÍ¸ßȨÏÞµÄÖ´Ðл·¾³ÔÚÎïÀíÉϸôÀ룬´Ó¶øÔ¤·ÀÃô¸ÐÐÅϢй©¡£
2.ʵʱÉý¼¶²¹¶¡£¬³ö¸ñÊǹ«ÓÐÔÆÆ½Ì¨¡£ÓÉÓÚÔÆ·þÎñϵͳµÄÖØ´ó¡¢¸´ÔÓ£¬ÔÆ·þÎñ³§¼ÒÓ¦¾¡ÔçµØ½øÐзì϶½¨²¹£¬Ô¤·À¹Ø¼üÊý¾ÝºÍÒþÖÔµÄй¶¡¢µÇ½ƾ֤±»ÇÔÈ¡µ¼ÖÂÁ¬Ëø¹¥»÷µÈ´ÎÉúÔÖº¦¡£
3.Ŀǰ»ùÓÚÈí¼þ²¹¶¡Ö»ÊÇ×öÁËһʱ¸ôÀ룬ÈçTLB¸ôÀëµÈ£¬µ«Êǽ«À´½«»áÓÐÒ»Ð©ÈÆ¹ý¼¼Êõ»á³öÏÖ£¬¸ü»»Ó²¼þ²ÅÊdz¹µ×½¨¸´Õâ¸öÎÊÌâµÄ¹Ø¼ü¡£
4.ÔÚÈíÓ²¼þÉè¼Æ·½Ã棬¿ª·¢Õß±ØÒªË¼¿¼»úÄܺͰ²È«ÐÔÖ®¼ä»ñµÃƽºâ¡£


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