目录

周末随笔:物联网安全那些坑——血泪教训总结

写在前面:这不是技术教程,而是一个物联网开发者踩坑后的真实记录。如果你正在做 IoT 项目,希望我的这些"学费"能帮你省点钱。


为什么突然想写这个?

上周帮一个朋友调试他的智能家居项目,设备功能都正常,但我在他的 MQTT 服务器日志里看到了让我后背发凉的东西——明文传输的设备控制指令,包括门锁开关密码

这不是个例。我做物联网开发这几年,见过太多因为忽视安全而导致的问题。今天不聊具体技术实现,就想和大家聊聊那些容易被忽视的安全坑。


坑一:默认密码永不修改

真实案例

某品牌摄像头被黑客批量入侵,原因是什么?所有设备出厂默认密码都是 admin:admin,而且用户无法修改。

我踩过的坑

早期我做 ESP32 项目时,为了方便调试,WiFi 配置硬编码在代码里:

// ⚠️ 错误示范 - 千万别这么干!
const char* wifi_ssid = "MyNetwork";
const char* wifi_password = "MyPassword123";

结果代码上传到 GitHub 后,被扫描工具秒抓。虽然是个测试项目,但想想都后怕。

正确做法

// ✅ 使用配网模式,首次使用时配置
#include 

WiFiManager wifiManager;

void setup() {
    // 自动创建配网 AP,用户通过网页配置 WiFi
    wifiManager.autoConnect("Device-Config-AP");
}

硬件清单(安全升级):

物品 用途 价格
ESP32 开发板 支持 WiFiManager ¥25
按钮开关 触发配网模式 ¥2
OLED 显示屏 显示配网二维码 ¥15
**总计** **¥42**

坑二:通信不加密

真实案例

某智能插座厂商被曝光,App 控制指令直接用 HTTP 明文发送。任何人连上同一 WiFi,用 Wireshark 就能截获控制指令。

我踩过的坑

早期项目用 HTTP 传输传感器数据:

# ⚠️ 错误示范 - 数据裸奔
curl http://192.168.1.100/api/temperature?value=25.5

正确做法

# ✅ 使用 HTTPS + 证书验证
curl https://api.example.com/api/temperature \
  --cacert /path/to/ca-cert.pem \
  -d '{"value": 25.5}'

MQTT 加密配置示例:

# mosquitto.conf 安全配置
listener 8883
protocol mqtt
cafile /etc/mosquitto/certs/ca.crt
certfile /etc/mosquitto/certs/server.crt
keyfile /etc/mosquitto/certs/server.key
require_certificate true

坑三:固件更新无验证

真实案例

2025 年某智能门锁固件被篡改,攻击者替换官方固件后,可以远程解锁任意门锁。原因是固件更新没有签名验证

我踩过的坑

ESP32 OTA 升级代码:

// ⚠️ 错误示范 - 无签名验证
ESPhttpUpdate.update("http://server.com/firmware.bin");

正确做法

// ✅ 使用签名验证
#include 

esp_https_ota_config_t ota_config = {
    .url = "https://server.com/firmware.bin",
    .cert_pem = server_cert_pem_start,  // 服务器证书
    // 验证固件签名
    .skip_cert_common_name_check = false,
};

esp_err_t ret = esp_https_ota(&ota_config);
if (ret == ESP_OK) {
    Serial.println("固件验证通过,开始升级");
}

安全 OTA 所需资源:

物品 用途 价格
代码签名证书 固件签名 ¥0 (自签名)
HTTPS 服务器 安全分发 ¥50/月
版本管理工具 版本追踪 ¥0 (Git)
**总计** **¥50/月**

坑四:调试接口未关闭

真实案例

某工业控制器被入侵,攻击者通过未关闭的 JTAG 接口直接读取固件,提取加密密钥。

我踩过的坑

CH559 开发时,为了方便调试一直开启串口打印:

// ⚠️ 错误示范 - 生产固件还在打印敏感信息
Serial.println("Device password: " + password);

正确做法

// ✅ 使用条件编译,生产版本关闭调试
#ifndef PRODUCTION_BUILD
    #define DEBUG_PRINT(x) Serial.println(x)
#else
    #define DEBUG_PRINT(x)
#endif

void setup() {
    DEBUG_PRINT("Debug mode enabled");
    // 生产版本不会输出任何内容
}

硬件调试安全建议:

接口 风险等级 建议
JTAG/SWD 🔴 高危 生产时熔丝位禁用
UART 串口 🟡 中危 关闭或加密码保护
USB 调试 🟡 中危 仅开发版本开启
Telnet 🔴 高危 绝对不要用在生产

坑五:第三方库漏洞

真实案例

2024 年 Log4j 漏洞影响无数 IoT 设备,原因是使用了含漏洞的日志库。很多设备厂商甚至不知道自己用了这个库。

我踩过的坑

Arduino 项目用了一个流行的 MQTT 库,后来发现这个库有缓冲区溢出漏洞。

正确做法

  1. 定期更新依赖
# 检查 Arduino 库更新
arduino-cli lib upgrade

# 检查 npm 依赖漏洞
npm audit
npm audit fix
  1. 使用漏洞扫描工具
# 固件依赖扫描
pip install safety
safety check -r requirements.txt

# 容器镜像扫描
docker scan my-iot-app:latest
  1. 锁定版本
// package.json - 锁定具体版本
{
  "dependencies": {
    "mqtt": "5.3.2",  // 不要写 "^5.3.2"
    "crypto-js": "4.2.0"
  }
}

坑六:数据存储不安全

真实案例

某智能体重秤存储用户体重数据到 SD 卡,无任何加密。SD 卡被取出后,所有历史数据一览无余。

我踩过的坑

ESP32 存储 WiFi 密码到 NVS:

// ⚠️ 错误示范 - 明文存储
preferences.putString("wifi_password", password);

正确做法

// ✅ 加密存储
#include 

void encryptData(const char* input, char* output) {
    esp_aes_context aes;
    esp_aes_init(&aes);
    esp_aes_setkey(&aes, encryption_key, 256);
    esp_aes_crypt_ecb(&aes, AES_ENCRYPT, input, output);
    esp_aes_free(&aes);
}

加密存储方案对比:

方案 安全性 性能 推荐场景
NVS 明文 ❌ 低 ⚡ 快 非敏感配置
NVS 加密 ✅ 中 ⚡ 快 一般敏感数据
外部加密芯片 ✅✅ 高 🐢 慢 高安全需求
安全元件 (SE) ✅✅✅ 极高 🐢 慢 金融/医疗级

我的安全检查清单

现在每个项目发布前,我都会过一遍这个清单:

开发阶段

  • [ ] 代码中无硬编码密码/密钥
  • [ ] 调试接口已禁用或保护
  • [ ] 使用版本控制的依赖库
  • [ ] 敏感日志已关闭

部署阶段

  • [ ] 默认密码已修改
  • [ ] 通信已加密 (HTTPS/TLS)
  • [ ] 固件签名验证启用
  • [ ] 防火墙规则已配置

运维阶段

  • [ ] 定期更新固件
  • [ ] 监控异常访问
  • [ ] 备份加密密钥
  • [ ] 安全漏洞扫描

常见问题排查

问题 1:设备被未知 IP 访问

  • 原因: 端口暴露到公网
  • 解决: 检查路由器端口转发规则,关闭不必要的 UPnP

问题 2:证书验证失败

  • 原因: 设备时间不正确
  • 解决: 启用 NTP 时间同步
    #include 
    configTime(8 * 3600, 0, "pool.ntp.org");

问题 3:加密后设备变慢

  • 原因: 软件加密消耗 CPU
  • 解决: 使用硬件加密加速(ESP32 支持 AES 硬件加速)

总结

物联网安全不是一蹴而就的,而是一个持续的过程。我的建议是:

  1. 从第一天就考虑安全,不要等出了问题再补救
  2. 最小权限原则,设备只访问必要的资源
  3. 纵深防御,不要依赖单一安全措施
  4. 保持更新,定期关注安全漏洞公告

做硬件开发已经够难了,别让安全问题成为你的噩梦。

希望这篇博客文章对您有所帮助!


相关资源:

延伸阅读:


作者:MakerOnsite 技术团队
发布时间:2026-03-17
分类:技术随笔 / 物联网安全

更多关于 的文章
关注创客出手公众号

关注创客出手