心臟出血漏洞

心臟出血漏洞。該程式錯誤屬於緩衝區過讀，即可以讀取的資料比應該允許讀取的還多。心臟出血在通用漏洞披露系統中的編號為CVE-。釋出安全公告，提醒系統管理員注意漏洞。2014年4月7日，即漏洞公開披露的同一天，OpenSSL釋出了修復後的版本。截至2014年 (2014)[ [update]]，在80萬最熱門的啟用TLS的網站中，仍有1.5％易受心臟出血漏洞的攻擊。因為缺陷在於OpenSSL的實現，而不是SSL/TLS協議本身，所以除了OpenSSL之外的其他TLS實現方式，如GnuTLS、Mozilla的網路安全服務和Windows平臺的TLS實現都不受影響。歷史.2012年2月，傳輸層安全稽核。漢森未能注意到賽格爾曼實現中的錯誤，於2011年12月31日將有缺陷的程式碼加入了OpenSSL的原始碼庫。2012年3月14日，OpenSSL 1.0.1版釋出，漏洞開始傳播。心跳支援預設是啟用的，這使受影響的版本易受攻擊。發現.根據OpenSSL的馬克·J·考克斯於2014年4月1日11:09 UTC報告了心臟出血漏洞。該漏洞由芬蘭網路安全公司Codenomicon的工程師命名，該公司也設計了心臟出血標誌，並設立了網站向公眾解釋該錯誤。雖然谷歌的安全團隊首先向OpenSSL傳送了報告，但谷歌和Codenomicon幾乎在同一時間分別獨立地發現了這個漏洞。Codenomicon稱它於2014年4月3日發現並通知了NCSC-FI以進行漏洞協調。據信在漏洞披露時，約有17%透過認證機構認證的網際網路安全網路伺服器容易受到攻擊，導致伺服器私鑰和使用者會話cookie及密碼被盜。電子前哨基金會、Ars Technica和布魯斯·施奈爾均認為心臟出血漏洞是“災難性的”。福布斯網路安全專欄作家寫道：有些人認為，至少就其潛在影響而言，“心臟出血”是自網際網路商用以來所發現的最嚴重的漏洞。英國內閣發言人建議：人們應該按照網站建議更改他們所訪問網站的密碼。大多數網站已經修復了漏洞，人們聽從網站建議，從而決定是否採取行動以及採取什麼行動，再合適不過了。漏洞披露當日，Tor專案在其部落格釋出公告，建議雪梨晨鋒報於2014年4月15日刊登了事件的時間軸，其中可見一些組織在其公開披露之前就已經修補了漏洞，其中有些組織不清楚他們是如何得知這一訊息的。錯誤修正及部署.博德·默勒完成了心臟出血漏洞的修補程式。由此產生的補丁於2014年3月21日加入到了Red Hat的問題跟蹤系統中。4月7日，斯蒂芬·N·漢森在OpenSSL版本控制系統中應用了修補程式。第一個修復後的版本1.0.1g於同一天釋出。截至2014年 (2014)[ [update]]，309,197臺公共網路伺服器仍存在漏洞。證書的更新及撤銷.根據的說法，截至2014年 (2014)[ [update]]，在超過50萬張可能已因心臟出血漏洞而失密的X.509證書中，約3萬張已經補發，撤銷的並不多。截至2014年 (2014)[ [update]]，僅有43％的受影響網站重發了自己的安全證書。此外，在重發的安全證書中，有7％使用了可能已洩露的金鑰。Netcraft稱：每週電腦報對此評論，心臟出血漏洞是“可能持續數月，甚至是數年的危險”。利用.加拿大稅務局稱，900納稅人的遭竊，並表示在2014年4月8日的6個小時內，有人利用了該漏洞得到了這些資料。在發現攻擊後，該機構關閉了網站，並將納稅人的申報期限從4月30日延長至了5月5日。該機構表示，將向任何受影響的人提供信譽保障服務，不收取任何費用。4月16日，皇家加拿大騎警宣佈，他們已掌握了一名與該盜竊有關的工程學學生資訊，並指控其“未經授權使用計算機”及“有關資料的惡作劇”。英國育兒網站發現部分使用者帳戶被劫持，CEO被假冒。該網站後發表事件宣告，稱其是由心臟出血漏洞所導致，且技術人員已將其及時修復。反惡意軟體研究人員還利用了該漏洞，訪問了網路罪犯的秘密論壇。研究人員還特意設立了存在漏洞的機器以進行研究。例如，在2014年4月12日，至少有兩位獨立研究人員成功竊取了CloudFlare為此而設立的實驗伺服器的私鑰。此外，在2014年4月15日，密歇根大學教授稱，他的蜜罐伺服器遭到了無數來自中國的攻擊。黑爾德曼得出結論，因為這個伺服器相當不起眼，這些很可能是大範圍影響網際網路的橫掃攻擊。2014年8月報道稱，駭客利用心臟出血漏洞，竊取了美國第二大營利性連鎖醫院機構的安全金鑰，導致450萬份病人病歷洩密。入侵發生在該漏洞首次公佈後一星期。事先可能的瞭解及利用.在公佈後數日，許多大型網站修補了漏洞，或禁用了心跳擴充套件，但不清楚是否潛在攻擊者早就意識到了這一點，及利用程度幾何。研究人員在檢查稽核日誌後認為，至少在發現和公佈的5個月前，一些攻擊者可能已經利用了這個漏洞。不過Errata Security指出，於漏洞公開的六個月前釋出並廣泛使用的非惡意程式“Masscan”，會像漏洞所表現的那樣，於握手時突然終止連線，從而生成相同的伺服器日誌訊息。該公司還表示：“兩樣會產生相同錯誤訊息的新東西看起來可能是有關連的，但當然，其實他們並不相關。”據彭博新聞社，二位不願透露姓名的內部人士稱，美國國家安全域性在漏洞出現後不久就知道了它的存在，但卻沒有公佈，而是將其作為零日漏洞予以保密，以便能為己所用。NSA否認了這一說法，的也予以否認，該小組負責審查美國的電子監控政策。2014年4月11日，克拉克向路透社表示，NSA之前並不知道該漏洞。有關指控促使美國政府首次就其零日漏洞政策發表公開宣告，接受審查小組2013年的報告中所提的建議，“在幾乎所有的情況，消除廣泛使用的軟體程式碼中的漏洞比起利用它們進行情報蒐集更符合美國的國家利益”，並稱保密漏洞的權力將由NSA轉移到白宮。表現.受影響的OpenSSL版本根據請求訊息中的長度欄位分配記憶體緩衝區，用於儲存要返回的訊息，而不考慮訊息中有效載荷的實際長度。因為缺少邊界檢查，返回的訊息不僅包括有效載荷，還可能含有其他恰巧在已分配緩衝區中的訊息。因此，透過構造出載荷短、長度欄位中的數值卻很大的請求，向存在缺陷的一方如“返回500個字元的單詞‘bird’”會導致受害者返回“bird”，緊接著是恰儲存在受害者活躍記憶體中的496個字元。這樣，攻擊者便可能會收到敏感資料，從而危及受害者其它安全通訊的保密性。雖然攻擊者能對返回的記憶體塊大小有所控制，但卻無法決定它的位置，因而不能指定要顯示內容。受影響的OpenSSL例項.受影響的OpenSSL版本為1.0.1至1.0.1f不受影響。受影響的版本例項均存在缺陷，除非在OpenSSL編譯時加上codice_1。存在缺陷的程式和函式.存在缺陷的程式的原始檔為t1_lib.c及d1_both.c，而存在缺陷的函式為tls1_process_heartbeat()及dtls1_process_heartbeat()。補丁.可透過忽略要求了比負載更多的資料的心跳請求訊息來修復此問題。OpenSSL版本1.0.1g增加了一些邊界檢查，以防止過度讀取緩衝區。例如，已添加了下列測試，以丟棄將引發心臟出血漏洞的心跳請求，以防產生回覆：if (1 + 2 + payload + 16 &gt; s-&gt;s3-&gt;rrec.length) return 0; /* silently discard per RFC 6520 sec. 4 */版本控制系統有完整的更改列表。影響.經由心臟出血漏洞發動攻擊，獲得的資料可能包括TLS雙方將要交換、但尚未加密的機密內容，包括在使用者請求中各種格式的資料。此外，洩漏的資料還可能含有身份驗證密令，如會話cookie及密碼，可使攻擊者向該服務冒充此使用者。攻擊還可能洩漏受攻擊雙方的私鑰，這將使攻擊者能解密通訊內容。即使漏洞修復之後，獲得受害者認證資料的攻擊者仍能偽裝成資料的擁有者，只要該資料能被接受。因此，漏洞對保密性構成了致命威脅。然而，冒充受害人的攻擊者也能修改資料，所以間接的後果可能不只是系統機密洩漏那麼簡單。一項於2014年4月對美國成人進行的調查顯示，60%的人聽說過心臟出血漏洞。使用網際網路的受訪者中有39%的人採取了行動以保護他們的線上賬戶，如更改密碼或登出賬戶；29%的人認為他們的個人資訊因漏洞而處於危險之中；6%的人認為他們的個人資訊已遭竊取。客戶端漏洞.雖然該漏洞更多因其對伺服器的威脅而受關注，使用受影響OpenSSL例項的TLS客戶端也易受攻擊。惡意伺服器能利用該漏洞從易受攻擊的客戶端的記憶體中讀取資料，這就是衛報所稱的“逆向心臟出血漏洞”。安全研究員史蒂夫·吉布森在談及該漏洞時稱，它不只是伺服器端的漏洞，它也是客戶端的漏洞，因為伺服器、或你連線的任何人，都能向你請求心跳包，正如你能向他們請求一樣。失竊資料可能包含使用者名稱和密碼。逆向心臟出血漏洞影響了數以百萬計的應用例項。部分易受攻擊的應用程式列於下面的“應用軟體”一節中。具體受影響的系統.思科系統已確認其下78種產品存在缺陷，包括IP電話系統和網真系統。網站及其它線上服務.2014年4月8日，GitHub上有一項對訪問量最大的網站的分析，發現受影響的網站包括雅虎、Imgur、Stack Overflow、Slate及DuckDuckGo。下列網站已釋出公告，因受漏洞影響，建議使用者更改密碼：加拿大聯邦政府出於漏洞的安全考慮，暫時關閉了加拿大稅務局及多個政府部門的線上服務。平臺維護者建議他們的使用者更改密碼。LastPass的伺服器存在缺陷，但因額外的加密及正向安全，潛在的攻擊者無法利用此漏洞。不過LastPass仍建議使用者修改所有受影響網站賬戶的密碼。Tor專案建議中繼和隱蔽服務的執行者在修補OpenSSL後，應撤銷並生成新金鑰，但同時指出，兩套Tor中繼金鑰及多跳設計最大限度地減少了單一中繼遭竊取所造成的影響。作為預防措施，隨後發現存在漏洞的586箇中繼被強制下線。包括Steam、我的世界、戰遊網、英雄聯盟、GOG.com、Origin、索尼線上娛樂、Humble Bundle及流亡黯道在內的遊戲受到影響，隨後得到修復。應用軟體.存在缺陷的應用軟體包括：其他幾個甲骨文公司的應用程式受到影響。作業系統/韌體.若干GNU/Linux發行版都受到了影響，包括Debian，還有下列作業系統及韌體：漏洞檢測服務.一些網站推出了測試，檢測給定的網站上是否存在心臟出血漏洞。然而，據稱許多這種測試都不是很有效。可用的工具包括：其他安全工具添加了相應功能，以查詢此漏洞。例如，為其Nessus漏洞掃描器寫了外掛，以掃描出此問題。Nmap安全掃描器自6.45版本起包含了心臟出血檢測指令碼。已經發布了Snort規則，以檢測心臟出血攻擊流量和可能的心臟出血響應流量。開源資料包分析軟體，如Wireshark及tcpdump，使用特定的BPF資料包過濾器，將其作用於捕獲並存儲的資料包和實時流量上，可以識別出心髒出血包。補救.透過將OpenSSL更新到已修補的版本，可以解決心臟出血漏洞。OpenSSL可以用作獨立程式、動態共享物件或靜態連結庫，因此，更新可能需要重新啟動載入了OpenSSL易受攻擊版本的程序，及重新連結靜態連結它的程式和庫。實際上，這意味著更新靜態連結OpenSSL的軟體包，並重新啟動正在執行的程式，以刪除記憶體中舊的、易受攻擊的OpenSSL程式碼副本。在漏洞修復後，伺服器管理員必須解決保密資料可能洩漏的問題。因為心臟出血允許攻擊者得到私鑰，所以必須認為這些金鑰已洩密。須重新生成金鑰對，使用它們的證書也要重新簽發，並且吊銷舊證書。心臟出血也有可能會洩漏其他在記憶體中的保密資料，因此，其他認證材料也應該重新生成。很難確定受影響的系統是否沒有受到損害，或者某個特定資訊是否已被洩露。瀏覽器安全證書吊銷感知.由於漏洞威脅著私鑰的安全，即使是在漏洞已修復、先前的證書已吊銷後，如果受攻擊網站的使用者所使用的瀏覽器無法發現證書已吊銷，漏洞仍會對他們有影響。安全證書吊銷感知測試雖不測試系統是否存在心臟出血漏洞，但讓使用者測試他們的網頁瀏覽器，在網站使用的證書已吊銷的情況下，是否允許繼續訪問。因此，修復此漏洞，使用者還需要更新瀏覽器，確保具有最新的證書吊銷列表及證書吊銷功能。根本原因、可能的教訓及回應.漏洞造成的損失難以評估，不過據估計至少為5億美元。在論文《如何防止下一個心臟出血漏洞》中分析了為什麼沒能更早發現漏洞，並且提出了幾種可能能更快識別漏洞，以及減小其影響的方法。據惠勒所言，要防止心臟出血漏洞，最有效的方法是用一套非典型的測試套件徹底執行他所說的“負面測試”，即測試無效的輸入是否會導致程式失敗，而非成功。惠勒強調，應有一套通用的測試套件以作為所有TLS實現的基礎。據The Conversation上羅伯特·默克爾的文章，心臟出血漏洞揭示了“風險分析上的巨大失敗”。默克爾認為，OpenSSL注重效能，而不是安全，在他看來這毫無意義。但他認為，與其指責OpenSSL還不如指責它的使用者，他們選擇使用OpenSSL卻並未提供資金以進行更好的審查和測試。他解釋道，有兩方面因素決定了將來還有出現類似安全漏洞的風險。首先，程式庫的原始碼會影響寫出有類似影響漏洞的可能。默克爾提到，使用C語言就是一個有利於此種漏洞出現的危險因素，這與惠勒的分析一致。其次，OpenSSL的貢獻流程會影響能快速修復錯誤的機率。塔林理工大學的簡思·格特魯在他的文章中提到，如果OpenSSL使用保證記憶體安全的Rust語言開發，那麼心臟出血漏洞本來是可以避免的。百度則使用Rust語言實現了MesaLink TLS專案；MesaLink提供和OpenSSL相容的API，從而可以在cURL等專案中替換OpenSSL。西奧·德·若特，OpenBSD和OpenSSH專案的創始人和領導者，就同一方面批評OpenSSL的開發人員編寫自己的記憶體管理程式，如他所說的那樣，這就繞過了OpenBSD C標準函式庫對漏洞的防範，他說“OpenSSL是由一個不負責任的團隊開發的。”繼心臟出血漏洞披露之後，OpenBSD專案的成員從OpenSSL復刻出了LibreSSL。修改程式而導致該漏洞的程式設計師羅賓·賽格爾曼聲稱自己“忽略掉了對長度變數的驗證”，並否認提交有缺陷的實現是刻意為之。在漏洞公開後，賽格爾曼就另一方面提出了建議，指出OpenSSL沒有經過足夠多的人的審查。雖然他的工作經過了OpenSSL核心開發人員的審查，審查的目的卻主要是驗證功能的改進是否正確，這會使漏洞更容易放過。OpenSSL核心開發者稱，OpenSSL的安全審查本可以發現心臟出血漏洞。軟體工程師約翰·沃爾什評論道：想想看，OpenSSL僅有兩名說：“奇怪之處不在於幾名超負荷工作的志願者漏過了這個錯誤；真正神奇的是這種事之前都沒有發生。”戴維·A·惠勒認為通常情況下，審查是一種發現漏洞的很好方式，但他指出，“OpenSSL使用了過於複雜的結構，使它更難為人類和機器所審查。”他寫道：在簡化程式碼上應不斷努力，否則若只是新增功能，軟體的複雜度就會逐漸增加。隨著時間的推移，程式碼應及時重構，使之簡潔明瞭，而不只是不斷地新增新功能。要達成的目標應該是讓程式碼“顯然正確”，而不是使程式碼變得太複雜，以至於“我看不出有什麼問題”。LibreSSL進行了大規模的程式碼清理，僅在第一週內就移除了超過90000行C程式碼。據安全研究人員說，心臟出血漏洞是該基金會經濟問題的徵兆，這需要解決。從發現這個在“關鍵”依賴包中一個簡單功能的簡單錯誤所花費的時間來看，卡明斯基擔心如不採取任何措施，未來還會有無數這樣的漏洞。在發現漏洞時，OpenSSL僅有少數志願者負責維護，其中只有一人將其作為全職工作。每年OpenSSL專案收到的捐款大約為2000美元。Codenomicon的心臟出血漏洞網站呼籲為OpenSSL專案捐款。在瞭解到漏洞披露後的兩三天內，捐款總額為841美元后，卡明斯基說：“我們正在製造全球經濟中最重要的技術，依靠的卻是投入資金少得讓人驚訝的基礎設施。”核心開發者本·勞裡則認為專案資金“完全沒有著落”。儘管OpenSSL軟體基金會沒有，但網際網路錯誤賞金計劃主動給發現心臟出血漏洞的尼爾·梅塔獎勵了15000美元，以表彰她將其披露的負責任行為。保羅·基烏薩諾認為是軟體經濟學的失敗導致了此漏洞。面對此次危機，行業集體反應，2014年4月24日Linux基金會宣佈成立，這是一個數百萬美元的專案，能為處在全球資訊基礎架構中的關鍵要素提供資金。出資人包括亞馬遜、戴爾、Facebook、富士通、谷歌、IBM、英特爾、微軟、NetApp、Rackspace、VMware和Linux基金會。該聯盟旨在讓開發人員能全職在專案上工作，並且支付安全審計、硬體和軟體基礎設施，旅行及其他費用。OpenSSL是該聯盟資金首位獲得者的候選人。此漏洞後，谷歌成立了Project Zero尋找零日漏洞，來幫助保護網路和社會。