最近在資安業界沸沸揚揚的一個話題,就是全球普遍使用的OpenSSL加密技術,出現了一個重大的人為疏忽;這個被命名為「HeartBleed」的漏洞,原本是一個很單純的程式思慮不週錯誤,在二年前由一位德國軟體開發工程師Robin Seggelmann針對openSSL所作的一系列功能更新中被上傳,而隨後openSSL的例行檢查人員也沒有注意到這個問題,因此該bug就隨著更新版本而散發出去了;依據「時代」以及「Time」等雜誌報導統計,全球預估有近三分之二的網站伺服器都有使用OpenSSL協議,因此「HeartBleed」影響範圍之大,被外媒形容為「最危險的網路安全漏洞」。
關於SSL
SSL是Secure Socket Layer的縮寫,最早由Netscape公司所提出,可在Internet上提供兩個端點之間的加密性傳輸,目前已廣泛的應用在HTTP連線上,例如,當我們以「https://」方式連上網站,如果瀏覽器的右下角或網址列旁有一個鑰匙,即代表該網站有支援SSL。
SSL不僅使用於網站的加密,也大量應用於各項網路服務中,例如企業界常用的VPN傳輸的加密(SSL VPN),以及各項應用程式、手機APP網路傳輸的加密等等;而這次的主角openSSL屬於開放原始碼的SSL套件,不單是各種Linux版本的預設安裝套件,也廣泛應用於不同的商業、或非商業性質的軟體及服務中,因此,當消息傳出時,各家大型的網路業者及知名的IT巨頭們都列名其中,成了受害者之一。
影響與修復
據瞭解,受影響的版本是2012年三月所發行的1.01版,最近剛剛於2014/4/7 release的1.0.1g版本看來則是針對該bug予以修復,所以不受影響;但1.01版至今已經兩年多了,累積已有眾多的服務與Linux版本皆是使用該版本,看來影響的範圍的確不容小覰。
幸好這次的問題,只要透過升級openSSL或安裝hotfix便可解決,且截至目前尚未有正式的災情傳出,因此受影響網站及伺服器皆很快於短時間內便可修復或升級(註一及註二),但最大的問題在於,從漏洞產生至今已兩年了,這段時間會不會有駭客已透過該漏洞竊取了眾多的機密資訊?美國政府是不是如謡傳般早已利用該漏洞進行長期的監控工作?另外根據報導指出,知情人士表示 NSA(U.S. National Security Agency) 早在兩年前就已經知道此漏洞,並且利用這個漏洞竊取許多網站的機敏資料?這些個人及組織機密資訊的外流,恐怕是後續最另人擔心的問題所在。
凌陽創新的伺服器有沒有受影響?
令人慶幸的,平時病毒與駭客們的最愛「微軟」系統這次置身事外暫無影響(影響列表請參考註三),這是由於IIS使用的是SSPI (Security Support Provider Interface)而非SSL,微軟利用這個API來進行跟openSSL類似的相關認證動作;創新對外的網站與服務,大部份架設於微軟系統的主機(Webmail、VPN、DNS、WEB server、eOrder等),其它的Linux主機,則不使用SSL服務(例如HAVP、SQUID等)。
而除了微軟,蘋果的系統Mac OS與iOS同樣也沒有受到影響,因為最新版的Mac OS系統使用的仍是0.9.8版本openSSL,而iOS則根本沒有openSSL;但所謂的沒有影響指的僅僅是提供服務的主機這端,對於系統業者來說,他們大可宣稱他們的系統是安全的,但對於使用者來說,由於曾經或目前正在使用的服務來自不同的廠商與系統,因此,對於消費者來說,無法保證目前存放於網路的資料是絕對安全的。
「HeartBleed」這個漏洞是如何造成的?
這個造成全球恐慌的漏洞是如何造成的呢?它是如何讓個人資訊透過這個漏洞洩漏出去的?Eric Limer在他的個人網站(http://gizmodo.com/how-heartbleed-works-the-code-behind-the-internets-se-1561341209)上作了詳細而且清楚的解釋,顯示出這麼一小段人為的疏忽所造成的漏洞,有多麼容易讓有心人士竊取資料,雖然目前並無證顯示有駭客曾利用此漏洞發動攻擊,但若非openSSL自行主動地公告,否則Yahoo、Google、Flickr以及Imgur等等知名的網路公司,兩年多來一直曝露在脆弱的資安環境下可能還不自知,眾多的資安團隊形同虛設。
但幸運的是,openSSL這個開源的程式碼,就公開的攤在陽光下讓我們去檢視,無所遁藏,我們可以深入的瞭解這個問題是如何的發生,如何的被修復,也值得我們去探討與省思:免費的開源程式,最引以為傲的就是它面向每位開發者,所有的程式碼開放給任何人下載檢視,理應是最安全的,但就是在這樣眾目睽睽的情況下,兩年多的時間,甚至於是有經驗的程式專家,都沒有人注意到這段程式碼的問題。
關於SSL heartbeat的程式碼問題
當兩台主機準備好要進行加密的溝通之前,會先開始一個稱為「心跳heartbeat」的動作以確認雙方有持續的保持連線,這個動作,也是這個漏洞的源頭,所謂「HeartBleed」名稱的由來。
兩台主機定時的傳送接收並回覆給對方資訊,以確認彼此都還存活而沒有斷線,這就是heartbeat動作;現在假設client端(你的PC)傳送了一個heartbeat位元到server端(假設是銀行主機),理應銀行主機會立即的回應heartbeat(在SSL為回傳client所傳送的內容),這是一個很自然的確認過程,就好像一個舊式的錄音帶有兩個齒輪的轉軸,兩個不是一起運轉,就是同時停止,若發生了一個轉軸卡住了,另一個也會無法動彈。
這制式的過程,每日都會發生在全球數百萬計的主機上,但就是下面這麼一段簡單的程式碼,把它給搞砸了:
memcpy(bp, pl, payload);
說明:
memcpy是一個拷貝資料的指令,它需要傳入三個參數:bp、pl、 payload
bp:要拷貝資料的目的地,所在的最後一個記憶體位址
pl:要拷貝的資料的記憶體區段
payload:數字,定義所要拷貝資料的大小
程式設計師在程式中操控記憶體以執行資料的拷貝,要顧慮到相當多的因素,其中一項是「空的記憶體」;在上述三個變數中,bp是拷貝的資料所要放置的目的地位址,而在這個定義好的記憶體區段內,並不是空的,而是一直都有資料被放置其間,但他們可以被其它新的資料覆蓋、取出、再覆蓋,所以電腦(或者程式設計師)會將要使用的記憶體區段視為空的可使用的。
現在,理想的情況下,memcpy指令從pl取出了資料並依據payload指定的資料大小,放到指定的記憶體區段bp,資料放過去之後,原先該區段下payload大小的舊資料便會被新資料給覆蓋取代,沒有意外的話,所指定記憶體區段下的舊資料會被新資料覆蓋,並持續進行這個步驟。
但,如果payload這個值在說謊,或者說,給了一個錯誤的payload值,會發生什麼情況?假設現在payload的值定義pl有64KB大小,但實際上pl的內容卻是空的,memcpy指令還是會依據payload的值騰出64KB的記憶體空間給pl,但實際上卻因pl內容是空的不會有任何資料被覆蓋,造成64K區段的舊資料還留在原處,這段原本要被覆蓋的資料內容,有可能是無用的垃圾訊息,也有可能是銀行帳號、密碼等,但無論如何,這段程式碼發生了原先沒有想到的狀況:原先的舊資料沒有如意料中的被覆蓋。
例如下方是主機所回傳的內容,這些訊息就位於原本該被新內容覆蓋的區域,但主機卻誤信payload的長度而回傳。
如果還不是瞭解上述的程序,Eric Limer另外用了一個有趣的例子來說明這個意外的狀況:
假設你有很多的相片,你打算去隔壁商店買一個盒子將它們裝進去,但是那家商店的夥計有個特點,他很笨,而且不會算數。
現在你帶著100張相片走進這家店,將相片放在櫃檯上並且說:「我有100張相片!」,顧店的夥計看了看,說:「我這邊剛好有可以放100張相片的盒子」,他彎下腰來從下方取出了一個盒子,「就是這個,以前有人把這個裝100張相片的盒子放在這裏,但是現在沒有人會需要這個盒子了。」
說完,夥計從盒子裏取出了一張相片,燒掉它,然後把你的一張相片放進去,繼續著一直重複作這個動作,直到將你所有的100張相片都放進去為止,最後盒子裏放滿了你的相片,而舊的相片都已經燒掉了,這個盒子裏面都是屬於你的相片。
但是,如果將時光倒回去,你跟夥計說「我有100張相片!」,但你卻在桌上只放了一張相片,那個不會算數的夥計依然取出了一個100張相片的盒子,從裏面取出一張相片,燒掉,然後放入一張你的相片,但是就這麼一張,因為桌上沒有任何相片了;夥計相信你的話盡責的完成了他的工作,而你也帶著99張不屬於你的相片回家,可能的話,你也可以跟他說你有100相片,但卻沒有給他任何相片,而那個愚笨的夥計會直接把裝了別人的100張相片盒子給你。
將場景推回實際的Heartbleed中,那些需要燒掉的相片就是記憶體區段中需被覆蓋的資料,可能是其它人的email address、password、帳號等等;主機所回應的64KB記憶體區段可能是隨機的,因此你每次得到的資料可能不同、或是某個片段的資料,但是,你可以重複的進行這樣的行為,以拼湊出有用的資料,只要你像例子中持續的向夥計要盒子一般,持續的向主機送出heartbeat資訊,一次又一次就可以了。
我們學到了什麼?
目前openSSL已修復了該段程式碼,就是要在執行拷貝動作之前,先檢查heartbeat傳送的資訊,是否為空資料,若有值,則再檢查資料的數量是否與宣稱的相符合,通過後才執行指令。
其實這種程式錯誤相當的普遍,我們經常聽見的「buffer overflow bug」就是這類的情況;一個有經驗的程式設計師都應先驗証對方所提供的資料是否有誤,從基本的資料長度檢查到資料的內容,都些是必要不能省略的基本步驟。
這次事件,也給予了認為Linux比Windwos安全的人們一個震撼教育,雖然這次是在尚未發生嚴重災害前即由官方立即公開並修復,但沒有人能夠擔保下次會不會有相同的情況發生,還能不能夠這麼幸運尚未成重大災情!開源程式碼是否依然安全的議題,也開始在眾多使用開源的網民與企業間投下陰影,開源碼組織所依賴的「peer-reviewed」(同儕檢視)方式是否能防止疏忽或任何有意的程式漏洞,還是需要另外成立一個主動的驗證機制?我們真的需要感謝這次的HeartBleed事件,它讓問題突顯出來並等待我們去正視改進。
註一:網站
|
Qualys 分析
|
官方回應「心在淌血」處理進度
| ||
.
|
Google
|
通過
|
已修正,但建議使用者變更密碼
|
.
|
Facebook
|
通過
|
已修正,但建議使用者變更密碼
|
.
|
YouTube
|
通過
|
已修正,但建議使用者變更密碼
|
.
|
Yahoo!
|
通過
|
已修正,但建議使用者變更密碼
|
.
|
Amazon
|
通過
|
已修正,但建議使用者變更密碼
|
.
|
Wikipedia
|
通過
|
已修正,但建議使用者變更密碼
|
.
|
LinkedIn
|
通過
|
未受影響
|
.
|
eBay
|
通過
|
未受影響
|
.
|
Twitter
|
通過
|
未受影響
|
.
|
Craigslist
|
通過
|
尚未回應
|
.
|
Bing
|
通過
|
已修正,但建議使用者變更密碼
|
.
|
Pinterest
|
通過
|
已修正,但建議使用者變更密碼
|
.
|
Blogspot
|
通過
|
已修正,但建議使用者變更密碼
|
.
|
CNN
|
仍須注意
|
尚未回應
|
.
|
Live
|
通過
|
未受影響
|
.
|
PayPal
|
通過
|
未受影響
|
.
|
Instagram
|
通過
|
已修正,但建議使用者變更密碼
|
.
|
Tumblr
|
通過
|
已修正,但建議使用者變更密碼
|
.
|
通過
|
已修正,但建議使用者變更密碼
| |
.
|
Wordpress
|
通過
|
尚未回應
|
.
|
Imgur
|
通過
|
尚未回應
|
.
|
Huffington Post
|
仍須注意
|
尚未回應
|
.
|
Reddit
|
通過
|
已修正,但建議使用者變更密碼
|
.
|
MSN
|
通過
|
未受影響
|
.
|
Netflix
|
通過
|
已修正,但建議使用者變更密碼
|
.
|
仍須注意
|
尚未回應
| |
.
|
IMDb
|
仍須注意
|
尚未回應
|
.
|
Yelp
|
通過
|
已修正,但建議使用者變更密碼
|
.
|
Apple
|
通過
|
未受影響
|
.
|
AOL
|
通過
|
未受影響
|
.
|
Microsoft
|
通過
|
未受影響
|
.
|
NYTimes
|
通過
|
尚未回應
|
.
|
Bank of America
|
通過
|
未受影響
|
.
|
Ask
|
仍須注意
|
尚未回應
|
.
|
Fox News
|
通過
|
未受影響
|
.
|
Chase
|
通過
|
未受影響
|
.
|
GoDaddy
|
通過
|
已修正,但建議使用者變更密碼
|
.
|
About
|
通過
|
未受影響
|
.
|
BuzzFeed
|
通過
|
尚未回應
|
.
|
Zillow
|
通過
|
未受影響
|
.
|
Wells Fargo
|
通過
|
未受影響
|
.
|
Etsy
|
通過
|
已修正,但建議使用者變更密碼
|
.
|
XVideos
|
仍須注意
|
尚未回應
|
.
|
Walmart
|
通過
|
未受影響
|
.
|
CNET
|
通過
|
未受影響
|
.
|
Pandora
|
通過
|
未受影響
|
.
|
xHamster
|
通過
|
尚未回應
|
.
|
PornHub
|
通過
|
尚未回應
|
.
|
Comcast
|
通過
|
尚未回應
|
.
|
Stack Overflow
|
通過
|
尚未回應
|
.
|
Salesforce
|
通過
|
未受影響
|
.
|
Daily Mail
|
仍須注意
|
尚未回應
|
.
|
Vimeo
|
通過
|
已修正,但建議使用者變更密碼
|
.
|
Conduit
|
通過
|
尚未回應
|
.
|
Flickr
|
通過
|
已修正,但建議使用者變更密碼
|
.
|
Zedo
|
無數據
|
未受影響
|
.
|
Forbes
|
仍須注意
|
尚未回應
|
.
|
LiveJasmin
|
仍須注意
|
尚未回應
|
.
|
USPS
|
通過
|
尚未回應
|
.
|
Indeed
|
通過
|
尚未回應
|
.
|
Hulu
|
通過
|
未受影響
|
.
|
Answers
|
通過
|
未受影響
|
.
|
HootSuite
|
通過
|
未受影響
|
.
|
Amazon Web Services
|
通過
|
尚未回應
|
.
|
Adobe
|
通過
|
尚未回應
|
.
|
Blogger
|
通過
|
已修正,但建議使用者變更密碼
|
.
|
Dropbox
|
通過
|
已修正,但建議使用者變更密碼
|
.
|
無數據
|
未受影響
| |
.
|
AWeber
|
通過
|
未受影響
|
.
|
UPS
|
通過
|
未受影響
|
.
|
Intuit
|
通過
|
尚未回應
|
.
|
NBC News
|
通過
|
尚未回應
|
.
|
USA Today
|
通過
|
尚未回應
|
.
|
Outbrain
|
通過
|
已修正,但建議使用者變更密碼
|
.
|
The Pirate Bay
|
通過
|
尚未回應
|
.
|
The Wall Street Journal
|
通過
|
尚未回應
|
.
|
Bleacher Report
|
通過
|
尚未回應
|
.
|
Constant Contact
|
通過
|
尚未回應
|
.
|
Wikia
|
通過
|
尚未回應
|
.
|
CBSSports
|
通過
|
未受影響
|
.
|
Publishers Clearing House
|
通過
|
尚未回應
|
.
|
通過
|
已修正,但建議使用者變更密碼
| |
.
|
Groupon
|
通過
|
未受影響
|
.
|
Best Buy
|
通過
|
尚未回應
|
.
|
Feedbin
|
通過
|
已修正,但建議使用者變更密碼
|
.
|
Pinboard
|
通過
|
已修正,但建議使用者變更密碼
|
.
|
GetPocket
|
通過
|
已修正,但建議使用者變更密碼
|
.
|
IFTTT
|
通過
|
已修正,但建議使用者變更密碼
|
.
|
PayScale
|
通過
|
未受影響
|
註二:受影響的Linux版本
Debian Wheezy (stable), OpenSSL 1.0.1e-2+deb7u4
Ubuntu 12.04.4 LTS, OpenSSL 1.0.1-4ubuntu5.11
CentOS 6.5, OpenSSL 1.0.1e-15
Fedora 18, OpenSSL 1.0.1e-4
OpenBSD 5.3 (OpenSSL 1.0.1c 10 May 2012) and 5.4 (OpenSSL 1.0.1c 10 May 2012)
FreeBSD 10.0 - OpenSSL 1.0.1e 11 Feb 2013
NetBSD 5.0.2 (OpenSSL 1.0.1e)
OpenSUSE 12.2 (OpenSSL 1.0.1c)
1、行業巨頭
- 蘋果:無影響,iOS、Mac OS X都沒事。
- 亞馬遜:無影響。
- Google:受影響,有補丁,需更改密碼。
——Google說不用改密碼,但仍然建議這麼做。
- 微軟:無影響。
- 雅虎:受影響,有補丁,需更改密碼。
2、社交網絡
- Facebook:受否影響不清楚,但會有補丁,需要改密碼。
- Instagram:受影響,有補丁,需更改密碼。
- LinkedIn:無影響。
- Pinterest:受影響,有補丁,需更改密碼。
- Tumblr:受影響,有補丁,需更改密碼。
- Twitter:受否影響不清楚,但會有補丁,是否需要改密碼不清楚。
3、電子郵件
- Gmail:受影響,有補丁,需更改密碼。
- AOL:無影響。
- Hotmail/Outlook:無影響。
- Yahoo Mail:受影響,有補丁,需更改密碼。
4、網絡購物
- 亞馬遜:無影響。
- 亞馬遜網絡服務:受影響,有補丁,需更改密碼。
- eBay:無影響。
- Etsy:受影響(一小部分),有補丁,需更改密碼。
- GoDaddy:受影響,有補丁,需更改密碼。
- Groupon:無影響。
- Nordstrom:無影響。
- PayPal:無影響。
- Target:無影響。
- 沃爾瑪:無影響。
5、影音遊戲
- Flickr:受影響,有補丁,需更改密碼。
- Hulu:無影響。
- Mincraft:受影響,有補丁,需更改密碼。
- Netflix:受影響,有補丁,需更改密碼。
- SoundCloud:受影響,有補丁,需更改密碼。
- YouTube:受影響,有補丁,需更改密碼。
6、金融服務
- 美國運通:無影響。
- 美國銀行:無影響。
- 巴克萊:無影響。
- 第一資本:無影響。
- 美國大通:無影響。
- 花旗銀行:無影響。
- 億創理財:無影響。
- 富達國際投資:無影響。
- PNC:無影響。
- 嘉信理財:無影響。
- 史考特證券:無影響。
- TD Ameritrade:無影響。
- 道明銀行:無影響。
- T. Rowe Price:無影響。
- 美國合眾銀行:無影響。
- Vanguard:無影響。
- 富國銀行:無影響。
7、其他
- Box:受影響,有補丁,需更改密碼。
- Dropbox:受影響,有補丁,需更改密碼。
- Evernote:無影響。
- GitHub:受影響,有補丁,需更改密碼。
- IFTTT:受影響,有補丁,需更改密碼。
- OKcupid:受影響,有補丁,需更改密碼。
- Spark Networks:無影響。
- SpiderOak:無影響。
- 維基百科:受影響,有補丁,需更改密碼。
- Wordpress:不詳。
- Wunderlist:受影響,有補丁,需更改密碼。
8、密碼管理
- 1Password:無影響。
- Dashlane:受影響,有補丁,需更改密碼。
- LastPass:無影響。
註四:參考資料
沒有留言:
張貼留言