移动安全与物联网安全

移动应用安全与 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.** { *; }

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

1.4 运行时应用自我保护(RASP)

RASP 在应用运行时监控和阻断攻击,比静态加固更动态:

防护面技术实现示例
动态调试检测ptrace 检测、/proc/self/status 状态位发现 Debugger 连接则崩溃
Hook 框架检测检查 Xposed/Frida 特征库弹出警告或拒绝运行
Root/越狱检测检查 su 二进制、越狱文件系统标志敏感功能降级或禁用
模拟器检测硬件指纹、传感器数据校验拒绝在模拟器登录
完整性校验运行时校验代码段哈希发现篡改则终止
// 简化的反调试检测(Android)
public class AntiDebug {
    static {
        System.loadLibrary("antidebug");
    }
    public native static int checkPtrace();
    public static boolean isDebuggerAttached() {
        return android.os.Debug.isDebuggerConnected() || checkPtrace() != 0;
    }
}

1.5 侧信道攻击防护

移动设备面临独特的侧信道风险:

  • 功耗分析:加密操作功耗曲线泄露密钥信息 → 使用恒定时间算法(constant-time)
  • 缓存时序:密钥地址访问模式泄露 → 密钥分片存储、随机化访问
  • 电磁泄漏:屏幕内容通过电磁辐射恢复 → 远距离办公场景下考虑 Faraday 袋
  • 加速度计窃听:振动传感器可重建附近语音 → iOS 14+ 限制加速度计权限

二、物联网安全

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 签名保证更新不被劫持,设备证书实现双向认证。

2.4 边缘计算安全

边缘节点处理数据时面临独特挑战:

# 边缘设备安全基线配置示例
edge_security:
  # 1. 最小化系统镜像
  base_image: alpine-linux-minimal
  removed_packages: [bash, curl, ssh-server]

  # 2. 只读根文件系统
  rootfs: read-only
  writable_overlay: /tmp, /var/log

  # 3. 容器运行时隔离
  runtime: gvisor  # 或 kata-containers
  seccomp_profile: default-docker.json
  capabilities_drop: [ALL]
  capabilities_add: [NET_BIND_SERVICE]

  # 4. 密钥注入
  secret_injection:
    method: TPM2.0  # 硬件信任根
    rotation: 30d   # 自动轮转

  # 5. 网络微分段
  firewall:
    default_policy: DENY
    allowed:
      - dst: cloud-api.example.com:443
      - dst: mqtt-broker.local:8883

2.5 IoT 固件供应链安全

# 固件 SBOM(Software Bill of Materials)生成与漏洞扫描
import json
from cyclonedx.model.bom import Bom
from cyclonedx.parser import ParserError

def generate_firmware_sbom(firmware_path: str) -> dict:
    """
    解析固件中的第三方组件,生成 SBOM 并匹配 CVE
    """
    # 1. 提取文件系统中的共享库和可执行文件
    libraries = extract_libraries(firmware_path)
    
    # 2. 识别版本信息(strings / ELF headers / package manager)
    components = []
    for lib in libraries:
        version = identify_version(lib)
        components.append({
            "name": lib.name,
            "version": version,
            "type": "library",
            "purl": f"pkg:generic/{lib.name}@{version}"
        })
    
    # 3. 查询 NVD 漏洞数据库
    vulnerabilities = query_cve_database(components)
    
    return {
        "bomFormat": "CycloneDX",
        "specVersion": "1.5",
        "components": components,
        "vulnerabilities": vulnerabilities
    }

# 扫描结果示例输出
# {
#   "critical": [{"component": "openssl", "version": "1.0.2", "cve": "CVE-2021-3449"}],
#   "high": [{"component": "busybox", "version": "1.28", "cve": "CVE-2021-42373"}]
# }
供应链风险攻击向量缓解措施
恶意组件攻击者向开源库注入后门SBOM + 依赖签名验证
伪造固件中间人替换 OTA 包双签名(厂商+审计方)
过期依赖已知 CVE 未修复自动漏洞扫描+补丁策略
密钥泄露硬编码密钥被逆向硬件安全模块 (HSM/TPM)

FAQ

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

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

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

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

相关阅读

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

继续阅读

探索更多技术文章

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

全部文章 返回首页

「security」更多文章

  1. SOAR 安全编排自动化与响应
  2. 内部威胁与 UEBA 用户行为分析
  3. 模糊测试与安全测试自动化