¶«Éƽ̨ADLab£ºCPU¡°ÓÄÁ顱©¶´·ÖÎöÓëÑéÖ¤
Ðû²¼Ê±¼ä 2018-01-081 Ç° ÑÔ
½üÈÕ£¬CPUµ×²ã©¶´Äþ¾²Ê¼þÒѾ²¨¼°È«Çò¼¸ºõËùÓеÄÊÖ»ú¡¢µçÄÔ¡¢ÔƼÆËã²úÎï¡£Õâ´ÎµÄ©¶´·Ö±ðÆðÃûMeltdown(Íß½â)ºÍSpectre(ÓÄÁé)¡£ÕâÁ½¸ö©¶´¿ÉÄÜ»áÔì³ÉÊܱ£»¤µÄÃÜÂë¡¢Ãô¸ÐÐÅϢй¶¡£
¶«Éƽ̨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 ÑéÖ¤½á¹û
ÎÒÃÇ·Ö±ðÔÚÈý̨¼ÆËã»úÉ϶Ô©¶´½øÐÐÁËÑéÖ¤£¬ÕâÈý̨¼ÆËã»úµÄ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.ÔÚÈíÓ²¼þÉè¼Æ·½Ã棬¿ª·¢ÕßÐèÒª¿¼ÂÇÐÔÄܺÍÄþ¾²ÐÔÖ®¼äÈ¡µÃƽºâ¡£