Memcached 缓存服务测评
Categories:
12 分钟阅读
定位:Memcached 缓存服务三级等保现场测评取证命令单,按 GB/T 22239-2019 安全计算环境控制点分节组织核查命令、判定要点与取证要求。 适用范围:Memcached 1.6.x(systemd 包安装与源码编译部署均适用);1.5.x 及更早版本监听与 UDP 默认值不同,须先确认版本再套用判定口径。 配套文章:22、高风险判定指引与加固对照表、16、安全评估加固记录表3.0、17、网络设备、安全设备、服务器、数据库和应用系统的加固方案。
使用说明:
- 本文所有命令均为只读取证命令,不修改配置、不重启服务、不执行清除类操作;确需变更由被测单位运维方在授权下实施。
- 每个控制点小节按「对应控制点 → 判定要点 → 取证要求 → 核查命令 → 备注 → 预期证据」编排;命令回显本身即证据,须连同命令行一起截图。
- Memcached 原生不带身份鉴别与审计日志,多数控制点依赖「监听地址收敛 + 防火墙 ACL + 网络分段 + 主机/网络侧审计」等补偿措施判定,取证时务必同步收集网络侧证据。
- 命令不存在或输出与示例差异较大时,先确认组件版本与部署形态(包管理器/源码编译/容器),再换用等效命令或转入配置文件取证,不得据命令缺失直接判不符合。
- 示例输出中的地址、账户、路径均为演示值,现场须替换为真实取证结果并对涉及个人信息与内网管理地址的内容脱敏后再入报告。
不适用标识说明:
- 使用
【不适用】明确标记现场可判定为不适用的控制点。- 判定依据采用 GB/T 28448-2019"按测评对象实际功能、是否直接处理数据、是否具备该类安全机制判定"的原则;Memcached 为无内置持久化的纯内存缓存服务,备份恢复等控制点常需按对象实际功能判定,缓存数据的安全责任多由后端数据库与应用层承担。
基础信息
对应控制点:非独立控制点(测评对象与资产确认);部署形态与冗余情况佐证 8.1.2.1 网络架构 e) 关键设备硬件冗余
判定要点:版本、启动参数全文、监听端口(TCP/UDP)、配置文件、运行账户五项均可取证且与实际架构一致 → 符合;版本或启动参数无法确认、依赖口头说明 → 部分符合。
取证要求:版本命令回显截图、进程与启动参数截图、端口监听截图、配置文件内容截图、systemd 单元状态截图。
核查命令:
memcached -h 2>/dev/null | head -n 1
ps -ef | grep [m]emcached
ss -lntp | grep 11211
ss -lnup | grep 11211
echo stats | nc 127.0.0.1 11211
timeout 3 bash -c 'exec 3<>/dev/tcp/127.0.0.1/11211; echo stats >&3; cat <&3'
echo "stats settings" | nc 127.0.0.1 11211
systemctl status memcached --no-pager | head -n 12
ls -l /etc/sysconfig/memcached /etc/memcached.conf 2>/dev/null
- 备注:
memcached -h输出的第一行即版本号(memcached 1.6.x);ps -ef取启动参数全文,逐项记录-l、-p、-U、-m、-c、-S等取值。stats协议可用nc或 bash 内建/dev/tcp两种方式发送:memcached 收到stats回应后不主动断开连接,echo stats | nc会一直挂起等待 EOF,需外包timeout 3或使用支持-q 1(收到数据 1 秒后断开)的 netcat 实现;/dev/tcp方式用timeout 3包裹即可保证自动退出,两者回显内容一致,现场任选其一。RHEL 系发行版启动配置在/etc/sysconfig/memcached,Debian 系在/etc/memcached.conf。 - 预期证据:版本截图、进程与启动参数截图、TCP/UDP 监听截图、
stats与stats settings回显截图、配置文件截图。
示例输出(节选)
memcached -h | head -n 1
memcached 1.6.45
ps -ef | grep [m]emcached
memcach+ 1101 1 0 Aug23 ? 00:03:12 /usr/bin/memcached -u memcached -p 11211 -m 4096 -c 1024 -l 192.168.10.5 -U 0
ss -lntp | grep 11211
LISTEN 0 1024 192.168.10.5:11211 users:(("memcached",pid=1101,fd=27))
ss -lnup | grep 11211
(无输出,UDP 未监听)
echo stats | nc 127.0.0.1 11211(节选)
STAT pid 1101
STAT version 1.6.45
STAT curr_connections 12
STAT limit_maxbytes 4294967296
echo "stats settings" | nc 127.0.0.1 11211(节选)
STAT tcpport 11211
STAT udpport 0
STAT inter 192.168.10.5
STAT maxbytes 4294967296
STAT maxconns 1024
/etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="4096"
OPTIONS="-l 192.168.10.5 -U 0"
身份鉴别
对应控制点:GB/T 22239-2019 8.1.4.1 身份鉴别 a)~d)
判定要点:Memcached 原生无内置口令鉴别,启用 SASL(编译期
--enable-sasl+ 运行参数-S)且有用户数据库管理、鉴别信息受保护 → 符合;未启用 SASL,但仅绑定回环/内网地址,并落实防火墙 ACL、网络分段等补偿措施且证据齐全 → 部分符合;监听0.0.0.0或跨安全域可达且无任何鉴别与补偿 → 不符合(高风险)。取证要求:SASL 编译与启用参数截图(
-S帮助行、ldd链接、auth_enabled_sasl回显)、sasldb 文件权限截图;未启用 SASL 时补监听地址截图、防火墙策略截图、网络拓扑/分段说明。
服务监听 0.0.0.0(或未加 -l 参数)且无防火墙/网络隔离,等于对可达网段提供无任何鉴别的缓存读写入口,可被任意连接、写入与读取,按《高风险判定指引》中"互联网设备/UIP 未授权访问"同类口径判高风险;公网直通 11211 直接判高风险。
判定口径详见 22、高风险判定指引与加固对照表。
A. SASL 认证核查
核查命令:
memcached -h 2>/dev/null | grep -i sasl
ldd $(which memcached) | grep -i sasl
grep -n -- "-S" /etc/sysconfig/memcached /etc/memcached.conf 2>/dev/null
ps -ef | grep [m]emcached | grep -- "-S"
echo "stats settings" | nc 127.0.0.1 11211 | grep auth_enabled_sasl
ls -l /etc/sasl2 2>/dev/null
- 备注:
-S, --enable-sasl帮助行仅在二进制编译期启用了 SASL(./configure --enable-sasl)时才会输出,可用作编译特性核验;运行期以-S参数开启,开启后仅接受二进制协议(SASL 鉴别成功前连接不可下发任何命令),此时echo stats | nc的 ASCII 取证方式不再有效,须改用二进制客户端或以stats settings的配置文件证据替代。用户数据库由saslpasswd2 -a memcached -c <用户名>创建(官方 SASLHowto ),sasldb 文件应仅对运行账户可读。 - 预期证据:
-S帮助行截图、动态链接截图、启动参数截图、auth_enabled_sasl回显截图、sasldb 权限截图。
示例输出(节选)
memcached -h | grep -i sasl
-S, --enable-sasl turn on Sasl authentication
ldd /usr/bin/memcached | grep -i sasl
libsasl2.so.2 => /lib64/libsasl2.so.2 (0x00007f...)
echo "stats settings" | nc 127.0.0.1 11211 | grep auth_enabled_sasl
STAT auth_enabled_sasl no
ls -l /etc/sasl2
-rw-r----- 1 memcached memcached 12288 memcached.sasldb
(本例未启用 -S:auth_enabled_sasl 为 no,sasldb 文件已准备但未挂接)
B. 无 SASL 时的补偿措施
核查命令:
ss -lntp | grep 11211
ss -lnup | grep 11211
firewall-cmd --list-all 2>/dev/null
iptables -L INPUT -n -v --line-numbers 2>/dev/null | head -n 20
- 备注:SASL 未启用属 Memcached 常见形态,判定重点转为补偿措施是否闭环:仅绑定回环或内网地址(
-l 127.0.0.1/ 内网 IP)、防火墙仅放行业务网段访问 11211/tcp、缓存区与办公区/互联网区隔离。三项证据须互相印证,仅口头说明网络分段而不见策略配置的,按部分符合偏下记录并出具整改建议(建议启用 SASL 或收敛监听)。 - 预期证据:监听地址截图、防火墙策略截图(firewalld/iptables 任一)、网络架构说明、访谈记录。
示例输出(节选)
ss -lntp | grep 11211
LISTEN 0 1024 192.168.10.5:11211 users:(("memcached",pid=1101,fd=27))
(仅绑定内网地址,未监听 0.0.0.0 与公网地址)
firewall-cmd --list-all(节选)
rich rules:
rule family="ipv4" source address="192.168.30.0/24" port port="11211" protocol="tcp" accept
(仅业务网段 192.168.30.0/24 可访问 11211/tcp)
C. 会话保持与运维通道
核查命令:
echo "stats settings" | nc 127.0.0.1 11211 | grep idle_timeout
- 备注:
-o idle_timeout=<秒>可断开空闲连接,stats settings回显idle_timeout,0表示永不超时(帮助原文 “no timeout”)。Memcached 无交互式登录界面,登录失败锁定、口令有效期等控制点无对应机制。 - 【不适用】若现场不存在面向人工的交互式登录(常规形态),“口令复杂度/登录失败处理"对 Memcached 本体可判定为部分不适用,改由操作系统账户、堡垒机统一认证承载运维鉴别;依据:GB/T 28448-2019 身份鉴别控制点应与对象实际鉴别方式相匹配。
- 预期证据:
idle_timeout回显截图、堡垒机/主机账户材料、制度文件。
示例输出(节选)
echo "stats settings" | nc 127.0.0.1 11211 | grep idle_timeout
STAT idle_timeout 0
(空闲连接不超时,记录为整改建议:建议 -o idle_timeout=300)
访问控制
对应控制点:GB/T 22239-2019 8.1.4.2 访问控制 a)~f)
判定要点:监听地址收敛(回环/内网 IP,严禁
0.0.0.0无防护)、UDP 端口关闭(-U 0或未启用)、防火墙来源白名单、运行账户非 root 且配置文件权限最小化 → 符合;仅满足其中部分(如已绑内网但无防火墙策略)→ 部分符合;0.0.0.0监听且无 ACL、UDP 11211 对外开放 → 不符合(高风险)。取证要求:监听地址与端口截图(TCP/UDP 各一张)、启动参数截图、防火墙策略截图、运行账户截图、配置文件权限截图。
-l 0.0.0.0 或缺省监听且无防火墙限制,判高风险;UDP 11211 对外开放(-U 11211 或 ss -lnup 可见监听)判高风险——2018 年 2 月大规模 Memcached UDP 反射放大攻击即利用对外开放的 11211/udp,CISA 在 UDP 放大攻击通告(TA14-017A)中给出的 Memcached 带宽放大系数为 10000~51000 倍,为表中最高。官方已于 1.5.6(2018-02-27)将 UDP 默认关闭。
判定口径详见 22、高风险判定指引与加固对照表。
A. 监听地址与端口
核查命令:
ps -ef | grep [m]emcached
ss -lntp | grep 11211
echo "stats settings" | nc 127.0.0.1 11211 | grep -E "tcpport|udpport|inter"
grep -n -- "-l\\|-p" /etc/sysconfig/memcached /etc/memcached.conf 2>/dev/null
- 备注:man 页对
-l的原文为 “This is an important option to consider as there is no other way to secure the installation. Binding to an internal or firewalled network interface is suggested."(监听地址是唯一的安全边界选项)。stats settings的inter字段回显监听串,未指定时为NULL(等价 INADDR_ANY,即0.0.0.0,须结合防火墙判定)。核对启动参数、监听回显、实际端口三方一致。 - 预期证据:启动参数截图、监听截图、
tcpport/udpport/inter回显截图、配置文件截图。
示例输出(节选)
ps -ef | grep [m]emcached
memcach+ 1101 1 0 Aug23 ? /usr/bin/memcached -u memcached -p 11211 -m 4096 -c 1024 -l 192.168.10.5 -U 0
echo "stats settings" | nc 127.0.0.1 11211 | grep -E "tcpport|udpport|inter"
STAT tcpport 11211
STAT udpport 0
STAT inter 192.168.10.5
(仅监听内网地址 192.168.10.5,与启动参数一致)
B. UDP 端口与反射放大防范
核查命令:
ss -lnup | grep 11211
ps -ef | grep [m]emcached | grep -- "-U"
echo "stats settings" | nc 127.0.0.1 11211 | grep udpport
- 备注:Memcached 曾于 2018 年 2 月爆发大规模 UDP 反射放大攻击(Cloudflare 记录的单请求实测放大 51200 倍,即 “Memcrashed” 事件),攻击者伪造源地址向开放 11211/udp 的实例发请求,将放大流量打向受害者。官方 1.5.6(2018-02-27)发布说明明确 “disable UDP port by default”,此后 UDP 默认关闭;
-U 0为显式关闭写法。1.6.x 现场若发现udpport非 0、启动参数含-U 11211或ss -lnup有监听,即为高风险并立即出具整改;同时记录本机stats中bytes占用(被塞入大 value 的实例放大倍数更高)。 - 预期证据:UDP 监听核查截图(含"无输出"的阴性结果)、启动参数截图、
udpport回显截图。
示例输出(节选)
ss -lnup | grep 11211
(无输出,未监听任何 UDP 端口)
ps -ef | grep [m]emcached | grep -- "-U"
... memcached ... -U 0
echo "stats settings" | nc 127.0.0.1 11211 | grep udpport
STAT udpport 0
(UDP 显式关闭,三项证据一致)
C. 防火墙与网络分段
核查命令:
firewall-cmd --list-all 2>/dev/null
iptables -L INPUT -n -v --line-numbers 2>/dev/null | head -n 20
ip addr | grep -E "inet "
- 备注:核查 11211/tcp 的来源白名单是否仅覆盖业务/应用服务器网段;缓存区应与办公区、互联网区隔离。云环境下同步核查安全组截图。
- 预期证据:防火墙/安全组策略截图、网络架构图、访谈记录。
示例输出(节选)
iptables -L INPUT -n -v --line-numbers(节选)
1 ACCEPT tcp -- * * 192.168.30.0/24 0.0.0.0/0 tcp dpt:11211
2 DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:11211
(11211/tcp 仅对业务网段放行,其余丢弃)
D. 运行账户与配置文件权限
核查命令:
ps -o user,pid,args -C memcached
id memcached 2>/dev/null
ls -l /etc/sysconfig/memcached /etc/memcached.conf 2>/dev/null
ls -l $(which memcached)
- 备注:man 页
-u原文 “Assume the identity of(only when run as root)",root 启动后应立即降权;发行版 systemd 包默认以 memcached用户运行。配置文件、sasldb 文件权限应最小化(600/640 并归属运行账户或 root)。 - 预期证据:进程属主截图、账户信息截图、配置文件权限截图。
示例输出(节选)
ps -o user,pid,args -C memcached
USER PID COMMAND
memcached 1101 /usr/bin/memcached -u memcached -p 11211 ...
ls -l /etc/sysconfig/memcached
-rw-r----- 1 root memcached 236 /etc/sysconfig/memcached
(以 memcached 专用账户运行,配置文件归组收敛)
安全审计
对应控制点:GB/T 22239-2019 8.1.4.3 安全审计 a)~d)
判定要点:Memcached 原生无审计日志,判定依赖补偿措施闭环:systemd journal 留存运行日志、rsyslog 外送集中日志平台、留存不少于 6 个月,且宿主机 auditd 或网络侧审计可覆盖对缓存的操作行为 → 符合;仅 journal 本地留存无外送、无操作级审计 → 部分符合;完全无任何日志留存与审计补偿、无法追溯操作 → 不符合(高风险)。
取证要求:journal 日志样例截图、rsyslog/日志平台外送配置截图、留存期限证据(平台检索界面)、auditd 规则或网络审计设备覆盖说明。
运行日志、主机审计、网络审计三项全无,服务被操作(读写、重启、改配置)后完全无法追溯,按《高风险判定指引》审计类高风险口径判高风险;仅本地 journal 且随轮转丢失、留存不足 6 个月的,一并记录为部分符合/不符合。
判定口径详见 22、高风险判定指引与加固对照表。
A. systemd journal 日志
核查命令:
journalctl -u memcached --no-pager | tail -n 50
systemctl status memcached --no-pager | head -n 10
- 备注:核查服务启停、重启原因与异常记录;journal 需确认持久化(
/var/log/journal存在)而非仅内存态,否则重启即丢。 - 预期证据:journal 日志样例截图、journald 持久化配置截图。
示例输出(节选)
journalctl -u memcached --no-pager | tail(节选)
Sep 01 09:00:02 app01 systemd[1]: Starting memcached daemon...
Sep 01 09:00:03 app01 systemd[1]: Started memcached daemon.
Sep 02 14:21:07 app01 systemd[1]: Reloading memcached.
Sep 02 14:21:08 app01 systemd[1]: Reloaded memcached daemon.
B. syslog 外送与轮转
核查命令:
grep -R -i "memcached" /etc/rsyslog.conf /etc/rsyslog.d 2>/dev/null
ls -l /var/log | grep -i memcached
grep -R -i "memcached" /etc/logrotate* 2>/dev/null
- 备注:确认日志是否由 rsyslog 上送集中日志平台(SIEM),平台侧留存时长是否满足不少于 6 个月的要求;本地日志须有轮转策略防磁盘占满。
- 预期证据:rsyslog 配置截图、日志平台检索界面截图(含 6 个月前记录)、轮转配置截图。
示例输出(节选)
grep -R -i "memcached" /etc/rsyslog.conf(节选)
if $programname == 'memcached' then @192.168.40.10:514
& stop
(memcached 日志经 rsyslog 上送集中日志平台)
C. 运行状态与访问行为监控
核查命令:
echo stats | nc 127.0.0.1 11211 | grep -E "cmd_get|get_hits|get_misses|curr_connections|evictions"
- 备注:Memcached 无逐条操作日志,但
stats的cmd_get/get_hits/get_misses/curr_connections累计值可持续增长,配合监控平台(Zabbix/Prometheus 等)周期采集即构成对服务可用性与访问行为的连续监控;现场可间隔数分钟两次采样对比佐证采集在运行,同时调阅监控平台历史曲线截图。 - 预期证据:两次 stats 采样截图、监控平台曲线截图、采集配置截图。
示例输出(节选)
echo stats | nc 127.0.0.1 11211(节选)
STAT cmd_get 1284613
STAT get_hits 1195402
STAT get_misses 89211
STAT curr_connections 12
(监控平台每 60 秒采集一次 stats,曲线留存 180 天)
D. 主机与网络层审计补偿
核查命令:
auditctl -l 2>/dev/null
ausearch -k memcached -i --recent 2>/dev/null | tail -n 20
- 备注:宿主机 auditd 可对 memcached 二进制执行、配置文件变更、进程操作进行审计(规则命名因单位而异,
auditctl -l现场确认);网络侧因 Memcached 为明文协议,数据库审计/流量审计设备可直接还原 11211 上的 get/set 等操作,作为应用操作审计的补偿取证。两项均需访谈并截图佐证覆盖范围与留存。 - 预期证据:auditd 规则与审计记录截图、网络审计设备会话还原截图、平台材料。
示例输出(节选)
auditctl -l(节选)
-w /etc/sysconfig/memcached -p wa -k memcached
-w /usr/bin/memcached -p x -k memcached
ausearch -k memcached -i --recent(节选)
type=PROCTYPES msg=audit(09/02/2026 14:21:07.221) : pid=1101 exe=/usr/bin/memcached
(配置文件与二进制已纳入 auditd 监控,记录上送日志平台)
入侵防范
对应控制点:GB/T 22239-2019 8.1.4.4 入侵防范 a)~h)、8.1.4.5 恶意代码防范
判定要点:版本跟进官方现行 1.6.x 且漏洞修补有记录、资源上限(
-m/-c)已配置防资源耗尽、危险管理命令已收敛、以非 root 专用账户运行、宿主机具备恶意代码防护 → 符合;部分项缺失但有等效补偿(防火墙限源、监控告警、EDR)且证据齐全 → 部分符合;UDP 对外开放、版本陈旧且有公开利用漏洞且无补偿 → 不符合(高风险)。取证要求:版本回显截图、漏洞扫描与整改记录、启动参数截图、
stats settings资源上限回显截图、运行账户截图、宿主机防恶意代码软件截图、危险命令收敛回显截图。
UDP 11211 对外开放可被直接用于反射放大攻击(对第三方发起 DoS,本身即高危事件);版本长期未升级且存在公开利用漏洞、0.0.0.0 监听无补偿,判高风险。
判定口径详见 22、高风险判定指引与加固对照表。
A. 版本与漏洞管理
核查命令:
memcached -h 2>/dev/null | head -n 1
echo stats | nc 127.0.0.1 11211 | grep -i version
- 备注:对照官方版本核对是否明显落后。本文撰写时官方现行版本为 1.6.45(2026-07-09 发布),近几个小版本集中修复了越界写、释放后使用(UAF)、崩溃类缺陷(多具安全属性),现场版本显著落后时应要求提供漏洞扫描报告与升级/缓解记录。 Memcached 官方遵循负责任披露,安全补丁随小版本发布,升级计划与变更记录可作为判定证据。
- 预期证据:版本截图、漏洞扫描报告、升级工单/变更记录。
示例输出(节选)
memcached -h | head -n 1
memcached 1.6.45
echo stats | nc 127.0.0.1 11211 | grep -i version
STAT version 1.6.45
(版本为官方现行版本,漏洞扫描记录在案)
B. 资源限制与防资源耗尽
核查命令:
echo "stats settings" | nc 127.0.0.1 11211 | grep -E "maxbytes|maxconns"
ps -ef | grep [m]emcached | grep -E "\-m |\-c "
- 备注:
-m(默认 64 MB)限定 item 存储内存上限,-c(默认 1024)限定最大并发连接数,两者防止应用异常或恶意连接耗尽宿主机资源;未配置-m时 64 MB 上限往往不满足业务容量,可能触发频繁淘汰或反向促使运维放大部署,均须记录取值并核对与业务规划一致。内存耗尽默认按 LRU 淘汰旧条目;-M改为拒绝写入(见剩余信息保护)。 - 预期证据:
maxbytes/maxconns回显截图、启动参数截图、容量规划说明。
示例输出(节选)
echo "stats settings" | nc 127.0.0.1 11211 | grep -E "maxbytes|maxconns"
STAT maxbytes 4294967296
STAT maxconns 1024
(4 GB 内存上限、1024 连接上限,与启动参数 -m 4096 -c 1024 一致)
C. 运行账户与恶意代码防范
核查命令:
ps -o user,pid,args -C memcached
echo "stats settings" | nc 127.0.0.1 11211 | grep drop_privileges
- 备注:进程属主应为专用低权账户(见访问控制 D);
-o drop_privileges(Linux 构建支持)在启动后丢弃多余系统调用特权,stats settings回显drop_privileges供核验。恶意代码防范方面,Memcached 服务端对存入的 value 仅作字节存储、不解析不执行,本身不构成脚本执行面;判定落在宿主机防恶意代码软件/EDR 的安装、病毒库更新与拦截记录,需截图取证。 - 预期证据:进程属主截图、
drop_privileges回显截图、防恶意代码软件安装与病毒库截图、拦截记录。
示例输出(节选)
ps -o user,pid,args -C memcached
USER PID COMMAND
memcached 1101 /usr/bin/memcached -u memcached ...
echo "stats settings" | nc 127.0.0.1 11211 | grep drop_privileges
STAT drop_privileges yes
(专用账户运行且启用特权丢弃;宿主机部署 EDR,病毒库当日更新)
D. 危险管理命令收敛
核查命令:
echo "stats settings" | nc 127.0.0.1 11211 | grep -E "shutdown_command|flush_enabled|dump_enabled"
ps -ef | grep [m]emcached | grep -E "\-A |\-F |\-X |\-W "
- 备注:1.6.x 提供一组收敛攻击面的开关(均已对照 man 页核验):
-A关闭 ASCIIshutdown命令(默认即关闭)、-F禁用flush_all、-X禁用stats cachedump/stats detail/lru_crawler metadump、-W禁用watch实时日志命令。对应回显字段:shutdown_command no、flush_enabled no、dump_enabled no。现场按业务需要记录收敛情况,未收敛项结合访问控制判定。 - 预期证据:
shutdown_command/flush_enabled/dump_enabled回显截图、启动参数截图。
示例输出(节选)
echo "stats settings" | nc 127.0.0.1 11211(节选)
STAT shutdown_command no
STAT flush_enabled yes
STAT dump_enabled yes
(flush_all/cachedump 未禁用,服务仅内网可达,记录为加固建议)
数据完整性
对应控制点:GB/T 22239-2019 8.1.4.7 数据完整性 a)b)
判定要点:Memcached 文本/二进制协议均不含数据校验字段,缓存条目原样存取,无端到端完整性校验属产品特性;传输完整性依赖 TCP 传输校验与受控内网链路,存储完整性由应用层校验机制(版本号、摘要比对)承担 → 结合网络受控与应用层校验证据判符合/部分符合;链路跨不可信区域且应用侧也无任何校验 → 不符合。
取证要求:传输链路说明(内网/TLS/代理)、协议无校验字段的说明与依据、应用层校验机制访谈与代码/配置证据、配置文件变更记录。
A. 传输链路与协议特性
核查命令:
echo stats | nc 127.0.0.1 11211 | grep -E "bytes_read|bytes_written"
memcached -h 2>/dev/null | grep -i -E "ssl|tls"
grep -n -i "ssl\\|tls" /etc/sysconfig/memcached /etc/memcached.conf 2>/dev/null
- 备注:默认构建不带 TLS(README 明确 TLS 为可选项
./configure --enable-tls,编译后经-Z, --enable-ssl启用),常规部署为内网明文 TCP。取证时记录:传输层为 TCP(有内核校验和)、链路限于受控内网(呼应访问控制证据)、协议文档无校验字段。若单位已用 TLS 构建或前置加密代理,补对应配置与证书截图。 - 预期证据:链路说明、
-Z帮助行或前置代理配置截图、网络架构图。
示例输出(节选)
echo stats | nc 127.0.0.1 11211(节选)
STAT bytes_read 152341871
STAT bytes_written 632041119
memcached -h | grep -i ssl
(无输出:默认构建未编译 TLS,传输依赖内网受控链路 + TCP 校验)
B. 配置与数据校验责任
核查命令:
stat -c "%n %y" /etc/sysconfig/memcached /etc/memcached.conf 2>/dev/null
- 备注:配置文件变更应有变更记录与版本归档(结合配置管理平台截图);缓存数据(如配置快照、会话数据)的完整性校验由应用层实现(写入时附带摘要、读取时比对),现场访谈应用开发方并留存机制说明,作为"存储过程完整性"的补偿证据。
- 预期证据:配置文件时间戳与变更记录、应用层校验机制说明、访谈记录。
示例输出(节选)
stat -c "%n %y" /etc/sysconfig/memcached
/etc/sysconfig/memcached 2026-08-24 10:12:31.000000000 +0800
(配置变更记录与时间戳对应,变更经审批;应用侧对缓存配置快照附带 sha256 摘要并在读取时校验)
数据保密性
对应控制点:GB/T 22239-2019 8.1.4.8 数据保密性 a)b)
判定要点:Memcached 为明文协议,TLS 需编译期
--enable-tls且运行期-Z启用;SASL 仅提供鉴别不提供加密(官方 SASLHowto 原文 “it does not hide communications and isn’t suitable for using over the internet”)。传输保密性由内网隔离/TLS 承担、存储保密性由应用层加密承担 → 补偿证据齐全判部分符合以上;敏感业务数据(鉴别信息、个人信息)明文入缓存且链路跨不可信区域 → 不符合(高风险)。取证要求:链路隔离说明、TLS 配置或前置代理截图(如启用)、应用侧加密责任说明与实现证据、缓存内容抽样脱敏记录。
A. 传输加密核查
核查命令:
memcached -h 2>/dev/null | grep -i "enable-ssl"
echo "stats settings" | nc 127.0.0.1 11211 | grep -E "ssl_enabled|binding_protocol"
ss -lntp | grep 11211
- 备注:默认构建无 TLS,
-Z, --enable-ssl帮助行仅在 TLS 编译时输出;TLS 编译构建下stats settings会回显ssl_enabled及ssl_chain_cert/ssl_key/ssl_min_version等字段,可逐项取证。未启用 TLS 时以内网隔离作为补偿(引用访问控制/身份鉴别证据),并在整改建议中记录 TLS 改造或前置加密代理方案。 - 预期证据:
-Z帮助行或ssl_enabled回显截图、监听地址截图、网络隔离材料。
示例输出(节选)
memcached -h | grep -i "enable-ssl"
(无输出:未编译 TLS)
echo "stats settings" | nc 127.0.0.1 11211 | grep binding_protocol
STAT binding_protocol auto
(明文 TCP,仅内网 192.168.10.5 可达;TLS 改造列入整改计划)
B. 敏感数据入缓存的责任边界
核查命令:
grep -R -n -i "password\\|secret\\|token" /etc/sysconfig/memcached /etc/memcached.conf 2>/dev/null
ls -l /etc/sasl2 2>/dev/null
- 备注:核查服务自身配置与 sasldb 中无明文口令残留、文件权限收敛;业务数据中的口令、令牌、个人信息是否明文入缓存属应用层责任,结合键名抽样(见个人信息保护)与应用方访谈判定:应用侧应先加密/脱敏再入缓存,密钥不在缓存或配置文件明文存放。
- 预期证据:配置与 sasldb 权限截图、应用加密实现说明、脱敏抽样记录。
示例输出(节选)
grep -R -n -i "password|secret|token" /etc/sysconfig/memcached /etc/memcached.conf
(无输出,服务配置无敏感值)
ls -l /etc/sasl2/memcached.sasldb
-rw-r----- 1 memcached memcached 12288 memcached.sasldb
(应用侧会话票据先经 AES-GCM 加密后写入缓存,密钥由 KMS 下发)
备份恢复
对应控制点:GB/T 22239-2019 8.1.4.9 数据备份恢复 a)c)
判定要点:Memcached 为纯内存缓存,进程重启数据即清空,产品定位不承载数据持久化职责,缓存数据可在后端数据库/应用层重建 → 按对象实际功能判定为不适用(本文【不适用】判定示范),配置文件仍需纳入备份管理;若业务依赖缓存数据不可丢失而未有任何重建机制 → 转由应用层/后端存储测评并出具风险提示。
取证要求:确认无持久化配置与持久化文件的核查截图、后端数据库/应用层重建机制说明、配置文件备份策略截图、访谈记录。
A. 易失性特性与不适用判定
核查命令:
ps -ef | grep [m]emcached
echo stats | nc 127.0.0.1 11211 | grep -E "curr_items|bytes|uptime"
echo "stats settings" | nc 127.0.0.1 11211 | grep memory_file
ls -l /var/lib/memcached /var/run/memcached 2>/dev/null
- 备注:Memcached 无任何原生持久化机制(对比 Redis 的 RDB/AOF),不产生数据文件。1.6.x 的
-e, --memory-file=<file>(EXPERIMENTAL,帮助原文 “enables restartable cache (stop with SIGUSR1)")与 Warm Restart 仅用于停机后快速恢复内存缓存,不是备份/恢复机制,启用时stats settings回显memory_file路径。【不适用】判定话术:依据 GB/T 28448-2019 按测评对象实际功能判定,Memcached 缓存数据具有易失性且设计上可随时由后端存储重建,“数据备份与恢复"控制点对 Memcached 本体不适用;备份与恢复责任转由后端数据库(测评时核查其备份策略与演练记录)与应用层重建逻辑承担,报告附录留存访谈与后端备份证据。 - 【不适用】如上所述,现场确认无持久化文件、无业务依赖缓存持久化的承诺后判定,并留存后端备份证据链。
- 预期证据:
memory_file回显截图(确认未启用落盘)、数据目录截图、后端数据库备份策略与演练记录、访谈记录。
示例输出(节选)
echo stats | nc 127.0.0.1 11211(节选)
STAT curr_items 152340
STAT uptime 860012
echo "stats settings" | nc 127.0.0.1 11211 | grep memory_file
STAT memory_file NULL
ls -l /var/lib/memcached /var/run/memcached
(目录仅存 pid/套接字等运行时文件,无数据文件)
(判定:缓存数据由 MySQL 主库+从库承载,缓存可全量重建,备份恢复控制点转由数据库侧测评,Memcached 本体判不适用)
B. 配置文件备份
核查命令:
ls -l /etc/sysconfig/memcached /etc/memcached.conf 2>/dev/null
find /etc -name "*memcached*" 2>/dev/null
- 备注:即便本体判不适用,启动配置、sasldb、systemd 单元文件仍应纳入配置备份范围,随操作系统/中间件配置备份周期执行。
- 预期证据:配置文件清单截图、备份策略截图、备份记录。
示例输出(节选)
find /etc -name "*memcached*"
/etc/sysconfig/memcached
/etc/memcached.conf
/etc/sasl2/memcached.sasldb
(上述文件已纳入每周配置备份,保留 8 个版本)
剩余信息保护
对应控制点:GB/T 22239-2019 8.1.4.10 剩余信息保护 a)b)
判定要点:缓存条目按 TTL 过期与 LRU 淘汰自动清除、空间随即被新数据复用,构成存储空间释放前清除的等效机制;应用为含敏感信息的键设置合理 TTL、淘汰与过期回收在持续发生(
stats items计数佐证)→ 符合;敏感键无 TTL 且-M关闭淘汰导致数据长期驻留 → 部分符合/不符合;载体为内存,进程结束后由操作系统回收,无磁盘残留(启用-e内存文件的除外)。取证要求:
stats items回显截图、stats settings中淘汰相关字段截图、启动参数截图(含-M/-e核查)、应用侧 TTL 策略说明。
A. 过期与淘汰机制
核查命令:
echo "stats items" | nc 127.0.0.1 11211 | head -n 20
echo "stats settings" | nc 127.0.0.1 11211 | grep -E "evictions|temp_lru|temporary_ttl"
ps -ef | grep [m]emcached | grep -- "-M"
- 备注:
stats items按 slab 类别回显number/age/evicted/reclaimed/expired_unfetched等计数(协议文档逐一列出),reclaimed、expired_unfetched持续增长说明过期回收在发生;stats settings的evictions on表示内存不足时自动淘汰(默认),-M(man 页原文 “Disable automatic removal of items from the cache when out of memory. Additions will not be possible until adequate space is freed up.")则改为拒绝写入。-o temporary_ttl/temp_lru将短 TTL 条目隔离进独立 LRU。现场应结合应用侧 TTL 策略(如会话 30 分钟)判定敏感条目可及时清除。 - 预期证据:
stats items截图、淘汰配置回显截图、应用 TTL 策略说明、访谈记录。
示例输出(节选)
echo "stats items" | nc 127.0.0.1 11211(节选)
STAT items:6:number 31284
STAT items:6:age 1245
STAT items:6:evicted 0
STAT items:6:reclaimed 20815
STAT items:6:expired_unfetched 4120
echo "stats settings" | nc 127.0.0.1 11211(节选)
STAT evictions on
(未启用 -M;过期条目正常回收,会话类键 TTL 30 分钟,清除机制有效)
B. 存储载体与残留核查
核查命令:
ps -ef | grep [m]emcached | grep -- "-e"
ls -l /var/lib/memcached 2>/dev/null
- 备注:默认载体为匿名内存,进程结束即释放,不存在磁盘残留;启用
-e, --memory-file后 item 内存映射到文件(须置于内存盘/持久内存,帮助原文 “use only in ram disks or persistent memory mounts!"),此时该文件应纳入权限管控与清理范围,现场记录其路径与权限。 - 预期证据:启动参数截图(无
-e为阴性证据)、数据目录截图、内存文件权限截图(如启用)。
示例输出(节选)
ps -ef | grep [m]emcached | grep -- "-e"
(无输出:未使用内存文件,载体为匿名内存,进程退出即释放,无磁盘残留)
个人信息保护
对应控制点:GB/T 22239-2019 8.1.4.11 个人信息保护 a)b)
判定要点:Memcached 本体不采集个人信息,缓存中的个人信息全部来自应用写入,保护责任在应用层;核查路径为:键名抽样确认是否承载个人信息、连接来源受控、启用 SASL 或网络限源 → 有控制证据判符合;确认不存个人信息且访问受控 → 不适用;明文缓存身份证号、手机号等且无访问控制 → 不符合(高风险)。
取证要求:键名抽样截图(脱敏)、连接来源截图、访问控制证据(复用访问控制节)、应用侧加密/脱敏说明、访谈记录。
A. 键名抽样与 cachedump 限制
核查命令:
echo "stats items" | nc 127.0.0.1 11211 | grep "^STAT items" | grep number | head -n 5
echo "stats cachedump 6 10" | nc 127.0.0.1 11211
echo "stats settings" | nc 127.0.0.1 11211 | grep dump_enabled
- 备注:
stats cachedump <slab类ID> <条数>仅回显键名、字节与过期时间,不含 value,抽样风险低;1.6.x 对其有明确限制,取证时写清:单次响应上限 2 MB(源码item_cachedump中memlimit = 2 * 1024 * 1024)、超出部分静默截断,-X启动后直接拒绝(回显CLIENT_ERROR stats cachedump not allowed),二进制键不回显;dump_enabled字段即对应开关,stats detail与lru_crawler metadump同受-X控制。被-X关闭时改由应用方提供键模式清单,不得据 cachedump 不可用直接判不符合。 - 【不适用】若经业务方书面确认 Memcached 仅缓存技术性数据(页面片段、数据库查询结果、分布式锁),不涉及个人信息,则该点对 Memcached 判定为不适用。依据:GB/T 28448-2019 个人信息保护控制点以实际处理个人信息为前提。
- 预期证据:
stats items截图、cachedump 键名抽样(脱敏)截图、dump_enabled回显截图、业务确认单。
示例输出(节选)
echo "stats cachedump 6 10" | nc 127.0.0.1 11211
ITEM demo-app:session:8f2c1e9a [96 b; 1725321600 s]
ITEM demo-app:config:site [210 b; 0 s]
ITEM demo-app:user:pref:1001 [48 b; 1725321900 s]
END
echo "stats settings" | nc 127.0.0.1 11211 | grep dump_enabled
STAT dump_enabled yes
(键名为应用命名模式,抽样未见身份证号/手机号等直接命名的键;会话键值由应用加密后写入)
B. 连接来源与访问控制
核查命令:
ss -ntp | grep 11211
echo "stats settings" | nc 127.0.0.1 11211 | grep auth_enabled_sasl
- 备注:
ss -ntp列出当前到 11211 的已建立连接及来源 IP:端口,抽样确认来源仅为应用服务器网段、无办公终端或未知地址;配合身份鉴别/访问控制节的 SASL 与防火墙证据闭环。Memcached 不提供面向运维人员的个人信息查询与导出管理功能,导出能力即上文 cachedump/metadump,其开关状态与权限已在个人信息保护 A 覆盖。 - 【不适用】与 A 同口径:确认不承载个人信息且无面向人工的导出功能时,该点可判定为不适用。依据:GB/T 28448-2019 按对象实际功能边界判定。
- 预期证据:连接来源截图、防火墙策略截图、访谈记录。
示例输出(节选)
ss -ntp | grep 11211
ESTAB 0 0 192.168.10.5:11211 192.168.30.21:51123 users:(("memcached",pid=1101,fd=48))
ESTAB 0 0 192.168.10.5:11211 192.168.30.22:47810 users:(("memcached",pid=1101,fd=52))
(连接来源均为应用服务器网段 192.168.30.0/24,未见异常来源)
参考依据
- GB/T 22239-2019《信息安全技术 网络安全等级保护基本要求》(8.1.4 安全计算环境):http://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=BAFB47E8874764186BDB7865E8344DAF
- GB/T 28448-2019《信息安全技术 网络安全等级保护测评要求》(单元测评的测评实施与结果判定:符合/部分符合/不符合/不适用):http://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=7E736CDF4502B6FF1258DD250AA3EC8C
- GB/T 25070-2019《信息安全技术 网络安全等级保护安全设计技术要求》,可在全国标准信息公共服务平台检索:http://openstd.samr.gov.cn/bzgk/gb/
- Memcached 官方网站(源码与发布入口):https://memcached.org/
- Memcached 官方文档站(协议、TLS、SASL、UDP DDoS 通告):https://docs.memcached.org/
- Memcached 源码仓库与 README(
--enable-tls、负责任披露):https://github.com/memcached/memcached - Memcached man 页(
-l/-U/-m/-c/-M/-S/-X/-Y/-Z选项):https://github.com/memcached/memcached/blob/master/doc/memcached.1 - Memcached 文本协议文档(
stats/stats items字段、lru_crawler metadump与 cachedump 对比):https://github.com/memcached/memcached/blob/master/doc/protocol.txt - Memcached Wiki:SASLHowto(
--enable-sasl、-S、saslpasswd2 -a memcached、SASL 不加密声明):https://github.com/memcached/memcached/wiki/SASLHowto - Memcached Wiki:ConfiguringServer(UDP 自 1.5.6 起默认关闭、
stats settings样例):https://github.com/memcached/memcached/wiki/ConfiguringServer - Memcached Wiki:ReleaseNotes156(2018-02-27 “disable UDP port by default”):https://github.com/memcached/memcached/wiki/ReleaseNotes156
- Memcached Wiki:ReleaseNotes1645(现行版本 1.6.45,2026-07-09 发布,内存安全类修复):https://github.com/memcached/memcached/wiki/ReleaseNotes1645
- CISA/US-CERT 通告 TA14-017A “UDP-Based Amplification Attacks”(2018-02-27 增补 Memcached 11211 反射放大,放大系数 10000~51000):https://www.cisa.gov/news-events/alerts/2014/01/17/udp-based-amplification-attacks
- Cloudflare 官方事件分析 “Memcrashed - Major amplification attacks from UDP port 11211”(2018-02-27,实测放大 51200 倍):https://blog.cloudflare.com/memcrashed-major-amplification-attacks-from-port-11211/
- 《网络安全等级保护测评高风险判定指引》(中关村信息安全测评联盟团体标准),站内对照表:22、高风险判定指引与加固对照表
- 命令核验说明:本文命令已于 2026-09 对照 GitHub memcached/memcached 仓库 man 页(doc/memcached.1)、协议文档(doc/protocol.txt)、
memcached -h帮助文本与核心源码(memcached.c、proto_text.c、items.c)及官方 wiki(SASLHowto、ConfiguringServer、ReleaseNotes156/1645)核验。版本差异注意点:UDP 端口自 1.5.6(2018-02-27)起默认关闭,-U 0为显式关闭,旧版本默认随 TCP 端口开启;SASL 需编译期--enable-sasl并以-S启用,-S帮助行仅在编译启用时出现,stats settings以auth_enabled_sasl回显,启用后仅支持二进制协议;-Y, --auth-file为 EXPERIMENTAL 的 ASCII 协议令牌认证,与 SASL 无关;stats cachedump在 1.6.x 单次响应上限 2 MB、可被-X禁用且二进制键不回显;-o modern/no_modern为历史兼容选项,现行版本中 modern 不再改变任何默认值(帮助原文 “currently: nothing”);TLS 为可选项(--enable-tls+-Z),默认构建无加密,现场须以实际-h与stats settings输出为准。
关联文章
- 缓存与协调服务:Redis 缓存数据库测评、Apache ZooKeeper 协调服务测评
- 容器运行平台:Docker 容器运行平台测评
- 现场指引:不适用控制点审阅结论、现场使用总指引(中间件与容器)、现场判定话术(不适用控制点)
- 板块目录:中间件与容器
- 配套加固:17、网络设备、安全设备、服务器、数据库和应用系统的加固方案
- 取证记录:16、安全评估加固记录表3.0
- 高风险口径:22、高风险判定指引与加固对照表