1. 程式人生 > >Memcached遠端程式碼執行漏洞預警與檢測修復

Memcached遠端程式碼執行漏洞預警與檢測修復

一、漏洞基本資訊

CVE編號:

CVE-2016-8704 - Memcached Append/Prepend 遠端程式碼執行漏洞
CVE-2016-8705 - Memcached Update 遠端程式碼執行漏洞
CVE-2016-8706 - Memcached SASL身份驗證遠端程式碼執行漏洞

漏洞釋出日期:2016.10.30
受影響的軟體及系統:Memcached < 1.4.33

漏洞概述:利用該漏洞黑客可以竊取在Memcached中存放的業務資料,或導致Memcached服務崩潰從而造成拒絕服務等危害,同時可導致遠端程式碼執行,攻擊者可以通過向伺服器傳送一個精心構造的Memcached命令實現該漏洞的利用。此外,這些漏洞還可以洩露敏感的程序資訊,並且可以多次觸發,利用這些敏感的程序資訊,攻擊者可以繞過像ASLR等常見的漏洞緩解機制。

二、漏洞原理分析

   memcached是一個自由開源的,高效能,分散式記憶體物件快取系統。它是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric為首開發的一款軟體。現在已成為mixi、hatena、Facebook、Vox、LiveJournal等眾多服務中提高Web應用擴充套件性的重要因素。Memcached是一種基於記憶體的key-value儲存,用來儲存小塊的任意資料(字串、物件)。這些資料可以是資料庫呼叫、API呼叫或者是頁面渲染的結果。本質上,它是一個簡潔的key-value儲存系統。
   一般的使用目的是,通過快取資料庫查詢結果,減少資料庫訪問次數,以提高動態Web應用的速度、提高可擴充套件性。
2016年10月31日Memcached釋出安全補丁修復多個遠端程式碼執行漏洞,利用該漏洞黑客可以竊取在Memcached中存放的業務資料,或導致Memcached服務崩潰從而造成拒絕服務等危害,安全客提醒使用者應當及時升級官方版本至1.4.33版本。
   
雖然Memcached文件中已經強烈建議將Memcached服務配置在可信任的網路環境中,但是仍有大量的Memcached服務可以在公網中直接訪問。 此外,即使Memcached部署在內網中,企業的安全管理人員仍然不能忽視此次更新的安全問題,黑客可能通過內網滲透、SSRF漏洞等,直接對部署在內網的服務發起攻擊。  這些漏洞存在於用於插入(inserting)、附加(appending,)、前置(prepending)、修改鍵值對的函式中,在SASL身份驗證位置也存在問題。利用資料型別的不一致性觸發整數溢位,再由整數溢位導致堆溢位。其執行流程也極其相似,都是先由dispatch_bin_command函式來讀取conn中的資料,並將conn->state設定為conn_nread,最後通過不同的substate來對應完成不同的功能。所以,如果不想對每個函式進行改正的話,可以通過在dispatch_bin_command開始對輸入進行驗證來修補這3個漏洞,這樣做的好處是,通過這個補丁可以將可能出現的類似原因和流程的同類型漏洞一次性封殺。

三、漏洞檢測方法

1 網上線上檢查

https://cloud.nsfocus.com/#/krosa/views/initcdr/productandservice?service_id=1026

2、手動直接檢測

lsb_release -apkg -l | grep -i memcached # 在debian等系列  
rpm -qa | grep -i memcached  # 在redhat、centos、ubuntu等系列
# 根據版本的大小進行匹配。

3Web指紋處檢索“phpmyadmin”

“埠與服務”檢索服務“memcached”,檢查網際網路側是否打開了memcached 服務

4 使用POC進行檢驗

POC下載連結:連結:http://pan.baidu.com/s/1o7KLFJW 密碼:od8u 請閱讀裡面的readme.txt檔案,進行驗證。

四、漏洞修復方案

1.升級官方最新版本:1.4.33版本 http://www.memcached.org/files/memcached-1.4.33.tar.gz
2.限制Memcached 11211埠訪問許可權(如:禁止外網訪問、僅限特定埠訪問)

3.緩解措施: 對memcache進行加固處理,加固方法如下:
安全啟動 
新建作業系統普通賬號安全執行memcache,禁止以管理員(root)許可權執行 #useradd memcached -d /home/memcached -m           #新建普通使用者
限制memcache只監聽內網IP "#/usr/local/memcached/bin/memcached -u memcached -l 內網IP地址  #啟動服務 
備註:內網IP地址請自行修改,一般限制為web伺服器的內網IP地址"
埠訪問限制 
Memcached沒有配置認證選項,未授權使用者可直接獲取資料庫中所有資訊,必須根據最小化原則對埠和IP進行限制 "#iptables -A INPUT -p tcp -s 來源IP地址 --dport 11211 -j ACCEPT
#iptables -A INPUT -p tcp --dport 11211 -j DROP
#iptables -A INPUT -p udp --dport 11211 -j DROP
注:來源IP地址請自行根據需要修改;memcached預設監聽埠為11211(TCP&UDP),若業務修改成其他埠,這裡也要作對應修改;禁止UDP訪問。"

五、漏洞修復結果驗證

參考【三、漏洞檢測方法】

六、參考資料

https://github.com/memcached/memcached/wiki/ReleaseNotes1433
http://blog.talosintel.com/2016/10/memcached-vulnerabilities.html
http://www.talosintelligence.com/reports/TALOS-2016-0219/
http://www.talosintelligence.com/reports/TALOS-2016-0220/
http://www.talosintelligence.com/reports/TALOS-2016-0221/
http://bobao.360.cn/learning/detail/3151.html

歡迎大家分享更好的思路,熱切期待^^_^^ !