悟空云课堂|第五十期:可达的assertion
该栏目为中科天齐软件安全中心全新规划的悟空云课堂,每周五准时上线,旨在科普软件安全相关知识,助力企业有效防范软件安全漏洞,提升 络安全防护能力。本期主题为第五十期:可达的assertion的相关介绍。
01 什么是可达的assertion/strong>
程序包含一个可以被攻击者触发的assert()或类似语句,这将导致应用程序退出或其他不必要的严重行为。
assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion可作为程序中的一条语句,对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。
一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启,为了提高性能,在软件发布后,assertion检查通常是关闭的。在语法上,为了支持assertion,Java增加了一个关键字assert。
02 可达的assertion漏洞的构成条件有哪些/strong>
当断言用于公共方法中的参数检查时,就可能会出现“可达的assertion”安全漏洞。
03 可达的assertion漏洞会造成哪些后果/strong>
当断言禁用时,参数的验证将失效,可能导致非预期的结果。
虽然断言有助于捕获逻辑错误并减少出现更严重的漏洞的机会,但它仍然可能导致拒绝服务。例如,如果一个服务器处理多个并发连接,并且在一个连接中出现assert(),导致所有其他连接被丢弃,这是一个可到达的断言,将导致拒绝服务。
04 可达的assertion漏洞的防范和修补方法有哪些/strong>
断言不应该用于公共方法中的参数检查。参数检查通常是方法的一部分,无论断言是启用还是禁用,都必须遵守此规则。
05 可达的assertion漏洞样例
在(case1_bad.java)文件第(12、13、16)行使用断言验证方法参数,当断言被禁用时,验证代码不会执行,参数检查通常是方法的一部分,无论断言是启用还是禁用,都必须维护此合约。
可达的assertion在CWE中被编 为CWE-617: Reachable Assertion
更多的信息请参考CWE官 :
http://cwe.mitre.org/data/definitions/617.html
了解更多安全资讯,请关注 中科天齐软件安全中心
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!