RediTrap 是一个极简的 Redis 蜜罐,专用于发现针对 CVE-2025-49844(“RediShell”)的早期利用尝试,这是由 Wiz Research 描述的一个严重远程代码执行漏洞。该漏洞利用的是嵌入式 Lua 引擎中一个存在了 13 年的释放后使用(use-after-free)缺陷:Redis 在存储 Lua 代码块名称时未先将其锚定在栈上,导致垃圾回收周期可以在 C 代码仍使用该指针时回收该字符串。Redis 补丁 d5728cb 通过在解析前将代码块名称推入 Lua 栈(通过 setsvalue2s/incr_top)并在解析后将其弹出,从而修复了该问题,防止了悬空指针并封堵了 RCE 原语。
由于已公开的利用路径依赖于通过 EVAL、EVALSHA 或 SCRIPT LOAD 发送恶意 Lua 脚本,该蜜罐专注于暴露这些交互,同时伪装成一个未打补丁的 Redis 节点。
6379)并支持一小部分 RESP 子集,使基本探测(PING、INFO、 等)能够成功。AUTHHELLO),以诱使攻击者继续其攻击流程。python3 reditrap.py --host 0.0.0.0 --port 6379 --log-file logs/redis-honeypot-events.ndjson
在开发期间使用 --verbose 以获取额外的 stdout 日志输出。
构建一个精简镜像(基于 Alpine):
docker build -t reditrap .
# 或:podman build -t reditrap .
运行容器,暴露 Redis 端口并将日志目录挂载到宿主机:
mkdir -p honeypot-logs
docker run -d --name reditrap \
-p 6379:6379 \
-v "$(pwd)/honeypot-logs:/data" \
reditrap
容器默认使用 --host 0.0.0.0 --port 6379 --log-file /data/redis-honeypot-events.ndjson,因此日志会落在宿主机的 honeypot-logs/redis-honeypot-events.ndjson 中。
Podman 的使用方式相同(如适用,请添加 SELinux 标志):
podman run -d --name reditrap \
-p 6379:6379 \
-v "$(pwd)/honeypot-logs:/data:Z" \
reditrap
通过在镜像名称后附加参数来覆盖默认配置,例如:
docker run --rm -p 6379:6379 reditrap --redis-version 7.0.15 --log-file /data/attempts.ndjson
每个传入请求都会生成一条 NDJSON 记录。可疑的 Lua 活动包含启发式信息,以便更轻松地进行分类。例如:
{
"action": "lua_eval",
"args": ["return debug.getregistry()", "0"],
"command": "EVAL",
"info": {
"arg_count": 2,
"heuristics": {
"length": 26,
"matched_tokens": ["debug."],
"preview": "return debug.getregistry()"
},
"key_count": "0",
"script_hash": "763200efa15885c9fa970d45cc2b11711c739c13"
},
"remote": {"host": "203.0.113.42", "port": 58231},
"timestamp": "2025-10-07T15:04:12.123456+00:00"
}
将日志与网络遥测数据结合使用,以追踪攻击来源并决定响应措施。