摘要: memcache是一種實用key-value緩存系統,在緩存數據方面使用仍是比較多,可是,它自己沒有權限控制模塊(不像redis有密碼驗證),開放在外網的memcache服務很容易被攻擊者掃描發現,經過命令能夠直接讀取memcache數據。redis
memcache是一種實用key-value緩存系統,在緩存數據方面使用仍是比較多,可是,它自己沒有權限控制模塊(不像redis有密碼驗證),開放在外網的memcache服務很容易被攻擊者掃描發現,經過命令能夠直接讀取memcache數據。緩存
咱們可使用telnet命令直接鏈接一個沒有防禦的memcached(假定以IP200.200.200.200爲例) tcp
telnet 200.200.200.200 11211
telnet 200.200.200.200 11211memcached
Trying 200.200.200.200...rest
Connected to 200.200.200.200.blog
Escape character is '^]'.ip
stats rem
STAT pid 23710get
STAT uptime 948cmd
STAT time 1501241084
STAT version 1.4.25
STAT libevent 1.4.13-stable
STAT pointer_size 64
STAT rusage_user 0.014997
STAT rusage_system 0.013997
STAT curr_connections 5
STAT total_connections 7
STAT connection_structures 6
STAT reserved_fds 20
STAT cmd_get 0
STAT cmd_set 0
STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 0
# stats //查看memcache 服務狀態 # stats items //查看全部items # stats cachedump 32 0 //得到緩存key # get :state:264861539228401373:261588 //經過key讀取相應value ,得到實際緩存內容,形成敏感信息泄露
很明顯若是memcached這個漏洞不去補好,非法入侵者將會輕鬆的獲取到你的緩存數據。
在這裏提出兩個方法:
一、若是memcache不須要開放在外網,可在memcached啓動的時候指定ip地址爲 127.0.0.1。例如:
memcached -d -m 512 -u root -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid
二、若是memcache須要對外提供服務,則能夠經過iptables進行訪問控制,下面是隻容許本機訪問:
// 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
// drop
# iptables -I INPUT -p tcp --dport 11211 -j DROP
# iptables -I INPUT -p udp --dport 11211 -j DROP
// 保存規則並重啓 iptables
# service iptables save
# service iptables restart