心脏流血漏洞

**心臟出血漏洞**（英語：Heartbleed bug），簡稱為**心血漏洞**，是一個出現在加密程式庫 OpenSSL 的安全漏洞，該程式庫廣泛用於實現網際網路的傳輸層安全（TLS）協定。它於 2012 年被引入了 OpenSSL 中，2014 年 4 月首次向公眾披露。只要使用的是存在缺陷的 OpenSSL 實例，無論是伺服器還是客戶端，都可能因此而受到攻擊。此問題的原因是在實現 TLS 的心跳擴充時沒有對輸入進行適當驗證（缺少邊界檢查），因此漏洞的名稱來源於「心跳」（heartbeat）。該程式錯誤屬於緩衝區過讀，即可以讀取的資料比應該允許讀取的還多。

心臟出血在通用漏洞披露（CVE）系統中的編號為 CVE-2014-0160。加拿大網路事故回應中心發布安全公告，提醒系統管理員注意漏洞。2014 年 4 月 7 日，即漏洞公開披露的同一天，OpenSSL 發布了修復後的版本。

截至 2014 年 5 月 20 日 (2014-05-20)，在 80 萬最熱門的啟用 TLS 的網站中，仍有 1.5％易受心臟出血漏洞的攻擊。

因為缺陷在於 OpenSSL 的實現，而不是 SSL/TLS 協定本身，所以除了 OpenSSL 之外的其他 TLS 實現方式，如 GnuTLS、Mozilla 的網路安全服務（NSS）和 Windows 平台的 TLS 實現都不受影響。

## 歷史

2012 年 2 月，傳輸層安全（TLS）和資料報傳輸層安全（DTLS）協定的心跳擴充成為了標準，是為 RFC 6520。它提供了一種無需每次都重新協商連接，就能測試和保持安全通信鏈路的方式。2011 年，RFC 的作者之一，當時杜伊斯堡 - 埃森大學的博士生羅賓・賽格爾曼（Robin Seggelmann）為 OpenSSL 實現了心跳擴充。賽格爾曼向 OpenSSL 發出的推播請求之後，他的更改由 OpenSSL 四位核心開發者之一的史蒂芬・N・漢森（Stephen N. Henson）稽核。漢森未能注意到賽格爾曼實現中的錯誤，於 2011 年 12 月 31 日將有缺陷的代碼加入了 OpenSSL 的原始碼庫。2012 年 3 月 14 日，OpenSSL 1.0.1 版發布，漏洞開始傳播。心跳支援預設是啟用的，這使受影響的版本易受攻擊。

### 發現

根據 OpenSSL 的馬克・J・考克斯（Mark J. Cox）的說法，Google 安全團隊的尼爾・梅塔（Neel Mehta）於 2014 年 4 月 1 日 11:09 UTC 報告了心臟出血漏洞。

該漏洞由芬蘭網路安全公司 Codenomicon 的工程師命名，該公司也設計了心臟出血標誌，並設立了網站 heartbleed.com 向公眾解釋該錯誤。雖然 Google 的安全團隊首先向 OpenSSL 傳送了報告，但 Google 和 Codenomicon 幾乎在同一時間分別獨立地發現了這個漏洞。Codenomicon 稱它於 2014 年 4 月 3 日發現並通知了 NCSC-FI 以進行漏洞協調。

據信在漏洞披露時，約有 17%（大約五十萬）通過認證機構認證的網際網路安全網路伺服器容易受到攻擊，導致伺服器私鑰和使用者對談 cookie 及密碼被盜。電子前哨基金會、Ars Technica 和布魯斯・施奈爾均認為心臟出血漏洞是「災難性的」。福布斯網路安全專欄作家約瑟夫・斯坦伯格寫道：

> 有些人認為，至少就其潛在影響而言，「心臟出血」是自網際網路商用以來所發現的最嚴重的漏洞。
> 
> 

英國內閣發言人建議：

> 人們應該按照網站建議更改他們所存取網站的密碼。
>  大多數網站已經修復了漏洞，人們聽從網站建議，從而決定是否採取行動以及採取什麼行動，再合適不過了。
> 
> 

漏洞披露當日，Tor 專案在其部落格發布公告，建議

> 如果您在網際網路上需要高度的匿名或隱私，在接下來的幾天裡應該完全遠離網際網路，直到問題解決。
> 
> 

雪梨晨鋒報於 2014 年 4 月 15 日刊登了事件的時間軸，其中可見一些組織在其公開披露之前就已經修補了漏洞，其中有些組織不清楚他們是如何得知這一訊息的。

### 錯誤修正及部署

博德・默勒（Bodo Moeller）和 Google 的亞當・蘭利（Adam Langley）完成了心臟出血漏洞的修補程式。由此產生的修補程式於 2014 年 3 月 21 日加入到了 Red Hat 的問題跟蹤系統中。4 月 7 日，史蒂芬・N・漢森在 OpenSSL 版本控制系統中應用了修補程式。第一個修復後的版本 1.0.1g 於同一天發布。截至 2014 年 6 月 21 日 (2014-06-21)，309,197 台公共網路伺服器仍存在漏洞。

### 憑證的更新及復原

根據 Netcraft 的說法，截至 2014 年 4 月 11 日 (2014-04-11)，在超過 50 萬張可能已因心臟出血漏洞而失密的 X.509 憑證中，約 3 萬張已經補發，復原的並不多。

截至 2014 年 5 月 9 日 (2014-05-09)，僅有 43％的受影響網站重發了自己的安全憑證。此外，在重發的安全憑證中，有 7％使用了可能已泄露的金鑰。Netcraft 稱：

> 若重複使用金鑰，較之尚未更換 SSL 憑證的網站，這些曾受心臟出血漏洞影響的網站面臨的風險仍與之前一模一樣。
> 
> 

每周電腦報對此評論，心臟出血漏洞是「可能持續數月，甚至是數年的危險」。

### 利用

加拿大稅務局（CRA）稱，900 納稅人的社會保險號碼遭竊，並表示在 2014 年 4 月 8 日的 6 個小時內，有人利用了該漏洞得到了這些資料。在發現攻擊後，該機構關閉了網站，並將納稅人的申報期限從 4 月 30 日延長至了 5 月 5 日。該機構表示，將向任何受影響的人提供信譽保障服務，不收取任何費用。4 月 16 日，皇家加拿大騎警宣布，他們已掌握了一名與該盜竊有關的工程學學生資訊，並指控其「未經授權使用電腦」及「有關資料的惡作劇」。

英國育兒網站 Mumsnet 發現部分使用者帳戶被劫持，CEO 被假冒。該網站後發表事件聲明，稱其是由心臟出血漏洞所導致，且技術人員已將其及時修復。

反惡意軟體研究人員還利用了該漏洞，存取了網路罪犯的秘密論壇。研究人員還特意設立了存在漏洞的機器以進行研究。例如，在 2014 年 4 月 12 日，至少有兩位獨立研究人員成功竊取了 CloudFlare 為此而設立的實驗伺服器的私鑰。此外，在 2014 年 4 月 15 日，密西根大學教授 J・亞歷克斯・黑爾德曼稱，他的蜜罐伺服器（旨在吸引並研究攻擊的刻意留有漏洞的伺服器）遭到了無數來自中國的攻擊。黑爾德曼得出結論，因為這個伺服器相當不起眼，這些很可能是大範圍影響網際網路的橫掃攻擊。

2014 年 8 月報導稱，駭客利用心臟出血漏洞，竊取了美國第二大營利性連鎖醫院機構社群衛生系統的安全金鑰，導致 450 萬份病人病歷泄密。入侵發生在該漏洞首次公布後一星期。

#### 事先可能的了解及利用

在公布後數日，許多大型網站修補了漏洞，或禁用了心跳擴充，但不清楚是否潛在攻擊者早就意識到了這一點，及利用程度幾何。

研究人員在檢查稽核紀錄檔後認為，至少在發現和公布的 5 個月前，一些攻擊者可能已經利用了這個漏洞。不過 Errata Security 指出，於漏洞公開的六個月前發布並廣泛使用的非惡意程式「Masscan」，會像漏洞所表現的那樣，於握手時突然終止連接，從而生成相同的伺服器紀錄檔訊息。該公司還表示：「兩樣會產生相同錯誤訊息的新東西看起來可能是有關連的，但當然，其實他們並不相關。」

據彭博新聞社，二位不願透露姓名的內部人士稱，美國國家安全局（NSA）在漏洞出現後不久就知道了它的存在，但卻沒有公布，而是將其作為零日漏洞予以保密，以便能為己所用。NSA 否認了這一說法，美國國家情報和通信技術審議小組的理察・A・克拉克也予以否認，該小組負責審查美國的電子監視政策。2014 年 4 月 11 日，克拉克向路透社表示，NSA 之前並不知道該漏洞。有關指控促使美國政府首次就其零日漏洞政策發表公開聲明，接受審查小組 2013 年的報告中所提的建議，「在幾乎所有的情況，消除廣泛使用的軟體代碼中的漏洞比起利用它們進行情報搜集更符合美國的國家利益」，並稱保密漏洞的權力將由 NSA 轉移到白宮。

## 表現

RFC 6520 心跳擴充定義了一種測試 TLS/DTLS 安全通信鏈路的方法，允許連接一端的電腦傳送「心跳請求」訊息，訊息包含有效載荷（通常是文字字串），附帶有效載荷的長度（用 16 位元整數表示）。隨後，接收方電腦必須傳送完全相同的有效載荷以返回給傳送方。

受影響的 OpenSSL 版本根據請求訊息中的長度欄位分配記憶體緩衝區，用於儲存要返回的訊息，而不考慮訊息中有效載荷的實際長度。因為缺少邊界檢查，返回的訊息不僅包括有效載荷，還可能含有其他恰巧在已分配緩衝區中的訊息。

因此，通過構造出載荷短、長度欄位中的數值卻很大的請求，向存在缺陷的一方（通常是伺服器）傳送畸形心跳包，利用心臟出血漏洞，引起受害者的回應，這樣，攻擊者便可讀取到受害者記憶體中至多 64 千位元組的資訊，而這塊區域先前 OpenSSL 有可能已經使用過。例如，正常的心跳請求可能會要求一方「返回 4 個字元的單詞『bird』」，那一方就返回「bird」；「心臟出血請求」（惡意的心跳請求）如「返回 500 個字元的單詞『bird』」會導致受害者返回「bird」，緊接著是恰儲存在受害者活躍記憶體中的 496 個字元。這樣，攻擊者便可能會收到敏感資料，從而危及受害者其它安全通信的保密性。雖然攻擊者能對返回的記憶體塊大小有所控制，但卻無法決定它的位置，因而不能指定要顯示內容。

### 受影響的 OpenSSL 實例

受影響的 OpenSSL 版本為 1.0.1 至 1.0.1f（含）。較新版本（1.0.1g 以上）及先前版本（1.0.0 分支以前）不受影響。受影響的版本實例均存在缺陷，除非在 OpenSSL 編譯時加上 `-DOPENSSL_NO_HEARTBEATS`。

#### 存在缺陷的程式和函式

存在缺陷的程式的原始檔為 t1\_lib.c 及 d1\_both.c，而存在缺陷的函式為 tls1\_process\_heartbeat () 及 dtls1\_process\_heartbeat ()。

### 修補程式

可通過忽略要求了比負載更多的資料的心跳請求訊息來修復此問題。

OpenSSL 版本 1.0.1g 增加了一些邊界檢查，以防止過度讀取緩衝區。例如，已添加了下列測試，以丟棄將引發心臟出血漏洞的心跳請求，以防產生回覆：

版本控制系統有完整的更改列表。

## 影響

經由心臟出血漏洞發動攻擊，獲得的資料可能包括 TLS 雙方將要交換、但尚未加密的機密內容，包括在使用者請求中各種格式的 post 資料。此外，泄漏的資料還可能含有身分驗證密令，如對談 cookie 及密碼，可使攻擊者向該服務冒充此使用者。

攻擊還可能泄漏受攻擊雙方的私鑰，這將使攻擊者能解密通信內容（將來或是之前通過被動竊聽擷取而儲存的通信，除非使用完全正向保密，而在這種情況下，只能解密將來通過中間人攻擊截獲的通信）。

即使漏洞修復之後，獲得受害者認證資料的攻擊者仍能偽裝成資料的擁有者，只要該資料能被接受（例如，在更改密碼或復原私鑰之前）。因此，漏洞對保密性構成了致命威脅。然而，冒充受害人的攻擊者也能修改資料，所以間接的後果可能不只是系統機密泄漏那麼簡單。

一項於 2014 年 4 月對美國成人進行的調查顯示，60% 的人聽說過心臟出血漏洞。使用網際網路的受訪者中有 39% 的人採取了行動以保護他們的線上帳戶，如更改密碼或註銷帳戶；29% 的人認為他們的個人資訊因漏洞而處於危險之中；6% 的人認為他們的個人資訊已遭竊取。

### 客戶端漏洞

雖然該漏洞更多因其對伺服器的威脅而受關注，使用受影響 OpenSSL 實例的 TLS 客戶端也易受攻擊。惡意伺服器能利用該漏洞從易受攻擊的客戶端的記憶體中讀取資料，這就是衛報所稱的「逆向心臟出血漏洞」。安全研究員史蒂夫・吉布森（Steve Gibson）在談及該漏洞時稱，

> 它不只是伺服器端的漏洞，它也是客戶端的漏洞，因為伺服器、或你連接的任何人，都能向你請求心跳包，正如你能向他們請求一樣。
> 
> 

失竊資料可能包含使用者名稱和密碼。逆向心臟出血漏洞影響了數以百萬計的應用實例。部分易受攻擊的應用程式列於下面的「應用軟體」一節中。

### 具體受影響的系統

思科系統已確認其下 78 種產品存在缺陷，包括 IP 電話系統和網真（影片會議）系統。

#### 網站及其它線上服務

2014 年 4 月 8 日，GitHub 上有一項對瀏覽量最大的網站的分析，發現受影響的網站包括雅虎、Imgur、Stack Overflow、Slate 及 DuckDuckGo。下列網站已發布公告，因受漏洞影響，建議使用者更改密碼：

加拿大聯邦政府出於漏洞的安全考慮，暫時關閉了加拿大稅務局（CRA）及多個政府部門的線上服務。

平台維護者（如維基媒體基金會）建議他們的使用者更改密碼。

LastPass 的伺服器存在缺陷，但因額外的加密及正向安全，潛在的攻擊者無法利用此漏洞。不過 LastPass 仍建議使用者修改所有受影響網站帳戶的密碼。

Tor 專案建議中繼和隱蔽服務的執行者在修補 OpenSSL 後，應復原並生成新金鑰，但同時指出，兩套 Tor 中繼金鑰及多跳設計最大限度地減少了單一中繼遭竊取所造成的影響。作為預防措施，隨後發現存在漏洞的 586 個中繼被強制下線。

包括 Steam、我的世界、戰遊網、英雄聯盟、GOG.com、Origin、索尼線上娛樂、Humble Bundle 及流亡黯道在內的遊戲受到影響，隨後得到修復。

#### 應用軟體

存在缺陷的應用軟體套件括：

* 若干惠普伺服器應用程式，如 Linux 和 Windows 上的 HP 系統管理首頁（SMH）。
* FileMaker 13 的某些版本
* LibreOffice 4.2.0 至 4.2.2（4.2.3 已修復）
* LogMeIn 聲稱已「更新許多我們依賴 OpenSSL 的產品和服務組件」。
* 若干 McAfee 產品，即為 Microsoft Exchange、軟體防火牆、及 McAfee 電子郵件和網頁閘道器提供病毒防護的軟體的某些版本
* MySQL Workbench 6.1.4 及更早
* Oracle MySQL Connector/C 6.1.0-6.1.3 和 Connector/ODBC 5.1.13、5.2.5-5.2.6、5.3.2
* 甲骨文大數據機（包括 Oracle Linux 6）
* Primavera P6 專業專案管理（包括 Primavera P6 企業專案組合管理）
* WinSCP（Windows FTP 客戶端）5.5.2 及一些早期版本（僅當通過 TLS/SSL 使用 FTP 時，於 5.5.3 版本修復）
* 若干 VMware 產品，包括 VMware ESXi 5.5、VMware Player 6.0、VMware Workstation 10 及 Horizon 系列產品、仿真器和雲端運算套件

其他幾個甲骨文公司的應用程式受到影響。

#### 作業系統 / 韌體

若干 GNU/Linux 發行版都受到了影響，包括 Debian（及其衍生版，如 Linux Mint 和 Ubuntu）和 Red Hat Enterprise Linux（及其衍生版，如 CentOS、Oracle Linux 6 和 Amazon Linux），還有下列作業系統及韌體：

* Android 4.1.1，在各種可攜式裝置中使用。克里斯・史密斯（Chris Smith）在 Boy Genius Report 寫道，僅這一版本受影響，但它卻是 Android 很受歡迎的一版（Chitika 聲稱 50 萬台裝置執行著 4.1.1；Google 則稱不到總啟用裝置的 10%）。其它 Android 版本不存在缺陷，因其或禁用了心跳，或使用的是不受影響的 OpenSSL 版本
* 某些 AirPort 基站的韌體
* 某些思科系統路由的韌體
* 某些 Juniper Networks 路由的韌體
* IPCop 2.1.3 及某些早期版本（於 2.1.4 修復）
* pfSense 2.1.0 及 2.1.1（於 2.1.2 修復）
* 威騰電子 My Cloud 產品系列的韌體

### 漏洞檢測服務

一些網站推出了測試，檢測給定的網站上是否存在心臟出血漏洞。然而，據稱許多這種測試都不是很有效。可用的工具包括：

* Tripwire SecureScan
* AppCheck—— 靜態二進位檔案掃描，來自 Codenomicon
* Arbor Network 的 Pravail Security Analytics
* Norton Safeweb 心臟出血測試工具
* 歐洲 IT 安全公司的心臟出血測試工具
* 心臟出血掃描器，來自義大利資訊安全專家菲利普・瓦爾索達（Filippo Valsorda）
* Cyberoam 的心臟出血測試
* Critical Watch 免費線上心臟出血測試器
* Metasploit 心臟出血掃描模組
* Rehmann 的心臟出血伺服器掃描
* Lookout 手機安全公司心臟出血探測器，一個用於安卓裝置的應用程式，可確定裝置使用的 OpenSSL 版本，並指出是否啟用了有缺陷的心跳特性
* LastPass 的心臟出血檢查器
* Pentest-Tools.com 的線上心臟出血漏洞網路範圍掃描器
* 以 Python 語言寫成的紅帽公司官方離線掃描器
* Qualys SSL 實驗室的 SSL 伺服器測試，不僅能尋找心臟出血漏洞，還能找到其他 SSL/TLS 實現中的錯誤。
* 瀏覽器擴充，如 Chromebleed 和 FoxBleed
* SSL Diagnos
* CrowdStrike 心臟出血掃描器 - 掃描路由器、印表機及其他連接到網路的裝置，包括 Intranet 網站。
* Netcraft 網站報告 - 基於 Netcraft 的 SSL 調查資料，確定網站在漏洞公開之前是否提供了 TLS 心跳擴充，以此指出網站的保密性是否受到危害。Netcraft 的 Chrome、Firefox 和 Opera 也能進行同樣的檢查，同時尋找可能已失密的憑證。

其他安全工具添加了相應功能，以尋找此漏洞。例如，Tenable Network Security 為其 Nessus 漏洞掃描器寫了外掛程式，以掃描出此問題。Nmap 安全掃描器自 6.45 版本起包含了心臟出血檢測指令碼。

Sourcefire 已經發布了 Snort 規則，以檢測心臟出血攻擊流量和可能的心臟出血回應流量。開源封包分析軟體，如 Wireshark 及 tcpdump，使用特定的 BPF 封包過濾器，將其作用於擷取並儲存的封包和即時流量上，可以辨識出心臟出血包。

## 補救

通過將 OpenSSL 更新到已修補的版本（1.0.1g 或更高版本），可以解決心臟出血漏洞。OpenSSL 可以用作獨立程式、動態共享物件或靜態連結庫，因此，更新可能需要重新啟動載入了 OpenSSL 易受攻擊版本的行程，及重新連結靜態連結它的程式和庫。實際上，這意味著更新靜態連結 OpenSSL 的軟體套件，並重新啟動正在執行的程式，以刪除記憶體中舊的、易受攻擊的 OpenSSL 代碼副本。

在漏洞修復後，伺服器管理員必須解決保密資料可能泄漏的問題。因為心臟出血允許攻擊者得到私鑰，所以必須認為這些金鑰已泄密。須重新生成金鑰對，使用它們的憑證也要重新簽發，並且吊銷舊憑證。心臟出血也有可能會泄漏其他在記憶體中的保密資料，因此，其他認證材料（如密碼）也應該重新生成。很難確定受影響的系統是否沒有受到損害，或者某個特定資訊是否已被泄露。

### 瀏覽器安全憑證吊銷感知

由於漏洞威脅著私鑰的安全，即使是在漏洞已修復、先前的憑證已吊銷後，如果受攻擊網站的使用者所使用的瀏覽器無法發現憑證已吊銷，漏洞仍會對他們有影響。安全憑證吊銷感知測試雖不測試系統是否存在心臟出血漏洞，但讓使用者測試他們的網頁瀏覽器，在網站使用的憑證已吊銷的情況下，是否允許繼續存取。因此，修復此漏洞，使用者還需要更新瀏覽器，確保具有最新的憑證吊銷列表（或 OCSP 支援）及憑證吊銷功能。

## 根本原因、可能的教訓及回應

漏洞造成的損失難以評估，不過據 eWEEK 估計至少為 5 億美元。

戴維・A・惠勒在論文《如何防止下一個心臟出血漏洞》中分析了為什麼沒能更早發現漏洞，並且提出了幾種可能能更快辨識漏洞，以及減小其影響的方法。據惠勒所言，要防止心臟出血漏洞，最有效的方法是用一套非典型的測試套件徹底執行他所說的「負面測試」，即測試無效的輸入是否會導致程式失敗，而非成功。惠勒強調，應有一套通用的測試套件以作為所有 TLS 實現的基礎。

據 The Conversation 上羅伯特・默克爾（Robert Merkel）的文章，心臟出血漏洞揭示了「風險分析上的巨大失敗」。默克爾認為，OpenSSL 注重效能，而不是安全，在他看來這毫無意義。但他認為，與其指責 OpenSSL 還不如指責它的使用者，他們選擇使用 OpenSSL 卻並未提供資金以進行更好的審查和測試。他解釋道，有兩方面因素決定了將來還有出現類似安全漏洞的風險。首先，程式庫的原始碼會影響寫出有類似影響漏洞的可能。默克爾提到，使用 C 語言就是一個有利於此種漏洞出現的危險因素，這與惠勒的分析一致。其次，OpenSSL 的貢獻流程會影響能快速修復錯誤的機率。

塔林理工大學的簡思・格特魯（Jens Getreu）在他的文章中提到，如果 OpenSSL 使用保證記憶體安全的 Rust 語言開發，那麼心臟出血漏洞本來是可以避免的。百度則使用 Rust 語言實現了 MesaLink TLS 專案；MesaLink 提供和 OpenSSL 相容的 API，從而可以在 cURL 等專案中替換 OpenSSL。

西奧・德・若特，OpenBSD 和 OpenSSH 專案的創始人和領導者，就同一方面批評 OpenSSL 的開發人員編寫自己的記憶體管理程式，如他所說的那樣，這就繞過了 OpenBSD C 標準函式庫對漏洞的防範，他說「OpenSSL 是由一個不負責任的團隊開發的。」繼心臟出血漏洞披露之後，OpenBSD 專案的成員從 OpenSSL 復刻出了 LibreSSL。

修改程式而導致該漏洞的程式設計師羅賓・賽格爾曼聲稱自己「忽略掉了對長度變數的驗證」，並否認提交有缺陷的實現是刻意為之。在漏洞公開後，賽格爾曼就另一方面提出了建議，指出 OpenSSL 沒有經過足夠多的人的審查。雖然他的工作經過了 OpenSSL 核心開發人員的審查，審查的目的卻主要是驗證功能的改進是否正確，這會使漏洞更容易放過。

OpenSSL 核心開發者本・勞里稱，OpenSSL 的安全審查本可以發現心臟出血漏洞。軟體工程師約翰・沃爾什（John Walsh）評論道：

> 想想看，OpenSSL 僅有兩名（全職）雇員，卻要編寫、維護、測試、審查 50 萬行的關鍵業務代碼。
> 
> 

OpenSSL 基金會主席史蒂夫・馬奎斯（Steve Marquess）說：「奇怪之處不在於幾名超負荷工作的志願者漏過了這個錯誤；真正神奇的是這種事之前都沒有發生。」戴維・A・惠勒認為通常情況下，審查是一種發現漏洞的很好方式，但他指出，「OpenSSL 使用了過於複雜的結構，使它更難為人類和機器所審查。」他寫道：

> 在簡化代碼上應不斷努力，否則若只是添加功能，軟體的複雜度就會逐漸增加。隨著時間的推移，代碼應及時重構，使之簡潔明了，而不只是不斷地添加新功能。要達成的目標應該是讓代碼「顯然正確」，而不是使代碼變得太複雜，以至於「我看不出有什麼問題」。
> 
> 

LibreSSL 進行了大規模的代碼清理，僅在第一周內就移除了超過 90000 行 C 代碼。

據安全研究人員丹・卡明斯基說，心臟出血漏洞是該基金會經濟問題的徵兆，這需要解決。從發現這個在「關鍵」依賴包中一個簡單功能的簡單錯誤所花費的時間來看，卡明斯基擔心如不採取任何措施，未來還會有無數這樣的漏洞。在發現漏洞時，OpenSSL 僅有少數志願者負責維護，其中只有一人將其作為全職工作。每年 OpenSSL 專案收到的捐款大約為 2000 美元。Codenomicon 的心臟出血漏洞網站呼籲為 OpenSSL 專案捐款。在了解到漏洞披露後的兩三天內，捐款總額為 841 美元後，卡明斯基說：「我們正在製造全球經濟中最重要的技術，依靠的卻是投入資金少得讓人驚訝的基礎設施。」核心開發者本・勞里則認為專案資金「完全沒有著落」。儘管 OpenSSL 軟體基金會沒有錯誤賞金計劃，但網際網路錯誤賞金計劃主動給發現心臟出血漏洞的尼爾・梅塔獎勵了 15000 美元，以表彰她將其披露的負責任行為。

保羅・基烏薩諾（Paul Chiusano）認為是軟體經濟學的失敗導致了此漏洞。

面對此次危機，行業集體反應，2014 年 4 月 24 日 Linux 基金會宣布成立核心基礎架構聯盟，這是一個數百萬美元的專案，能為處在全球資訊基礎架構中的關鍵要素提供資金。出資人包括亞馬遜、戴爾、Facebook、富士通、Google、IBM、英特爾、微軟、NetApp、Rackspace、VMware 和 Linux 基金會。該聯盟旨在讓開發人員能全職在專案上工作，並且支付安全審計、硬體和軟體基礎設施，旅行及其他費用。OpenSSL 是該聯盟資金首位獲得者的候選人。

此漏洞後，Google 成立了 Project Zero 尋找零日漏洞，來幫助保護網路和社會。

## 參考

## 延伸閱讀

* Durumeric, Zakir; et al. The Matter of Heartbleed. Proceedings of the 2014 Conference on Internet Measurement Conference. 2014: 475–488. doi:10.1145/2663716.2663755.

## 外部連結

* 漏洞摘要及常見問題 （頁面存檔備份，存於網際網路檔案館），由 Codenomicon 公司設立
* 提供給加拿大組織和個人的資訊