文献标识码:A
DOI:10.16157/j.issn.0258-7998.171962
中文引用格式:刘志强,徐金甫,戴强,等. 基于AXI总线的安全防火墙研究与设计[J].电子技术应用,2017,43(11):27-30.
英文引用格式:Liu Zhiqiang,Xu Jinfu,Dai Qiang,et al. Research and design of security firewall based on AXI bus[J].Application of Electronic Technique,2017,43(11):27-30.
0 引言
随着SoC(System-on-Chip)的发展与广泛应用,SoC面临的安全威胁与攻击手段[1-2]也更为复杂,嵌入式系统安全已成为不容忽视的重要问题。由于传统的嵌入式软件防护能力较弱,具有较大的延迟,易对系统造成性能损失,因此单纯依靠软件层面的安全机制已很难有效应对层出不穷的攻击手段。
目前,已有众多学者在不修改处理器结构的基础上,提出了基于总线的硬件安全增强机制。Fiorin提出一种基于NoC(Network-on-Chip)总线的安全探针和安全管理单元的保护机制[3],通过安全探针监控总线数据进出信息,安全管理单元收集探针信息来检测冲突与错误。Coburn J基于AHB总线提出了SECA的安全总线结构[4],在各个IP模块总线接口配置了安全增强接口(Security-Enhanced Interface,SEI),同时设计了安全增强模块(Security-Enhanced Module,SEM)作为中央管控模块协调各SEI模块工作。Cotret P、Crenne J等人在Coburn研究的基础上,引入基于总线的分布式防护结构[5],在各IP总线接口设置局部防火墙,实现地址的访问控制,并在片外存储器接口设计了局部密码防火墙,保护重要数据的机密性和完整性。但是该方案只是对地址进行监控,在多任务处理下,单独的地址访问操作可能属于不同的任务行为,因此不能实现任务的隔离。
本文借鉴了网络防火墙的安全隔离思想与Cotret P的分布式架构,提出了基于AXI总线的分布式安全总线防火墙架构,制定了多级可动态更新的安全策略,设计了具有较低延时的高速总线防火墙接口,实现了面向多任务处理的任务隔离机制。
1 总线防火墙架构设计
1.1 防火墙总体架构
总线防火墙部署于SoC通信链路上,介于总线与IP之间,是嵌入式系统的硬件底层安全防线。为减轻总线防火墙负载,并利用AXI总线的点对点突发传输特性,本文采用分布式的总线防火墙架构,即在每个IP接口与总线之间增加防火墙模块,如图1所示。
安全总线防火墙的架构由软件层和SoC硬件架构组成。软件层运行多任务处理的嵌入式操作系统,包括安全任务与非安全任务,各个任务之间有不同的资源访问权限。
硬件层由CPU、DMA、Memory、各个IP模块组成,模块之间通过AXI总线互连。安全防火墙位于总线与IP模块之间,由防火墙接口与片上 BRAM(Block RAM)组成。防火墙接口根据BRAM的安全策略实施访问控制,其基本特征就是阻止非法地址访问,目的是实现安全任务与非安全任务的隔离。防火墙的安全性由安全策略保证,安全策略只可由安全更新模块配置与更新。
1.2 防火墙安全策略设计
安全策略存储在片上BRAM,一条策略占用一个字空间,由一个地址标识。每条策略为每个给定的物理地址空间(带下边界与上边界)设定访问权限。
安全策略根据任务分组,同一任务的策略称之为一个策略组,由任务ID寻址标识。安全策略组在上电时由安全更新模块配置,运行过程中只可由安全更新模块更新,是一个可信区域。
面对复杂的SoC系统,安全策略数量众多,策略存储会占用大量的存储空间。为减少策略存储空间,本文提出策略组间白名单、组内黑名单的混合存储策略。策略组存储采取白名单策略,只有在白名单之列的任务可以访问该模块,否则直接拒绝访问,具有更高的安全性。安全策略组内采用黑名单存储策略,不在黑名单中的访问行为默认可读可写,直接允许。
为了增加安全策略的安全性与灵活性,本文设计了多级可动态更新的安全策略。安全策略设定3个安全等级:正常级别、警告级别、错误级别。正常级别为系统初始化后的各模块的安全级别,表示系统任务处于正常状态。警告级别表示系统出现了非法访问行为,并禁止该危险任务对该模块的所有访问权限。错误级别表示出现了较为严重的安全威胁,系统所有任务的访问都将禁止,只有关机重启有效。安全级别的更新是发生访问违规后作出的反应行为。当非关键任务出现访问违规时,则将其安全级别由正常级别提升为警告级别;当关键任务出现访问违规时,则将正常级别直接跳跃提升为错误级别,强制终止系统运行。
安全策略的参数包括策略组参数与策略参数,如图2所示。策略组参数由任务ID、策略数量组成;策略参数由读写权限、安全级别、策略域值组成。读写权限采用黑名单存储策略,包括禁读、禁写、禁读写。策略域值表示策略监控的地址空间,包括基地址偏移量和长度。
1.3 防火墙接口设计
AXI总线采用突发传输,因此防火墙只需在握手过程中分析其首地址、握手信号、突发传输SIZE等总线信号来实现访问控制。根据安全策略规则,其设计原理如图3所示。
行为分析模块是判断当前访问的读或写行为。时钟同步模块,用于延迟握手信号,满足AXI总线的传输时序。读模块读取安全策略内容,需要消耗一个时钟周期。校验模块则根据读取到的安全策略与访问的地址进行比对。校验成功,决策模块则允许访问行为,否则终止行为并将数据端置0。
快速查找单元则是一个类似于TCAM(Ternary Content Addressable Memory)容器的列表,自身存储每个任务安全策略监控的地址空间和长度,如图4所示,在防火墙监控状态下,根据TaskID选择安全策略组,通过访问地址addr、突发SIZE长度,可快速定位到其安全策略的地址。根据黑白名单存储策略规则,若noID=1,直接拒绝;若noSP=1则直接允许。
防火墙有3种工作状态,包括空闲状态、监控状态、更新状态,其状态转换图如图5所示。
1.4 策略安全更新设计
当系统检测到攻击时,BRAM中的安全策略必须被更新,并应用于新的安全策略。为保证更新环境的安全,防火墙增加了安全更新模块。
安全更新模块如图6所示,所有部件都通过一个AXI-Lite总线连接(也称为安全总线)和一个可信的安全SMCU构成安全子系统。flash存储着固件程序与防火墙安全策略,可实现各个防火墙的策略初始化配置和整个SoC的安全启动。Monitor模块监控每个防火墙接口的状态信号,防火墙的BRAM的另一端连接存储控制器,动态策略更新。系统上电时,SMCU从flash读取安全策略,并将安全策略写入到各个IP模块的BRAM中。
防火墙监控模块监控每个IP防火墙接口的状态机状态,包括noID信号、check_out等信号。当check_out为0或者noID为1,则表示有攻击事件发生,并将监控结果保存在相应任务的IP监控寄存器当中。防火墙监控模块一旦检测到攻击,产生中断通知SMCU,SMCU执行中断服务程序,启动策略更新。
策略更新过程必须保证两个安全策略之间切换时数据可用性。因此在切换过程中,首先使能update_en后决策模块阻塞当前地址访问,待策略更新完毕后关闭阻塞,将update_down置1表示更新完成。阻塞机制通过延时ready信号实现。更新1条安全策略消耗1个时钟周期,更新n条策略则至少需要n个时钟周期,这些时间损耗虽会降低性能,但从安全角度考虑,非法的访问行为得到阻止,安全效益提高。
2 基于总线防火墙的任务隔离机制
任务作为系统运行的一个行为事务实体,结合防火墙的功能,通过在总线上增加任务标识,可实现任务隔离机制。
2.1 面向任务标识的总线传输
总线上的主从访问行为通过主设备DeviceID或系统TaskID、总线地址、总线控制信号等,构成了防火墙的访问主体和被访问客体。总线防火墙根据安全策略监视所有总线传输,裁决发起传输的任务能否访问目标资源。
为了标明发起总线传输的进程,需要对总线传输任务进行标识,将ID嵌入传输事务中,该ID信号称为总线边带信号。如图7所示,各主设备维护一个ID 寄存器,寄存器输出驱动ID边带信号,与总线传输保持同步。CPU执行任务时发起传输前首先将TaskID注入CPU的任务ID 寄存器;其他主设备如DMA、密码协处理器等执行时则将固定的DeviceID注入设备专用ID寄存器内,在各主设备内部增加PID专用寄存器,TaskID注册作为进程调度的一部分。
2.2 任务隔离机制实现
实现任务隔离机制需要软硬件协同配合。
系统内核执行可信进程,在创建、执行各个任务,统一管理和分配TaskID,任何发起引起总线传输的任务,首先对调用的总线主设备的TaskID寄存器进行注册。任务发起的整个总线传输期间保持TaskID信号不变,进程切换时TaskID寄存器同步进行更新,时间上TaskID寄存器更新先于被调度进程的执行,即确保被调度执行的新进程在发起总线传输之前完成相应TaskID寄存器的更新。
在总线防火墙监控过程中,同一任务的TaskID边带信号保持不变,边带信号驱动各个从接口的防火墙模块,根据ID号完成面向任务的策略组寻址,配置快速查找单元的地址和长度参数。该过程可在2个时钟周期完成,可隐藏于任务切换的过程时间。
任务切换完成后,发起总线传输,防火墙接口则可快速读取该任务下的地址的安全策略,迅速完成地址策略校验。当系统受到攻击时,任务访问了其不允许的空间,则防火墙拒绝访问行为,实现了任务之间的隔离。在策略更新过程中,安全更新模块完成安全级别的更新,限制了该危险任务的访问权限,实现被攻击任务的隔离。
3 实验与验证
3.1 实验平台搭建
实验的硬件平台为ZYNQ 7c020开发板,集成了ARMA9处理器等硬核部分和FPGA逻辑部分。实验通过Xilinx公司vivado软件搭建如图1所示的SoC硬件电路。SoC以ARMA9为主处理器,分别以RAM、UART作为存储单元与外设接口。安全区采用MciroBalze软核处理器作为安全SMCU,采用RAM代替Flash单元。
实验的软件平台为FreeRToS实时操作系统,支持多任务处理。系统共运行3个任务Task1、Task2、Task3,分别完成数据的接收、加密、发送过程,其中Task2为安全任务,任务切换通过定时器中断实现。FreeRTos的任务切换程序是vTaskSwitchContext(),它作为系统一个可信进程,将任务标识写入TaskID寄存器。
3.2 实验结果
防火墙接口占用的FPGA资源如表1所示,由于ARM为硬核,综合结果暂用Mciroblaze软核计入资源总量。增加防火墙接口所增加的资源比例较小,寄存器与LUT增加比例分别为9.0%和5.2%。安全更新模块增加的主要单元为软核处理器与BRAM控制器,占用资源较大。单个防火墙接口的资源占用与P Cotret[5]比较如表2所示,本文的防火墙的寄存器资源占用偏多,但占有更少的LUT资源。
根据防火墙接口的电路设计,快速查找单元需要2个时钟周期,决策模块与同步模块各需要一个时钟周期,共需要4个时钟周期。当传输突发长度较大时,性能损耗比例较小,如表3所示。
在安全策略配置完成后,在debug调试下,模拟攻击者,将task3任务访问的明文地址修改为task2的密钥地址区,结果显示读取到的数据为0。当再次执行该任务,程序进入异常,这表明任务隔离有效。
4 结论
本文提出了基于AXI总线的分布式安全总线防火墙架构,制定了面向任务的多级安全策略,可通过安全更新模块实现策略动态更新,提出了黑白名单混合的策略存储规则,设计了具有较低延时的高速总线防火墙接口。在防火墙功能基础上,增加了面向任务标识的总线传输功能,实现了任务隔离机制。由于安全更新子系统功能较为单一,下一步将充分利用其安全的隔离环境增加安全服务相关功能,并进一步优化防火墙安全策略。
参考文献
[1] 郑显义,李文,孟丹.TrustZone技术的分析与研究[J].计算机学报,2016(9):1912-1928.
[2] ELMILIGI H,GEBALI F,EL-KHARASHI M W.Multi-dimensional analysis of embedded systems security[J].Microprocessors & Microsystems,2016,41(C):29-36.
[3] FIORIN L,LUKOVIC S,PALERMO G.Implementation of a reconfigurable data protection module for NoC-based MPSoCs[C].IEEE International Symposium on Parallel and Distributed Processing.IEEE,2008:1-8.
[4] Joel Coburn,Srivaths Ravi,Anand Raghunathan,et al.SECA:security-enhanced communication architecture[C].Proceedings of the 2005 International Conference on Compilers,Architectures and Synthesis for Embedded Systems.New York:ACM,2005:78-89.
[5] COTRET P,CRENNE J,GOGNIAT G,et al.Light weight reconfiguration security services for axi-based MPSoCs[C].International Parallel & Distributed Processing Symposium,Shanghai:IEEE,2012:326-329.
作者信息:
刘志强,徐金甫,戴 强,李军伟
(解放军信息工程大学,河南 郑州450001)