APP下载

常见源代码安全漏洞分析与研究

2017-03-10黎新

网络空间安全 2017年1期
关键词:源代码安全漏洞

【 摘 要 】 随着计算机在各行各业的大量普及,满足各种应用需求的应用程序越来越多,在程序实际开发过程中,由于软件规模及复杂程度的提高,不可避免地会出现安全漏洞,造成安全漏洞因素有很多。论文将主要针对源代码方面的安全漏洞进行分析和研究。

【 关键词 】 源代码;安全漏洞;漏洞检查;静态分析

【 中图分类号 】 TP309.2

【 文献标识码 】 A

Analysis and Research on Common Source Code Security Vulnerabilities

Li Xin

(Institute of Electric Power Research, Guangxi Power Grid Company Limited GuangxiNanning 530023)

【 Abstract 】 With the popularization of computers in all walks of life, to meet various application needs more and more applications in the program, the actual development process, the software scale and complexity, inevitably there will be security vulnerabilities caused by security vulnerabilities, there are many factors, in this article, we will focus on the source of security vulnerabilities the code for the analysis and research.

【 Keywords 】 source code; security vulnerability; vulnerability checking; static analysis

1 引言

隨着软件工程及网络技术的不断发展,目前在计算机领域,应用软件的规模、数量都非常大,在软件开发过程中,漏洞的产生是不可避免的,漏洞的存在会严重威胁系统的安全稳定运行,使病毒、恶意代码轻易的入侵系统,导致用户的损失。尤其是在军事、经济等领域,对于软件安全有着更高的要求,会因为软件漏洞而造成灾难性的后果及巨大的经济损失。为了避免安全漏洞的产生,在软件开发过程中,要对漏洞的类型、特点及如何防范有一个全面的了解,进而避免漏洞的产生。论文将简单介绍源代码安全漏洞的基本概念及危害性,并重点对典型的几个漏洞进行分析。

2 漏洞的类型

源代码漏洞根据不同的分类方法,有不同的类型和数量,对程序可能造成的影响也不同。通过对漏洞进行分类,能够使我们很容易地对漏洞进行全面描述,如成因、作用等。理论上我们可以用一个分类属性来表达漏洞的一个本质特征,而为漏洞的每个属性赋值的过程,就是给漏洞在该维属性上分类的过程。源代码的漏洞主要有XSS漏洞、CSRF漏洞、Info漏洞、Json-Hijacking漏洞、注入缺陷漏洞、并非漏洞、高危端口漏洞等,下面我们以注入缺陷及XSS漏洞为例,对其进行简单分析。

2.1 注入缺陷

源代码中存在的注入缺陷能够使攻击者通过操纵输入来实现改变应用程序的行为,这种行为上的改变可以使攻击者避开程序的访问控制,使其能够创建、修改、删除或阅读应用程序可以访问的任何信息。注入缺陷是一般都是由于开发者在源代码中的假设(被一个应用程序处理的输入字符串不包含语法)而造成的,这个假设会导致有效输入确认的缺失。注入缺陷主要包括系统调用、Shell命令和SQL注入。在这里我们主要对SQL注入攻击进行分析。

SQL注入是目前黑客对数据库进行攻击的常用手段之一,一般可分为SQL操纵、代码注入、函数调用注入和缓冲区溢出四种攻击方法。在程序的使用过程中为了方便快捷的管理相关数据,就需要应用到数据库,数据库可以便于程序快速的对相关数据信息进行存储、分类及查询。当用户使用程序时,程序可以自动通过对数据库的查询,将所获取的信息按照一定格式反馈给用户,同时用户也是通过交互式的对话框提交给程序数据,从而使程序按照用户想要的信息进行查询,反馈给用户想要的信息。通过控制传递给程序数据库操作语句的关键变量来获得恶意控制程序数据库,从而获取有用信息或者制造恶意破坏的,甚至是控制用户计算机系统的漏洞,就称之为“SQL注入漏洞”。

SQL注入漏洞完全是利用了将包含了某种目的的SQL语句,通过关键变量插入到程序中正常的数据库操作语句里。程序一旦发生注入漏洞,就会引发一系列安全隐患。SQL注入漏洞是不分语言的,用任何语言开发的程序,只要是会涉及到对数据库的操作,就可能会存在SQL注入漏洞。虽然有时会因为编写语言的要求或者程序设置环境的不同,导致SQL注入漏洞难以被常用方法所利用,但是总会找到方法进行突破。

通过对造成SQL注入漏洞原因的总结分析,具体包括六个原因:1)类型处理不当;2)数据库配置不安全;3)查询集处理不合理;4)错误处理不恰当;5)转义字符处理不当;6)多个提交处理不当。[2]

源代码中存在SQL注入漏洞,在软件、系统应用过程中会造成几个方面的危害:1)敏感数据被恶意获取;2)网络钓鱼;3)被获取WEB用户的网页内容;4)受到CSRF攻击;5)用户的键盘击键数据被盗;6)成为WEB僵尸。下面我们举一个最简单的例子,对漏洞的利用方式进行了解:

假设在一个登录界面,要求用户输入用户名及密码,但是由于开发人员失误将用户名及密码直接拼接在了SQL查询语句中:

Mysql_query(“select * from user where

(email=$emailand

Password=$password)”)

在存在这一漏洞的情况下,攻击者只需要构造Password为‘空or‘1=‘1的非法输入,就可将实际执行的SQL语句变为:

Mysql_query(“select * from user where

(email=attack@abc.comand

Password=‘‘or‘1=‘1)”)

在这个例子中,SQL漏洞是由于开发人员直接将用户输入当做可信部分直接和SQL语句拼接而造成的。

在实际应用过程中对于SQL漏洞的防御手段主要包括:1)使用参数化的过滤性语句;2)避免使用解释程序,因为这是黑客借以执行非法命令的手段;3)避免出现一些详细的错误消息,要使用一种标准的输入确认机制来验证所有输入数据的长度、类型、语句、企业规则等;4)使用专业的漏洞扫描工具;5)在程序开发的所有阶段都对代码进行安全检查。[3]

2.2 跨站脚本漏洞

跨站脚本攻击(XSS)是一种被动的安全攻击方式。攻击者通过在看上去安全可靠的链接中嵌入恶意代码,当用户点击这一链接时,嵌入的恶意代码作为用户请求进行提交,并在用户电脑上运行,这一漏洞常常被用来窃取用户信息。由于网络环境的复杂程度及跨站脚本攻击方式的多样性,导致这类攻击很难得到彻底防御。

攻击者通过跨站脚本漏洞可实现几种目的:1)盗取用户账号、密碼;2)控制企业数据,读取、篡改、添加、删除企业敏感数据;3)盗窃企业重要的资料;4)进行非法转账;5)强制发送电子邮件;6)安装木马、后门程序;7)控制受害者机器向其它网站发起攻击。下面我们以实例来分析如何利用跨站脚本漏洞:

在正常情况下,WEB应用与数据库之间的正常调用链接方式为:

$comments=db.get_comments(news-id):

“;

Foreach($comments as $c){

Echo“

1.”.$c.”

”;

}

echo”echo””;

如果在这段源代码中插入一条恶意JS脚本,如:

  • 公司地址: 北京市西城区德外大街83号德胜国际中心B-11

    客服热线:400-656-5456  客服专线:010-56265043  电子邮箱:longyuankf@126.com

    电信与信息服务业务经营许可证:京icp证060024号

    Dragonsource.com Inc. All Rights Reserved

    icp

  • 猜你喜欢

    源代码安全漏洞
    刍议计算机软件中的安全漏洞检测技术
    基于TXL的源代码插桩技术研究
    智能设备安全漏洞知多少
    浅析计算机网络安全漏洞及防范措施
    保护好自己的“源代码”
    计算机软件安全漏洞检测技术
    解密别克安全“源代码”
    民用飞机A级别机载软件项目源代码到目标代码追溯性分析研究
    基于Android平台的飞行射击游戏设计