移动安全与物联网安全

移动应用安全与 IoT 设备安全:APP 逆向防护、安全启动、固件分析、设备认证、OTA 安全更新与边缘计算安全。

开篇:万物互联时代的安全短板

随着智能手机和物联网设备的普及,攻击面已经从传统的服务器和 PC 扩展到了数十亿的移动设备和 IoT 终端。这些设备往往具有资源受限、更新困难、物理暴露等特点,成为安全防护的薄弱环节。一个被攻破的智能摄像头可能成为攻击内网的跳板,一个存在漏洞的 OTA 更新机制可能导致百万设备被控制。

本章将系统介绍移动应用安全和物联网安全的独特挑战与防护方案。


一、移动应用安全

1.1 OWASP MASVS(移动应用安全验证标准)

级别要求适用场景
L1标准安全(反编译防护、传输加密、输入验证)普通应用
L2深度防御(代码混淆、白盒加密、防调试)金融/支付
R弹性防护(运行时自我保护、抗篡改)高价值目标

1.2 常见漏洞与防护

// ❌ 硬编码密钥
public class ApiConfig {
    public static final String API_KEY = "sk_live_abcdef123456";
}

// ✅ 使用 Android Keystore/System Store
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES", "AndroidKeyStore");
keyGenerator.init(new KeyGenParameterSpec.Builder("api_key", KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
    .setBlockModes(KeyProperties.BLOCK_MODE_GCM)
    .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
    .setRandomizedEncryptionRequired(true)
    .build());
SecretKey key = keyGenerator.generateKey();

1.3 代码混淆与加固

// Flutter 混淆配置
// android/app/proguard-rules.pro
-obfuscationdictionary dict.txt
-classobfuscationdictionary dict.txt
-packageobfuscationdictionary dict.txt

# 混淆类名和方法名
-repackageclasses ''
-allowaccessmodification

# Flutter 特定规则
-keep class io.flutter.app.** { *; }
-keep class com.example.myapp.** { *; }

一句话总结:移动安全的核心是"假设设备不可信"——代码会被反编译、数据会被拦截、存储会被读取,因此需要在每一层都加密和防护。


二、物联网安全

2.1 设备认证

// IoT 设备 X.509 证书认证(MQTT over TLS)
#include "mbedtls/ssl.h"

// 设备预置唯一证书(出厂烧录)
const char* device_cert = 
"-----BEGIN CERTIFICATE-----\n"
"MIICiDCCAi2gAwIBAgIUJ...\n"
"-----END CERTIFICATE-----";

const char* device_key = 
"-----BEGIN RSA PRIVATE KEY-----\n"
"MIIEowIBAAKCAQEAy8Db...\n"
"-----END RSA PRIVATE KEY-----";

// 连接 AWS IoT Core
void mqtt_connect() {
    mbedtls_ssl_context ssl;
    mbedtls_ssl_init(&ssl);
    
    // 加载设备证书
    mbedtls_x509_crt_parse(&client_cert, device_cert, strlen(device_cert)+1);
    mbedtls_pk_parse_key(&client_key, device_key, strlen(device_key)+1, NULL, 0);
    
    mbedtls_ssl_conf_own_cert(&ssl_conf, &client_cert, &client_key);
    mbedtls_ssl_conf_ca_chain(&ssl_conf, &ca_cert, NULL);
    
    // 双向 TLS 认证
    connect_to_broker(&ssl);
}

2.2 OTA 安全更新

# OTA 安全更新流程
def verify_and_apply_update(update_package):
    """
    1. 验证签名(厂商公钥)
    2. 验证固件完整性(哈希校验)
    3. 验证固件版本(防回滚)
    4. 写入备用分区
    5. 标记新固件有效
    6. 重启切换分区
    """
    # 1. 签名验证
    if not verify_signature(update_package, manufacturer_pubkey):
        raise SecurityError("Invalid signature")
    
    # 2. 完整性校验
    expected_hash = update_package.manifest['sha256']
    actual_hash = sha256(update_package.firmware).hexdigest()
    if expected_hash != actual_hash:
        raise SecurityError("Hash mismatch")
    
    # 3. 版本检查(防回滚)
    current_version = get_current_version()
    new_version = update_package.manifest['version']
    if new_version <= current_version:
        raise SecurityError("Rollback detected")
    
    # 4-6. 原子更新(A/B 分区)
    write_to_inactive_partition(update_package.firmware)
    mark_partition_valid()
    reboot()

2.3 安全启动(Secure Boot)

Secure Boot 信任链:

Boot ROM(硬件信任根,不可变)
    ↓ 验证
Bootloader(签名验证通过才能执行)
    ↓ 验证
Kernel(操作系统内核)
    ↓ 验证
RootFS(文件系统完整性)

验证失败 → 进入恢复模式/拒绝启动

一句话总结:IoT 安全的关键是"防篡改"——安全启动确保只有授权固件能运行,OTA 签名保证更新不被劫持,设备证书实现双向认证。


FAQ

Q1: 物联网设备资源受限,如何实现加密?

  • 使用轻量级算法:ChaCha20-Poly1305 比 AES-GCM 在小型设备上更快
  • 硬件加速:利用设备自带的加密引擎(AES-NI、硬件 RNG)
  • 会话密钥缓存:减少非对称加密操作

Q2: 如何应对大规模 IoT 僵尸网络(如 Mirai)?

  1. 出厂默认密码强制修改
  2. 自动安全更新机制
  3. 网络隔离(IoT VLAN)
  4. 流量异常检测
  5. 设备行为基线建模

相关阅读

  • https://plumephp.com/security-cryptography/ — 现代密码学与数据加密

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「安全」更多文章

  1. Kubernetes安全体系:RBAC、PodSecurity与NetworkPolicy实战
  2. 安全合规与数据保护
  3. 渗透测试与红蓝对抗