Ò»¡¢°²×¿Æ½Ì¨ÌØÊâÐèÇóÆÊÎö
Ïà½ÏÓÚiOSϵͳ£¬°²×¿Æ½Ì¨µÄ¿ª·ÅÉú̬ΪլÄÐÉîÒ¹ÀûÆ÷ÀàÓ¦ÓÃÌṩÁ˸ü´óµÄÉúÑĿռ䡣Óû§ÔÚÑ¡ÔñÊÖ»ú°æÏÂÔØÊ±ÐèÌØÊâ×¢ÖØÓ¦Óð汾Óë×°±¸µÄ¼æÈÝÐÔ£¬½¨ÒéÓÅÏÈÑ¡ÔñAPKÃûÌÃ×°Öðü£¨AndroidÓ¦ÓóÌÐò°ü£©¡£Ò¹¼äÓéÀÖÈí¼þµÄÔËÐÐÇéÐÎÐèÒªÖØµã˼Á¿×°±¸´æ´¢¿Õ¼ä¡¢´¦Öóͷ£Æ÷ÐÔÄܵÈÒòËØ£¬°²×¿11¼°ÒÔÉÏϵͳ°æ±¾¸üÓÐÀûÓÚ°ü¹ÜÓ¦ÓõÄÎȹÌÔËÐС£
¶þ¡¢¹Ù·½ÏÂÔØÇþµÀʶ±ð¼¼ÇÉ
Ä¿½ñ°²×¿Ó¦ÓõÄÏÂÔØÊг¡ÓãÁú»ìÔÓ£¬ÔõÑùÇø·ÖÕý°æÕ¬ÄÐÉîÒ¹ÀûÆ÷app³ÉΪҪº¦¡£ÍƼö´Ó¿ª·¢Õß¹ÙÍø»ñȡװÖðü£¬×¢ÖØÊÓ²ìÏÂÔØÁ´½ÓÖеÄHTTPSÇå¾²±êʶ¡£¹Ù·½°æ±¾Í¨³£¾ß±¸ÍêÕûµÄÊý×ÖÊðÃûÖ¤Ê飬װÖÃǰ¿Éͨ¹ýMD5УÑ鹤¾ßºË²éÎļþÍêÕûÐÔ¡£Óöµ½ÒªÇó¶ÁȡͨѶ¼µÈÒ쳣ȨÏÞÇëÇóʱ£¬Ó¦Á¬Ã¦ÖÕÖ¹×°ÖÃÀú³Ì¡£
Èý¡¢·Ö²½×°ÖÃÁ÷³ÌÏê½â
Íê³ÉÏÂÔØºó£¬½øÈ밲׿װ±¸µÄÉèÖò˵¥¿ªÆô"ÔÊÐíδ֪ȪԴӦÓÃ×°ÖÃ"Ñ¡Ïî¡£ÔÚÎļþÖÎÀíÆ÷¶¨Î»APKÎļþºó£¬ÏµÍ³»áµ¯³öÏêϸȨÏÞ˵Ã÷Ò³Ãæ¡£ÂÄÀú¸»ºñµÄÓû§¶¼ÖªµÀ£¬´ËʱÐèÒª×ÐϸºË¶ÔÉêÇëµÄ24ÏîϵͳȨÏÞÊÇ·ñºÏÀí¡£½¹µã¹¦Ð§È¨ÏÞÓ¦±£´æ£¬¶øµØÀíλÖõȷÇÐëҪȨÏÞ½¨ÒéÊÖ¶¯¹Ø±Õ¡£×°ÖÃÍê³ÉºóÇмǹرÕδ֪ȪԴװÖÿª¹Ø£¬Õâ¸ö²Ù×÷ÄÜÏÔÖøÌáÉý×°±¸Ç徲Ʒ¼¶¡£
ËÄ¡¢Ò¹¼äģʽ¹¦Ð§µ÷ÊÔÒªµã
Õ¬ÄÐÉîÒ¹ÀûÆ÷appµÄ×î´óÌØÉ«ÔÚÓÚÆäÖÇÄÜÒ¹¼äģʽ£¬Óû§ÐèÔÚÏÔʾÉèÖÃÖе÷½âɫβÎÊýÒÔ×èÖ¹ÊÓ¾õÆ£ÀÍ¡£×¨Òµ²âÊÔÏÔʾ£¬½«ÆÁÄ»ÁÁ¶È¿ØÖÆÔÚ120ÄáÌØÒÔÏ¡¢É«Îµ÷ÖÁ2700Kʱ£¬¿É×î´óÏ޶ȽµµÍÀ¶¹âΣÏÕ¡£Í¬²½ÆôÓð²×¿ÏµÍ³µÄÊý×Ö¿µ½¡¹¦Ð§£¬ºÏÀíÉèÖÃÓ¦ÓÃʹÓÃʱ³¤ÏÞÖÆ£¬ÕâÊǼá³Ö¿µ½¡ÓéÀÖϰ¹ßµÄÖ÷Òª²½·¥¡£
Îå¡¢³£¼ûÎÊÌâ½â¾öÖ¸ÄÏ
ƵÈÔÉÁÍËÊÇÓû§·´Ïì×î¶àµÄÎÊÌ⣬Õâͨ³£Ô´ÓÚ×°±¸ÄÚ´æÈ±·¦»òϵͳ°æ±¾¹ýµÍ¡£½¨Òé°´ÆÚÕûÀíºǫ́Àú³Ì£¬²¢Í¨¹ý¿ª·¢ÕßÑ¡ÏîÖеÄGPUäÖȾÉèÖÃÓÅ»¯ÐÔÄÜ¡£µ±Óöµ½ÍøÂçÅþÁ¬Ò쳣ʱ£¬¿ÉʵÑéÔÚVPNÇéÐÎÏÂÇл»²î±ðÏß·¡£Êý¾ÝÒ쳣ɥʧµÄÇéÐΣ¬ÍùÍùÐèҪͨ¹ýÓ¦ÓÃÄÚ±¸·Ý¹¦Ð§¾ÙÐлָ´£¬Òò´ËÑø³É°´ÆÚÔÆÍ¬²½µÄϰ¹ßÓÈΪÖ÷Òª¡£
ͨ¹ýÉÏÊöÎå¸öά¶ÈµÄϵͳ½â˵£¬°²×¿Óû§Ó¦µ±ÄÜ˳ËìÍê³ÉÕ¬ÄÐÉîÒ¹ÀûÆ÷appÊÖ»ú°æµÄÏÂÔØ×°ÖÃÓëÓÅ»¯ÉèÖ᣼Ç×ÅÇ徲ʼÖÕÊÇÖ÷ÒªÔÔò£¬°´ÆÚ¼ì²éÓ¦ÓøüС¢ÊµÊ±ÕûÀí»º´æÊý¾Ý£¬²Å»ªÒ»Á¬»ñµÃÓÅÖÊÒ¹¼äÓéÀÖÌåÑé¡£ÔÚÏíÊܿƼ¼±ãµ±µÄͬʱ£¬ÇëÎñ±Ø×¢ÖغÏÀí°²ÅÅʹÓÃʱ¼ä£¬¼á³Ö¿µ½¡¼ÍÂɵÄÉúÑÄ·½·¨¡£
Ò»¡¢SSL/TLSÐÒéÔÚiOSÍøÂçͨѶÖеÄÒªº¦×÷ÓÃ
SSL/TLS£¨Çå¾²Ì×½Ó²ã/´«Êä²ãÇå¾²£©ÐÒé×÷ΪÏÖ´úÒÆ¶¯Ó¦ÓõļÓÃÜ»ùʯ£¬ÔÚiOSϵͳÖÐͨ¹ýNSURLSession×é¼þʵÏÖÇ徲ͨѶ¡£¿ª·¢ÕßÔÚÉèÖÃURLSessionʱ±ØÐè×¢ÖØÐÒé°æ±¾Ñ¡Ôñ£¬TLS 1.2¼°ÒÔÉϰ汾ÒѳÉΪƻ¹ûµÄÇ¿ÖÆÒªÇó¡£ÔÚObjective-C¿ª·¢ÇéÐÎÖУ¬ÐèÒªÉèÖÃNSAppTransportSecurity×Öµä£¬Ç¿ÖÆATS£¨Ó¦Óô«ÊäÇå¾²£©Õ½ÂÔÖ´ÐС£
ÔõÑùÑéÖ¤Ö¤ÊéÁ´µÄÕýµ±ÐÔ£¿ÕâÐèÒª¿ª·¢ÕßʵÏÖURLSession:didReceiveChallenge:completionHandler:ÊðÀíÒªÁì¡£µä·¶°¸ÀýÖУ¬¿ÉÁ¬Ïµ¹«Ô¿Àο¿£¨Public Key Pinning£©ÊÖÒÕ£¬½«Ð§ÀÍÆ÷Ö¤ÊéµÄSPKI£¨Ö÷Ì⹫ԿÐÅÏ¢£©¹þÏ£ÖµÔ¤ÖÃÔÚÓ¦ÓÃÄÚ¡£ÖµµÃ×¢ÖØµÄÊÇ£¬ÕâÖÖÖ¤ÊéÑéÖ¤Õ½ÂÔÄÜÓÐÓ÷ÀÓùÖÐÐÄÈ˹¥»÷£¨MITM£©£¬µ«Ò²ÐèÒª½¨ÉèÍêÉÆµÄÖ¤Êé¸üлúÖÆ¡£
¶þ¡¢Objective-CÇå¾²±à³Ìʵ¼ùÖеļÓÃÜË㷨ѡÔñ
ÔÚÍâµØÊý¾Ý¼ÓÃÜ»·½Ú£¬AES£¨¸ß¼¶¼ÓÃܱê×¼£©ÓëRSAËã·¨µÄ×éºÏʹÓÃÊÇiOS¿ª·¢µÄ»Æ½ð±ê×¼¡£CommonCrypto¿ò¼ÜÌṩÍêÉÆµÄ¶Ô³Æ¼ÓÃÜÖ§³Ö£¬¿ª·¢Õß¿ÉÒÔͨ¹ýCCCryptº¯ÊýʵÏÖCBC£¨ÃÜÂë¿éÁ´½Ó£©Ä£Ê½¼ÓÃÜ¡£ÔÚÓû§ÈÏÖ¤³¡¾°£¬ÍƼöʹÓÃPBKDF2£¨»ùÓÚÃÜÂëµÄÃÜÔ¿ÅÉÉúº¯Êý£©¾ÙÐÐÃÜÔ¿ÅÉÉú£¬µü´ú´ÎÊý½¨ÒéÉèÖÃ10000´ÎÒÔÉÏ¡£
ÄÚ´æÇå¾²´¦Öóͷ£ÊÇÐí¶à¿ª·¢ÕßÈÝÒ׺öÊӵĻ·½Ú¡£¹ØÓÚÃô¸ÐÊý¾Ý£¬Ó¦µ±Ê¹ÓÃSecure Enclave£¨Çå¾²¸ôÇø£©´æ´¢¼ÓÃÜÃÜÔ¿£¬Í¬Ê±È·±£Ã÷ÎÄÐÅϢʵʱ´ÓÄÚ´æÉ¨³ý¡£ÌØÊâÊÇÔÚObjective-CµÄMRC£¨ÊÖ¶¯ÒýÓüÆÊý£©ÇéÐÎÏ£¬±ØÐèÏÔʽŲÓÃmemset_sº¯ÊýÁýÕÖÃô¸ÐÄÚ´æÇøÓò¡£
Èý¡¢XcodeÇå¾²±àÒëÉèÖÃÓë·À»¤¼Ó¹Ì¼Æ»®
ÔÚBuild SettingsÖÐÆôÓÃBitcode±àÒë¿ÉÒÔÓÐÓÃÌá·ÀÄæÏò¹¤³Ì£¬Í¬Ê±¿ªÆôStack Smashing ProtectionÄÜÔöÇ¿ÔËÐÐʱ·À»¤¡£ÍƼö½«CLANG_ENABLE_OBJC_WEAKÉèΪNOÒÔÏû³ýÈõÒýÓÃÇå¾²Òþ»¼£¬ÉèÖÃDEBUG_INFORMATION_FORMATΪdwarf-with-dsym±ãÓÚÍß½âÈÕÖ¾·ûºÅ»¯ÆÊÎö¡£
¹ØÓÚÒªº¦ÓªÒµÂß¼£¬½¨ÒéÆôÓÃLLVMµÄ¿ØÖÆÁ÷ÍêÕûÐÔ£¨CFI£©±£»¤¡£ÔõÑùƽºâÇå¾²ÐÔÓëÐÔÄÜ£¿¿Éͨ¹ýProfile Guided Optimization¾ÙÐбàÒëÓÅ»¯£¬Ñ¡Ôñ-OzÓÅ»¯¼¶±ðʱÐèÌØÊâ×¢ÖØ±£´æÐëÒªµÄÇå¾²¼ì²é´úÂë¡£¾²Ì¬ÆÊÎöÉèÖÃÖУ¬Ó¦½«CLANG_ANALYZER_SECURITYÑ¡ÏîËùÓпªÆô¡£
ËÄ¡¢Êý¾ÝÇå¾²ÉúÃüÖÜÆÚÖÎÀíµÄÒªº¦ÊÖÒÕµã
ÍêÕûµÄÊý¾ÝÇå¾²ÖÜÆÚ°üÀ¨ÌìÉú¡¢´æ´¢¡¢´«Ê䡢ʹÓᢹ鵵¡¢Ïú»ÙÁù´ó½×¶Î¡£ÔÚÊý¾ÝÌìÉú»·½Ú£¬½¨Òé½ÓÄÉSecRandomCopyBytesÌìÉú¼ÓÃÜÇ¿¶È´ï±êµÄËæ»úÊý¡£´æ´¢»·½ÚÔòÓ¦ÓÅÏÈʹÓÃKeychain Services£¨Ô¿³×´®Ð§ÀÍ£©£¬Æä½ÓÄɵÄAES-256¼ÓÃÜÇ¿¶ÈÔ¶³¬UserDefaultsµÄÃ÷ÎÄ´æ´¢¡£
Êý¾ÝʹÓÃÀú³ÌÖеķÀ¸ÄÄîÍ·ÖÆÊµÏÖÐèÒªÊý×ÖÊðÃûÊÖÒÕµÄÖ§³Ö¡£¿ª·¢Õß¿ÉÔËÓÃECDSA£¨ÍÖÔ²ÇúÏßÊý×ÖÊðÃûËã·¨£©¶ÔÒªº¦Êý¾Ý¾ÙÐÐÊðÃûÑéÖ¤¡£Õë¶ÔÎļþ¼¶±£»¤£¬¿ÉÉèÖÃNSFileProtectionCompleteUntilFirstUserAuthenticationµÈÔªÊý¾ÝÊôÐÔ£¬Óë×°±¸ËøÆÁ״̬ʵÏÖÇå¾²Áª¶¯¡£
Îå¡¢»ìÏý¼ÓÃÜϵͳÔÚÏÖʵÏîÄ¿ÖеÄÓ¦ÓÃʵÀý
ijÉç½»Ó¦ÓÃÔÚIM¹¦Ð§ÖнÓÄÉÁË»ìÏý¼ÓÃܼܹ¹£ºÊ¹ÓÃRSA-2048½»Á÷AES-256»á»°ÃÜÔ¿£¬ÐÂÎÅÌå½ÓÄÉCTR£¨¼ÆÊýÆ÷ģʽ£©¼ÓÃÜ£¬ÐÂÎÅÍ·¸½¼ÓHMAC-SHA256УÑéÖµ¡£ÕâÖÖ¼ÓÃÜË㷨ѡÔñ¼Æ»®¼È°ü¹ÜÁË´«ÊäЧÂÊ£¬ÓÖ̫ͨ¹ý²ã¼ÓÃÜʵÏÖÁËǰÏò±£ÃÜ£¨Forward Secrecy£©¡£
Õë¶ÔʵʱÒôÊÓÆµÁ÷µÄ¼ÓÃÜ£¬ÍƼöʹÓÃSRTP£¨Ç徲ʵʱ´«ÊäÐÒ飩¼Æ»®¡£Í¨¹ý¼¯³ÉWebRTC¿ò¼Ü£¬¿ª·¢Õß¿ÉŲÓÃÄÚÖõļÓÃÜÄ£¿éʵÏÖýÌåÁ÷µÄ¶Ëµ½¶Ë¼ÓÃÜ¡£ÔÚÃÜÔ¿ÖÎÀí»·½Ú£¬ÐèÒª½¨ÉèÔÝʱ»á»°ÃÜÔ¿µÄÉúÃüÖÜÆÚ¿ØÖÆ»úÖÆ£¬È·±£ÃÜÔ¿ÔڻỰ¿¢ÊºóÁ¬Ã¦Ïú»Ù¡£
ͨ¹ýÉÏÊöÊÖÒռƻ®µÄ×éºÏÓ¦Óã¬iOS¿ª·¢Õß¿ÉÒÔ¹¹½¨³öÇкÏÐÐÒµ±ê×¼µÄÇå¾²·À»¤ÏµÍ³¡£´ÓSSL/TLSÐÒéµÄÍøÂç²ã¼ÓÃܵ½XcodeµÄ±àÒë¼Ó¹Ì£¬´ÓObjective-CµÄÇå¾²±à³Ìʵ¼ùµ½»ìÏý¼ÓÃÜϵͳµÄÉè¼Æ£¬Ã¿¸ö»·½Ú¶¼Ó°Ïì×ÅÓ¦ÓõÄÕûÌåÇ徲ˮλ¡£ÔÚÏêϸʵÑéÀú³ÌÖУ¬½¨Òé°´ÆÚ¾ÙÐÐÉøÍ¸²âÊÔ£¬Ê¹ÓÃInstruments¹¤¾ß¾ÙÐÐÄÚ´æ×ß©¼ì²â£¬Á¬ÏµLLDBµ÷ÊÔÆ÷ÑéÖ¤¼ÓÃÜÁ÷³ÌµÄÍêÕûÐÔ£¬×îÖÕÐν¨ÉèÌ廯µÄÒÆ¶¯Çå¾²½â¾ö¼Æ»®¡£