WPA2 ¡°KRACK¡± ·ì϶¼ò½éÓë³ÁÏÖ

°ä²¼¹¦·ò 2018-01-24

1¡¢¸ÅÊö

        2017Äê10Ô £¬±ÈÀûʱ°²È«×êÑÐÔ±Mathy VanhoefÅû¶ÁËÎÞÏßÍøÂçºÍ̸WPA2´æÔÚ¸ßΣ·ì϶ £¬·ì϶ÔÊÐí¹¥»÷Õß¼àÌýAPºÍ½ÓÈëµãSTAÖ®¼ä´«ÊäµÄWi-FiÊý¾ÝÁ÷Á¿¡£×÷Õß°ä²¼ÁË·ì϶ÑéÖ¤ÑÝʾÊÓÆµ[1][2]¡£ÓÉÓÚ·ì϶´æÔÚÓÚWiFiºÍ̸²ã £¬ÀíÂÛÉÏËùÓÐÖ§³ÖWPA2µÄ¿Í»§¶Ë£¨×ÀÃæ²Ù×÷ϵͳ¡¢Òƶ¯OS¡¢Â·ÓÉÆ÷¡¢ÎïÁªÍøÉ豸µÈ£©¶¼½«Êܵ½¡°KRACK¡±¹¥»÷µÄÓ°Ï죨Æä͸¹ýWiFi´«ÊäµÄÊý¾Ý´æÔÚ±»´Û¸Ä¡¢Ðá̽µÄ·çÏÕ £¬ÖîÈç±»¹¥»÷ÕßµÄÖ§¸¶¡¢²Æ¸»Õ˺š¢Óû§Ãû¡¢ÃÜÂë¡¢Óʼþ¡¢ÕÕÆ¬µÈÃô¸ÐÐÅÏ¢¿É±»½Ø»ñ £¬·çÏÕ´óÓ°ÏìÁìÓò¹ã£©¡£

        ±¦ÔËÀ³¹Ù·½ÍøÕ¾ADLabͨ¹ý¶ÔÈ«ÁãÃÜÔ¿·ì϶µÄ·ÖÎö³É¹¦³ÁÏÖ¡°KRACK¡±¹¥»÷¡£

2¡¢ºÍ̸¼ò½é

        802.11iÊÇIEEE¹¤×÷×éΪÎÞÏßÍøÂç802.11ºÍ̸×é½ç˵µÄ°²È«³ß¶È¡£WPAʵÏÖÁËIEEE 802.11i³ß¶ÈµÄ´ó²¿ÃÅ £¬ÊÇÔÚ802.11iÍêÕû֮ǰ´úÌæWEPµÄ¹ý¶É¹æ»® £¬ºó±»WPA2È¡´ú[3]¡£WPAºÍWPA2¶¼ÊÇ»ùÓÚ802.11i £¬Çø±ðÔÚÓÚWPA2ÒªÇóÖ§³Ö¸ü°²È«µÄCCMP¡£WPAºÍWPA2¾ùʹÓÃ802.11iÖнç˵µÄËÄ´ÎÎÕÊÖ¡£

        ÏÂͼÊǿͻ§¶Ë£¨Station, STA£©ÏνӽÓÈëµã£¨Access Point, AP£©µÄÐÂÎŽ»»¥¹ý³Ì¡£

±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾

        STAºÍAPÔÚËÄ´ÎÎÕÊÖÖÐЭÉ̻ỰÃÜÔ¿PTK£¨Pairwise Transient Key£© £¬PTKÊÇÓÉPMKºÍPKEÍÆËãÌìÉú £¬¶øPMKÓÉANonce¡¢SNonceºÍË«·½MACµØÖ·µÈÍÆËãÌìÉú¡£PTK·ÖΪKCK £¬KEKºÍTKÈý²¿ÃÅ £¬ÆäÖÐ £¬KCKÓÃÓÚMICУÑé £¬KEKÓÃÓÚ¼ÓÃÜGTK £¬TKΪÊý¾Ý¼ÓÃÜÃÜÔ¿¡£ËÄ´ÎÎÕÊÖʵÏÖºó £¬´«ÊäÊý¾ÝʹÓÃTK½øÐмÓÃÜ¡£

±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾

3¡¢·ì϶µÀÀí

        wpa_supplicantÊÇlinuxϵͳÏÂWiFi¿Í»§¶Ë £¬ÓÃÓÚÏνÓÎÞÏßÍøÂç £¬Android WiFiϵͳÒýÈëÁËwpa_supplicant £¬ËüµÄÕû¸öWiFiϵͳÊÇÒÔwpa_supplicantΪÖ÷ÌâÀ´½ç˵ÉϲãÓû§½Ó¿ÚºÍ»ù²ãÇý¶¯½Ó¿Ú¡£

        ÏÂͼΪwpa_supplicant°æ±¾°ä²¼¹¦·òÏß¡£Android 6.0 WiFiϵͳÊÇ»ùÓÚv2.5 £¬Android 6.0+ WiFiϵͳÊÇ»ùÓÚv2.6¡£

±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾

        v2.4°æ±¾ÒýÈëÁËÒ»¸öÈ«ÁãÃÜÔ¿·ì϶¡£Õâ¸ö·ì϶ÊÇÓÉ802.11³ß¶ÈÖеÄÒ»¾ä»°ÒýÆðµÄ £¬¸Ã³ß¶È¼ä½Ó½¨ÒéÔÚ×°ÖÃÁËTKÖ®ºó´ÓÄÚ´æ¶Ï¸ùTK £»2016Äê10Ô°䲼µÄV2.6¶ÔÕâ¸ö·ì϶½øÐÐÁËÒ»´Î½¨¸´ £¬ÓÉÓÚ˼¿¼²»È«Ãæ £¬´úÂëÒÀÈ»´æÔÚ·ì϶ £»ÔÚ2017Äê10Ô°䲼µÄ²¹¶¡ÖÐ £¬×îÖÕ½¨¸´ÁËÕâ¸ö·ì϶¡£ÏÂÃæ½áºÏ´úÂë¶Ô·ì϶½øÐоßÌå·ÖÎö¡£

3.1.  V2.4(2.5)

        wpa_supplicant 2.4(2.5) ËÄ´ÎÎÕÊÖÖеÄ×´Ì¬×ªÒÆÈçÏÂͼËùʾ£º

        £¨1£©µ±Ïνӵ½ÎÞÏßÍøÂç½øÐÐËÄ´ÎÎÕÊÖµÄʱ³½ £¬Ê×ÏȽøÈëPTK_INIT״̬¡£

        £¨2£©µ±½Ó¹Üµ½Msg1ʱ £¬½øÈëPTK-START½×¶Î¡£wpa_supplicant»áËæ»úÌìÉúÒ»¸öSNonce £¬ÍÆËãÒ»¸öһʱPTK£¨TPTK£© £¬²¢ÇÒÔÚMsg2Öн«SNonce·¢Ë͸øAP¡£

        £¨3£©µ±½Ó¹Üµ½Msg3ʱ £¬ÈôÊÇMICºÍreplay counterУÑé³É¹¦ £¬½øÈëPTK-NEGOTIATING״̬¡£¶øºó½«TPTK¸³Öµ¸øPTK £¬²¢·¢ËÍMsg4¡£

        £¨4£©½Ó׎øÈëPTK-DONE½×¶Î £¬×°ÖÃPTKºÍGTK £¬²¢ÇÒ´ò¿ª802.1xµÄ¶Ë¿Ú £¬Ê¹wpa_supplicantºÍAPÕý³£½Ó¹ÜºÍ·¢ËÍÊý¾Ý°ü¡£

        ÓÉÓÚÎÞÏßÍøÂç´æÔÚ×ÌÈÅ £¬¿ÉÄÜ»áÔì³ÉÊý¾ÝÖ¡µÄÃÔʧ £¬Òò¶øÔÚ802.11i»®¶¨ÈôÊÇAPûÓÐÊÕµ½Msg2ºÍMsg4 £¬»áÏàÓ¦µÄ³Á´«Msg1ºÍMsg3¡£´ÓͼÖÐÄܹ»¿´³ö £¬µ±ÊµÏÖPTK×°Öúó £¬ÈôÊÇÊÕµ½³Á´«µÄMsg3 £¬»á³ÁÐÂ×°ÖÃPTK¡£

±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾

        µ±wpa_supplicantÊÕµ½Msg3ºó £¬»áŲÓÃwpa_supplicant_install_ptkº¯Êý×°ÖÃPTK £¬ÆäÖÐwpa_sm_set_keyº¯ÊýÕÆ¹Ü½«ÃÜÔ¿PTK.TK×°Öõ½Çý¶¯¡£ÔÚsupplicant v2.4(v2.5)ÖÐ £¬ÔÚŲÓÃwpa_sm_set_keyº¯ÊýʵÏÖPTKµÄ×°Öúó £¬Ö´ÐÐos_memset(sm->ptk.tk, 0, WPA_TK_MAX_LEN) £¬¶ÔPTK.TK½øÐÐÇåÁã²Ù×÷¡£

        ÈôÊǹ¥»÷Õß½Ù³ÖMsg3»òMsg4 £¬Ôì³ÉMsg3µÄ³Á´« £¬Æ¾¾Ý×´Ì¬×ªÒÆÍ¼ £¬STA»á³ÁÐÂ×°ÖÃPTK £¬¶øPTK.TK֮ǰÒѾ­±»ÇåÁã £¬µ¼ÖÂSTA×°ÖÃÈ«Áã¼ÓÃÜÃÜÔ¿¡£

±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾

3.2.  V2.6

        ÏÂÃæ½áºÏV2.5ºÍV2.6µÄÔ´´úÂë½øÐзÖÎö¡£

        £¨1£©V2.6ÔÚwpa_sm½á¹¹ÌåÖÐÔö³¤ÁËÒ»¸ö±ê־λtk_to_set¡£

±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾

        £¨2£©V2.6Åú¸ÄÁËwpa_supplicant_install_ptkº¯Êý¡£ÔÚ×°ÖÃÍêPTKºó £¬½«tk_to_set¸³ÖµÎª0 £¬µ±ÔٴνøÈë¸Ãº¯Êýʱ £¬ÈôÊÇtk_to_set==0 £¬Ö±½Óreturn £¬²»ÔÙ³Á×°PTK¡£

±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾

        £¨3£©V2.6Åú¸Äwpa_supplicant_process_1_of_4º¯Êý¡£µ±Ã¿´ÎÊÕµ½Msg1ʱ £¬ÍÆËãtptk £¬²¢½«tk_to_set³ÁÖÃΪ1¡£

±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾

        Õë¶ÔV2.6 £¬¹¥»÷Õßͨ¹ýÔÚ³Á´«µÄMsg3֮ǰ²åÈëÒ»¸öαÔìµÄMsg1 £¬ÒÀÈ»Äܹ»ÊµÏÖÈ«ÁãÃÜÔ¿µÄ×°Ö᣹ÌÈ»STA³õ´Î×°ÖÃPTKºó¶Ôtk_to_set½øÐÐÇåÁã £¬µ«Êǽô½Ó´¦ÖÃαÔìµÄ Msg1ʱ £¬½«tk_to_set³ÁÖÃΪ1 £¬Òò¶øÔÚ×îºó´¦ÖóÁ´«Msg3ʱ £¬³É¹¦Èƹýwpa_supplicant_install_ptkº¯ÊýµÄtk_to_setǰÌáÅжϴúÂë¡£

        ÔÚ2017Äê10Ô°䲼µÄ²¹¶¡ÖÐ £¬É¾³ýÁËwpa_supplicant_process_1_of_4º¯ÊýÖеÄsm->tk_to_set = 1;Óï¾ä £¬½¨¸´ÁËÈ«ÁãÃÜÔ¿·ì϶¡£

4¡¢·ì϶³ÁÏÖ

        ±¦ÔËÀ³¹Ù·½ÍøÕ¾ADLab ¡°KRACK¡±³ÁÏÖÊÓÆµµØÖ·Îª£ºhttps://v.qq.com/x/page/m0538vcwqbb.html ¡£

        ÊÓÆµÖгöÏֵIJ½Öè¼°ÌáÐÑ×ÖÄ»£º

        1.±¾³¢ÊÔʹÓÃNexus6ÊÖ»ú×÷Ϊ±»¹¥»÷É豸¡£

        2.Ê×ÏÈ £¬NexusÏνӵ½ÕæÊµAP(SSID=wap £¬¼ÓÃÜ·½Ê½ÊÇWPA2 £¬ÐÅ·10 £¬ÆµÂÊ2457)¡£

        3.½Ó×Å £¬ÔËÐÐHostapd´´½¨¿Ë¡AP(SSID=wap £¬¼ÓÃÜ·½Ê½ÊÇWPA2 £¬ÐÅ·3 £¬ÆµÂÊ2422)¡£

        4.ͬʱ £¬Æô¶¯wireshark¼àÌý¿Ë¡APÍø¿¨ £¬²¶»ñ¿Í»§¶ËÊý¾Ý¡£

        5.ÔËÐй¥»÷¾ç±¾ £¬Ö¸¶¨APµÄSSIDºÍNexusµÄMacµØÖ·¡£

        6.ÔËÐÐssltrip,½øÐÐHttps½µ¼¶¡£

        a.wiresharkÏÔʾÁ˳ÉÁ¢ÏνӵÄÊý¾Ý°ü¡£

        b.¹¥»÷³É¹¦ £¬NexusÏνӵ½¿Ë¡wap £¬ÆµÂÊ2422¡£

        c.½Ó¼ûuk.match.com ÏÔʾµ±Ç°ÏνÓΪhttpÏνÓ £¬ÊäÈë²âÊÔÓû§ÃûºÍÃÜÂë¡£

        d.wiresharkÄܹ»³É¹¦²¶»ñÓû§ÃûºÍÃÜÂë¡£

        e.¹Ø¹ØHostapd£¨ÆµÂÊ2422£©¡£

        f.³ÁÐÂÏνӵ½ÕæÊµwap£¨ÆµÂÊ2457£© £¬ÔٴνӼûuk.match.com ÏÔʾÏνÓΪhttpsÏνÓ¡£

        ϱíÖÐÁгöÁ˳ÁÏÖÊÓÆµÖÐʹÓõÄÉ豸£º

±¦ÔËÀ³¡¤(ÖйúÇø)×îйٷ½ÍøÕ¾

5¡¢·ì϶±àºÅ¼°½¨¸´Çé¿ö

        ¡°KRACK¡±Éæ¼°µÄÓйطì϶±àºÅ£º

        CVE-2017-13077: ÔÚËÄ´ÎÎÕÊÖÖгÁ×°³É¶Ô¼ÓÃÜÃÜÔ¿£¨PTK-TK£©

        CVE-2017-13078: ÔÚËÄ´ÎÎÕÊÖÖгÁ×°×éÃÜÔ¿£¨GTK£©

        CVE-2017-13079: ÔÚËÄ´ÎÎÕÊÖÖгÁ×°ÆëÈ«×éÃÜÔ¿£¨IGTK£©

        CVE-2017-13080: ÔÚ×éÃÜÔ¿ÎÕÊÖÖгÁ×°×éÃÜÔ¿£¨GTK£©

        CVE-2017-13081: ÔÚ×éÃÜÔ¿ÎÕÊÖÖгÁ×°ÆëÈ«×éÃÜÔ¿£¨IGTK£©

        CVE-2017-13082: ½ÓÊܳÁд«ÊäµÄ¼±¾çBSSÇл»£¨FT£©³ÁйØÁªÒªÇó £¬³Á×°³É¶Ô¼ÓÃÜÃÜÔ¿£¨PTK-TK£©

        CVE-2017-13084: ÔÚPeerKeyÎÕÊÖÖгÁ×°STKÃÜÔ¿

        CVE-2017-13086: ÔÚTDLS£¨Tunneled Direct-Link Setup£©ÎÕÊÖÖгÁ×°TDLS PeerKey£¨TPK£©

        CVE-2017-13087: ´¦ÖÃÎÞÏßÍøÂçÖÎÀí£¨WNM£©ÐÝÃßģʽÏìӦ֡ʱ³Á×°×éÃÜÔ¿£¨GTK£©

        CVE-2017-13088: ´¦ÖÃÎÞÏßÍøÂçÖÎÀí£¨WNM£©ÐÝÃßÏìӦ֡ʱ³Á×°ÆëÈ«×éÃÜÔ¿£¨IGTK£©

        ½¨¸´Çé¿ö£º

        2017Äê10ÔÂ2ÈÕ £¬LinuxµÄhostapdºÍwpa_supplicant ²¹¶¡ÒѰ䲼 £¬Ïê¼û https://w1.fi/security/2017-1/¡£

        2017Äê10ÔÂ10ÈÕ £¬Î¢ÈíÔÚWindows 10 ²Ù×÷ϵͳÖа䲼²¹¶¡ KB4041676¡£

        Æ»¹ûÔÚ×îÐ嵀 beta °æ±¾iOS¡¢macOS¡¢ tvOSºÍ watchOSÖн¨¸´ÁËÎÞÏßÍøÂ簲ȫ·ì϶¡£

6¡¢²Î¿¼Á´½Ó

        [1]https://www.krackattacks.com/

        [2]https://papers.mathyvanhoef.com/ccs2017.pdf

        [3]https://zh.wikipedia.org/wiki/WPA