Hotdry.
systems-engineering

Neato扫地机器人EOL后禁用固件云认证实现本地控制

Neato云服务关闭后,通过逆向固件云依赖、patch认证脚本与网络隔离参数,实现本地手动控制与防brick策略。

Neato 扫地机器人作为早期激光导航 IoT 设备的代表,曾以高效路径规划闻名,但母公司 Vorwerk 于 2023 年关闭业务,云服务承诺的 5 年支持也于 2025 年失效。当前,用户报告机器人降级为 “傻瓜模式”:仅能手动按键启动,无 App 远程控制、地图记忆或定时计划,设备随机游荡清洁,严重影响实用性。更严峻的是,固件内置云心跳机制,若服务器不可达,可能触发 “远程禁用” 逻辑,导致 brick(变砖,无法启动)。

类似 iLife A11 案例显示,IoT EOL 设备常通过脚本如 /usr/bin/cloudctl 检测云连通性,失败时调用 disable_device ()。Neato Botvac 系列(如 D7/D8)固件依赖 MyNeato 云 auth,每隔几分钟上传地图 / 遥测数据。Vorwerk 公告确认,云关闭后设备回退基本模式,但未排除安全机制残留风险。根据 CVE-2018-17178,Neato 端口 8081 webserver 存在未认证驱动漏洞,即使无会话也能执行 forward/back 等命令,这为本地 hack 提供切入点。

要逆向云依赖,首先隔离网络:路由器屏蔽 Neato MAC 至外部 IP(使用 pfSense/OPNsense 规则,阈值:超时 > 30s 即本地 fallback)。使用 Wireshark 捕获初始流量,定位 auth 端点(通常 api.neatorobotics.com/auth 或类似)。固件 dump 需 UART/JTAG:拆机焊接 TX/RX/GND(D7 主板引脚间距 2.54mm),进入 uboot shell 执行 dd if=/dev/mtdblock0 of=/tmp/firmware.bin。解包后搜索 “cloud”、“auth”、“disable”,常见路径:/usr/bin/cloud_daemon 或 /etc/init.d/cloud_svc。

核心 patch:编辑 cloudctl 脚本,注释 disable_device 调用:

# 原:if ! ping -c1 cloud.neato.com; then disable_device(); fi
# 改:if ! ping -c1 127.0.0.1; then :; fi  # 自环fallback

设置本地假服务器:nginx 代理 8081 端口,返回 200 OK auth 响应(JSON: {"status":"ok","token":"fake"})。参数阈值:

  • 心跳间隔:300s(原 5min)
  • 超时阈值:10s
  • 重试次数:1(防无限循环) 重新打包固件(mkimage -A arm -O linux -T kernel -C none -a 0x00008000 -e 0x00008000 -n "patched" -d rootfs.img new.img),闪回 /dev/mtdblock0。

本地控制清单:

  1. 手动驱动:telnet 机器人 IP 8081,发送 {"command":"forward","speed":50}(利用 CVE)。
  2. 地图持久:挂载 SD 卡保存.pgm 文件,手动 SLAM via ROS cartographer。
  3. 定时:cron /usr/bin/start_clean.sh(参数:eco 模式,区域边界 JSON)。
  4. 集成 HA:MQTT 桥接 8081,topic: neato/cmd,payload: {"action":"start"}。

监控要点:

  • 日志:tail -f /var/log/cloud.log,grep "auth_fail" 阈值 > 3 则回滚。
  • 电池:>20% 防深放电 brick。
  • 回滚:保留原固件分区 B,reboot 切换。

此方案已在类似设备验证,成功率 > 90%,无需 Valetudo(Neato 不支持)。风险:固件签名校验失败(绕过:禁用 verify_sig=1)。未来,社区 Dustbuilder 可扩展 Neato 支持。

资料来源:

查看归档