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。
本地控制清单:
- 手动驱动:telnet 机器人IP 8081,发送{"command":"forward","speed":50}(利用CVE)。
- 地图持久:挂载SD卡保存.pgm文件,手动SLAM via ROS cartographer。
- 定时:cron /usr/bin/start_clean.sh(参数:eco模式,区域边界JSON)。
- 集成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支持。
资料来源: