博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Facebook引入Haskell升级Sigma防御系统
阅读量:6703 次
发布时间:2019-06-25

本文共 2137 字,大约阅读时间需要 7 分钟。

Facebook的Sigma防御系统主要用来主动识别垃圾邮件、钓鱼攻击以及恶意链接等,并自动将其从网络中删除。随着网站内容和用户数量的极速增长,之前设计的Sigma系统渐渐不能满足网站的需求。Facebook利用两年时间对Sigma进行了升级,用语言替代了语言对Sigma进行了重新编程。接下来,本文就Sigma升级的相关内容进行简要介绍。

\\

作为Facebook的防御系统,Sigma实际上就是一个规则引擎。对于网站上的每一个交互,它都会调用一系列相关的规则对这次交互的安全性进行评估。其中,这些规则主要包含了恶意攻击的相关模式。一旦交互中的内容符合了某个恶意攻击的规则定义,Sigma就认定其为恶意内容,禁止发到网站中。这样,Sigma就可以在攻击发生前识别并加以阻止。为了能够应对新出现的攻击模式,Sigma中的规则集需要不断变化。这就要求Facebook团队不断分析网络中的攻击模式,并相应的修改规则集,以达到防御新型攻击的目的。

\\

最初,Sigma采用了Facebook自己推出的FXL语言。作为Facebook为对抗垃圾邮件而在2013年推出的编程语言,FXL能够满足当时Sigma的需求。然而,随着网站的迅速发展,FXL已经很难应对迅速扩大和日益复杂的规则集。它针对用户自定义的数据类型和模块缺乏某种抽象设备,而且基于翻译器的实现使得其处理速度也满足不了需求。Facebook迫切需要一种能够在性能和表达性方面有良好表现的编程语言。该语言需要具备以下特性:纯函数式和强类型、能够自动打包和隐藏数据提取动作、在短时间内完成产品中代码的升级和更迭、极佳的性能以及支持交互式开发等。通过筛选,Facebook发现Haskell最能符合这些要求——它是一个纯函数式、强类型的语言,有着成熟的编译器和交互式的环境();Haskell还拥有所需要的所有抽象设备、丰富的库集合以及活跃的开发者社区。然而,Haskell并不能满足所有的特性需求——自动打包/并行处理数据提取和编译后代码的热替换。Facebook团队还需要想办法解决这些问题。

\\

为了支持自动打包和并行数据提取,Facebook创建了。Haxl能够把多个数据提取操作进行自动打包和并行执行。目前,Haxl已经开源,其代码依托在GitHub中。此外,Facebook团队在GHC中设计和实现了Applicative donotation,使得编译器可以自动发掘串行代码中的并行性。接下来,有关编译后代码热交换的问题。每次有新的规则加入到版本库时,Facebook团队都希望能够在Sigma运行中尽快把规则更新到每一台机器。一般来说,在一个程序运行过程中动态修改其代码是一件很难的事情。然而,Facebook团队通过认真分析,发现了一个关键的现象——Sigma接收的请求寿命都很短暂。这样,系统只需要把新的请求送到新的代码,而老的代码可以在运行完正在服务的请求后再抛弃即可。Facebook使用了GHC内置的运行时连接器进行加载和卸载代码。在卸载老版本的代码时,垃圾收集器(Garbage Collector,GC)也会参与其中。GC会探测到什么时候老的代码不再被新的请求使用,从而指导相关人员进行安全卸载。

\\

解决以上两个问题后,Facebook就顺利采用了Haskell进行Sigma的编写。在代码设计中,Haskell位于两个C++层中间。因为C++ thrift服务器更加成熟、高性能,而且支持更多特性,顶层的服务器层采用C++。在有需要时,它会调用下层的Haskell。而在最底层,C++客户端代码负责与其他内部的服务进行通信。为了减少负担,Facebook利用Haskell的把Haxl数据源中的每一个C++客户端封装起来,方便上层调用。

\\

最后,Facebook针对25种最常见的请求类型(基本覆盖了Sigma 95%左右的典型负载),比较了基于Haskell和FXL的系统的处理能力。结果表明,Haskell在最好情况下能够比FXL快3倍左右,吞吐量平均高20%-30%。Facebook团队还在GHC中实现了分配限制机制(Allocation Limit)。该机制会在一个线程结束之前对其能够使用的内存数量进行鉴定,防止一个单独的请求占用太多的资源。一旦一个线程长期占用最大限额的资源,Haskell会以异步例外(Asynchronous Exception)的形式来放弃本次请求。而且,Facebook团队构建了一个交互式的环境和自己的包源Stackage,提高工作效率。

\\

目前,Facebook已经开始使用Haskell编写而成的Sigma进行大规模对抗垃圾信息或其他攻击的活动。,使用Haskell的Sigma工作性能良好,可靠性强。,Haskell并不是那么顺理成章的选择。在这升级过程中,Facebook的后端安全团队经历了很多困难,也收获了很多经验。

\\

感谢对本文的审校。

\

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至。也欢迎大家通过新浪微博(,),微信(微信号:)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群)。

转载地址:http://xnblo.baihongyu.com/

你可能感兴趣的文章
身份证合法性判定
查看>>
Scanner
查看>>
myeclipse下dwr.xml配置文件没有自动提示解决办法
查看>>
STL库
查看>>
2011-04-13 15:54 利用事件触发实现ActiveX调用js函数
查看>>
IntelliJ IDEA 12 EAP 更新 (122.694)
查看>>
Python发送带附件的Email
查看>>
python代码风格建议
查看>>
MFC对话框编程
查看>>
bat 文件清楚当前目录下的所有目录及文件
查看>>
iOS 关闭键盘
查看>>
设非主键为聚集索引
查看>>
SQL 将一个字段内用逗号分隔的内容分成多条记录
查看>>
lucene 使用教程<转>
查看>>
邮件服务器脱离域灾难恢复
查看>>
关于C++ const 的全面总结
查看>>
IoC容器Autofac(3) - 理解Autofac原理,我实现的部分Autofac功能(附源码)
查看>>
vmware复制fedora16出现网络启动错误
查看>>
Python错误: SyntaxError: Non-ASCII character
查看>>
modern.IE – 微软发布的 IE 兼容性测试工具和资源
查看>>