FPGA做正则匹配和网络安全,究竟有多大的优势?

FPGA做正则匹配和网络安全,究竟有多大的优势?

西电通院专用集成电路课程学习 云导播

网络安全已经被提升为国家战略的高度,高校里面的新增的一级学科,去年9月份,中央网信办、教育部公布了“一流网络安全学院建设示范项目高校”名单。但网络安全的范围实在太大,平常所说的黑客、网络病毒等软件、操作系统、固件级别的网络攻击或防范办法仅仅是常见的传统网络安全范畴,本文所说的是基于硬件级别的网络安全方法,比较学术的分类有可信芯片研究、网络安全防护的硬件实现等。硬件领域网络安全的研究随着近几年挖矿芯片、AI芯片等专用芯片的广泛普及和宣传,越来越多的人逐渐意识到了FPGA或者专用芯片去实现某些传统的软件算法,会带来几个数量级的加速效果。目前,基于FPGA或者ASIC的硬件网络防护网卡已经在云平台、网络数据中心等广泛应用。随着网络带宽的不断提升,未来某一天,可能每一台PC机上的网卡都会带有硬件网络防护芯片。

基于FPGA的入侵检测

随着信息技术的不断发展,网络安全问题引起了人们的广泛关注。网络攻击者对不受保护的网络或系统进行入侵和攻击,从而传播计算机病毒、获得内部信息、摧毁主机、破坏重要数据等,给用户带来不可挽回的损失。

2014年4月,国内两个大型物流公司的内部网络系统遭到黑客攻击,1400多万条快递信息遭到泄露;

2015年5月,美国国税局系统遭到黑客攻击,十万多名纳税人的网上资料泄露,损失5000万美元;

2016年4月,济南市免疫规划系统网络被非法入侵,20多万名儿童信息泄露,包括儿童的姓名、联系方式、家庭住址等;

2017年5月12日,全球范围爆发了WannaCry勒索病毒攻击,该计算机网络病毒攻击了一百多个国家,涉及金融、能源、医疗等众多行业,损失高达80亿美元(约合人民币550亿元)。国内多所高校也受到了病毒攻击,大量重要的文档和数据被锁定加密,无法正常工作,影响巨大。

随着人们对网络的依赖性不断增大,网络攻击带来的损失也会越大,所以面对网络安全问题,应该要做到防患于未然,积极主动应对网络攻击。一个安全的计算机系统应保护它的数据和资源免于非授权访问、篡改和拒绝使用。1980年,JamesAnderson在《计算机安全威胁的控制》的技术报告中首次提出了入侵检测的概念[1]。入侵检测简单来说就是检测并响应针对计算机系统或网络的入侵行为,它包括检测对计算机系统的非法访问、越权访问和恶意试探,监测系统的运行状态等。

入侵检测系统(intrusion detection system,简称“IDS”)是能够执行入侵检测任务的软件、硬件或者是软硬件相结合的系统,可以对网络传输进行监视,并在发现可疑数据时发出警报或者采取主动应对措施。IDS利用已知的入侵行为构建模式集合,通过检测网络数据包,发现是否存在不符合安全策略的行为或被攻击的迹象。与传统防火墙不同,IDS不仅检测网络数据包的包头,还会对数据包的净荷部分进行检测。

入侵检测系统是一个复杂的系统,其中最核心的部分是入侵检测引擎,即检测数据包中是否包含攻击。早期的入侵检测引擎主要采用软件方式实现,但随着网络速度的不断增长和网络攻击数目的急剧增多,软件实现逐渐暴露出两个问题。首先,软件系统处理速度有限,最快只能达到几百兆的处理速度,已远远不能满足如今高速的网络需求;其次,检测过程占用大量的CPU运行时间,以经典入侵检测系统Snort为例,检测过程会占用30%~80%的CPU时间[2],严重影响系统的性能。基于以上两点,设计适合于硬件实现的入侵检测算法和结构对实现高性能入侵检测系统至关重要[3]。

除了入侵检测之外,也可以以硬件的形式发起某一种攻击,如DDoS攻击,会给对方致命的打击。本公众号之前的文章,如西电免流量限制上网攻略!Python实现PPPOE攻击工具,秒杀拨号上网,笔者所在实验室已实现基于FPGA的PPPoE的DDoS攻击,效果显著。

目前,国内外已有多家公司推出了入侵检测的产品,下面介绍一些主流的入侵检测产品。世界上最大的网络设备制造商Cisco公司的CiscoSecure IDS是一个软硬件结合的系统,作为路由器和交换机产品设计的附加模块,用于实现入侵检测功能;NFR公司的NID系统,该系统是一种基础规则检测的网络入侵检测系统,同时也具备异常检测的功能[4];华为的NIP系列入侵检测系统,定位各种网络威胁和违反安全策略的流量,并提供详细有效的指导措施,以实现防护检测技术;绿盟网络入侵检测系统是对防火墙的有力补充,与同类产品相比,具有高性能、高安全性、高可靠性和易操作性等优势[5]。

网络数据包分为包头和净荷两部分,包头长度比较短,并且每个域的信息固定,所以现在对包头部分的硬件检测方案的研究相对比较成熟。但在很多情况下,仅对数据包包头进行检测是不够的,如很多病毒等攻击会隐藏在数据包的净荷部分,所以对数据包净荷部分进行检测也非常必要。数据包净荷部分比较长,并且对应的规则长短不一,针对这一部分的检测成为限制入侵检测引擎性能的瓶颈之一[6]。

近年来,对网络数据包净荷的检测主要有两类解决方案,基于逻辑的解决方案(Logic-based)和基于存储器的解决方案(Memory-based)。基于逻辑的解决方案将规则集合中的规则直接用硬件逻辑实现。当规则集合规模变大时,这种方法硬件实现成本过高。针对这一问题,John Lockwood引入了状态机的方法[7],通过规则之间共用前缀减少对硬件资源的消耗,该方法将规则集合中的全部规则转换成有限状态机,用硬件描述语言实现,最后映射到FPGA。HyunJin Kim 等人将状态机中的转移状态进行压缩,使其用FPGA实现时,能够充分利用查找表的输入输出端口,大大增大了硬件利用率[8]。基于逻辑的解决方案由于充分利用了硬件并行性,查找速度极快,吞吐率可达到8~10Gbps,但硬件资源消耗非常大,尤其随着规则集合规模越来越大,这一问题更加突出;另外,该类方法每次更新规则集合都需要重新进行FPGA映射,影响匹配效率。

基于存储器的解决方案首先对规则集合中的规则进行预处理,并将结果存储在存储单元中,与基于逻辑的解决方案最大的不同是,规则集合的信息存储在存储单元中,对逻辑资源消耗较少,并且每次进行规则更新时只需要重写存储单元的内容[9]。如今,用于净荷检测的规则集合非常庞大,并且需要经常更新,所以基于存储器的解决方法越来越有优势[10]。这类方法最早借鉴了经典的多模式匹配算法AC算法[11],首先将规则集合中的规则信息转换成状态跳转表,存储在存储器中;检测数据时,通过输入数据的特征,读取存储器相应位置的信息,通过状态跳转完成规则匹配。当规则集合规模越来越大时,利用AC算法生成的状态跳转表会变得非常庞大,对存储空间的需求随之增大,在很多情况下片上的存储资源无法满足,但如果借助于片外存储单元,读取存储单元时延时较长,严重影响检测速度。因此不少研究人员针对这一问题提出了改进方法。IBM研究实验室的Jan vanLunteren提出了对AC算法转移规则的改进方法[12],通过加入通配符和优先级,减少了AC算法中的转移规则,进而减小了状态转移表的大小;SarangDharmapurikar等人将AC算法与BF算法相结合[13],BF算法所需存储资源极小,利用片上存储单元实现,AC算法所需存储资源较大,利用片外存储单元实现,该方法先利用BF算法对待检测数据进行快速过滤,可过滤掉大多数安全数据,只有当BF算法检测出疑似攻击的数据时,才启动AC算法对数据包进行检测,在占用极小片上资源的情况下,完成了对数据的快速检测;Tsern-Huei Lee将AC算法和WM算法相结合,先利用WM算法对数据进行预过滤,再利用AC算法进行检测[14];Hong-Jip Jung 提出将AC算法与bit-split算法结合[15],将AC算法中大状态机拆分成4个小状态机,该算法在保留AC算法性能的基础上,大大减小了存储空间。

随着规则集合的日益庞大,基于AC算法的方法很难实现较好的性能,因此Yi-Hua E. Yang等人开始利用树结构存储规则集合中的规则信息[16],利用规则前缀建树,形成分级结构,加入流水线技术之后,每一时钟周期可处理一个字符,与之前算法相比,需要的存储空间更少,速度更快;采用树结构存储规则信息时,树的深度等于规则集合中最长的模式串长度,当最长的模式串长度较长时,会导致树的深度极大,影响匹配性能,Weirong Jiang在此基础上进行了进一步改进,将树结构和AC算法相结合[17],将树的深度减少至8级,且AC算法中比例较大的交叉规则大大减少,存储空间相应减小。

基于存储器的解决方案对规则集合的更新比较方便,并且硬件逻辑资源消耗较小,但由于该类方法需要对规则集合中的规则进行预处理,利用规则的前缀关系生成状态跳转表或树型结构存储在存储单元中,因此其检测性能严重依赖于规则集合中的规则特征,规则之间的前缀关联性和预处理后的结果密切相关,因此即使是同样规模的规则集合,检测性能也会有很大的差异。另外,这类方法主要通过访问存储单元获取下一跳转状态,没有充分利用硬件的并行性,单个检测引擎的处理速度仅为1~3Gbps,在高速的网络应用中,需要采用多个检测引擎来满足需求,因此处理速度有待提高。

随着网络安全的重要性日益增强,基于FPGA或者专用芯片的入侵检测技需求必定会暴增。同时,随着挖矿芯片,AI芯片等的普及和推广,越来越多的人也逐渐认识到做某些事情,硬件的实现方式效率会数量级的提升。因此,基于FPGA或者芯片的网络安全防护也会越来越受到关注。

前面讲的太学术了,下面让我们以通俗的语言举一个例子来解释一下。

知名厂商举例

总部位于北爱尔兰贝尔法斯特的泰坦IC是北爱尔兰贝尔法斯特皇后大学安全信息技术中心(CSIT)的分拆公司。TITAN IC在硬件和内容处理和网络处理方面的发展处于世界领先地位。所提供的解决方案包括正则表达式(ReGEX)加速,用于网络安全的所有方面,包括:入侵检测/预防、应用检测、反病毒、内容/ URL过滤。这些解决方案可用作包含在网络服务器上的PCIE卡,如AWS F1上基于云的服务,作为可编程的知识产权,用于现场可编程门阵列(FPGA)和用于定制专用集成电路(ASIC)的硅知识产权(SIP)。

其中,最核心的技术就是正则表达式识别加速。这个跟Perl语言里面的正则表达式匹配是一样的。区别在于,通过硬件的方式在网络上快速的匹配出用户关心的数据内容。如下图是该公司通过硬件正则表达式处理器解析一封E-Mail的流程示意图。通过把规则配置到设备内部,就能实现对网络数据的快速识别和解析。

或许有人不以为然,这有什么啊,随便一台电脑上用个WireShark之类的抓包工具抓下来就可以分析出来。但我告诉你它的处理性能的时候你就明白区别了。

该公司的HeliOS ReGeX处理器架构在FPGA平台上可以实现达到100 Gbps的全网络吞吐量率数据的线速正则表达式匹配处理,并可以并行扫描多达100万个复杂正则表达式。

这是软件的方式能实现的吗?如果可以,那得需要多少台通用处理器并行工作啊。

下图是他们正则匹配的举例。

可以看到,除了应用识别外,还支持Snort等常见的入侵检测和防病毒签名以及数据丢失防护功能。

笔者想起2012年左右做HINOC2.0芯片的时候,里面也嵌入了规则匹配的模块,不过当时网口速率要求是1Gbps,要求做到字段无关、协议无关可自定义可更新,跟上面介绍的正则匹配实质是一样的。下图是当时实现的结构,规则表的查找还采用较为原始的顺序查找比对的方法,等做到HINOC3.0的时候,网口速率要求到了10Gbps,顺序查找比对的方式就无法满足线速处理的要求了。

HINOC3.0和单端口100Gbps SDN接入项目实现的时候,网口速率要求到了10Gbps和100Gbps,这时需要采用效率更高效的并行BV(Bit Vector,可参考参考文献[18]IEEE TPDS杂志文章)查找方法(类似于TCAM的工作方式)。如下图。

我们修改了参考文献[18]的实现方式,提出了也可以用来做范围匹配的BV算法(RSBV:Range Supported Bit Vector)和支持多字段匹配BV算法(AFBV:Bit Vector for All Type of Fields),在速率为100Gbps的以太网网络中,一个最短帧(最短帧帧长为64 字节、加上7字节前导码、1 字节起始符和12字节帧间隔)的最短处理时间为

使用我们自己提出的改进BV算法FPGA验证时,FPGA时钟频率为150MHz,一个数据帧的处理时间为一个时钟周期,为??2 = 1/150??????= 6.67???? ,满足100Gbps的线速匹配需求!

上图是泰坦IC根据客户需求给出的解决方案框架,通过规定格式的正则表达式匹配流程,再经过专用的编译器软件和应用程序,由通用CPU交给硬件加速处理器进行处理,一些比较大的规则集则存储到片外DDR中。

关键的内容来了!

下图是泰坦IC其中一款硬件正则匹配加速器IP核的架构。该IP核支持32位到256位数据总线,支持多达8000条主动并行搜索规则,支持100Gbps网络吞吐率,处理器接口支持AXI总线、Local BUS以及PCIe3.0和PCIe4.0 ,片内存储最多支持500条规则,外部DDR可支持多达100万条匹配规则。

从上图中可以看出,数据帧进入后,经过并行的前缀匹配引擎(莫非是BV?),然后进入多个并行的线程控制引擎,最后经过多路选择器,进入到线程处理引擎,最后把响应结果通过CPU总线递交给上层应用软件。

与传统的Fabless公司一样,下图是该公司的技术路线。可以看出,可以结合实际应用进行LICENSE授权使用开发专用ASIC芯片,做SMART NIC,或者LICENSE授权后直接使用其FPGA版本应用到数据中心加速中,也可以把安装有专用ASIC芯片的PCIe板卡进行系统集成,应用在网络云安全防护领域。

下图是相关IP在Xilinx FPGA上占用资源的情况:

HeliOS RXPF是一个被授权为软IP的FPGA正则表达式处理器。它的目标是StimNIC FPGA和固态驱动FPGA解决方案。HeliOS RXPF是专为高吞吐量、低延迟的深度包检测(DPI)应用而设计的,它需要硬件加速正则表达式(ReGEX)模式匹配和字符串匹配。从上图中可以看出,上述两种Xilinx的FPGA分别是KintexUltraScale KU115 FPGA和UltraScale+ VU9P,这两款FPGA尤其是后者,是去年亚马逊推出的云加速器硬件平台AWS F1,Xilinx官方VU9P开发版VCU118价格是 $6,995。

FPGA结合云计算形成新的FaaS(FaaS,FPGA-as-a-Service)或者AaaS(AaaS,Accelerator-as-a-Service)平台,则可以整合多方资源解决上述问题。平台厂商与FPGA硬件厂商合作,在云端提供统一硬件平台与中间件,可大大降低加速器的开发与部署成本。加速器开发商的加速器上传到云,可以形成服务销售给加速器用户,消除加速技术与最终用户的硬件壁垒。而加速器用户则能够在无需了解底层硬件的情况下,直接按需购买和使用加速服务,较传统方案更快更省地完成数据处理。

FPGA以其高能效和可重编程的优势,在大型互联网企业内部早有应用并逐渐成为常态。例如本文前面介绍的网络安全加速应用,媒体压缩,加解密,AI,大数据处理等领域,FPGA方案较传统CPU和GPGPU,往往可达到几倍甚至几十倍的能效提升。然而过高的开发门槛和开发成本,却让中小型企业对FPGA技术可望而不可及。即便是大企业,力量也只够集中开发有数的几种加速器难以全面铺开。

FPGA云服务作为一种面向未来的全新平台,横跨互联网与芯片设计领域,相信对任何人都是新鲜和陌生的。越来越多的互联网公司也开始招聘FPGA或IC设计人员,对人才的要求也越来越高,了解互联网、会FPGA、又要会算法、同时还要了解网络安全......你准备好了吗?

原文地址:https://www.cnblogs.com/zafu/p/10562501.html

时间: 2024-10-10 11:32:30

FPGA做正则匹配和网络安全,究竟有多大的优势?的相关文章

ruby 把字符串转为正则匹配表达式

需求 函数,需要通过参数传递字符串,用来做正则匹配 reg = '[0-9]+' def func(str, reg) str.scan(reg) end 由于 reg 在其它地方定义, reg 是字符串, 传进来后发现没法直接用于正则匹配 返回的结果总是 [] 空字符串. 解决 通过 Regexp 来通过 string 生成正则匹配的条件 def func)(str, reg) reg = Regexp.new("#{reg}"[0..-1]) "#{str}"

常用JS正则匹配函数

//校验用户名:只能输入1-30个字母 function isTrueName(s) { var patrn=/^[a-zA-Z]{1,30}$/; if (!patrn.exec(s)) return false return true } //校验密码:只能输入6-20个字母.数字.下划线 function isPasswd(s) { var patrn=/^(/w){6,20}$/; if (!patrn.exec(s)) return false return true } //校验普通

Nginx 正则匹配配置

location表达式类型 ~ 表示执行一个正则匹配,区分大小写 ~* 表示执行一个正则匹配,不区分大小写 ^~ 表示普通字符匹配.使用前缀匹配.如果匹配成功,则不再匹配其他location. = 进行普通字符精确匹配.也就是完全匹配. @ 它定义一个命名的 location,使用在内部定向时,例如 error_page, try_files location优先级说明 在nginx的location和配置中location的顺序没有太大关系.正location表达式的类型有关.相同类型的表达式

PHP正则匹配与文件编码关系

虽然多数高手认为正则会影响程序效率,但是做数据采集的时候,却很难避免使用正则, 强大的正则表达式用起来很舒服,但是在匹配中文的时候,会出现,明明正则表达式没问题,字符数据里包含符合正则表达式的数据,可就是抓不到,这时候,就该停下来,看一下,你所匹配的数据编码,与你的PHP脚本文件编码格式是否一致. 这是因为我们的中文与编码上有多种方法,比如:gbk,utf-8,当你的PHP脚本文件是GBK,而读取的需要匹配的数据编码却是UTF-8的时候,它们就不会返回你想要的结果(不区配). PHP正则匹配与文

关于php中正则匹配包括换行符在内的任意字符的问题总结

要使用正则匹配任意字符的话,通常有以下几种方法,这里我分别对每一种方法在使用的过程中做一个总结: 第一种方式:[.\n]*? 示例 ? PHP preg_match_all('/<div class="list">[.\n]*?<\/div>/i', $content, $data); 按道理这种方式应该是可以的,但我测试发现不行,因为这里中括号里面的“.”被当作一个普通的英文句号去处理了,而不是通配符,因此这里只能匹配到包含英语句号及换行符在内的任意内容了.

Python正则匹配字母大小写不敏感在读xml中的应用

需要解决的问题:要匹配字符串,字符串中字母的大小写不确定,如何匹配? 问题出现之前是使用字符串比较的方式,比如要匹配'abc',则用语句: 1 if s == 'abc':#s为需要匹配的字符串 2 print '匹配成功\n' 现在的问题是s可能是Abc.ABC等等,所以需要大小写不敏感的匹配,如果把需要匹配的模式的大小写进行罗列,那即使是三个字母的短模式也是很麻烦,查了一下,正则表达式re模块中有个参数flags=re.I,这样就可以大小写不敏感的匹配了,示例如下: 1 import re

python 爬蟲 解析/正则匹配/乱码问题整理

今日爬取一听/扬天音乐都遇到了某些问题,现在对爬取过程中遇到的问题,做对于自己而言较为系统的补充与解释.主要问题有一下几点: 一:beautiful,urllib等库进行网页解析时,对于目标下的东西无法进行解析与显示 二:正则匹配虽然看过许多,但实际使用时仍然不够熟练,需要大量参考,故而,打算重新整理 三:对于乱码问题,曾在建mysql数据库时,头疼多次,现打算对于网页解析的乱码处理方法做些整理 这次目标是爬取扬天音乐"http://up.mcyt.net/",需要获取的内容有:歌曲名

4-30 Java正则匹配

做CC时经常要用正则表达式过滤数据,当时洗的数据比较复杂,规则比较多.这次做leetcode,复习一下Java的正则匹配.Leetcode 537. Complex Number Multiplication 从表示复数的字符串里把实部和虚部取出来. http://blog.csdn.net/yin380697242/article/details/52049999 Pattern类,构造函数是私有类型,不能通过new新建,要通过Pattern.compile()获得一个匹配模式.Pattern

awk结合正则匹配

利用awk分析data.csv中label列各取值的分布. 在终端执行head data.csv查看数据: 1 name,business,label,label_name 2 沧州光松房屋拆迁有限公司,旧房拆迁.改造:物业服务(依法须经批准的项目,经相关部门批准后方可开展经营活动),E4,建筑装饰和其他建筑业 3 上海托帕化工材料有限公司,"从事化工材料领域内的技术开发.技术转让.技术咨询.技术服务.化工原材料及产品(除危险化学品.监控化学品.烟花爆竹.易制毒化学品.民用爆炸物品).机械设备.