写点什么

Facebook 引入 Haskell 升级 Sigma 防御系统

  • 2015-07-07
  • 本文字数:1991 字

    阅读完需:约 7 分钟

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

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

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

为了支持自动打包和并行数据提取,Facebook 创建了 Haxl 框架。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 的 FFI(Foreign Function Interface)把 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 工作性能良好,可靠性强。 Facebook 的软件工程师 Simon Marlow 表示,Haskell 并不是那么顺理成章的选择。在这升级过程中,Facebook 的后端安全团队经历了很多困难,也收获了很多经验。


感谢徐川对本文的审校。

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

2015-07-07 09:142666
用户头像

发布了 268 篇内容, 共 131.2 次阅读, 收获喜欢 24 次。

关注

评论

发布
暂无评论
发现更多内容

Web前端入门:JavaScript 的应用领域

电子尖叫食人鱼

JavaScript 前端 Web

模块化和DID能让UBI惠及所有人吗?

加密眼界

模块化和DID能让UBI惠及所有人吗?

BlockChain先知

烟草行业专卖人员画像与队伍考评系统上线运行

中烟创新

联想,让AI计算发生“钟摆革命”

脑极体

AI

中小学人工智能通识教育指南已发布,高校如何承接

ModelWhale

小度X新京报共同发声,该学会适老的应该是年轻人

科技大数据

iVX BI 引擎数据驱动优化全解析

代码制造者

BI

一个让成员认可、管理者省心的程序员数据评估系统,应该是什么样子?

思码逸研发效能

研发效能 绩效管理 效能度量 效能管理 研发效能度量

模块化和DID能让UBI惠及所有人吗?

石头财经

模块化和DID能让UBI惠及所有人吗?

股市老人

具身智能的下一步:如何构建跨场景通用训练数据集?

数据堂

人工智能 数据 数据标注 AI‘’ 具身智能

龙蜥开发者说:从技术向往到生态共建的机密计算之路 | 第 30 期

OpenAnolis小助手

开发者 操作系统 龙蜥社区 龙蜥社区开发者说

探秘企业级智能体:脱颖而出的秘诀何在?

Techinsight

AI 智能体

集成学习常用组合策略:让多个模型“合作”得更好

量贩潮汐·WholesaleTide

集成学习

英特尔携手壳牌打造浸没式液冷认证方案,助力数据中心迈向高效未来

E科讯

【Java持久层技术演进全解析】从JDBC到MyBatis再到MyBatis-Plus

不在线第一只蜗牛

Java 数据库

OASA 年度工作会议落幕:2025 目标规划全票通过,国际安全厂商 Tenable 正式加入

OpenAnolis小助手

操作系统 软件安全 供应链安全 龙蜥社区安全联盟 硬件安全

AI 技术发展简史

不在线第一只蜗牛

人工智能 AI

【AI】我没写一行 SQL,就让 AI 查出了销售报表

非晓为骁

人工智能 AI BI MCP

MiniMax 新语音模型登顶 TTS 全球榜单;AI 会议笔记 Granola 融资 6700 万美元,估值 2.5 亿丨日报

声网

AI应用及数据驱动型HR决策呈激增态势

财见

多校加快推进教育数字化,全校6000+学生共上的人工智能通识课长啥样

ModelWhale

深度解析智能体:从概念到应用的全方位洞察

Techinsight

智能体评估

偶遇龙蜥,2025 OceanBase 开发者大会即将在广州举办

OpenAnolis小助手

数据库 AI 操作系统 龙蜥社区 OceanBase 开发者大会

游戏行业DDoS攻击类型及防御分析

网络安全服务

CDN 服务器 带宽 API接口 DDoS 攻击

高途公布2025年第一季度未经审计业绩及新股票回购计划

财见

如何医治一条慢SQL?

量贩潮汐·WholesaleTide

sql

云上玩转 Qwen3 系列之三:PAI-LangStudio x Hologres构建ChatBI数据分析Agent应用

阿里云大数据AI技术

大数据 数据分析 人工智能、 PAI LangStudio

技术贴 | 如何基于 KWDB 快速实现工业物联网智能电表系统设计?

KaiwuDB

数据库·

产品经理用什么软件做竞品分析?AI生成产品报告攻略奉上!

职场工具箱

AI 产品经理 竞品分析 办公软件 AIGC

Facebook引入Haskell升级Sigma防御系统_后端_张天雷_InfoQ精选文章