《物联网安全运维实战精讲》
第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图示
安全配置示例(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安全加固建议
# 使用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图示
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在物联网中的最佳实践
- 强制HTTPS:所有API端点必须使用TLS,禁用HTTP明文回退。
- 证书固定(Pinning):在设备固件中硬编码CA公钥哈希,防止伪造证书。
- 最小化请求:合并API请求,使用批量上报减少连接次数。
- 设备身份标识:使用mTLS(双向TLS)或设备注册Token。
- 日志与监控:记录所有HTTP状态码、延迟和异常UA,及时发现扫描行为。
专注课程资料整理