GB/T34944-2017 《Java语言源代码漏洞测试规范》标准是软件测评机构开展代码测试活动的重要依据,也是软件测评机构申请代码测试CNAS/CMA资质认证时依据的重要标准方法。本系列文章将带大家解读GB/T34944-2017 《Java语言源代码漏洞测试规范》,前面的文章中我们为大家做了整体解读。从代码测试的类型、工具、过程以及测试内容方面做了解读。
本文开始,我们将重点针对代码测试的测试内容进行解读,本文解读的是行为问题、路径错误和处理程序错误这三类。
6.2.1 行为问题
6.2.1.1 不可控的内存分配
漏洞描述:内存分配的大小受外部控制的输入数据影响,且程序没有指定内存分配大小的上限。
漏洞风险:攻击者可以使程序分配大量的内存,程序可能会因为内存资源不足而崩溃。
修复或规避建议:在程序中指定内存分配大小的上限,在分配内存前对要分配的内存大小进行验证,确保要分配的内存大小不超过上限。
内存的输入数据超过规定的内存上限之后,攻击者就可以达到他想返回的一个内存地址。在新的操作系统中,这类问题已经大大降低了,但是作为代码安全规范的层面还是要提出来,要控制在程序中指定内存分配大小的上限在分配内存前对要分配的内存大小进行验证,确保要分配的内存大小不超过上限。标准中给出的规范用法是给最长的区域指定一个规定的内存大小。并且在分配的时候要进行验证。
6.2.2 路径错误
6.2.2.1 不可信的搜索路径
漏洞描述:程序使用关键资源时没有指定资源的路径,而是依赖操作系统去搜索资源。
漏洞风险:攻击者可以在搜索优先级更高的文件夹中放入相同名称的资源,程序会使用攻击者控制的资源。
修复或规避建议:使用关键资源时指定资源所在的路径。
不可信的搜索路径这个问题主要是程序当中会有一些搜索的优先级顺序,一旦搜索可以从不同目录中去找要执行的程序的时候,攻击者可以去它的上一层放一个恶意的exe。当在当前目录中找不到的时候,可能会去上一级去找,但是上一级已经被攻击者埋好了一个恶意程序,那就会去执行。这就是不可信的路径搜索的原理。
规范用法中举的例子是去判断PATH这个变量是一个常量,直接定义出来,让程序直接去这个路径下面找,不要自己去其他目录下面找,这就是该条的原理。
6.2.3 处理程序错误
处理程序错误,也只有一类,主要是未限制危险类型文件的上传。
6.2.3.1 未限制危险类型文件的上传
漏洞描述:软件没有限制允许用户上传的文件的类型。漏洞风险:攻击者可上传具有危险类型的文件,这些文件可能在产品的环境中自动被处理修复或规避建议:限制允许用户上传的文件的类型。
未限制危险类型文件的上传这个现在问题也很大。我们总结下来,在实战攻防过程中,出现问题比较多的是身份鉴别类的,口令没有保护好,弱口令之类的,或者是鉴别机制没有做好,包括有些可以重置用户口令的接口是可以任意访问的,攻击者可以直接把管理员的口令重置掉,这些都是身份鉴别方面的常见问题。
以上就是GB/T34944-2017 《Java语言源代码漏洞测试规范》中行为问题、路径错误、处理程序错误这三个方面测试内容的解读,后续会继续介绍其他方面,敬请关注。
(谢绝转载,更多内容可查看我的专栏)