天天看點

iOS中的弱SSL認證

在開發過程中,開發人員使用測試或自簽名的 SSL 證書建構應用程式。 這樣開發人員無需正式請求和驗證 SSL 證書即可測試 HTTPS 功能。 然而,大多數情況下會保留使用自簽名證書的代碼,這會導緻基于 HTTPS 的 Man-In-The-Middle (MITM) 攻擊。

以下代碼允許所有 HTTPS 連接配接的任意 HTTPS 證書

//NSURLRequest+IgnoreSSL.h
        @interface NSURLRequest (IgnoreSSL)
         
        + (BOOL)allowsAnyHTTPSCertificateForHost:(NSString*)host;
         
        @end 
     //NSURLRequest+IgnoreSSL.m
	    implementation NSURLRequest (IgnoreSSL)
    	
	    + (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
	    {
	        return YES;
	    }
    	
	    @end
           

也可通過調用私有方法setAllowsAnyHTTPSCertificate,設定為YES,來繞過SSL認證

@interface NSURLRequest (DummyInterface)  
        + (BOOL)allowsAnyHTTPSCertificateForHost:(NSString*)host;  
        + (void)setAllowsAnyHTTPSCertificate:(BOOL)allow forHost:(NSString*)host;  
        @end 
        [NSURLRequest setAllowsAnyHTTPSCertificate: YES forHost:[payURL host]];
           

一般對HTTPS實施中間人攻擊是在http協定轉為https協定過程中切入,攻擊者代理用戶端與伺服器進行https加密通信,攻擊者再把加密的資訊解密後直接以http協定跟用戶端通信。但這很容易通過位址欄識别。如果允許所有 HTTPS 連接配接的任意 HTTPS 證書,攻擊者就可以僞造證書。以下是一個Java實作的中間人代理研究模型,它與https伺服器建立https連接配接,得到認證證書,并僞造該證書發送給用戶端,如果用戶端信任該僞造該證書,則該中間人代理研究模型就能控制用戶端和伺服器的所有通信。

以下是使用它代理修改CSDN個人資料的截圖:

iOS中的弱SSL認證
iOS中的弱SSL認證

添加了該僞造證書,看起來還真像

iOS中的弱SSL認證
iOS中的弱SSL認證

如果你已經啟用了https協定,那就不要因為偷一下懶或圖友善去使用弱SSL認證,中間人代理攻擊就會讓你的https安全協定屁都不是。

參考

[1]. 中間人代理攻擊的Java研究模型 http://crypto.stanford.edu/ssl-mitm/

[2].https://www.owasp.org/index.php/Man-in-the-middle_attack