¿Ðý¹ú¼ÊÓÎÏ·ADLab£ºCPU¡°ÓÄÁ顱Îó²îÆÊÎöÓëÑéÖ¤
Ðû²¼Ê±¼ä 2018-01-081 ǰ ÑÔ
¿ËÈÕ£¬£¬£¬£¬£¬£¬CPUµ×²ãÎó²îÇå¾²ÊÂÎñÒѾ²¨¼°È«ÇòÏÕЩËùÓеÄÊÖ»ú¡¢µçÄÔ¡¢ÔÆÅÌËã²úÆ·¡£¡£¡£¡£¡£Õâ´ÎµÄÎó²î»®·ÖÆðÃûMeltdown(Íß½â)ºÍSpectre(ÓÄÁé)¡£¡£¡£¡£¡£ÕâÁ½¸öÎó²î¿ÉÄÜ»áÔì³ÉÊܱ£»£»£»£»£»£»¤µÄÃÜÂë¡¢Ãô¸ÐÐÅϢй¶¡£¡£¡£¡£¡£
¿Ðý¹ú¼ÊÓÎÏ·ADLabÔÚÈý´ó²Ù×÷ϵͳ(windows¡¢macos¡¢linux)£¬£¬£¬£¬£¬£¬Ñé֤װ±¸£¨°üÀ¨Ð¡ÎÒ˽¼Ǫ̀ʽµçÄÔ¡¢Ìõ¼Ç±¾¼°Ð§ÀÍÆ÷×°±¸£©ÉÏÍê³ÉÁË¡°ÓÄÁ顱Îó²îÑéÖ¤ÊÂÇé¡£¡£¡£¡£¡£
±¾ÎÄÖØµã¶Ô¡°ÓÄÁ顱Îó²îµÄÎó²îµÄÔÀí¡¢Îó²îÑéÖ¤¡¢Î£º¦¼°·À»¤¾ÙÐÐÏÈÈÝ¡£¡£¡£¡£¡£
2 Îó²îÔÀí
ÓÉÓÚ¸ßËÙCPUºÍµÍËÙÄÚ´æÖ®¼äµÄI/OÆ¿¾±£¬£¬£¬£¬£¬£¬ÏÖ´ú´¦Öóͷ£Æ÷»áʹÓÃÁ÷Ë®ÏßÊÖÒÕÌá¸ßÐÔÄÜ£¬£¬£¬£¬£¬£¬Í¨¹ýÕ¹ÍûÏÂÒ»²½ÒªÖ´ÐеÄÖ¸Áî²¢Ìáǰ°ÑÕâЩָÁî·ÅÔÚÁ÷Ë®ÏßÉÏ£¬£¬£¬£¬£¬£¬ÒÔÌá¸ßËÙÂÊ¡£¡£¡£¡£¡£¿ÉÊÇÈôÊdzÌÐòÓзÖÖ§Ìø×ªµÄ»°£¬£¬£¬£¬£¬£¬ÕâЩÁ÷Ë®ÏßÉϵÄԤȡµÄÖ¸ÁËùÓÐ×÷·Ï, CPUÐèÒªÇå¿ÕËùÓеÄÖ¸Áî, È»ºó¼ÓÔØÖÀÖеصãµÄÖ¸Á£¬£¬£¬£¬£¬ÔÙ½«ºóÐøÖ¸Áî¼ÓÔØÔËÐС£¡£¡£¡£¡£
ÈôÊdzÌÐòÓÐ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 Ñé֤Ч¹û
ÎÒÃÇ»®·ÖÔÚÈý̨ÅÌËã»úÉ϶ÔÎó²î¾ÙÐÐÁËÑéÖ¤£¬£¬£¬£¬£¬£¬ÕâÈý̨ÅÌËã»úµÄ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.ÔÚÈíÓ²¼þÉè¼Æ·½Ã棬£¬£¬£¬£¬£¬¿ª·¢ÕßÐèҪ˼Á¿ÐÔÄܺÍÇå¾²ÐÔÖ®¼äÈ¡µÃƽºâ¡£¡£¡£¡£¡£