OG¶«·½ÌüADLab£º£ºCPU¡°¹í»ê¡±·ì϶·ÖÎöÓëÑéÖ¤
°ä²¼¹¦·ò 2018-01-081 ǰ ÑÔ
½üÈÕ£¬£¬CPUµ×²ã·ì϶°²È«ÊÂÎñÒѾ²¨¼°È«ÇòÏÕЩËùÓеÄÊÖ»ú¡¢¡¢µçÄÔ¡¢¡¢ÔÆÍÆËã²úÆ·¡£Õâ´ÎµÄ·ì϶±ðÀëÆðÃûMeltdown(±ÀÀ£)ºÍSpectre(¹í»ê)¡£ÕâÁ½¸ö·ì϶¿ÉÄÜ»áÔì³ÉÊܱ£»¤µÄÃÜÂë¡¢¡¢Ãô¸ÐÐÅϢй¶¡£
OG¶«·½ÌüADLabÔÚÈý´ó²Ù×÷ϵͳ(windows¡¢¡¢macos¡¢¡¢linux)£¬£¬ÑéÖ¤É豸£¨Ô̺¬Ð¡ÎǪ̀ʽµçÄÔ¡¢¡¢±Ê¼Ç±¾¼°·þÎñÆ÷É豸£©ÉÏʵÏÖÁË¡°¹í»ê¡±·ì϶ÑéÖ¤¹¤×÷¡£
±¾ÎÄÖØµã¶Ô¡°¹í»ê¡±·ì϶µÄ·ì϶µÄµÀÀí¡¢¡¢·ì϶ÑéÖ¤¡¢¡¢Î£º£º¦¼°·À»¤½øÐнéÉÜ¡£
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ºÅ