公务员期刊网 论文中心 正文

开源代码组件安全审计探究

开源代码组件安全审计探究

摘要:随着计算机信息技术的发展,开源代码安全审计已经是网络安全建设的重要组成部分。本文首先介绍了开源代码常见漏洞的类型及产生原因,其次介绍了开源代码审计通常遵守的一般原则,最后重点介绍了开源代码审计的主要技术方法。通过本文的研究,探讨了开源代码组件网络安全审计的重要思想,普及了网络安全意识,对促进网络安全意识与软件开发能力齐头并进有参考价值。

关键词:开源代码;安全漏洞;代码审计;信息安全

1引言

近些年随着计算机科学技术的发展,应用软件的功能也随着增大,与之对应的就会使得源代码的规模也大大增加,同时由于开源代码本身的特点,这使得利用传统的方法检测代码的安全漏洞工作难上加难。因此从源代码的最原始位置出发,对其进行检测和分析,从而从根本上保护软件和信息系统的安全,杜绝了代码后门又能够避免潜在的漏洞安全威胁,进一步保障了信息安全。对于计算机应用软件源代码的审核工作,最常出现问题的是编码阶段,例如在SQL注入的阶段、XSS跨站脚本攻击等环节。解决这些最常见的问题的最优方式是在软件的源代码中进行修改,由此可见,在进行应用软件信息保护的过程中,从最底层的源代码着手,是解决该类问题的最有效手段。

2开源代码漏洞的类型

随着开源代码的发展,对于开源代码漏洞的研究逐渐深入,分类也不尽相同,主要原因是研究者从不同的角度对其进行划分,因此对程序运行的影响也不同。通过对漏洞的分析,可以使得程序员对漏洞进行全面的描述和把握。通常而言,按照不同的分列依据,潜在的分类属性是其最根本的特征之一,因此这也是为漏洞赋予各种不同属性的方式之一,通过这种方式可使得不同的漏洞类型具有各自的特征。常见漏洞如XSS漏洞、CSRF漏洞、Json-Hijacking漏洞、注入缺陷漏洞都是具有上述特征的典型代表。XSS漏洞全称是CrossSiteScript,是Web安全中最为常见的漏洞,其攻击原理是黑客通过给网页“HTML注入”,在网页中加入了恶意脚本内容,使得网页的内容发生了改变,从而达到了控制控制用户浏览器的一种攻击方式。同时,这种网站访问,可以是从正常的网站跨到黑客的服务器,也可以是黑客的服务器跨到正常的网站。这种漏洞最常出现在用户需要输入内容的地方,这些地方一旦对输入不进行处理,黑客就可以进行HTML注入,进而篡改网页。CSRF漏洞全称是CSRF(Cross-siterequestforgery),是一种常见的跨站伪造请求,这种方式与XSS漏洞最大的区别是CSRF通过伪装成受信任用户的请求来利用受信任的网站,相比于XSS攻击,CSRF攻击往往给用户带来更大的风险,具有更高的危险性。其原理是攻击者通过伪造一个链接,将链接发送给目标用户,该链接实际上是获取某网站信任用户信息的链接,目的是在用户电脑上登录该网站,一旦用户点击了该链接,实际上攻击就完成了。Json-Hijacking漏洞其实是一个跨域数据窃取漏洞,它通过诱导用户点击恶意文件,重写Array()的构造函数的方法,将敏感的Json数据发送攻击者,从而造成敏感信息泄露,所以可以理解为“通过CSRF方式导致的敏感信息泄露”。注入缺陷漏洞通常是由于程序开发人员在源代码中假设条件造成的,这些假设条件会导致有效输入的缺失。这种攻击方式可以使攻击者避开程序的访问控制,从而对其内容进行重新创建、修改或综合删除用户的信息。通常有系统调用、Shell命令及SQL注入。SQL注入是目前黑客对数据库进行攻击最常使用的手段之一,一般可通过函数调用、缓冲区溢出、SQL操纵及代码注入等方式操作。

3开源代码审计的原则

通常代码审计的第一步是阅读系统开源代码,然后检查保证代码正确安全的控制是否设置在了关键的逻辑流位置上。经过审计的代码能够规避大部分应用程序中的代码漏洞,提高软件的运行效率。

3.1确保输入信息均不可信原则

在开源代码程序中有很多输入情况,主要包括系统内部和外部输入,这些用户输入的信息经过软件程序处理之后将进行展示。因此每一个输入都有可能被恶意利用或者伪造成代码纰漏。因此在输入信息的过程中,对内容进行严格的限定。据相关统计显示,在漏洞里面由于输入数据引起的安全问题占90%以上。

3.2遵循安全编码基本规范原则

在计算机程序开发过程中有很多编程规范和标准,因此程序员在进行程序开发的过程中要严格遵守规范和标准,降低漏洞出现的可能性。此外不同的程序设计语言又推出了不同的标准,要求使用本程序开发语言设计的程序员严格按照标准进行程序开发,不得随意或破坏编码规范。如美国软件工程研究所编制的Java安全编码标准已经于2011年9月14日出版发行,该安全编码标准着重于Java程序中最容易出错、产生代码安全问题的环节,详细制定了编码层保障安全的规则,同时也提供了规避产生类似错误的最佳操作指南。遵循安全的编码规范在代码开发的阶段很有必要,同时也是降低程序源代码出现漏洞的最有效方式之一。使用规范的编码方式才能够确保程序安全、稳定的运行。此外源代码审计制度制定的不同程序设计语言中的代码安全规范,并在审查的过程中应该检查程序员是否遵照了本规范,若没有遵照所制定的规范,但并没有造成安全风险的,这种代码仍属于存在安全风险的代码,需要在审计报告中明确指出。同时应该给出合理的修改意见,限期在规定的时间内进行修改完善,确保降低源代码运行的安全风险。

3.3漏洞与安全编码内在一致原则

就目前而言代码审计主要是查找已知的安全漏洞,这些安全漏洞的通常依赖于一些有权威的国际组织,这些漏洞都是根据不同的安全漏洞模型反复查找得出的。通过使用数据流、控制流等技术查找出恶意数据的入口和恶意数据可能被利用的出口点,同时进行人工分析从入口到出口全过程的风险等级,以此来判断问题存在的真实性,同时所有的出入口都是基于开发源代码语言API来测试的,因此这种测试与本身代码的逻辑没有任何关系,进一步确保了查找的准确性。

3.4反向思考原则

在进行源代码审计的过程中,审计人员应该站在恶意用户或者攻击者的角度,多方位的考虑有可能攻击的目标,保持灵活的思维,从各个方面对有可能进行攻击的代码进行全方位的排查和分析,对于有可能存在攻击风险的代码进行更换。因此审计人员须转变思维和角色身份,从攻击者的角度检查可能存在漏洞的地方,同时对有可能攻击的地方进行更详细的设计。

4开源代码审计的主要技术方法

4.1漏洞产生的必要条件

漏洞产生的必要条件主要有三个,分别为第一,用户可以控制的输入,第二用户可以获得对应的输出,第三用户可以利用输入在服务器或者客户端执行权限的各项操作。第二个条件是直接通过访问可以获得对应的结果,同时也包含了延迟判断、非正常返回等各种结果获取的方式,因此对不同方式返回的结果进行分类统计。第三个条件为主观条件,是指在某一个权限范围之内出现的各种BUG,即使有设计者考虑不周全引起的,但这种操作的权限在管理者允许范围之内,这种漏洞的判定弹性条件相对较大,也是能把握的一点。

4.2危险函数追踪法

审计原理:由于开源代码的特殊性,任何人可对其进行读取、修改和删除等操作,这些结果的实现都是通过程序设计的函数(方法)实现的,因此在对不同的函数进行审计时,采取针对性的方式获得关键词和函数等,这种方式达到了从关键程序(函数或方法)出发,获取危险源的目的。审计方法:在程序设计的编辑器中使用函数追踪方法,如检索、源码审计等。主要优势:这种方法的优点主要表现在两个方面,其一为获取速度快,二为能够获得源代码,查询源代码中可能存在的漏洞代码。不足:这种方法的缺点主要表现在两个方面,其一为很难做到对整体文件进行检查,特别是对于内容较多的文件,其二是不能检查文件内容中存在的逻辑错误和逻辑对应关系。

4.3逻辑分析法

审计原理:这是一种采取对所有可能出现概率都可以测试的方法,又称为黑盒测试,在众多程序设计语言中都可实现这种测试。通过对页面内容、页面反应、数据反应及后台反应等中的数据监测,获得对应的不同输出,这种审计过程体现了权限关系、功能关系、角色关系等的思维导图,能够醒目清晰的展示各种关系。主要优势:这种方法的主要优势表现在两个方面,其一为可以寻找相对危险的函数产生的各种漏洞,且发现的准确率会很高,具有很强的针对性,其二为通过目前主要的黑盒测试、白盒测试及灰盒测试可以几乎对所有的漏洞类型进行检查,能够满足绝大多数的测试需求。不足:主要表现在两个方面,其一为在审计之前需要完全了解并熟知代码的内容,因此在审计之前的准备时间较长,其次为由于测试内容较多,容易造成测试不完善,有可能漏掉部分本身存在的漏洞。

4.4抽象解释

审计原理:抽象解释法是将程序代码执行的全部过程看做多个不同抽象状态的迁移过程,并通过对多个抽象状态进行分析判断,获得最终的结果。初始抽象状态必须是初始实际状态或者最接近初始状态的特殊状态,并且要求每次状态迁移过程中要保持与原有状态不变的关系,这样做主要是保证分析过程的一致性。在理论上正确的抽象能够找出程序在执行过程中可能产生的在缓冲区溢出的各种漏洞和其他情况,但是相应的也会有不同程度的误报,在实际的应用过程中为了降低误报率,用户可以根据被检测程序的特性选择合适的抽象函数。主要优势:可将一个对象域的计算引申到另外一个对象域中,因此可使计算更加简单容易,同时也是其他众多检测分析法的理论基础。

5结语

本文对开源代码组件安全审计进行了综合性系统介绍。通过对系统开展代码安全审计,有利于实现对系统全面深入的安全问题分析,及时发现漏洞,提前预防,提高软件运行的稳定性。

作者:尹君 易荣 唐旭玥 王海林 单位:云南电网有限责任公司信息中心 云南云电同方科技有限公司

精选范文推荐