《物联网安全运维实战精讲》
第2章 物联网通信协议安全

2. 物联网通信协议安全

2.1 MQTT协议安全分析

协议概述与威胁模型

MQTT(Message Queuing Telemetry Transport)是物联网领域最主流的轻量级发布/订阅协议。其核心架构由Broker(代理服务器)、Publisher(发布者)和Subscriber(订阅者)组成。由于协议设计初衷为低带宽、低功耗环境,安全机制相对薄弱,面临以下主要威胁:

  • 中间人攻击(MITM):明文传输时,攻击者可截获Topic、Payload及凭证。
  • 未授权订阅/发布:缺乏ACL(访问控制列表)时,攻击者可订阅敏感Topic或发布恶意指令。
  • Broker伪造:设备连接恶意Broker导致数据泄露。
  • 拒绝服务(DoS):大量CONNECT报文或超大Payload耗尽Broker资源。

安全加固措施

安全层面 具体措施 说明
传输层 强制TLS 1.2+ 使用双向证书认证,禁用弱密码套件
认证层 用户名/密码 + X.509证书 避免硬编码凭证,采用动态Token或PSK
授权层 细粒度ACL 基于Topic通配符(+ / #)限制读写权限
应用层 Payload加密 即使TLS被绕过,数据仍为密文
运维层 速率限制与审计 限制连接频率,记录所有MQTT事件日志

MQTT安全架构SVG图示

MQTT安全通信架构 IoT 设备 证书 + 凭证 TLS 1.2+ 客户端 TLS加密 MQTT Broker ACL 授权引擎 会话管理 速率限制 内部网络 后端服务 数据持久化 业务逻辑 ⚠ 攻击面:未加密CONNECT报文、弱密码、通配符滥用 安全措施清单 ✅ 启用TLS双向认证 ✅ 限制Topic通配符范围 ✅ 禁用匿名连接 ✅ 设置最大报文大小(256KB) ✅ 启用Last Will遗嘱消息防篡改 ✅ 定期轮换客户端凭证

安全配置示例(Mosquitto Broker)

# /etc/mosquitto/conf.d/security.conf
listener 8883
cafile /etc/mosquitto/certs/ca.crt
certfile /etc/mosquitto/certs/server.crt
keyfile /etc/mosquitto/certs/server.key
tls_version tlsv1.2
require_certificate true

# ACL规则
acl_file /etc/mosquitto/acl.acl

# 禁止匿名
allow_anonymous false
password_file /etc/mosquitto/passwd

# 速率限制
connection_messages true
max_connections 1000
max_inflight_messages 20

2.2 CoAP协议安全分析

协议特性与风险

CoAP(Constrained Application Protocol)基于UDP,采用RESTful风格,专为资源受限设备设计。其安全机制依赖DTLS(Datagram Transport Layer Security)。主要风险包括:

  • UDP反射放大攻击:CoAP默认支持IP多播,攻击者可伪造源IP发起放大攻击。
  • DTLS握手开销:在低内存设备上,完整DTLS握手可能导致拒绝服务。
  • 资源发现泄露:/.well-known/core 接口可能暴露设备敏感信息。
  • 重放攻击:缺乏时间戳或Nonce机制时,攻击者可重放旧请求。

CoAP安全模式对比

安全模式 加密 认证 适用场景
NoSec 无 无 内网非敏感数据
PreSharedKey DTLS 预共享密钥 资源极受限设备
RawPublicKey DTLS 非对称证书 中等能力设备
Certificate DTLS X.509证书链 高安全要求场景

CoAP DTLS握手流程SVG图示

CoAP + DTLS 安全握手流程 CoAP 客户端 PSK / RPK CoAP 服务器 资源 /obs ① ClientHello (CipherSuites) ② ServerHello + Certificate/PSK_ID ③ ChangeCipherSpec + Finished 🔒 DTLS 加密通道建立 ④ CoAP GET /sensor/temp (加密Payload) ⑤ 2.05 Content (加密响应) ⚠ 注意:DTLS over UDP 需处理丢包与重排序,建议启用 ECN 和 0-RTT

CoAP安全加固建议

# 使用Californium (Cf) 框架的DTLS配置示例
CoapClient client = new CoapClient("coaps://[server]:5684/sensor/temp");
// 设置PSK
PreSharedKeyInfo psk = new PreSharedKeyInfo("client-01", "secretKey123".getBytes());
client.setEndpoint(new CoapEndpoint.Builder()
    .setConnector(new DTLSConnector(new DtlsConnectorConfig.Builder()
        .setPskStore(new StaticPskStore(psk))
        .setRecommendedCipherSuitesOnly(true)
        .build()))
    .build());

// 设置超时与重传
client.setTimeout(5000L);
client.setRetransmissionTimeout(2000L);

2.3 HTTP/HTTPS在物联网中的应用与风险

应用场景与局限性

HTTP/HTTPS在物联网中主要用于设备固件升级(OTA)、配置管理和数据上报。然而,其设计并非为物联网优化,存在以下问题:

  • 协议开销大:HTTP头部平均400-800字节,对低功耗广域网(LPWAN)不友好。
  • 短连接频繁:每次请求需重建TCP连接,增加延迟与功耗。
  • 证书管理复杂:海量设备更新证书成为运维难题。
  • RESTful接口暴露:未鉴权的API端点可能被扫描利用。

HTTPS在物联网中的风险矩阵

风险类别 具体风险 影响等级 缓解措施
证书风险 自签名证书未校验、证书过期 高 使用ACME自动续签,固定CA证书
协议降级 攻击者强制降级至HTTP 高 HSTS头部 + 301重定向
中间人攻击 伪造网关拦截流量 极高 证书固定(Certificate Pinning)
API滥用 未限速导致资源耗尽 中 API Key + 速率限制
敏感数据泄露 URL参数或Body明文 高 强制POST + Body加密

HTTPS与MQTT/CoAP协议栈对比SVG图示

物联网协议栈安全对比 HTTP/HTTPS 应用层:JSON/XML 安全层:TLS 1.2+ 传输层:TCP 网络层:IPv4/IPv6 ⚠ 开销大,适合网关 MQTT 应用层:二进制/JSON 安全层:TLS/PSK 传输层:TCP 网络层:IPv4/IPv6 ✅ 低开销,双向通信 CoAP 应用层:CBOR/JSON 安全层:DTLS 传输层:UDP 网络层:6LoWPAN ✅ 极低开销,受限设备 选择建议:网关层用HTTPS,设备层用MQTT+PSK,极受限设备用CoAP+DTLS

HTTPS安全配置示例(Nginx反向代理)

# /etc/nginx/sites-available/iot-api
server {
    listen 443 ssl http2;
    server_name iot-api.example.com;

    # 强加密套件
    ssl_certificate /etc/ssl/certs/iot-server.crt;
    ssl_certificate_key /etc/ssl/private/iot-server.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers on;

    # HSTS
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;

    # API限速
    limit_req_zone $binary_remote_addr zone=iot_api:10m rate=5r/s;
    location /api/ {
        limit_req zone=iot_api burst=10 nodelay;
        proxy_pass http://iot_backend:8080;
        proxy_set_header X-Device-ID $http_x_device_id;
    }

    # 设备固件下载
    location /firmware/ {
        alias /var/www/firmware/;
        valid_referers none blocked server_names;
        if ($invalid_referer) { return 403; }
    }
}

HTTP/HTTPS在物联网中的最佳实践

  1. 强制HTTPS:所有API端点必须使用TLS,禁用HTTP明文回退。
  2. 证书固定(Pinning):在设备固件中硬编码CA公钥哈希,防止伪造证书。
  3. 最小化请求:合并API请求,使用批量上报减少连接次数。
  4. 设备身份标识:使用mTLS(双向TLS)或设备注册Token。
  5. 日志与监控:记录所有HTTP状态码、延迟和异常UA,及时发现扫描行为。

专注课程资料整理