4. 防火墙基础:定义、分类与IT/OT差异
各位同学,今天我们聊聊防火墙。说实话,防火墙这个概念在IT领域已经存在几十年了,但在车载网络里,它还是个“新兵”。我最早接触防火墙是在做企业网络的时候,那时候觉得这东西就是个“门卫”,检查一下进出的人。但到了车载环境,嗯,事情变得复杂多了。
4.1 防火墙的定义
防火墙,说白了就是一种网络安全设备。它的核心任务就一个:根据预设规则,控制网络流量。允许谁进来,拒绝谁出去,全凭规则说了算。
我个人习惯把防火墙比作机场的安检通道。每个数据包就像一位旅客,防火墙要检查它的“身份证”(源IP、目的IP)、“行李”(端口号)、“行程单”(连接状态)。符合规则的放行,不符合的拦截。
核心定义:防火墙是一种位于不同网络安全域之间的访问控制设备,它基于预定义的安全策略,对进出网络的流量进行过滤和控制。
4.2 防火墙的分类
防火墙不是只有一种。我在项目中遇到过三种主流类型,它们各有各的脾气。
4.2.1 包过滤防火墙
这是最原始、最基础的防火墙。它只检查数据包的头部信息,比如:
- 源IP地址
- 目的IP地址
- 源端口号
- 目的端口号
- 协议类型(TCP、UDP、ICMP等)
它不关心数据包里面装了什么,只看“信封”上的地址。速度快,但安全性低。
我的经验:我曾经在某个项目中用包过滤防火墙做简单的CAN报文过滤。只允许特定ID的报文通过,其他一律丢弃。效果不错,但遇到复杂的攻击就力不从心了。
4.2.2 状态检测防火墙
这个就高级一些了。它不光看单个数据包,还会记录整个连接的状态。你想想看,一个TCP连接有三次握手,有数据传输,有四次挥手。状态检测防火墙会跟踪这些状态变化。
举个例子:
// 状态检测防火墙维护的连接状态表(伪代码)
struct ConnectionState {
uint32_t src_ip;
uint32_t dst_ip;
uint16_t src_port;
uint16_t dst_port;
enum { SYN_SENT, ESTABLISHED, FIN_WAIT, CLOSED } state;
uint32_t last_packet_time;
};
它会检查:这个数据包是不是属于一个已经建立的连接?如果是,放行。如果不是,就要看它是不是合法的连接请求。
避坑指南:我曾经遇到过一个案例,状态检测防火墙的会话表满了,导致正常的CAN诊断请求被丢弃。后来我调整了会话超时时间,问题才解决。嗯,这里要注意,车载网络里连接数量虽然少,但每个连接的生命周期管理不能马虎。
4.2.3 应用层网关(代理防火墙)
这是最“重”的一种防火墙。它不光检查网络层和传输层,还会深入到应用层,检查数据包的内容。比如,一个HTTP请求,它会检查URL、请求头、甚至请求体。
在车载环境里,应用层网关可以用来检查:
- 诊断请求(UDS)的合法性
- OTA升级包的完整性
- 车载以太网中的SOME/IP服务调用
说白了,它是个“翻译官”,在客户端和服务器之间传递信息,同时还能审查内容。
4.3 IT与OT(车载)环境下的防火墙区别
这个部分很重要。很多做IT安全的同事转到车载领域,一开始都会犯迷糊。我刚开始也踩过坑。
| 对比维度 | IT环境 | OT(车载)环境 |
|---|---|---|
| 通信协议 | TCP/IP为主,HTTP、FTP、SSH等 | CAN、CAN FD、FlexRay、车载以太网(SOME/IP、DoIP) |
| 实时性要求 | 毫秒级延迟可接受 | 微秒级甚至纳秒级,不能有额外延迟 |
| 资源限制 | 服务器资源充足,CPU/内存大 | 嵌入式MCU,资源极度受限 |
| 更新频率 | 可以频繁打补丁、升级 | OTA升级周期长,甚至终身不升级 |
| 安全目标 | 防黑客、防数据泄露 | 防功能安全失效、防车辆控制被篡改 |
| 攻击面 | 外部网络为主 | 内部总线+外部接口(T-Box、蓝牙、WiFi) |
为什么会这样?我简单解释一下。
第一,协议差异。IT环境里大家用的都是TCP/IP,规则很成熟。但车载网络里,CAN总线没有IP地址,没有端口号。你怎么做包过滤?只能基于CAN ID和DLC来做。状态检测?CAN没有连接的概念,只有报文收发。所以,车载防火墙必须支持多种协议栈。
第二,实时性。你想想看,一个刹车信号从发出到执行,延迟不能超过几毫秒。如果防火墙在这中间做深度包检测,每帧报文多花几十微秒,那刹车就变成“慢刹”了。所以,车载防火墙的规则匹配必须硬件加速,不能靠软件慢慢查表。
第三,资源限制。车载网关的MCU,主频可能只有几百兆赫兹,RAM只有几兆字节。你不可能跑一个完整的Linux防火墙。我见过有些方案用硬件TCAM(三态内容寻址存储器)来做规则匹配,速度飞快,但成本也高。
核心差异总结:IT防火墙追求“全面防护”,车载防火墙追求“精准、快速、低开销”。说白了,车载防火墙更像一个“交通警察”,只拦该拦的车,不耽误正常通行。
4.4 车载防火墙的独特挑战
除了上面说的,还有几个点我想特别提一下。
- 多域隔离:车载网络通常分为动力域、底盘域、车身域、信息娱乐域、ADAS域。防火墙要在这几个域之间做隔离。比如,信息娱乐域不能直接访问动力域的控制报文。
- 诊断与OTA:诊断工具(如CANoe、PCAN)通过OBD接口连接车辆时,防火墙要能识别合法的诊断会话,同时阻止非法的诊断请求。我遇到过有人用诊断工具刷写ECU,结果防火墙没拦住,差点出事。
- 安全启动与信任链:防火墙本身也要是可信的。如果攻击者篡改了防火墙的规则,那一切防护都白搭。所以,车载防火墙通常和安全启动、HSM(硬件安全模块)绑定在一起。
我的建议:设计车载防火墙时,不要想着“一刀切”。先梳理清楚车辆的网络拓扑,哪些域之间需要隔离,哪些报文是关键的。然后,从最简单的包过滤开始,逐步增加状态检测和应用层检查。步子迈大了,容易扯着蛋。
好了,这一章的内容就到这里。下一章我们会深入讲解车载防火墙的规则设计,包括如何定义白名单、黑名单,以及如何应对常见的攻击场景。到时候我会分享一些我在实际项目中踩过的坑,希望对你有帮助。