发布在即!企业 AIGC 应用程度测评,3 步定制专属评估报告。抢首批测评权益>>> 了解详情
写点什么

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:142234
用户头像

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

关注

评论

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

你的 APP 能否精准「推送」击中用户?!

融云 RongCloud

消息推送 双十一

新里程碑!TDSQL金融核心系统客户数国内领先

腾讯云数据库

tdsql

恒源云(GpuShare)_训练指引

恒源云

深度学习

SoFlu,让 DevOps 更进一步

SoFlu软件机器人

DevOps 敏捷开发

在阿里云ECS服务器上部署OpenVPN

wong

Centos 7 OpenVPN ECS

Java ArrayList 与 LinkedList

码语者

Java

「The Data Way」1024 特别节目|一线工程师的开源路

SphereEx

开源 开源社区 开源青年

Requires: libc.so.6(GLIBC_2.14)(64bit)错误解决方法

杨清强

如何轻松集成多厂家推送服务

融云 RongCloud

消息推送

【活动报名】首次 「Apache ShardingSphere Dev Meetup 」期待你的参与!

SphereEx

开源 ShardingSphere 技术沙龙 Meetup SphereEx

自定义View:measureChildWidthMargins

Changing Lin

10月月更

微信业务架构图和学生管理系统架构

Geek_cb2b43

1200页文档笔记,Java+JVM+MySQL+数据结构与算法

Java 程序员 后端

低代码平台的爆火,会导致程序员失业吗?

J2PaaS低代码平台

低代码 低代码开发 低代码平台

12道Java高级面试题:开课吧数据分析百度云,大厂Java开发面试解答

Java 程序员 后端

实时通信全链路质量追踪与指标体系构建

融云 RongCloud

通信云 Qoe

腾讯云数据库TDSQL PG版重磅升级:查询性能提升百倍

腾讯云数据库

tdsql

微信的业务架构图

张平

架构实战营

12年高级工程师的“飞升之路”,Java知识点总结合集

Java 程序员 后端

万物智联与烟火人间,一场跨越20年的双向奔赴

脑极体

做一名真正的软件工程师

百度开发者中心

程序员 最佳实践 分享 工程师

5G、元宇宙和被重新定义的社交出海

融云 RongCloud

TDSQL助力建设数字政务

腾讯云数据库

数据库 tdsql

告别传统压测:全链路压测在中通的实践分享

TakinTalks稳定性社区

全链路压测 系统稳定高可用 性能压测 电商大促 系统保障

浅谈云上攻防——CVE-2020-8562漏洞为k8s带来的安全挑战

腾讯安全云鼎实验室

漏洞分析

明道云在建筑工程行业的应用场景

明道云

从小公司到大厂,从8K到30K-一个iOS开发的艰辛路程

iOSer

ios iOS面试

移动CRM软件是销售人员必备办公工具

低代码小观

管理 软件 移动 CRM CRM系统

10年阿里开发架构师经验分享:rabbitmq教程go,Java零基础入门pdf

Java 程序员 后端

TDSQL:解锁数据库前沿技术要点 | 腾讯云数据库DTCC 2021亮点回顾

腾讯云数据库

tdsql

首例“微服务+国产分布式数据库”架构,TDSQL助力昆山农商行换“心”

腾讯云数据库

数据库 tdsql

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