将静态分析集成到开发周期中能够防止编码错误并更快地交付安全软件。程序员
安全从业人员习惯于在软件开发过程结束时进行干预,以识别安全漏洞,而其中的许多漏洞能够经过早期干预来避免。为了解决这个问题,已经在压力之下以更快速度和更低成本交付复杂软件的开发人员,在开发周期的早期被招募到“左移”运动下以实现安全性。算法
想要了解开发人员在知足新的安全需求方面所面临的障碍,请考虑如下五种最多见的编码缺陷以及如何解决它们:编程
读取内存的错误可能会致使泄露敏感信息从而影响机密性和完整性,而内存写入错误则有可能破坏执行流程,这可能会影响安全三元组的全部三个组成部分:机密性、完整性和可用性。常见的错误示例包括缓冲区溢出/欠载和释放后使用(UAF)。即便是最熟练的程序员也会在不经意间产生这些难以检测的潜在缺陷,甚至在通过良好测试、安全认证的代码中也可以发现这样的缺陷。尽管编码标准常常被用来减小内存错误,但它们是不够的。深刻的静态分析、数据流分析和符号执行对于在开发周期的早期检测内存错误是绝对必需的。api
此类错误主要是因为对C / C ++的错误使用而引发的,例如未初始化的变量,指针的双重释放以及有符号和无符号变量之间的隐式转换。一些编码错误在功能测试和回归测试期间可能不会表现出来,即便它们会致使程序状态的损坏。然而,它们可能会致使已部署的系统出现严重问题。静态分析能够识别编程语言语义中的编码错误和误区。安全
某些API函数被认为是潜在有害和不安全的。C / C ++中的gets()函数就是一个很好的例子,由于它很容易产生目标缓冲区溢出的状况,从而影响完整性。其余函数调用可能有特定于实现的行为,从而使其变得很危险。使用能够搜索危险函数列表的静态分析能够轻松识别危险的函数调用。数据结构
密码函数是使数据处于移动或静止状态时保持数据机密性的重要部分。可是,不多有开发人员是密码学的专家,滥用C库中的加密函数会致使安全问题,尤为是使用数据加密标准(DES)和MD5等弱算法或者滥用密码。其余例子包括使用硬编码密钥或散列的salt数据。密码术的滥用会影响机密性和完整性。幸运的是,使用静态分析很容易识别这些问题。编程语言
数据污染是开发人员面临的最具挑战性的问题之一,它也可能影响完整性和机密性。从本质上讲,受污染的数据是指流入系统的数据未通过验证以消除恶意元素并确保其在预期值范围内的状况。经过过后的人工检查来检测数据注入的漏洞是很是困难的。函数
为了检测数据污染的问题,经过任何形式的输入(例如用户,设备或套接字)流入到系统的数据须要从其来源(进入软件的位置)追踪到接收器(使用的位置)。在将这些数据用于API调用,访问数据结构或编程逻辑的任何部分以前,都须要对其进行验证。不然,它可能致使数据注入漏洞,如格式字符串注入,LDAP注入或SQL注入。静态分析能够经过这些流进行计算,并提供易于理解的警告,以帮助程序员预防危险状况。要作到这一点,静态分析必须执行数据流分析和抽象的执行以评估可能的执行流。性能
做者 - Walter Capitani测试
GrammaTech技术总监Walter Capitani是嵌入式和企业软件安全领域的权威专家。他领导了全球产品开发团队,致力于安全关键和安全软件、SaaS应用性能、广播电视和电影院的文件分发应用,以及3D视频压缩和传输技术等相关领域的技术研发。
更多信息请访问:http://www.softtest.cn/