SOME/IP(Scalable service-Oriented Middleware over IP)是现代汽车E/E架构中实现域控制器和服务之间通信的核心协议。然而,SOME/IP本身缺乏内建的加密和认证机制,如果部署在不安全的以太网环境中(如座舱内部网络),极易遭受中间人(MITM)攻击,导致服务调用被窃听或劫持。
本文将聚焦如何通过引入DTLS/TLS协议层,对SOME/IP通信进行端到端的加密和认证,从而有效防御MITM攻击。
1. 为什么需要DTLS/TLS?
传统的SOME/IP通常运行在裸UDP或TCP之上。在MITM攻击中,攻击者可以利用ARP欺骗或网络路由劫持,截获服务消费者(Consumer)和服务提供者(Provider)之间的消息。
- DTLS (Datagram Transport Layer Security): 用于保护基于UDP的SOME/IP通信(如SOME/IP-SD、事件和字段通知),提供数据报级别的安全,避免重放攻击和窃听。
- TLS (Transport Layer Security): 用于保护基于TCP的SOME/IP通信(通常用于大的数据传输或可靠性要求高的请求/响应)。
关键在于实现双向认证(Mutual Authentication),确保通信双方都持有并验证对方的有效证书,防止恶意节点伪装成合法服务。
2. 实施步骤:配置双向DTLS/TLS
在SOME/IP环境中实现安全的端到端通信,需要配置底层SOME/IP栈(如AutoSAR BSW中的COM或vSomeIP等开源实现)来强制使用DTLS/TLS。
步骤 2.1:生成证书体系
为了实现双向认证,我们至少需要一个根证书颁发机构(Root CA)和为每个服务节点颁发的证书。
我们可以使用OpenSSL来模拟生成证书(在生产环境中应使用硬件安全模块HSM和专业的PKI基础设施)。
# 1. 生成根证书私钥
openssl genrsa -out rootCA.key 2048
# 2. 生成根证书
openssl req -x509 -new -key rootCA.key -out rootCA.pem -days 3650 -subj "/CN=Root Car CA"
# 3. 为服务提供者(Provider)生成密钥和CSR
openssl genrsa -out provider.key 2048
openssl req -new -key provider.key -out provider.csr -subj "/CN=Vehicle Service Provider"
# 4. 使用根证书签发提供者证书
openssl x509 -req -in provider.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out provider.pem -days 365
# 对服务消费者(Consumer)执行类似操作,生成 consumer.key 和 consumer.pem
步骤 2.2:配置SOME/IP安全策略
SOME/IP栈必须配置为在特定的服务ID/方法ID上启用DTLS/TLS,并指向正确的证书文件。以下是一个概念性的配置示例,模拟了在SOME/IP栈中启用服务A(Service ID: 0x1000)的安全配置。
{
"security_policy": [
{
"service_id": "0x1000",
"method_id": "*",
"protocol": "DTLS",
"authentication": "mutual",
"local_cert": "/etc/someip/certs/provider.pem",
"local_key": "/etc/someip/certs/provider.key",
"trusted_ca": "/etc/someip/certs/rootCA.pem"
}
],
"default_policy": {
"protocol": "NONE"
}
}
步骤 2.3:服务提供者(Provider)实现
Provider在启动时,会加载其自身的证书和私钥,并配置DTLS/TLS监听端口。当Consumer尝试连接时:
- Consumer发送 DTLS/TLS 握手请求。
- Provider回复,发送自己的证书。
- Consumer使用预置的 rootCA.pem 验证 Provider 的证书。
- Provider要求 Consumer 验证(双向认证),Consumer发送自己的证书。
- Provider使用 rootCA.pem 验证 Consumer 的证书。
- 握手成功后,通信使用协商的密钥进行加密。
这种双向认证机制确保了只有经过授权、持有有效证书的Consumer才能调用Provider的服务,完全阻止了未经认证的中间人节点进行服务劫持或注入恶意消息。
3. 核心防御原理总结
防御SOME/IP MITM攻击的关键在于在传输层引入以下机制:
- 端到端加密: DTLS/TLS确保传输数据在网络中的任何中间节点上都无法被明文读取。
- 身份认证: 通过证书和双向认证(Mutual TLS/DTLS),确保通信双方的身份都是可信的,即使攻击者能截获流量,也无法伪装成合法服务进行通信。
- 完整性校验: DTLS/TLS包含MAC(Message Authentication Code),防止中间人篡改数据包内容。
汤不热吧