使用sslsplit嗅探TLS/SSL鏈接

SSLsplit是一個通用的透明TLS / SSL代理,用於對各類安全通訊協議執行中間人***。 使用SSLsplit,能夠攔截和保存基於SSL的流量,從而偵放任何安全鏈接。php

一、 工做原理

SSLsplit的工做原理與其餘透明SSL代理工具很是類似:它充當客戶端和實際服務器之間的中間人。 若是將流量重定向到運行SSLsplit的服務器(經過更改默認網關,ARP欺騙或其餘方式,請參見下文),則SSLsplit將選擇SSL鏈接並僞裝爲客戶端正在鏈接的服務器。 爲此,它動態生成證書,並使用客戶端必須信任的CA證書的私鑰對其進行簽名。
例如,若是客戶端但願使用安全的Gmail SMTP服務器(端口465上的smtp.gmail.com)發送電子郵件,則SSLsplit會爲「 smtp.gmail.com」建立證書,從而僞裝爲Gmail 郵件服務器發送給客戶端。 在上游方向(指向實際的Gmail郵件服務器),SSLsplit像普通客戶端同樣鏈接到服務器-轉發實際客戶端在SSL套接字上寫入的全部流量。瀏覽器

二、 SSLsplit的安裝與運行

在解釋了SSLsplit如何工做的基本概念以後,本節將介紹如何實際使用它來攔截SSL(和非SSL)流量。安全

2.1 重定向流量

本教程假定您已經將*者系統放置在受害者計算機和服務器之間的某個位置。 這能夠經過許多不一樣的方式完成-如下是一些示例:
*>1)使用ARP欺騙經過將錯誤的映射從標準網關MAC地址發佈到者的IP地址來重定向受害者的流量。 您無需物理訪問受害者的設備便可執行此操做。 簽出arpspoof工具。
2)在受害者的網絡設置中更改默認網關地址。 若是您能夠訪問受害者的設備,這是最簡單的方法。
3)使用DNS服務器僞造DNS條目,該DNS服務器返回者針對某些(或全部)域的IP地址。 有關如何使用Dnsmasq進行DNS欺騙的信息,請參閱個人教程。
4)經過修改受害者計算機的/etc/hosts文件中的條目,重定向各個域的流量。
如上所述,最簡單的方法是將受害者設備中的默認網關地址更改成
者的IP地址。 這樣能夠確保全部流量都經過您的計算機。 並且因爲之後咱們須要安裝CA證書,所以不管如何咱們都須要對受害者計算機的物理訪
問。服務器

2.2 安裝

要下載並編譯SSLsplit,請運行如下命令:

1)wget http://mirror.roe.ch/rel/sslsplit/sslsplit-0.4.7.tar.bz2
2) bunzip2 sslsplit-0.4.7.tar.bz2
3) tar xvd sslsplit-0.4.7.tar
4) cd sslsplit-0.4.7
5) apt-get install libssl-dev libevent-dev
6) make
7) mkdir /tmp/sslsplit網絡

這些命令下載並提取源代碼(wget,bunzip2,tar),安裝必要的依賴項(apt-get),而後使用make對其進行編譯。
稍後在/tmp/sslsplit建立的臨時目錄用於轉儲鏈接日誌文件以及傳入和傳出SSL套接字的原始數據。併發

2.3 建立與安裝根CA證書

爲了使SSLsplit充當SSL鏈接的中間人,它須要可以生成並簽署受害人信任的證書。 爲此,受害者必須在其信任庫中擁有***者的根CA證書。 根據客戶端的類型(臺式瀏覽器,手機),安裝根證書有所不一樣(有關Firefox,Windows,Android等的信息,請參見此處)。tcp

若是您尚未自簽名的CA私鑰和證書,則可使用如下命令生成一個:
1) openssl genrsa -out ca.key 4096
2) openssl req -new -x509 -days 1826 -key ca.key -out ca.crt
第一條命令生成4096位RSA私鑰PEM格式(ca.key),第二個命令使用此私鑰生成自簽名根CA證書(ca.crt)。 稍後SSLsplit都須要二者,可是僅證書文件須要安裝在瀏覽器或受害者的操做系統。編輯器

2.4 啓用IP轉發和NAT引擎(iptables)

在此示例中,SSLsplit將在兩個端口上運行:8080用於非SSL TCP鏈接(例如HTTP,SMTP或FTP),以及8443用於SSL鏈接(例如SMTP over SSL,HTTPS等)。爲了轉發到達 ***者的計算機訪問這些內部端口後,可使用iptables中的NAT引擎。ide

1) sysctl -w net.ipv4.ip_forward=1
2) iptables -t nat -F
3) iptables -t nat -A PREROUTING -p tcp —dport 80 -j REDIRECT —to-ports 8080
4) iptables -t nat -A PREROUTING -p tcp —dport 443 -j REDIRECT —to-ports 8443
5) iptables -t nat -A PREROUTING -p tcp —dport 587 -j REDIRECT —to-ports 8443
6) iptables -t nat -A PREROUTING -p tcp —dport 456 -j REDIRECT —to-ports 8443
7) iptables -t nat -A PREROUTING -p tcp —dport 993 -j REDIRECT —to-ports 8443
8) iptables -t nat -A PREROUTING -p tcp —dport 5222 -j REDIRECT —to-ports 8443工具

上面的命令首先啓用IP轉發(sysctl ...)以啓用系統的路由器功能。 運行此命令後,Linux會將不打算用於本地計算機的IP數據包轉發到其標準/默認網關,從而充當路由器。
爲了防止Linux當即轉發全部內容,能夠定義NAT規則。 在此示例中,某些數據包重定向到本地端口8080和8443。端口HTTP(80)和WhatsApp(5222)上的純文本流量的數據包重定向到端口8080,端口HTTPS(基於SSL的流量)數據包重定向。 443),基於SSL的IMAP(993),基於SSL的SMTP(465和587)重定向到端口8443。

2.5 運行SSLsplit

一旦啓用IP轉發並將數據包轉發到相關端口,就能夠啓動SSLsplit。 這聽起來比實際要容易,由於SSLsplit是一個很是強大的工具,所以很是靈活。 請查看SSLsplit網站上的簡短文檔以及更詳細的SSLsplit手冊頁。
對於上述用例,明智的參數配置應以下所示:
1) ./sslsplit
2) -D
3) -l connections.log
4) -j /tmp/sslsplit/
5) -S logdir/
6) -k ca.key
7) -c ca.cer
8) ssl 0.0.0.0 8443
9) tcp 0.0.0.0 8080
此命令以調試模式啓動SSLsplit(-D,在前臺運行,沒有守護程序,輸出冗長),並在日誌文件「 connections.log」(-l ..)中輸出鏈接嘗試。 鏈接的實際內容被寫入「 / tmp / sslsplit / logdir /」(-j ..和-S ..)-每一個鏈接的每一個傳入/傳出TCP流都在單獨的文件中。
就是這個。 假設您已經正確配置了客戶端,則如今能夠開始瀏覽併發送/接收電子郵件。
除了控制檯輸出外,SSLsplit還將TCP套接字會話寫到上述日誌目錄中。 在運行SSLsplit一段時間後,日誌目錄中將有不少文件,每一個都是客戶端與服務器之間的鏈接或TCP套接字。br/>root@pbox:/tmp/sslsplit/logdir#ls
每一個文件都指示打開TCP套接字的確切時間以及源IP地址和目標IP地址以及端口。 您可使用head …窺視文件,或使用喜歡的文本編輯器:
root@pbox:/tmp/sslsplit/logdir#head ***

三、例子

您可使用SSLsplit偵聽許多不一樣的協議。 如下是HTTPS,基於SSL的IMAP和基於SSL的SMTP的一些示例。

3.1 嗅探HTTPS

SSLsplit運行後,客戶端與實際服務器之間的全部通訊都會經過SSLsplit。 使用-D選項,SSLsplit在STDOUT上打印鏈接和證書僞造。 除此以外,內容被寫入日誌目錄(「 / tmp / sslsplit / logdir /」)。 使用tail -f之類的東西/tmp/sslsplit/loggdir/20130804T162301Z-*.log,您能夠跟蹤服務器與客戶端之間的通訊。
使用sslsplit嗅探TLS/SSL鏈接
在上面的屏幕截圖中,上方的控制檯窗口顯示了SSLsplit的輸出。 它顯示了真實的上游Facebook證書(具備指紋f5:6b:f2:44:…),以及由SSLsplit僞造的證書-天然帶有不一樣的指紋,由於它是由不一樣的證書頒發機構簽名的。
下部的控制檯窗口顯示了瀏覽器和瀏覽器之間HTTPS通訊的內容。
Facebook服務器。 屏幕截圖示例顯示了對 「 https://www.facebook.com/login.php?login_attempt=1」的HTTPS POST請求,包括個人用戶名(&email = ...)和密碼(&pass = …)。
若是在經過SSLsplit重定向流量時單擊任何SSL / TLS加密站點上的小鎖圖標,則會將證書頒發給真實的通用名稱(CN),組織(O)和組織單位(OU),但不會 由真正的CA發佈。
上面的示例顯示了由我先前生成的「假CA證書」頒發的 「 www.google.de」假證書。

3.2 嗅探IMAP over SSL

在第二個示例中,我使用某工具鏈接到個人郵箱賬戶。 與基於Web的郵件客戶端不一樣,鏈接工具經過端口143上的IMAP或經過端口993上的SSL上的IMAP鏈接到郵件服務器。端口143上的通訊未加密,能夠用其餘工具(Wireshark,tcpdump等)讀取 ,基於SSL的IMAP須要一箇中間人代理來拆分SSL通訊。
使用sslsplit嗅探TLS/SSL鏈接
上面的屏幕截圖捕獲了鏈接工具與端口993上的郵件IMAP服務器的初始鏈接。像第一個示例同樣,上層控制檯顯示了SSLsplit調試輸出(顯示 SSLsplit僞造證書的方式),下層控制檯顯示經過SSL套接字交換的字節。
正如您在屏幕快照中看到的那樣,IMAP通信包括客戶端和服務器功能(1個功能)的交換,以及服務器開發人員的一些內在笑話(1 OK,這就是她寫的全部...),以及 身份驗證(3個登陸名「 e-mail@gmail.com」「密碼」)。 後一部分多是***者最感興趣的部分。
身份驗證以後,客戶端和服務器都贊成使用壓縮(4 COMPRESS DEFLATE)繼續對話,所以消息的其他部分天然再也不是人類可讀的。 可是,因爲僅壓縮而不加密,所以可使用簡單的Linux工具使其可讀

3.3 嗅探SMTP over SSL

您可能已經猜到了,該方法也適用於SSL上的SMTP:在此示例中,我使用鏈接工具經過端口465上的郵件SMTP服務器向本身發送了一封電子郵件。
使用sslsplit嗅探TLS/SSL鏈接與其餘兩個示例同樣,該屏幕快照在上部控制檯窗口中顯示SSLsplit輸出,而在下部控制檯中顯示會話輸出。 SMTP對話顯示了對Gmail服務器的幽默問候(服務時爲250-mx.google.com ...),以及使用SMTP AUTH(AUTH PLAIN ...)對Thunderbird客戶端的初始登陸。 而後,它將開始使用標準SMTP命令(MAIL FROM,RCPT TO等)起草郵件。一樣,最有趣的部分是純文自己份驗證:因爲傳輸是安全的,所以密碼以純文本形式發送-僅使用Base64進行編碼。

相關文章
相關標籤/搜索