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