跳到正文
原文
Hacker News· hedgerow-dev·· 13 小时前精选AI 评分80

超市冷柜蜜罐Coldframe

Show HN: Coldframe, a honeypot that poses as a supermarket fridge controller

正文 · AI 翻译

超市制冷控制器蜜罐

2026年,攻击者利用默认密码和过时未打补丁的固件,攻入了欧洲各地的互联网连接制冷监管器,然后强制执行除霜周期。coldframe伪装成其中一个控制器。它记录了谁连接,他们尝试了什么密码以及使用了哪些公共漏洞利用程序,并且它永远不会给他们任何真实的东西

它是一个Python文件,除了标准库之外没有其他依赖项

角色

角色 伪装成 用途
danfoss 丹佛斯AK-SM 800A系统管理器 StoreView登录,一个假的商店仪表板,/html/xml.cgi和/xml.cgi的XML API,HTTP和HTTPS
dixell 科帕兰/迪塞尔XWEB EVO监管器 登录页面和公共漏洞利用程序针对的XWEB 500 CGI路径

看起来像真正的设备

丹佛斯角色复制了互联网扫描器对真实AK-SM 800A设备记录的内容:nginx服务器头和头顺序,Danfoss StoreView页面标题,仅TLS 1.2,以及由SelfSigned-DanfossSM800A机构为CN=DanfossSM800A签发的1年证书。每次构建都会生成自己的密钥

弱登录(例如Supervisor / 12345)和正确的CVE-2025-41450 "每日代码" 成功。攻击者获得会话令牌和一个带有除霜按钮的假冷藏柜仪表板。他们采取的每个操作都被记录为control事件;没有什么是真实的

迪塞尔角色以同样的方式遵循真实的XWEB EVO设备:没有Server头,他们的安全头设置和顺序,相同的资产路径和页面大小。它的登录使用真实的/cgi-bin/login.lua流程:文档中提到的工厂登录Admin / Admin成功,五分钟内失败五次锁定用户,尝试XWEB Proauth_mode绕过(CVE-2026-25085)被标记

两个供应商的真实设备都提供自己的favicon,扫描器通过它的哈希值匹配设备。该图标是供应商的艺术品,因此它不在这个存储库中。对于私有部署,你可以将FAVICON_FILE指向你有权使用的副本

丹佛斯启动页面也是如此。真实设备从固件中提供一个小Angular加载器页面,数千个设备共享其确切的哈希值。将INDEX_FILE指向index.html(来自公共固件包),诱饵按字节逐字节地提供它,其日期在Last-Modified和ETag中保持原样。加载器的main.*.js然后显示诱饵自己的登录页面,布局与固件的远程登录类似。如果固件的assets/images/Danfoss-logo.png位于index.html旁边,页面将使用它

两个角色还可以运行可选的Modbus TCP服务,提供假的冷藏柜温度、设定点和除霜寄存器。真实的AK-SM 800A设备仅使用Modbus与其自己的冷藏柜控制器通信,因此Modbus默认关闭。打开它以捕获通用工业扫描器

它识别的漏洞

匹配公共漏洞的请求在日志中获得exploit字段:

  • CVE-2023-25914:通过get_file的AK-SM 800A路径遍历
  • CVE-2023-25915:通过load_cert的AK-SM 800A命令注入
  • CVE-2025-41452:通过load_nginx_headers的AK-SM 800A nginx头覆盖
  • CVE-2025-41450:AK-SM 800A "每日代码"登录绕过(getauth与eds_only或quantum_only一起使用),注明攻击者是否计算了正确的代码
  • SM800代码绕过:eds_only / quantum_only在其他命令上
  • CVE-2021-45420:/cgi-bin/下的XWEB 500上传和命令路径
  • CVE-2026-25085:通过意外的auth_mode的XWEB Pro登录绕过

快速入门

PERSONA=danfoss HTTP_PORT=8080 python3 -I honeypot.py

打开 http://localhost:8080,每个请求都会作为JSON行显示在stdout和events.jsonl中

运行测试(它们在回环上启动蜜罐并攻击它):

python3 -I test_honeypot.py

部署

最快:粘贴到 "用户数据"

创建一个 Ubuntu 24.04 服务器(一个 $4 的 DigitalOcean 云实例就足够了),并将 cloud-init.yaml 粘贴到 用户数据 框中。如果你想要 XWEB 人设,将 PERSONA=danfoss 更改为 dixell。启动大约两分钟后,诱饵将在端口 80(Danfoss 使用端口 443)上监听,并根据如下方式加固。

然后,在你的提供商的防火墙中,仅允许诱饵的端口从任何地方访问,并允许从你自己的地址进行 SSH 连接。使用以下方式读取日志:

ssh root@<server> 'podman logs coldframe'

手动

构建容器。每次构建都会生成一个新的自签名证书,因此两次部署不会共享同一个证书。

podman build -t coldframe .

使用 rootful podman 或 Docker 运行它。无根端口转发会重写源地址,这使得每个攻击者看起来都像同一个内部 IP。

--userns=auto 将容器映射到未使用的宿主机 UID 范围,因此即使容器用户在宿主机上也是 nobody。Podman 需要对每个宿主机分配一个范围,一次一个:

echo "containers:2147483647:2147483648" | sudo tee -a /etc/subuid /etc/subgid
sudo podman run -d --name coldframe --restart=always \
  --read-only --cap-drop=ALL --security-opt no-new-privileges --userns=auto \
  --memory 128m --pids-limit 512 --log-opt max-size=10m \
  -p 80:8080 -p 443:8443 \
  -v coldframe-logs:/logs:U \
  -e PERSONA=danfoss \
  coldframe

对于 Modbus,添加 -e MODBUS_PORT=5020 -p 502:5020。

在宿主机上,仅暴露人设真正会有的端口,并阻止除 DNS 和软件更新之外的所有出站流量:诱饵永远不需要连接外部。仅从你自己的地址保持 SSH 可达:一个 SSH 对全世界开放的冰箱控制器看起来是不正常的。

配置

变量 默认值 含义
PERSONA danfoss danfoss 或 dixell
HTTP_PORT 8080 HTTP 监听器
HTTPS_PORT 0 (关闭) HTTPS 监听器,需要 CERT_FILE 和 KEY_FILE
MODBUS_PORT 0 (关闭) Modbus TCP 监听器
LOG_PATH events.jsonl 事件追加位置
FAVICON_FILE 无 可选的用于提供 favicon(仅限私有部署)
INDEX_FILE 无 可选的 Danfoss 固件 index.html,用作启动页面(仅限私有部署)

读取日志

每一行是一个事件:

{"ts": "2026-11-05T10:57:21.158+00:00", "persona": "danfoss", "proto": "http",
 "src_ip": "203.0.113.7", "src_port": 6782, "event": "login_attempt",
 "username": "admin", "password": "admin"}
event 时间
request 任何 HTTP(S) 请求,包括方法、路径、Host、User-Agent、Authorization 和正文
login_attempt 通过登录页面或 XML API 提交的凭证,包括 granted
control 来自已登录会话的操作,例如启动解冻
xml_cmd Danfoss XML API 命令,包括其属性和任何 exploit 匹配
tls_error 失败的 TLS 握手(通常是扫描器对 443 端口讲明文的 HTTP)
connect, read, write, device_id, unsupported, malformed Modbus 活动记录;写入解冻寄存器的操作包含 "defrost": true

summary.py 将日志转换为简短报告:

python3 -I summary.py --hours 24 --ignore <your-own-ip> < events.jsonl

安全

  • 它从不运行命令、读取文件或转发流量。利用载荷会被记录并丢弃。
  • 请求正文、记录字段和连接都有上限,包括每个源的上限,以防止一个攻击者挤占其他人。空闲套接字超时,当事件日志过大时,日志会轮转。
  • 缓慢传输数据的连接在 30 秒后被切断,拒绝连接会被记录。
  • 过长的日志行会被截断,summary.py 会中和攻击者输入中的终端转义码。
  • 容器以非根用户身份在其自己的用户命名空间中运行,在只读文件系统中运行,且没有能力。
  • 日志字段受攻击者控制。在查看或处理时,将它们视为不可信。

限制

  • 浅层交互。 已登录的攻击者只能看到一个小的仪表板和一些 XML 命令,而不是完整的 StoreView 应用。
  • 公共代码可以被指纹识别。 任何人都可以读取这个仓库并发现其确切的响应。更改部署的人设字符串、页面布局和证书主题。
  • 未经确认的细节。 静态路径、完整 Web 应用和真实设备的一些 XML 响应形状不公开。在这些缺失的地方,coldframe 使用合理的值。
  • 云 IP 看起来可疑。 一些扫描器将云托管中的工业设备标记为可能的蜜罐。

来源

相关工作

eppser/danfoss-ak-sm-decoy 是另一个 AK-SM 诱捕器,具有 SNMP 和服务工具监听器以及更丰富的模拟商店。coldframe 专注于匹配真实设备的网络指纹、检测特定漏洞以及 Dixell XWEB 支持.

许可证

MIT。参见 LICENSE.

来源:Hacker News · github.com

00