2014年4月16日 星期三

HeartBleed

http://o.aolcdn.com/hss/storage/midas/9e9126401a8067322599f1e3a2f36e59/200018786/018.jpg
    最近在資安業界沸沸揚揚的一個話題,就是全球普遍使用的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的長度而回傳。
https://pbs.twimg.com/media/BksqeV-IEAAl4i2.png

    如果還不是瞭解上述的程序,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)









註三:影響廠商(資料來源:http://digital.sina.com.hk/news/-7-1509431/1.html

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:無影響。



註四:參考資料


沒有留言:

張貼留言