Facebook今天正式发布了Instagram的秘密工具之一,用于查找和修复该应用程序庞大的Python代码库中的漏洞。
该工具名为PYSA,是一种所谓的静态分析器。它的工作方式是在代码运行/编译之前扫描静态表单中的代码,查找可能指示错误的已知模式,然后标记开发人员的潜在问题。
Facebook表示,该工具是内部开发的,通过不断完善,Pysa现在已经成熟。例如,Facebook表示,在2020年上半年,Pysa在Instagram的服务器端Python代码中检测到44%的安全漏洞。
在这一成功的背后,是Facebook安全团队的努力。尽管PYSA基于Pyre项目的开源代码,但该工具是围绕安全团队的需求构建的。
虽然大多数静态分析器查找的错误范围很广,但PYSA是专门为查找与安全相关的问题而开发的。更具体地说,PYSA跟踪通过程序的数据流。
数据如何在程序代码中流动是非常重要的。当今的大多数安全漏洞都利用未过滤或不受控制的数据流。
例如,远程代码执行(RCE),这是当今最糟糕的错误类型之一,当剥离时,基本上是到达代码库中不需要的部分的用户输入。
在幕后,PYSA的目标是深入了解数据是如何在代码库之间传输的,特别是由数十万或数百万行代码组成的大型代码库。
这个概念并不新鲜,Facebook已经通过Zoncolan完善了这一概念,Zoncolan是Facebook在2019年8月为Hack发布的一款静态分析器--Facebook在其主要应用程序的代码库中使用了类似PHP的语言变体。
PYSA和Zoncolan都查找";source";(其中数据进入代码库)和";sinks";(其中数据结束)。这两个工具都跟踪数据如何在代码库中移动,并发现危险的接收器,例如可以执行代码或检索敏感用户数据的函数。
当发现源和危险的接收器之间存在连接时,PYSA(和Zoncolan)会警告开发人员进行调查。
由于Facebook安全团队密切参与创建PYSA,该工具已经在数月的内部测试中进行了微调,以找到特定于常见安全问题(如跨站点脚本、远程代码执行、SQL注入等)的源汇模式。
但正如Facebook安全工程师格雷厄姆·布莱尼(Graham Bleaney)本周在电话中告诉ZDNet的那样,如果扫描Instagram的整个代码库需要几天时间,Pysa发现安全问题的能力就不会那么有用了。
因此,PYSA也是为速度而构建的,能够在30分钟到几个小时之间的任何地方处理数百万行代码。这使得PYSA能够近乎实时地发现错误,并让开发团队对将该工具集成到他们的常规工作流和例程中感到安全,而不必担心使用它可能会延迟他们的代码交付,或者不会达到严格的截止日期。
正如Facebook安全团队在最近一集的Risk Business播客中所说的那样,这种专注于不扰乱Facebook开发人员及其常规工作流程一直是Facebook安全团队的目标。
但Pysa还有另一张王牌在袖子里,这就是它的可扩展性。Instagram主要运行在Python代码上,从一开始就没有作为一个有凝聚力的单元来开发。
就像大多数主要平台一样,它的代码是拼接在一起的,并随着公司的发展而改进。目前,它的代码库包括许多不同的Python框架和Python库,它们都运行不同的Instagram组件和功能。
对于Pysa来说,这也意味着该工具是在即插即用模型下创建的,在这种模型下,该工具可以扩展以适应动态的新框架。
因为我们在自己的产品中使用开源的Python服务器框架,如Django和Tornado,Pysa可以从第一次运行就开始发现使用这些框架的项目中的安全问题,Bleaney说。将PYSA用于我们尚未覆盖的框架通常就像添加几行配置来告诉PYSA数据进入服务器的位置一样简单。
Facebook今天在GitHub上正式开源了Pysa,以及帮助其发现安全问题所需的几个bug定义。Zulip服务器项目已经将Pysa嵌入到他们的代码库中,因为该工具在去年被用来发现一个主要的安全问题。