Memcached 风险是什么
Memcached 是内存键值缓存,设计上运行在可信内网、不提供内置鉴权(较新版本可选 SASL),默认监听 TCP/UDP 11211。它同时带来两类风险:一是暴露后缓存内容可被任意读取或清空,缓存中常混有会话与业务明文数据;二是 UDP 协议无握手,历史上被大量用于反射放大攻击,小请求可换取数十倍响应流量。较新版本默认关闭 UDP,老版本则默认开启。
基本信息
| 服务 | Memcached(内存键值缓存) |
|---|---|
| 默认端口 | 11211 TCP / UDP |
| 认证 | 默认无鉴权,较新版本支持 SASL |
| 高危组合 | 监听 0.0.0.0 + 开放 UDP + 内存中缓存敏感数据 |
典型使用场景
- 加固前先核查监听地址与 UDP 是否开启,确认暴露范围
- 跨主机使用时限制来源,只允许应用服务器网段访问 11211
- 上线前评估缓存键的敏感度,避免把完整用户信息与令牌写入缓存
- 关注老版本实例:UDP 默认开启,是放大攻击的主要来源
- 容器化部署时确认 Pod 网络策略没有把缓存服务放开到整个集群
加固要点
加固要点
1. 监听地址限制:-l 127.0.0.1 或指定内网地址
2. 关闭 UDP:新版本默认关闭,老版本加 -U 0
3. 防火墙只放行应用服务器来源,不按网段全放
4. 不把明文敏感数据写入缓存键值
5. 监控命中率与内存使用,避免被当作存储滥用核查命令
核查命令
ss -lunp | grep 11211 # 检查是否监听 UDP
ss -ltnp | grep 11211 # 检查 TCP 监听地址是否 0.0.0.0
# 快速验证未授权可读(授权范围内自查):
# printf 'stats\r\n' | timeout 2 nc 127.0.0.1 11211 | head -5
# 查看进程启动参数确认 -l 与 -U 设置
ps -ef | grep -i memcached | grep -v grep加固项与效果
| 加固项 | 效果 | 注意 |
|---|---|---|
| 限制监听地址 | 切断外部直接连接 | 需确认应用侧配置同步更新 |
| 关闭 UDP(-U 0) | 消除放大攻击面 | 老版本必须显式关闭 |
| 来源限制 | 只允应用网段访问 | 按应用逐个开通,避免整网段放行 |
| 升级版本 | 获得默认安全配置与修复 | 升级前评估客户端兼容性 |
Memcached 1.5.6 起默认禁用 UDP:升级版本本身即可消除主要的放大面;无法升级时必须显式加 -U 0。
缓存内容不等于非敏感数据:会话标识、令牌、用户资料经常直接写在缓存里,未授权读取等同凭据泄露,需按泄露流程处置。