在线代码完美模型的直接拷贝?小心掉进坑里!

磊艾丰开发人员出版社:现在,越来越多的软件开发人员通过重用问答网站共享的代码片段来解决一些实际问题。例如,堆栈溢出平台包含大多数代码源虽然复制源代码有助于快速原型制作;然而,最近的研究表明,您使用的许多共享代码片段可能质量很低,甚至包含大量漏洞!研究人员发现,在10年内,通过深入分解共享堆栈溢出代码段中的安全漏洞,69个易受攻击的代码段在GitHub上的2859个项目中被重用。在

众包代码示例中,安全漏洞的性质和普遍性是什么?面对这些漏洞,我们应该如何选择安全的代码段?为了帮助提高共享代码段的质量,研究人员还开发了一种工具,允许堆栈溢出用户在将代码段上传到平台时检查漏洞。雷锋的人工智能开发人员将研究的核心内容和结论汇编如下,这对广大开发人员重用共享代码可能会有所启发。

经济类型代码

研究背景

长期以来,软件开发的一个主要目标就是以及时且经济高效的方式交付高质量的软件。因此,代码重用也被认为是一种公认的实践,共享代码片段和代码样本也是一种常见的学习方法。新手甚至更高级的开发人员使用在这些平台上共享的代码示例和解释来学习如何执行新的编程任务和使用特定的API其中,这些重用的代码片段来自许多不同的源代码和不同的形式,如:第三方库、开源软件和问答网站等。然而,最近的研究表明,在问答网站和托管在GitHub的开源软件仓库的知识流和知识共享中,一些代码片段不仅质量差,而且含有病毒。这些片段甚至在GitHub上的2859个项目中被重用。

安全性是质量的一个重要方面。如果易受攻击的代码片段从堆栈溢出迁移到应用程序,这些应用程序将容易受到攻击。

经济类型代码

历史发现和现状

在此之前,许多研究人员通过测试可重用代码片段发现了这些问题:

Xia等人表明,大量开源系统重用过时的第三方库,这可能会对软件产生有害影响,因为它们可能会在软件中引入安全缺陷

Abdalkareem等人检查了f-droid存储库,并确定了堆栈溢出post和android应用程序之间的克隆他们发现从帖子中复制的代码会对应用程序的质量产生负面影响。

杨等分析了GitHub上托管的909k非分叉python项目,包括290m函数定义和190万条在堆栈溢出中捕获的python片段,并定量分析了堆栈内和堆栈间溢出以及块级代码克隆的GitHub。

Akanda西山丽等人研究了两个流行的软件开发信息源之间的代码复制:堆栈溢出问答网站和软件开发教程,以了解重复信息随时间的演变

A等人研究了399个安卓应用程序和堆栈溢出帖子之间的克隆他们发现有1226个代码片段被68个安卓应用程序重用重复使用代码片段导致了1279个潜在的许可证冲突费希尔等人发现了从堆栈溢出复制到196,403个安卓应用程序的不安全代码片段,这些片段已经在谷歌播放器上发布。

张等通过检查对API调用的误用,研究了堆栈溢出代码片段的质量。他们报告说,大约31%的分析代码片段可能包含可能导致失败和资源泄漏的API误用

Rahman等人检测到七种安全气味,表明IAC脚本中存在安全漏洞,并识别出21201种安全气味,包括1326个硬编码密码

Zahedi等人研究了GitHub存储库中的问题主题,发现其中只有3%与安全性相关。这些安全问题大多是密码问题。

Pletea等人研究了GitHub的安全相关讨论,并报告说他们代表了GitHub所有讨论的大约10%。他们还报告说,与安全相关的讨论往往与负面情绪有关。

Acar等人对活跃的GitHub用户进行了一项实验,以测试在安全相关研究中招募方便样本的有效性。他们发现参与者的自我报告状态(即学生或专业开发人员)和参与者的安全背景与他们成功完成安全任务的能力无关。

,但目前对栈溢出的代码片段安全性的研究主要集中在Java和Python上;;第四大流行编程语言(https://www.tiobe.com/tiobe-index/)被忽略了。

是嵌入式资源受限程序的首选语言,广泛用于大型分布式系统。因此,C非常容易被误用(例如,内存损坏错误),这很容易导致易受攻击的代码和可开发的应用程序,这表明C代码段中的漏洞可能会产生更严重的影响。本文的目的是填补C语言代码共享安全性研究的空白,帮助更多的开发人员了解堆栈溢出时共享的代码样本中安全漏洞的性质和普遍性。

研究维度和问题

研究人员发现堆栈溢出问题是问答社区中最常见的问题因此,栈溢出的研究在软件领域具有重要意义。为了使研究成果更具代表性,研究者从以下两个维度对堆栈溢出共享的代码示例中的C漏洞进行了实证研究:

普适性主要是对堆栈溢出数据集中包含的一种称为StoTrOrm的C漏洞类型进行了深入研究;分析了它们随时间的演变过程,特别是向GitHub项目的迁移。

传播度关于如何重用GitHub库中易受攻击代码片段的研究

经济类型代码

了解源代码示例中C漏洞的普遍性和传播围绕源代码示例中C漏洞的普遍性和传播,研究人员讨论了以下问题:

1。堆栈溢出代码段中的C漏洞有多常见?如何在

2中重用易受攻击的堆栈溢出C共享代码。GitHub存储库?

研究流程和数据集

经济类型代码

案例研究的总体步骤

为了研究堆栈溢出帖子的演变及其与github的关系,使用了当前数据集版本2018-09-23sotorrent的

版本包括2008年至2018年的帖子有41472536个问答帖子和109385095个帖子版本,其中206560269个帖子版本包含6039434个软件项目链接共有3861573个指向公共GitHub存储库的链接

Sotorrent提供对堆栈溢出内容10年版本历史的访问如图2所示,可以独立访问整个帖子、单个文本或代码片段。

经济类型代码

由SO Torrent

研究结果提供的历史数据

最后,研究人员发现了69个漏洞,属于至少一个GitHub项目中重用的72,483个C代码片段中的29种不同类型。在这69个易受攻击的代码片段中,有2589个在Github文件中使用,从堆栈溢出传播到Github的最常见的漏洞是CWE150

这里,CWE(常见弱点列举)是由社区开发的常见软件安全漏洞列表。它可以用作软件安全工具的衡量标尺,也可以用作识别、减轻和防止漏洞的基线。CWE的目的是促进有效使用工具,在程序分发给公众之前,识别、发现和解决计算机软件中的错误和漏洞。

问题1。堆栈溢出代码段中的C漏洞有多常见?

总体而言,从2008年到2018年,所有客户满意度的分布如下图所示2013年是在GITHUB项目中回答最多的一年,也是移动最多的一年。

经济类型代码

年按年份分类的答案由

名研究人员对代码片段进行手动检查,在69个答案中发现了99个易受攻击的代码片段通过查看易受攻击的答案的分布,他们发现最易受攻击的答案是在2011年创建的,如下图所示每个答案中的

经济类型代码

CWE频率

代码片段中CWE的频率如下图所示。可以看出,CWE-1006和CWE-754是最常见的安全隐患。CWE频率在

经济类型代码

代码片段

下表描述了CWE发现的列表。有关CWE的完整描述,请参见(https://cwe.mitre.org/)

经济类型代码

不同类型的CWE C漏洞及其频率。正如我们在堆栈溢出数据集中观察到的,X轴上的每个刻度代表一年中的最后/两个字母,例如,2016对应于16,2008对应于8

。下面是一些研究人员在代码片段中发现的漏洞的例子。

漏洞示例-低于

的代码片段可能很危险

经济类型代码

显示了使用不正确使用方法的RAND函数导致的漏洞(CWE-1006、CWE-477、CWE-193、CWE-754)。带有计数参数(如“len”)

的函数应将终止的“null”作为额外字符考虑在内但是,该函数实际上正在执行s

,显示了由于使用malloc函数而导致的漏洞(CWE-1006、CWE-252、CWE-789、CWE-476)

,而没有检查返回的特殊条件。这个答案中的代码片段使用malloc来分配内存,并将其指针传递给qt库中需要有效指针的函数如果malloc失败,malloc返回指针可以设置为空因此,即使请求的内存量很小,也必须检查malloc的返回指针

是否显示操作系统命令注入漏洞(CWE-78,CWE-1019)

中显示的函数易受代码注入(操作系统命令注入)的影响,因为用户输入的命令是输入的,而不是检查的换句话说,任何具有程序特权级别的命令都可以在没有任何错误或警告的情况下执行。

漏洞示例4

经济类型代码

表明,因为此函数中的第二个参数可能包含多个由“;”定义的参数分离路径(CWE-754、CWE-252、CWE-426)

以编程方式处理系统路径或程序搜索的不同路径这个操作非常危险,应该小心处理。例如,此函数中的“路径”可以包含由“;”定义的值分开的多条路径,例如"/usr/share/Lua/foo/bar/evil/path "路径中不受信任的搜索路径将有可能使用程序权限执行任意代码,并重定向到可能触发崩溃的错误文件。此漏洞称为CWE-426:不可信的搜索路径搜索可能导致程序执行,这可能导致异常或异常情况。CWE-754:异常或异常情况的不当检查此外,代码段中函数的所有返回值都不会被检查因此,代码片段也有CWE-252:未检查的返回值

CWE-426:不可信搜索路径

https://cwe.mitre.org/data/definitions/426.html

漏洞示例5

经济类型代码

显示了由越界读取和缺失检查变量大小

导致的漏洞(CWE-20、CWE-125、CWE-1019)。在漏洞示例5中显示的代码中,存在一个CWE1019:验证输入漏洞此外,当指数超过极限时,信息泄漏或CWE125可能发生;存在“跨境阅读”漏洞

漏洞示例6

经济类型代码

如果包含空值的输入字符串(CWE-158,CWE-1019)失败,所有定义的函数都有漏洞

。显示了如何验证文件名是否以“”结尾的代码。txt”包含了答案帖子原始代码片段中六种方法的功能代码及其基准。此代码段中定义的其他函数的漏洞与两个易受攻击的函数的漏洞完全相同。但是,如果函数中的文件名包含空字符,上述所有方法都将失败这是绕过网络应用防火墙和文件上传程序的常见技巧示例:对于以上所有函数,验证“外壳

问题2,复制到GitHub的易受攻击代码的采样频率

我们发现的最易受攻击的代码段是函数或函数的一部分因此,研究人员使用一些基于克隆检测工具的启发式方法,如sourcerercc,在链接的GitHub项目中搜索并找到10个相似的代码。

给出了两种方法(选择关键字和随机关键字)的结果,并将它们与基线方法进行了比较。

结果

69带有易受攻击答案的GitHub文件共有2859个GitHub链接,如下表所示,并由CWE定义分隔研究人员通过相关算法发现287个GitHub易受攻击文件可能存在安全漏洞。CWES在

经济类型代码

GitHub知识库中使用选定的关键字算法检测到

问题3,修复复制的易受攻击代码样本的概率

研究人员已经创建了一个新的网络应用程序,使审查过程更加高效和系统化通过检查系统,他们评估了迁移到GitHub的易受攻击的堆栈溢出代码段是否已经修复或者仍然包含该漏洞

结果

在检查的287个GitHub文件中,有34个文件的漏洞得到了纠正,而其他253个GitHub文件仍然存在漏洞如下面的代码所示,两个漏洞CWE-789和CWE-252已被纠正

经济类型代码

在GitHub文件中。修复堆栈溢出中的答案和一些代码改进

< p > cwe-252

https://cwe . mitre . org/data/Definitions/252 . html

cwe-789

https://cwe . mitre . org/data/Definitions/789。html

修正了cwe-125、cwe-category-1019和cwe-20,如下图代码所示

经济类型代码

固定代码

< p > cwe-125

https://cwe . mitre . org/data/definitions/125 . html

cwe-category-1019

https://cwe . mitre . org/data/definitions/1019 . html

cwe可以看出,许多开发人员在重用这些代码片段时没有注意到其中包含的潜在威胁。

经济类型代码

用户对其代码中的安全漏洞的响应

用户还讨论了他们对自动漏洞检测的有用性的个人观点。大多数人认为检测漏洞是一件非常有用和可重用的事情。

经济类型代码

用户对自动漏洞分析的评论有助于未来的发展

用户也发表了处理漏洞的最佳方法,大多数从业者同意使用自动安全机制来检测代码中的漏洞他们说,使用浏览器扩展和离线工具来运行临时堆栈溢出方法比其他方法更有效,并且可以告知用户代码示例中的漏洞

< br>

经济类型代码

如何告知开发人员代码示例中的潜在漏洞

解决方案

在我们收到的对GitHub所有者提出的117个问题的15个答复中,40%指出了代码中存在漏洞的可能性,前提是他们的输入数据不是动态的,13.3%承认代码中存在漏洞,但不愿意修复它们

经济类型代码

GitHub所有者选择评论他们代码中的漏洞

为了通知用户他们代码中的漏洞,研究人员还开发了浏览器扩展。浏览器扩展旨在防止开发人员重用这种易受攻击的代码段,并向他们推荐更好的替代方法,即在其他堆栈溢出帖子中使用易受攻击的代码段

当开发人员访问堆栈溢出帖子时,扩展将被激活该扩展引用堆栈溢出中易受攻击的C代码片段的数据库,以确定POST中提供的解决方案是否不安全。如果发现提供的解决方案存在漏洞,扩展将向开发人员显示一条警告消息,并解释代码片段存在漏洞的原因。

经济类型代码

警告消息屏幕截图

然后,扩展将从其他堆栈溢出帖子中推荐易受攻击的类似代码段,以便开发人员可以重用这些安全代码段,而不是易受攻击的代码段然而,这种扩展的有效性也受到一定的威胁,这也与以前的检测方法有关。使用这种启发式方法来检测从堆栈溢出到GitHub的易受攻击的C代码片段可能会导致部分代码丢失。

因此,面对抄袭的代码,只有细心和严格才是王道!!!

经济类型代码

纸张地址:

https://arxiv . org/pdf/1910.01321 . pdf

浏览器扩展:

https://github.com/纸张材料-人群-来源/材料

相关信息:

https://FOSS bytes . com/copy-codes-from-from

大家都在看

相关专题