JAVA语言安全漏洞测试实践与分析
2018-02-13何春江
■ 何春江
珠海大横琴科技发展有限公司 广东珠海 519000
1 引言
JAVA语言作为一种可以撰写跨平台应用软件的面向对象的程序设计语言,以其卓越的通用性、高效性和平台移植性,深受全球众多企业的青睐,JAVA源代码应用软件的产品更是数不胜数。
目前黑客的攻击趋势从以往的操作系统转向了一般的应用软件,JAVA源代码应用软件也深受其害。我们的目的就是结合工具的理论漏洞指标和用户对指标的认可需求,给用户提供源代码安全漏洞扫描,快速锁定易被利用的安全漏洞,实现软件安全性的全面提升。
2 测试内容、方法及结果
2.1 测试内容
对应用程序进行安全漏洞测试伴随着软件的整个开发周期,目的是提高开发者的安全意识,使开发者在编写代码时就注意一些比较容易出现却又较易修改的错误,解决一些在代码中的安全隐患,杜绝为黑客留下可乘之机。
本文借助某源代码安全漏洞静态检测工具,对一个JAVA语言应用程序源代码的案例采用自动化测试手段与人工分析相结合的方法进行了源代码安全漏洞扫描静态测试。该案例共有JAVA语言源代码44791行,根据应用程序的特点,同时结合对用户需求的调研分析,针对JAVA语言源代码的218种安全漏洞进行了测试。
2.2 测试方法
明确了需要测试的内容后,即可在源代码安全漏洞静态检测工具中选择需要测试的JAVA语言代码安全漏洞指标,对被测的JAVA语言应用软件源代码执行安全漏洞扫描。扫描完成后需要根据安全漏洞指标的相关描述对扫描结果进行人工分析,排除扫描结果中的误报。
源代码安全漏洞测试的过程主要分为两个阶段,包括测试阶段和分析阶段。
(1)测试阶段。
在测试阶段中,针对用户关注和问题严重级别高的安全漏洞进行源代码的安全漏洞测试,目的是发现问题后,锁定问题代码。
(2)分析阶段。
在分析阶段中,针对测试阶段所发现的问题代码进行分析和比较,排除误报问题后分析漏洞代码产生的原因,比较并对问题代码进行模拟黑客攻击的假设,通过对黑客攻击的分析挖掘解决问题的方法。
2.3 测试结果分析
本次源代码安全漏洞测试涵盖了不检查循环条件中的输入值、跨站脚本、SQL注入、绝对路径遍历等218种JAVA安全漏洞类别的内容,未发现代码注入、命令注入、连接字符串注入等共186种JAVA语言代码安全漏洞,定位了跨站脚本、SQL注入、不检查循环条件中的输入值等共32种JAVA语言代码安全漏洞481个。其中:3级高风险代码安全漏洞8个,2级中风险代码安全漏洞31个,1级低风险代码安全漏洞442个。
为了使测试结果更加具有说服力,体现源代码安全漏洞测试的作用,本次JAVA语言源代码安全漏洞测试针对用户关注和问题严重级别高的安全漏洞,详细分析了问题代码的数据流和控制流,深入理解了黑客攻击应用软件的方式,突出了被测应用软件在安全方面的脆弱性,使用户承认了安全风险的存在,并加强了对源代码安全漏洞测试的认可。
3 测试结果的严重程度和用户的认可度研究
经过扫描和分析后的测试结果,从技术层面讲,都属于测试角度的分析,因为在整个测试中涵盖的安全漏洞的风险等级都是根据理论上的严重程度来分类的。基于测试服务的对象是企业用户,所以征求用户对风险级别的意见是源代码安全漏洞测试一个必不可少的环节。
安全漏洞问题严重程度理论分级包括:1级高风险(High)、2级中风险(Medium)、3级低风险(Low)和4级信息风险(Information)。用户的风险级别的用户反馈问题级别和认可度分类包括:①类问题反馈级别。风险较高,容易被利用且一旦被利用会立即对公司业务造成影响的安全漏洞。②类问题反馈级别。风险中等,不容易被利用,但一旦被利用会立即对公司业务造成影响的安全漏洞。③类问题反馈级别。风险较低,不会立即对公司业务造成影响的安全漏洞。④类问题反馈级别。无风险。
安全漏洞问题严重程度理论分级是业界专家的一般经验总结,企业开发人员和测试人员参与的测试结果的严重程度和用户认可度的反馈评估则更加符合该企业的实际。经过比较,业界专家和企业用户对JAVA源代码安全漏洞指标的认识总体上是一致的,但一些指标的关注程度依然是有所不同的。
(1)缓冲区溢出漏洞在严重程度的理论分级里属于高等级漏洞。用户认为源程序写入缓冲区的数据基本上都属于内部数据类型的转换,又或者环境变量和配置文件都是项目内部使用,不易被黑客利用。
(2)未捕捉的异常处理在问题严重程度理论分级里属于低风险,而在用户认可度里属于B类问题反馈级别,风险中等,不容易被利用,但一旦被利用会立即对公司业务造成影响的安全漏洞。用户认为,系统异常报错信息不明确、没有捕获系统异常或没有处理已捕获到的异常在实际产品开发中都是不允许的,因为会降低系统的可维护性,影响产品的服务质量。
(3)弱加密问题在严重程度理论分级里属于低风险的隐私受侵犯,在用户认可度里属于D类问题反馈级别,无风险,用户方需根据他们的业务来确认在实际产品开发中是否需构件或随机数生成器来加密。
针对自动化测试工具扫描出来的安全漏洞,通过分析和比较测试角度上漏洞的理论风险级别与用户实际的反馈意见,最终进一步完善测试解决方案和漏洞指标,以便提供给用户更加切合实际需求的源代码安全漏洞测试服务。
4 结束语
本次技术研究详细分析了问题代码的数据流和控制流,深入理解了黑客攻击应用软件的方式,突出了被测应用软件在安全方面的脆弱性,得到了用户的高度认可。通过本次技术研究,进一步提升了JAVA语言源代码安全漏洞测试的能力,能够制定出更加符合用户需求的源代码安全漏洞测试方案,给企业用户提供更加高效实用的软件安全漏洞测试服务。