漏洞描述:
memcache是一套常用的key-value緩存系統(tǒng),由于它本身沒有權(quán)限控制模塊,所以開放在外網(wǎng)的memcache服務(wù)很容易被攻擊者掃描發(fā)現(xiàn),通過命令交互可直接讀取memcache中的敏感信息。
修復(fù)方案:
因memcache無權(quán)限控制功能,所以需要用戶對(duì)訪問來源進(jìn)行限制。
以下方案基于Linux CentOS:
方案一:(啟動(dòng)時(shí)綁定監(jiān)聽IP)
如果memcache沒有在外網(wǎng)開放的必要,可在memcached啟動(dòng)的時(shí)候指定綁定的ip地址為 127.0.0.1。例如:
memcached -d -m 1024 -u root -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid
其中 -l 參數(shù)指定為本機(jī)地址。
方案二:(修改默認(rèn)監(jiān)聽端口)
更改memcached 默認(rèn)監(jiān)聽端口為11211 以外的端口,以下以新端口19203為例:
memcached -d -m 1024 -u memcached -l 127.0.0.1 -p 19203 -c 1024 -P /tmp/memcached.pid
參數(shù)說明:
-d選項(xiàng)是啟動(dòng)一個(gè)守護(hù)進(jìn)程;
-m是分配給Memcached使用的內(nèi)存數(shù)量,單位是MB,我這里是100MB;
-u是運(yùn)行Memcached的用戶,推薦單獨(dú)普通權(quán)限用戶:memcached,不要使用root權(quán)限賬戶;
-l是監(jiān)聽的服務(wù)器IP地址我這里指定了服務(wù)器的IP地址x.x.x.x;
-p是設(shè)置Memcached監(jiān)聽的端口,我這里設(shè)置了19203,最好是1024以上的端口;
-c選項(xiàng)是最大運(yùn)行的并發(fā)連接數(shù),默認(rèn)是1024,我這里設(shè)置了512,按照你服務(wù)器的負(fù)載量來設(shè)定;
-P是設(shè)置保存Memcached的pid文件,我這里是保存在 /tmp/memcached.pid;
方案三:(配置防火墻訪問控制)
如果memcache服務(wù)需要對(duì)外提供服務(wù),則可以通過iptables進(jìn)行訪問控制,下面是只允許本機(jī)及外部IP 1.1.1.1訪問:
// accept
iptables -A INPUT -p tcp -s 127.0.0.1 --dport 11211 -j ACCEPT
iptables -A INPUT -p udp -s 127.0.0.1 --dport 11211 -j ACCEPT
iptables -A INPUT -p tcp -s 1.1.1.1 --dport 11211 -j ACCEPT
iptables -A INPUT -p udp -s 1.1.1.1 --dport 11211 -j ACCEPT
// drop
iptables -I INPUT -p tcp --dport 11211 -j DROP
iptables -I INPUT -p udp --dport 11211 -j DROP
// 保存規(guī)則并重啟 iptables
service iptables save
service iptables restart
上述規(guī)則的意思是只允許本機(jī)及外部IP 1.1.1.1 對(duì)11211端口進(jìn)行訪問,如已經(jīng)變更默認(rèn)監(jiān)聽端口,請(qǐng)變更--dport 的端口為新端口。
驗(yàn)證 memcache 端口11211開啟情況:
以memcached 服務(wù)器IP(2.2.2.2),外部IP 1.1.1.1,在外部IP 服務(wù)器上運(yùn)行telnet檢測為例:
telnet 2.2.2.2 11211
無需用戶名密碼,1.1.1.1可以直接連接memcache 服務(wù)(2.2.2.2)的11211端口。
方案四:(最小化權(quán)限運(yùn)行)
使用普通權(quán)限賬號(hào)運(yùn)行,以下指定memcached 用戶運(yùn)行
memcached -d -m 1024 -u memcached -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid
方案五:(升級(jí)為最新版本)
在編譯安裝memcached程序時(shí)添加-enable-sasl選項(xiàng),并且在啟動(dòng)memcached服務(wù)程序時(shí)添加-S參數(shù),啟用SASL認(rèn)證機(jī)制以提升memcached的安全性
執(zhí)行如下命令獲得相應(yīng)結(jié)果:
# stats //查看memcache 服務(wù)狀態(tài)
# stats items //查看所有items
# stats cachedump 32 0 //獲得緩存key
# get :state:264861539228401373:261588 //通過key讀取相應(yīng)value ,獲得實(shí)際緩存內(nèi)容,造成敏感信息泄露