Memcached UDP 反射攻擊漏洞

問題記錄

  今天中午有同事反應某系統打開很慢,覺得是電腦問題(手動偷笑)。打開網站一看,慢的連靜態文件都是幾KB/S的速度。這明顯不合理啊。上服務器一查,CPU正常、內存正常、Web程序也正常。html

  因而想到了網絡帶寬問題。用vnstat -i eth1 -l一看,驚呆了😮,出網帶寬達到了 162.44Mbit/s,這不是被攻擊了麼?緩存

3971524549705_.pic_hd.jpg

  繼續用iftop查看是哪一個程序佔用了網絡。安全

Snipaste_2018-04-24_15-21-12.png

  發現居然是 Memcache,這說明 Memcache 存在問題。而咱們的應用程序對 Memcache 操做的地方並很少且無異常,故猜想是 Memcache 收到了攻擊,並且是前段時間很火的 UDP 反射攻擊漏洞引發的。
  因而在咱們對 Memcache 啓動參數加了 -U 0並重啓後,流量就正常了。如下內容是關於該漏洞的詳細信息和具體解決辦法。服務器

漏洞描述

  Memcached 是一套經常使用的 key/value 緩存系統,因爲它自己沒有權限控制模塊,因此對公網開放的 Memcached 服務很容易被攻擊者掃描發現。該類攻擊主要使用 Memcached 協議的 UDP 端口開展攻擊,攻擊者經過向開啓了 UDP 協議支持的 Memcached 服務器上發送僞造的 IP 欺騙請求,Memcached 服務器會將大量的響應報文發往目標攻擊主機,從而佔用目標攻擊機器的大量帶寬資源,致使拒絕服務。網絡

排查方案

  1. 從外部互聯網測試是否對外開放了 Memcached 11211 UDP 端口,使用nc工具測試端口,並查看服務器上是否運行memcached進程,具體測試方式:

    測試端口:nc -vuz IP地址 11211
    測試是否對外開放 memcached 服務:telnet IP地址 11211,若是開放了 11211 端口,則可能受影響
    檢查進程狀態:ps -aux | grep memcached tcp

  2. 使用echo -en "\x00\x00\x00\x00\x00\x01\x00\x00stats\r\n" | nc -u IP地址 11211命令查看返回內容,若返回內容非空,則代表服務器可能受到了影響。

漏洞解決方案

  1. 若是開放了 11211 UDP 端口,使用防火牆策略封禁 UDP 11211 端口,確保 Memcached 服務器與互聯網之間沒法經過 UDP 來訪問;
  2. 建議您添加-U 0參數並重啓 memcached 服務徹底禁用 UDP;
  3. Memcached 官方已經發布新版本默認禁用 UDP 11211 端口,可升級到最新版本;
  4. 對在運行的 Memcached 服務進行安全加固,例如:啓動綁定本地監聽IP,禁止對外訪問、禁用UDP協議、啓用登陸認證等安全功能,提升 Memcached 安全性;

安全加固方案

  1. 按期升級,使用官方最新版本 Memcached
  2. 配置訪問控制

    不要將服務發佈到互聯網上而被黑客利用,能夠經過iptables配置訪問控制規則。例如,在Linux環境中運行命令iptables -A INPUT -p tcp -s 192.168.0.2 -dport 11211 -j ACCEPT,在iptables中添加此規則只容許192.168.0.2這個 IP 對 11211 端口進行訪問。memcached

  3. 綁定監聽 IP工具

    若是 Memcached 沒有在公網開放的必要,可在 Memcached 啓動時指定綁定的 IP 地址爲 127.0.0.1。例如,在 Linux 環境中運行如下命令:post

    memcached -d -m 1024 -u memcached -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid
  4. 使用最小化權限帳號運行 Memcached 服務測試

    使用普通權限帳號運行,指定 Memcached 用戶。例如,在 Linux 環境中運行如下命令來運行 Memcached:

    memcached -d -m 1024 -u memcached -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid
  5. 啓用認證功能

    Memcached 自己沒有作驗證訪問模塊,Memcached 從 1.4.3 版本開始,能支持 SASL 認證。

  6. 修改默認端口

    修改默認 11211 監聽端口爲 11222 端口。在 Linux 環境中運行如下命令:

    memcached -d -m 1024 -u memcached -l 127.0.0.1 -p 11222 -c 1024 -P /tmp/memcached.pid

參考資料


原文地址: https://shockerli.net/post/me...
更多文章請訪問個人我的博客: https://shockerli.net
相關文章
相關標籤/搜索