電子郵件環(huán)境下STARTTLS的安全性分析
STARTTLS,是一種明文通信協(xié)議的擴(kuò)展,能夠讓明文的通信連線直接成為加密連線(使用SSL或TLS加密),而不需要使用另一個(gè)特別的端口來(lái)進(jìn)行加密通信,屬于機(jī)會(huì)性加密。
電子郵件客戶(hù)端和服務(wù)器之間的連接提供了兩種使用 TLS 保護(hù)的方法:隱性 TLS 從一開(kāi)始就對(duì)連接進(jìn)行加密并在單獨(dú)的端口上運(yùn)行,而 STARTTLS 提供了一種將現(xiàn)有未加密連接升級(jí)到 TLS 的機(jī)制。
有時(shí) STARTTLS 被視為一種機(jī)會(huì)加密模式,僅在可用時(shí)提供 TLS 保護(hù)。這很容易受到降級(jí)攻擊。但是,現(xiàn)代電子郵件客戶(hù)端通常期望強(qiáng)制執(zhí)行 STARTTLS,并且在啟用時(shí),不可能進(jìn)行未加密的通信。
通過(guò)STARTTLS升級(jí)連接是很脆弱的,容易受到許多安全漏洞和攻擊的影響。我們?cè)?STARTTLS 實(shí)現(xiàn)中發(fā)現(xiàn)了 40 多個(gè)漏洞。我們的結(jié)論是,這些漏洞是如此普遍,所以我們建議盡可能避免使用STARTTLS。
我們假設(shè)中間人 (MitM) 攻擊者可以修改電子郵件客戶(hù)端和提供商的電子郵件服務(wù)器之間建立的連接。
通過(guò)命令注入使用 SMTP 和 IMAP 竊取登錄憑據(jù)
2011 年,Postfix 開(kāi)發(fā)人員 Wietse Venema 描述了 STARTTLS 實(shí)現(xiàn)中的一個(gè)漏洞,該漏洞允許注入服務(wù)器將其解釋為加密連接的一部分的明文命令。這是通過(guò)使用 STARTTLS 命令向同一 TCP 段中的服務(wù)器發(fā)送附加命令來(lái)實(shí)現(xiàn)的。
我們發(fā)現(xiàn),盡管自2011年以來(lái)人們就知道這個(gè)漏洞,但它仍然非常普遍。截止目前共發(fā)現(xiàn)了15個(gè)易受攻擊的實(shí)現(xiàn)場(chǎng)景,在掃描中,2%的郵件服務(wù)器顯示了這個(gè)漏洞。
此命令注入可用于通過(guò) SMTP 和 IMAP 協(xié)議竊取憑據(jù)。
我們的攻擊需要一個(gè)中間人 (MitM) 攻擊者,該攻擊者可以修改網(wǎng)絡(luò)流量并在同一服務(wù)器上擁有自己帳戶(hù)的登錄憑據(jù)。攻擊者可以注入對(duì)其進(jìn)行身份驗(yàn)證的命令,然后開(kāi)始發(fā)送 (SMTP) 或存儲(chǔ) (IMAP) 電子郵件,受害者發(fā)送的登錄憑據(jù)將存儲(chǔ)在攻擊者可以訪問(wèn)的電子郵件中。
命令注入還可用于跨協(xié)議攻擊,以使用郵件服務(wù)器的證書(shū)提供 HTTPS 內(nèi)容。
通過(guò)響應(yīng)注入偽造郵箱內(nèi)容
我們發(fā)現(xiàn)了一種類(lèi)似于電子郵件客戶(hù)端應(yīng)用程序中的命令注入的攻擊,稱(chēng)之為響應(yīng)注入。此漏洞影響了許多流行的郵件客戶(hù)端,包括 Apple Mail、Mozilla Thunderbird、Claws Mail 和 Mutt。
通過(guò)在 TLS 握手之前向服務(wù)器消息注入額外的內(nèi)容以響應(yīng) STARTTLS 命令,我們可以注入服務(wù)器命令,客戶(hù)端將處理這些命令,就好像它們是加密連接的一部分一樣,這可用于偽造郵箱內(nèi)容。
通過(guò) PREAUTH 和 REFERRAL 竊取憑據(jù)的 IMAP 連接降級(jí)
在 IMAP 協(xié)議中,服務(wù)器可以通過(guò) PREAUTH 命令在第一條消息中通知客戶(hù)端它已經(jīng)通過(guò)了身份驗(yàn)證。該協(xié)議禁止在已驗(yàn)證狀態(tài)下使用 STARTTLS 命令。因此,如果客戶(hù)端應(yīng)用程序接受 PREAUTH,則它無(wú)法強(qiáng)制執(zhí)行 STARTTLS。
中間人攻擊者可以使用它來(lái)阻止 STARTTLS 升級(jí)連接并強(qiáng)制客戶(hù)端使用未加密的連接。該漏洞最初于2014年在Trojitá中被發(fā)現(xiàn)。我們發(fā)現(xiàn),其他多個(gè)電子郵件客戶(hù)端應(yīng)用程序也容易受到同一漏洞的攻擊。
此漏洞與 IMAP 功能登錄引用和郵箱引用結(jié)合使用時(shí)尤其嚴(yán)重,這些命令允許服務(wù)器指示客戶(hù)端登錄到另一個(gè) IMAP 服務(wù)器。通過(guò)使用 PREAUTH 來(lái)防止加密連接,攻擊者可以使用引用來(lái)強(qiáng)制客戶(hù)端將憑據(jù)發(fā)送到攻擊者控制的服務(wù)器。幸運(yùn)的是,許多客戶(hù)端不支持推薦功能。我們發(fā)現(xiàn)只有一個(gè)客戶(hù)—— Alpine,容易受到這種 PREAUTH 和推薦組合的影響。
總結(jié)
本文描述的所有漏洞都依賴(lài)于不安全連接到安全連接的轉(zhuǎn)換,隱性 TLS 沒(méi)有這樣的轉(zhuǎn)換,因此不容易受到這些攻擊。因此,我們認(rèn)為隱性 TLS 比 STARTTLS 更安全。
我們還指出 STARTTLS 總是引入至少一個(gè)額外的連接,所以隱性 TLS 通常提供更好的性能。
安全影響
我們認(rèn)為本文所講的攻擊難以大規(guī)模執(zhí)行,主要用于有針對(duì)性的攻擊。因此,你應(yīng)該始終更新軟件并重新配置電子郵件客戶(hù)端以只使用隱性 TLS。
安全建議
對(duì)于電子郵件客戶(hù)端用戶(hù)
如果可能,我們建議用戶(hù)檢查并配置他們的電子郵件客戶(hù)端,以在專(zhuān)用端口上使用帶有隱性 TLS 的 SMTP、POP3 和 IMAP,即SMTP/Submission端口465,POP3端口995,IMAP端口993。某些郵件服務(wù)提供商,尤其是 Microsoft 和 Apple,不支持SMTP/Submission的隱式TLS。我們建議用戶(hù)讓他們的郵件服務(wù)提供商提供更安全的隱性 TLS 選項(xiàng)。
對(duì)于應(yīng)用程序開(kāi)發(fā)人員
默認(rèn)情況下,電子郵件服務(wù)器和客戶(hù)端應(yīng)用程序都應(yīng)提供隱性 TLS。從長(zhǎng)遠(yuǎn)來(lái)看,軟件開(kāi)發(fā)人員可能會(huì)決定根本不支持 STARTTLS,從而簡(jiǎn)化他們的代碼和配置對(duì)話框和文件。
我們建議在服務(wù)器端和客戶(hù)端審核所有支持 STARTTLS 的應(yīng)用程序,因?yàn)閼?yīng)用程序需要確保沒(méi)有未加密的內(nèi)容作為加密連接的一部分被處理。 IMAP 應(yīng)用程序必須確保它們不允許將 PREAUTH 與 STARTTLS 結(jié)合使用,可以使用EAST 工具包,它允許測(cè)試應(yīng)用程序。
對(duì)于郵件服務(wù)器管理員
確保你使用的服務(wù)器支持所有支持的協(xié)議的隱性 TLS,如果可能,請(qǐng)考慮為 IMAP、POP3 和 SMTP 提交禁用 STARTTLS。
如果你確實(shí)需要支持 STARTTLS,建議使用建議的工具針對(duì)所有支持的協(xié)議的命令注入漏洞測(cè)試服務(wù)器。如果服務(wù)器軟件易受攻擊,立馬應(yīng)該進(jìn)行安全更新。
常見(jiàn)問(wèn)題
STARTTLS不安全嗎?
STARTTLS有兩種“模式”,“機(jī)會(huì)主義模式”和“強(qiáng)制模式”。電子郵件客戶(hù)端在提交新郵件或訪問(wèn)現(xiàn)有郵件之前必須使用用戶(hù)名和密碼進(jìn)行身份驗(yàn)證。對(duì)于這些連接,必須嚴(yán)格執(zhí)行通過(guò)STARTTLS傳輸?shù)絋LS的轉(zhuǎn)換,因?yàn)榻导?jí)將暴露用戶(hù)名和密碼,并給予攻擊者對(duì)電子郵件帳戶(hù)的完全訪問(wèn)權(quán)。
如何測(cè)試使用的軟件是否易受攻擊?
我們了提供允許測(cè)試電子郵件客戶(hù)端和服務(wù)器的 EAST 工具包。
使用我們的命令注入測(cè)試器測(cè)試電子郵件服務(wù)器的命令注入相對(duì)容易。 testssl.sh(開(kāi)發(fā)版)和 TLS-Attacker/TLS-Scanner也會(huì)檢查命令注入。
其他支持 STARTTLS 或類(lèi)似機(jī)制的協(xié)議是否受到影響?
我們希望在其他使用 STARTTLS 的協(xié)議中看到類(lèi)似的漏洞,例如 XMPP、FTP、IRC 或 LDAP。因此,我們建議避免 STARTTLS 并盡可能使用隱性 TLS。
郵件服務(wù)器之間的通信(MTA到MTA)如何處理?
傳統(tǒng)上,電子郵件服務(wù)器之間的 STARTTLS 只能防止被動(dòng)攻擊,容易受到主動(dòng)攻擊,例如 STARTTLS 攻擊。