Memcache安全配置

wyzsk發表於2020-08-19
作者: 瞌睡龍 · 2014/01/20 17:59

0x00 Memcache簡介


Memcache是一個高效能的分散式的記憶體物件快取系統,透過在記憶體裡維護一個統一的巨大的hash表,它能夠用來儲存各種格式的資料,包括影像、影片、檔案以及資料庫檢索的結果等。簡單的說就是將資料呼叫到記憶體中,然後從記憶體中讀取,從而大大提高讀取速度。

Memcache是danga的一個專案,最早是LiveJournal 服務的,最初為了加速 LiveJournal 訪問速度而開發的,後來被很多大型的網站採用。

Memcached是以守護程式方式執行於一個或多個伺服器中,隨時會接收客戶端的連線和操作。

0x01 搭建Memcache服務


yum install memcached 

安裝memcache服務端

yum -y install php-pecl-memcache 

安裝php擴充套件操作memcache

php -m | grep memcache 

檢視php擴充套件是否安裝成功

memcached -d -m 100 -u root -l x.x.x.x -p 11211 -c 512 -P /tmp/memcached.pid

引數說明:

-d選項是啟動一個守護程式;
-m是分配給Memcache使用的記憶體數量,單位是MB,我這裡是100MB;
-u是執行Memcache的使用者,我這裡是root;
-l是監聽的伺服器IP地址我這裡指定了伺服器的IP地址x.x.x.x;
-p是設定Memcache監聽的埠,我這裡設定了11211,最好是1024以上的埠;
-c選項是最大執行的併發連線數,預設是1024,我這裡設定了512,按照你伺服器的負載量來設定;
-P是設定儲存Memcache的pid檔案,我這裡是儲存在 /tmp/memcached.pid;

想要結束memcache程式

kill `cat /tmp/memcached.pid` 

設定開機啟動

chkconfig memcached on 

phpMemcachedAdmin圖形化介面,操作memcache,類似phpmyadmin

http://blog.elijaa.org/index.php?pages/phpMemcachedAdmin-Installation-Guide

最新版預設介面

enter image description here

Execute Commands on Servers那裡可以執行命令。

當然了用telnet其實是一樣的。

0x02 memcache匿名訪問危害


在烏雲提交的漏洞當中,有很多因為memecache限制不嚴格,導致資訊洩露的問題:

WooYun: memcached未作IP限制導致快取資料可被攻擊者控制

WooYun: 透過Memcache快取直接獲取某物流網使用者密碼等敏感資料

WooYun: 56.com memcached埠可以遠端使用

從memcache中獲取資訊通常是先檢視items資訊:

stats items

enter image description here

stats cachedump <item: id> <返回結果數量,0代表返回全部>

enter image description here

除了檢視資訊,通用可以修改刪除資訊。

phpMemcachedAdmin執行命令那裡也有個可以搜尋key的指令碼,並且支援正則匹配。

0x03 查詢可匿名訪問memcache的方式


memcache預設是11211埠,可使用nmap掃描有開11211埠的伺服器。

nmap -n --open -p 11211 X.X.X.X/24

然後telnet上,執行下

stats items

看看是否有返回結果。

0x04安全配置


Memcache伺服器端都是直接透過客戶端連線後直接操作,沒有任何的驗證過程,這樣如果伺服器是直接暴露在網際網路上的話是比較危險,輕則資料洩露被其他無關人員檢視,重則伺服器被入侵,因為Mecache是以root許可權執行的,況且裡面可能存在一些我們未知的bug或者是緩衝區溢位的情況,這些都是我們未知的,所以危險性是可以預見的。

內網訪問

最好把兩臺伺服器之間的訪問是內網形態的,一般是Web伺服器跟Memcache伺服器之間。普遍的伺服器都是有兩塊網路卡,一塊指向網際網路,一塊指向內網,那麼就讓Web伺服器透過內網的網路卡來訪問Memcache伺服器,我們Memcache的伺服器上啟動的時候就監聽內網的IP地址和埠,內網間的訪問能夠有效阻止其他非法的訪問。

# memcached -d -m 1024 -u root -l 192.168.0.200 -p 11211 -c 1024 -P /tmp/memcached.pid

Memcache伺服器端設定監聽透過內網的192.168.0.200的ip的11211埠,佔用1024MB記憶體,並且允許最大1024個併發連線

設定防火牆

防火牆是簡單有效的方式,如果卻是兩臺伺服器都是掛在網的,並且需要透過外網IP來訪問Memcache的話,那麼可以考慮使用防火牆或者代理程式來過濾非法訪問。 一般我們在Linux下可以使用iptables或者FreeBSD下的ipfw來指定一些規則防止一些非法的訪問,比如我們可以設定只允許我們的Web伺服器來訪問我們Memcache伺服器,同時阻止其他的訪問。

# iptables -F
# iptables -P INPUT DROP
# iptables -A INPUT -p tcp -s 192.168.0.2 --dport 11211 -j ACCEPT
# iptables -A INPUT -p udp -s 192.168.0.2 --dport 11211 -j ACCEPT

上面的iptables規則就是隻允許192.168.0.2這臺Web伺服器對Memcache伺服器的訪問,能夠有效的阻止一些非法訪問,相應的也可以增加一些其他的規則來加強安全性,這個可以根據自己的需要來做。

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章