从堆栈溢出复制代码?您也可以粘贴安全漏洞

发布于:2021-01-07 10:27:10

0

278

0

堆栈溢出 复制代码 粘贴 安全漏洞

我们知道堆栈溢出是许多开发人员生活中的日常工作。我从很多人那里听说,他们每天都来这里(如果不是经常的话)来回答他们的问题。有时,关于代码问题的答案是一大堆代码。有时,该代码会将其纳入生产应用程序,因为它完美地回答了这个问题。 

一组研究人员调查了这些代码段,以查看它们的安全性,以及所引入的安全漏洞是否仍在项目中易受攻击。设拉子大学(Shiraz University)副教授Ashkan Sami,蒙特利尔理工大学(PolytechniqueMontréal)副教授Foutse Khomh和现为加拿大银行高级数据科学家Gias Uddin研究了Stack Overflow上的C ++代码段,以回答这一确切问题。(编者提示:我们之前曾与Khomh和Uddin谈过他们从Stack Overflow问题和评论中获取意见的工作。)

这些研究人员一直在研究开发人员在2018年在瑞典的一次会议上见面时如何并行使用StackOverflow。Khomh一直在研究Stack Overflow代码中的许可问题,这使安全专家Sami怀疑该代码是否存在可能暴露的缺陷。复制者不仅侵犯版权。 

复制代码本身并不总是一件坏事。代码重用可以提高软件开发的效率;为什么要解决已经解决好的问题?但是,当开发人员使用示例代码而不试图理解其含义时,就会出现问题。“他们真的在乎对漏洞进行审查,还是只是使用现成的代码,” Khomh问。“如果这样做的话,这个问题还会蔓延吗?”

研究过程

Sami和公司不是最早检查发布到Stack Overflow的代码中的漏洞的研究人员。在回顾现有文献时,他们发现没有论文讨论第四流行语言C ++的Stack Overflow代码。“我们希望专注于C ++,以更好地了解漏洞如何演变以及漏洞迁移实际上是否从Stack Overflow迁移到GitHub。” 萨米说。  

他们下载了SOTorrent 数据集,其中包含了十年的堆栈溢出历史记录。第一次自动通过发现了12万条标记为代码段的文本。通过重复数据删除流程和手动检查,他们将集合简化为2560个唯一的代码段。现在,艰苦的工作开始了。 

其中三位研究人员复查了这些摘要中的每一个,以寻找经过多轮复查的漏洞。在每个回合之后,他们必须辩护为什么每个易受攻击的摘要都会受到整个研究小组的攻击。“这是一项详尽的工作,”萨米说。“但是他们发现的漏洞实际上是漏洞。经过几轮审查,他们归结为69个漏洞,我们可以肯定地说它们是脆弱的。”

这69个易受攻击的代码段属于29个常见弱点枚举(CWE)类别之一。尽管69个项目看起来并不多,但他们发现那些脆弱的代码段已迁移到2800多个项目中。我们不是在谈论学校项目;这些是实际的现场项目。公开可见的Github存储库中的生产代码。 

在发布结果之前,他们确保与所有回购所有者联系,并告知他们代码中的缺陷。少数人回答并解决了问题,但是有很多未回答或悄悄关闭的问题。而且那里可能还有更多。“我们实际标记的漏洞,我认为这是实际交换的一部分,” Khomh说。

不懂复制

团队发现的许多问题都是基本的安全错误。但这并不意味着它们并不普遍。较常见的缺陷之一是不检查返回值。当您不检查C ++中的返回值时,就会冒着可怕的空指针取消引用的风险。该错误立即导致分段错误并使进程崩溃。 

这个错误很容易防范。验证返回值为!NULL。但是事实如此普遍指出了更大的问题。Khomh说:“如果借用东西而您不了解所借内容的内容,那么就会陷入重用具有潜在漏洞的代码的陷阱。然后,您只是在散布这些东西。” 如果要重用代码,则需要了解该代码。 

这些漏洞可能使软件向恶意行为者开放。另一个流行的缺陷是输入验证。像返回验证错误一样,当函数处理输入而没有确保它是期望的东西时,也会出现此缺陷。在某些情况下,这可能会导致堆栈溢出错误(即我们的名字),并可能导致程序将输入作为任意代码执行。Uddin说:“即使在去年,也有一些黑客活动专门针对代码库中的堆栈溢出漏洞。这样一来,就可以未经授权地访问数百万个用户信息。”

萨米(Sami)和霍姆(Khomh)都是教授,因此他们遇到了学生作业,并一直在重复使用代码。通过适当的归因和对代码实际功能的理解,复制的代码实际上可以帮助学生学习。但是,在大多数情况下,在不了解其工作原理的情况下复制代码。最好的方法仍然是自己做。“理想情况下,他们应该创建解决方案并获得满分”,Khomh说。“然后他们学习了这个概念,他们实际上可以从中构筑一些东西。”

但是,如果必须使用复制的代码,则必须进行归因和尽职调查。萨米说:“他们应该相信在哪里得到的。” 再次,他们应该检查该组件是否可以正确地与另一个组件集成。只是一个例子,但是在阿丽亚娜五号中发生并炸毁整个航天器的问题是因为它们有整数问题。64位数字被写入16位。” 他们重用了先前任务中的代码,而没有检查它是否仍可以在新系统上使用。

堆栈可以做什么

研究人员明确指出,这不是Stack Overflow特有的问题。任何共享代码片段的站点都将面临此问题。作为研究的一部分,他们创建了浏览器扩展,用于识别易受攻击的代码。

但是社区还有其他可以帮助的事情。首先,最重要的是要了解作为示例发布的代码片段不是可用于生产的代码。在不理解代码并对其进行测试之前,请勿将其复制到项目中。通过扩展,您可以了解研究人员标记为有风险的摘要,但始终会添加新的答案。 

他们还建议利用社区中的安全专家。Uddin说:“现在,作为一个整体的Stack Overflow社区,对于开发人员来说,他们印象非常深刻。” “他们彼此之间非常互动。如果我们能够激励安全专家提高认识并教育用户社区,我们不仅将使代码更安全,还将向将要使用该代码的用户提供更多信息。”

因为最终,这些研究人员也是教育者。他们认为堆栈溢出可以帮助教育好奇的提问者有关安全性和编程技术的知识。正如萨米教授所说:“不仅提供答案,而且还提供有关代码是否安全的见解。”