中間人攻擊和信息抵賴
沒有身份驗(yàn)證的情況下,在非對稱加密中實(shí)現(xiàn)身份驗(yàn)證和密鑰協(xié)商時,比如常用的 RSA 算法無法確保服務(wù)器身份的合法性棍潘,因?yàn)楣€并不包含服務(wù)器的信息寝优〔⑾校可能出現(xiàn)如下兩種情況:
- 中間人攻擊 (MITM): 攻擊者介入通信雙方详炬,C - M 通信時使用的是中間人自己的一對公私鑰 Key_M兼贸,中間人可以解密客戶端用 Key_M 加密的信看;
M - S 通信時使用的是服務(wù)器提供的公鑰齿税,加密從客戶端得到的消息給服務(wù)器完成雙方通信 - 信息抵賴: 發(fā)送消息者可以否認(rèn)之前發(fā)過的消息彼硫,因?yàn)榻邮斩耸褂霉€不能確定之前接收的消息來源身份
此時需要一種認(rèn)證體系以確保通信者是安全可靠的。
PKI - 互聯(lián)網(wǎng)公鑰基礎(chǔ)設(shè)施
PKI 的目標(biāo)就是實(shí)現(xiàn)不同成員在不見面的情況下進(jìn)行安全通信凌箕,當(dāng)前采用的模型是基于可信的第三方機(jī)構(gòu)拧篮,也就是 證書頒發(fā)機(jī)構(gòu) (certification authority,CA) 簽發(fā)的證書牵舱。
PKI 通過數(shù)字證書認(rèn)證機(jī)構(gòu) (CA) 將用戶的個人身份跟公開密鑰鏈接在一起串绩。對每個證書中心用戶的身份必須是唯一的。鏈接關(guān)系由注冊和發(fā)布過程確定芜壁,取決于擔(dān)保級別礁凡,鏈接關(guān)系可能由 CA 的各種軟件或在人為監(jiān)督下完成。
- 訂閱人: 或者叫最終實(shí)體慧妄,是指那些需要證書來提供安全服務(wù)的團(tuán)體顷牌,維護(hù)服務(wù)端的人
- 登記機(jī)構(gòu) (registration authority - RA): 主要是完成一些證書簽發(fā)的相關(guān)管理工作。例如塞淹, RA 會首先對用戶進(jìn)行必要的身份驗(yàn)證窟蓝,然后才會去找 CA 簽發(fā)證書。在某些情況下饱普,
當(dāng) CA 希望在用戶附近建立一個分支機(jī)構(gòu)時(例如在不同的國家建立當(dāng)?shù)氐怯浿行模┰舜欤覀円卜Q RA 為本地登記機(jī)構(gòu)(local registration authority,LRA)套耕。實(shí)際上谁帕,很多 CA 也執(zhí)行 RA 的職責(zé)。RA 確保公開密鑰和個人身份鏈接冯袍,可以防抵賴雇卷。 - 憑證簽發(fā)請求文件 (Certificate Signing Request - CSR): 一種包含憑證簽發(fā)時所需的公鑰、組織信息颠猴、個人信息 (域名) 等信息的 (.csr) 文件关划,不含私鑰信息。
- 證書頒發(fā)機(jī)構(gòu) (certification authority - CA): 是指我們都信任的證書頒發(fā)機(jī)構(gòu)翘瓮,CA 通過線上贮折、線下等多種手段驗(yàn)證申請者提供信息的真實(shí)性,如組織是否存在资盅、企業(yè)是否合法调榄,是否擁有域名的所有權(quán)等踊赠,確認(rèn)申請用戶的身份之后再簽發(fā)證書。
同時 CA 會在線提供其所簽發(fā)證書的最新吊銷信息每庆,這樣信賴方就可以驗(yàn)證證書是否仍然有效筐带。 - 證書 (certificate) 包含以下信息:申請者公鑰、申請者的組織信息和個人信息缤灵、簽發(fā)機(jī)構(gòu) CA 的信息伦籍、有效時間、證書序列號等信息的明文腮出,同時包含一個簽名(使用散列函數(shù)計算公開的明文信息的信息摘要帖鸦,
然后采用 CA 的私鑰對信息摘要進(jìn)行加密,此密文即簽名)胚嘲。證書 = 公鑰 + 申請者與頒發(fā)者信息 + 簽名 - 信賴方 (relying party): 是指那些證書使用者作儿。一般是指那些需要證書驗(yàn)證的網(wǎng)頁瀏覽器、其他程序以及操作系統(tǒng)馋劈。他們通過維護(hù)根可信證書庫來執(zhí)行驗(yàn)證攻锰,
這些證書庫包含某些 CA 的最終可信證書(信任密鑰,trust anchor)妓雾。更廣泛地說口注,信賴方是指那些需要通過證書在互聯(lián)網(wǎng)上進(jìn)行安全通信的最終用戶。用戶接收到證書后君珠,讀取證書中的相關(guān)的明文信息寝志,采用相同的散列函數(shù)計算得到信息摘要,
然后利用對應(yīng) CA 的公鑰解密簽名數(shù)據(jù)策添,對比證書的信息摘要材部,如果一致,則可以確認(rèn)證書的合法性唯竹;然后去查詢證書的吊銷情況
- 證書吊銷列表 (Certificate Revocation List - CRL): 一個單獨(dú)的文件乐导。該文件包含了 CA 已經(jīng)吊銷的證書序列號 (唯一) 與吊銷日期,同時該文件包含生效日期并通知下次更新該文件的時間浸颓,當(dāng)然該文件必然包含 CA 私鑰的簽名以驗(yàn)證文件的合法性物臂。
證書中一般會包含一個 URL 地址 CRL Distribution Point,通知使用者去哪里下載對應(yīng)的 CRL 以校驗(yàn)證書是否吊銷产上。該吊銷方式的優(yōu)點(diǎn)是不需要頻繁更新棵磷,但是不能及時吊銷證書,因?yàn)?CRL 更新時間一般是幾天晋涣,這期間可能已經(jīng)造成了極大損失仪媒。 - 證書狀態(tài)在線查詢協(xié)議 (Online Certificate Status Protocol - OCSP): 一個實(shí)時查詢證書是否吊銷的方式。請求者發(fā)送證書的信息并請求查詢谢鹊,服務(wù)器返回正常算吩、吊銷或未知中的任何一個狀態(tài)留凭。證書中一般也會包含一個 OCSP 的 URL 地址,要求查詢服務(wù)器具有良好的性能偎巢。
部分 CA 或大部分的 自簽 CA (根證書) 都是未提供 CRL 或 OCSP 地址的蔼夜,對于吊銷證書會是一件非常麻煩的事情。
證書
證書大致分為三類
- 自簽名 CA: 在自簽名 CA 中压昼,證書中的公鑰和用于驗(yàn)證證書的密鑰是相同的求冷。一些自簽名 CA 是根 CA。這種自簽名證書通常不會被廣泛信任巢音,使用時可能會遇到電腦軟件的安全警告。自簽名證書本身就是根證書尽超。
- 從屬 CA: 在從屬 CA 中官撼,證書中的公鑰和用于核實(shí)證書的密鑰是不同的。一個 CA 向另一個 CA 頒發(fā)證書的過程叫做交叉認(rèn)證 似谁。
- 根 CA: 根 CA 是一種特殊的 CA傲绣,它受到客戶無條件地信任,位于證書層次結(jié)構(gòu)的最高層巩踏。所有證書鏈均終止于根 CA秃诵。根頒發(fā)機(jī)構(gòu)必須對它自己的證書簽名,因?yàn)樵谧C書層次結(jié)構(gòu)中再也沒有更高的認(rèn)證機(jī)構(gòu)了塞琼。根證書也是自簽名證書菠净。
其他的還可以細(xì)分為中介證書、終端實(shí)體證書彪杉、授權(quán)證書毅往、TLS 服務(wù)器證書、通配符證書派近、TLS 客戶端證書
審核級別 (擔(dān)保級別)
- 域名驗(yàn)證 (DV): 最基本的審核級別攀唯,如果申領(lǐng)代表可以證明他擁有管理某域名的權(quán)力,認(rèn)證機(jī)構(gòu)就可以發(fā)放域名驗(yàn)證(DV)證書渴丸,一般認(rèn)證機(jī)構(gòu)通常使用自動機(jī)制或通過電郵確認(rèn)審核域名擁有權(quán)侯嘀,成本較低
- 組織驗(yàn)證 (OV): 代表可以證明他擁有管理某域名的權(quán)力,而且相關(guān)組織是實(shí)際存在的法人谱轨,認(rèn)證機(jī)構(gòu)可以發(fā)放組織驗(yàn)證(OV)證書戒幔。審核程序通常需要經(jīng)過人手處理。
- 擴(kuò)展驗(yàn)證 (EV): 最嚴(yán)格的審核級別土童,審核過程可能牽涉專業(yè)法律人員的調(diào)查及獨(dú)立審計人員的確認(rèn)溪食,成本也更高;成功獲得擴(kuò)展驗(yàn)證證書的網(wǎng)站娜扇,瀏覽器通常會在地址欄以綠色表示相關(guān)機(jī)構(gòu)的法人名稱及所屬國家代碼错沃。擴(kuò)展驗(yàn)證證書的主體名稱或主體別名上不可以有通配符
證書結(jié)構(gòu)
- 版本號 (version): 證書一共有 3 個版本號栅组,分別用 0、1枢析、2 編碼表示版本 1玉掸、版本 2 和版本 3。版本 1 只支持簡單的字段醒叁,版本 2 增加了兩個標(biāo)識符司浪,而版本 3 則增加了擴(kuò)展功能。現(xiàn)在大部分的證書都采用版本 3 的格式把沼。
- 序列號 (serialNumber): 在一開始啊易,序列號只要是正整數(shù)即可,是每個 CA 用來唯一標(biāo)識其所簽發(fā)的證書饮睬。但是在出現(xiàn)了針對證書簽名的預(yù)選 前綴攻擊 之后租谈,序列號增加了更多的要求來防止此類攻擊;現(xiàn)在序列號需要是無序的(無法被預(yù)測)而且至少包括 20 位的熵
- 簽名算法 (signture Algorithm): 這個字段指明證書簽名所用的算法捆愁,需要放到證書里面割去,這樣才能被證書簽名保護(hù)
- 頒發(fā)者 (issuer): 證書頒發(fā)者的可分辨名稱(distinguished name,DN)昼丑,這個字段比較復(fù)雜呻逆,根據(jù)不同的實(shí)體會包含許多部分。舉例來說菩帝,Verisign 根證書的可分辨名稱是 /C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority咖城;它包括了國家、組織和組織單位三個部分呼奢。
- 有效期 (validity): 證書的有效期包括開始日期和結(jié)束日期酒繁,在這段時間內(nèi)證書是有效的。
- 使用者 (subject): 證書使用實(shí)體的可分辨名稱控妻,和公鑰一起用于證書的簽發(fā)州袒。在自簽名證書里,使用者 (subject) 和頒發(fā)者 (issuer) 字段的可分辨名稱是一樣的弓候。在最開始郎哭,可分辨名稱里面的公用名(common name, CN)主要用于服務(wù)器主機(jī)名(例如 /CN=www.example.com 用于 www.example.com 域名的證書)
- 公鑰 (subject public-key info): 這個字段包含了公鑰菇存、算法 ID夸研、可選參數(shù)
- 擴(kuò)展 (extensions): 比如密鑰用法、證書策略依鸥、CRL 分發(fā)點(diǎn)亥至、使用者密鑰標(biāo)識符等等
證書鏈
CA 根證書和服務(wù)器實(shí)體證書中間增加一層證書機(jī)構(gòu),即中介證書,證書的產(chǎn)生和驗(yàn)證原理不變姐扮,只是增加一層驗(yàn)證絮供,只要最后能夠被任何信任的 CA 根證書驗(yàn)證合法即可
- 服務(wù)器證書 server.pem 的簽發(fā)者為中間證書機(jī)構(gòu) inter,inter 根據(jù)證書 inter.pem 驗(yàn)證 server.pem 確實(shí)為自己簽發(fā)的有效證書;
- 中間證書 inter.pem 的簽發(fā) CA 為 root茶敏,root 根據(jù)證書 root.pem 驗(yàn)證 inter.pem 為自己簽發(fā)的合法證書;
- 客戶端內(nèi)置信任 CA 的 root.pem 證書壤靶,因此服務(wù)器證書 server.pem 被信任。
具體例子可以看維基百科的例子: https://zh.wikipedia.org/wiki/%E4%BF%A1%E4%BB%BB%E9%8F%88#%E8%88%89%E4%BE%8B
點(diǎn)擊瀏覽器地址欄的綠色小鎖可以查看網(wǎng)站的證書鏈:
二級證書結(jié)構(gòu)存在的優(yōu)勢:
- 減少根證書結(jié)構(gòu)的管理工作量惊搏,可以更高效的進(jìn)行證書的審核與簽發(fā);
- 根證書一般內(nèi)置在客戶端中贮乳,私鑰一般離線存儲,一旦私鑰泄露恬惯,則吊銷過程非常困難向拆,無法及時補(bǔ)救;
- 中介證書結(jié)構(gòu)的私鑰泄露,則可以快速在線吊銷酪耳,并重新為用戶簽發(fā)新的證書;
- 證書鏈四級以內(nèi)一般不會對 HTTPS 的性能造成明顯影響
服務(wù)器一般提供一條證書鏈浓恳,但也有多條路徑的可能。以 交叉證書 為例葡兑,一條可信路徑可以一直到 CA 的主要根證書奖蔓,另外一條則是到可選根證書上赞草。
CA 有時候會為同樣的密鑰簽發(fā)多張證書讹堤,例如現(xiàn)在最常使用的簽名算法是 SHA1,因?yàn)榘踩蛘谥鸩竭w移到 SHA256厨疙, CA 可以使用同樣的密鑰簽發(fā)出不同簽名的新證書洲守。如果信賴方恰好有兩張這樣的證書,那么就可以構(gòu)建出兩條不同的可信路徑沾凄。
身份驗(yàn)證
再回過頭來看中間人攻擊梗醇,需要身份驗(yàn)證后中間人與 Server 通信時接收服務(wù)器的證書實(shí)現(xiàn)身份驗(yàn)證,但與客戶端通信時無法向用戶提供可信任的證書撒蟀。
除非偽造一份證書 (很困難)叙谨,或者騙取客戶端信任,比如在客戶機(jī)操作系統(tǒng)上添加中間人證書的完全信任保屯,以此實(shí)現(xiàn)用戶的信任和身份驗(yàn)證手负。
舉個栗子:
使用抓包工具 Charles 時,如果想抓取 HTTPS 的內(nèi)容姑尺,就需要安裝其提供的證書并添加信任
沒有信任時竟终,抓取的 HTTPS 內(nèi)容無法解析
取得信任后,抓取的 HTTPS 請求可以和 HTTP 請求一樣直接讀取
在這個過程中 Charles 就是一個中間人切蟋,而且可以完全獲取 HTTPS 信息统捶,因?yàn)橛脩舭惭b并信任它的證書,也就可以做到身份驗(yàn)證。
可以看到加密協(xié)議下所有連接都是 Connect 形式喘鸟,這涉及到 隧道協(xié)議 - Tunneling Protocol 的概念
使用隧道的原因是在不兼容的網(wǎng)絡(luò)上傳輸數(shù)據(jù)匆绣,或在不安全網(wǎng)絡(luò)上提供一個安全路徑。
隧道通信的機(jī)制如下:
The client asks an HTTP Proxy server to tunnel the TCP connection to the desired destination.
The server then proceeds to make the connection on behalf of the client. Once the connection has been established by the server,
the Proxy server continues to proxy the TCP stream to and from the client.The client is now being proxied to the remote host.
Any data sent to the proxy server is now forwarded, unmodified, to the remote host and the client can communicate using any protocol accepted by the remote host
Proxy servers may also limit connections by only allowing connections to the default HTTPS port 443, whitelisting hosts, or blocking traffic which doesn't appear to be SSL.
客戶端先請求一個代理服務(wù)器去建立和目標(biāo)服務(wù)器之間的 tcp tunnel迷守,目標(biāo)服務(wù)器嘗試連接客戶端 (實(shí)際是代理服務(wù)器)犬绒,如果連接成功建立,代理服務(wù)器會給客戶端返回 200 ok 并繼續(xù)代理客戶端和目標(biāo)服務(wù)器之間的 tcp 流兑凿。
任何發(fā)送給代理服務(wù)器的數(shù)據(jù)都會不加修改地被轉(zhuǎn)發(fā)凯力,遠(yuǎn)程主機(jī)和客戶端可以通過任何協(xié)議 (TLS、SSH礼华、SOCKS咐鹤、PPTP...) 進(jìn)行后續(xù)交互。
代理服務(wù)器也可以通過端口限制 (443)圣絮、host 白名單祈惶、阻止非 SSL 的數(shù)據(jù)流來限制連接
一些代理服務(wù)器需要認(rèn)證信息來建立 tunnel. 常見的是 Proxy-Authorization 頭域:
CONNECT server.example.com:80 HTTP/1.1
Host: server.example.com:80
Proxy-Authorization: basic aGVsbG86d29ybGQ=
關(guān)于這個中間代理的詳細(xì)信息見 https://en.wikipedia.org/wiki/DMZ_(computing)
題外話
講到 Charles,不得不提另一個抓包工具 Wireshark扮匠。這兩個工具的抓包原理不同捧请,Charles 是通過代理過濾抓取本機(jī)的網(wǎng)絡(luò)請求,主要抓 HTTP棒搜、HTTPS 的請求疹蛉;
Wireshark 則是使用了 網(wǎng)卡混雜模式 - promiscuous mode,可以抓取指定網(wǎng)卡上所有流過的包力麸,可以抓取應(yīng)用層可款、傳輸層、網(wǎng)絡(luò)層的各種封包克蚂,但是正常情況下不能解析 HTTPS 的內(nèi)容 (可以通過配置瀏覽器提供的對稱協(xié)商密鑰或者服務(wù)器的私鑰來解密 TLS 內(nèi)容)闺鲸。
開啟混雜模式時除了可以看到自己電腦上的網(wǎng)絡(luò)封包,還可以看到目標(biāo)地址不是本機(jī)的網(wǎng)絡(luò)包 (如果路由器沒有做網(wǎng)絡(luò)分發(fā)的工作的話埃叭,完全有可能接收到其他電腦的網(wǎng)絡(luò)包)摸恍,還可以看到局域網(wǎng)內(nèi)的廣播等等。我看了一篇于此相關(guān)的網(wǎng)絡(luò)攻擊手段 - ARP 攻擊赤屋。
ARP(Address Resolution Protocol)即地址解析協(xié)議立镶, 用于實(shí)現(xiàn)從 IP 地址到 MAC 地址的映射,即詢問目標(biāo) IP 對應(yīng)的 MAC 地址益缎,如圖
而 ARP 攻擊者可以通過兩種方式實(shí)現(xiàn)抓取監(jiān)聽局域網(wǎng)內(nèi)全部或者想要的目標(biāo)的網(wǎng)絡(luò)數(shù)據(jù):
- 通過大密集的 ARP 回應(yīng)搶占或覆蓋路由的映射表谜慌,使路由以為攻擊者就是目標(biāo),然后把 ip 映射到錯誤對象的 mac 上莺奔,之后攻擊者便能接收目標(biāo) ip 的網(wǎng)絡(luò)數(shù)據(jù)
- 在局域網(wǎng)內(nèi)向所有 ip 客戶機(jī)廣播欣范,假裝自己是網(wǎng)關(guān)变泄,然后所有目標(biāo)機(jī)器向自己發(fā)送外網(wǎng)或者轉(zhuǎn)發(fā)請求數(shù)據(jù)