APP下载

电力信息系统结构化查询语言注入攻击原理及安全防护

2014-07-02牛方华杨大哲刘瑞芳

山西电力 2014年4期
关键词:电力公司攻击者漏洞

牛方华,杨大哲,刘瑞芳

(1.国网山西省电力公司检修公司,山西太原030032;2.国网山西省电力公司电力科学研究院,山西太原030001)

电力信息系统结构化查询语言注入攻击原理及安全防护

牛方华1,杨大哲2,刘瑞芳2

(1.国网山西省电力公司检修公司,山西太原030032;2.国网山西省电力公司电力科学研究院,山西太原030001)

指出随着电力信息化的快速发展,信息系统已成为日常工作的重要组成部分。信息化在给工作带来便利的同时,各种应用攻击层出不穷。结构化查询语言注入是现今存在最广泛的W eb漏洞之一,存在于W eb应用程序开发中。重点阐述了其注入漏洞产生的原因、利用漏洞攻击的方法和防范该注入攻击的有效措施,以保障电力信息系统W eb应用的安全稳定运行。

电力信息系统;结构化查询语言注入;安全防护

0 引言

作为国家基础行业的电力公司,随着信息化的快速发展,特别是SG-ERP的实施,电力公司的很多应用都是通过信息系统完成的。特别是电力交易、95598交流互动平台、门户网站等,由于含有涉及个人、企业甚至国家的政治秘密。在政治利益、经济利益或其他动机的驱动下,黑客利用大众化、工具化技术对电力公司门户网站、应用系统等存在的漏洞进行攻击,并进一步利用攻陷的主机进行其他犯罪活动,比如散布病毒、蠕虫、特洛伊、间谍软件、僵尸、网络钓鱼电子邮件、伪造交易等等。而结构化查询语言SQL(Structured Query Langnage)注入则占据了重要部分。根据某省电力公司某月入侵防御系统IPS(Intrusion Prevention System)日志分析,在外部攻击中,SQL注入攻击占据了攻击总数的12.8%。

根据开放式Web应用程序项目OWASP(OpenWeb Applicarion Secutity Project)2013年Web十大安全威胁,注入类排名第一,包括SQL注入、OS注入、LDAP注入等。其中,SQL注入攻击是从正常的WWW端口访问,表面看起来跟一般的Web页面访问没什么区别,防火墙不会对SQL注入进行阻隔,即使网站平台被攻陷也无法及时发现。

1 SQL注入原理

1.1 SQL注入概念和产生的原因

SQL注入是目前比较常见的针对数据库的一种攻击方式。所谓SQL注入,就是由于网站程序员在编写代码的时候,没有对用户发送的查询数据的合法性进行判断和过滤有害字符,造成攻击者通过精巧构造变量,把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,绕过用户验证欺骗应用服务器向后台数据库发送了指定的SQL查询命令,数据库执行该SQL语句,执行了危害性操作。

1.2 SQL注入分类

SQL注入式攻击的主要形式有两种。一是直接注入式攻击法,指攻击者直接将代码插入到与SQL命令串联在一起并使得其以执行的用户输入变量。二是间接的攻击方法,它将恶意代码注入要在表中存储或者作为原数据存储的字符串,在存储的字符串中会连接到一个动态的SQL命令中,以执行一些恶意的SQL代码。

1.3 SQL注入危害

通过SQL注入漏洞,可实现非授权操作后台的数据库,泄漏敏感信息,破坏数据库内容和结构、甚至利用数据库本身的扩展功能控制服务器操作系统。由于SQL注入漏洞是寄生在Web应用程序,通过常规的防火墙,IDS等防护设备无法发现和阻挡其被利用攻击。

2 SQL注入攻击过程分析

SQL注入的主要方式是将代码插入到输入参数中,这些参数会被置入到SQL命令中加以执行。如果未对动态构造的SQL语句所使用的参数进行正确性审查,那么攻击者就很可能会修改后台SQL语句的构造。如果攻击者能够修改SQL语句,那么该语句将与应用的用户拥有相同的运行权限。当SQL服务器执行与操作系统交互的命令时,该进程将与执行命令的组件拥有相同的权限[1]。具体流程如图1所示。

图1 SQL注入攻击流程图

a)寻找SQL注入点。在动态网页中,通过构造SQL语句,根据其返回的信息,判断其是否存在注入点。常用的是利用“’”和“and l=l”、“and l=2”等查询条件,通过浏览器所返回的错误信息来判断是否存在SQL注入漏洞。

b)判断数据库的类型。通过返回的错误信息,可以判断数据库类型。根据具体的类型,决定实施攻击的方法。若存在关键字microsoft,jet,database,engine,则数据库为access;若存在关键字microsoft,odbc,SQLServer,则数据库为SQL Server,本文主要从SQLServer数据库管理系统来介绍SQL注入攻击的流程。

c)攻击SQL Server数据库系统。首先要判断存在注入点的数据库是否支持多句查询、子查询、数据库用户账号、数据库用户权限等。如果用户权限为SA,且数据库中存在XP_SMDSHELL存储过程,则可以直接转利用XP_CMDSHELL存储过程执行“net user hacker by hacker”,生成hacker用户。如果用户权限不是SA,则可以通过探测数据库表名和列名,并探测列值(字段值)了解数据库的相关信息,在得到数据库的相关信息之后,就可以扩张权限。

猜解表名:在注入点后加上“and exists(select count(*)from表名)”。

猜解列名:在注入点后加上“and exists(select count(列名)from表名)”。猜解列的内容。猜解用户名和密码需要用到asc和mid这两个函数。用mid(列名,N,1)函数截取第N位字符,再用asc(mid(列名,N,1))函数截取第N位字符的ASCII码。相关语句为:and(select top 1 asc(mid(列名,N,1))from表名)>x,x为ASCII码,再得到ASCII码后可通过转换工具转译ASCII码。

d)提取权限。通过上传webshell、木马等方式进一步取得管理员权限,进而控制服务器。

3 SQL注入的防御

SQL注入漏洞攻击产生的危害非常大而且普遍性很高,近年来SQL注入攻击一直在OWASP十大Web应用安全风险前列。需要在系统编码、数据库、服务器等多方面进行安全设置。

3.1 编码方面

3.1.1 参数化查询

SQL注入源于攻击者控制查询数据以修改查询逻辑,因此防范SQL注入攻击的最佳方式就是将查询的逻辑与其数据分隔,这可以防止执行从用户输入所注入的命令。这种方式的缺陷是可能对性能产生影响(但影响很小),且必须以这种方式构建站点上的每个查询才能完全有效。只要无意中绕过了一个查询,就足以导致应用受SQL注入的影响。

3.1.2 验证数据的有效性与合法性

按照输入格式(类型、长度)严格校验用户的输入,对特殊字符;<>*|`&$!#()[]:{}‘“../ ..--进行详细检查,确保用户的输入符合要求;常用的方式是采用白名单,定义系统所接受的参数的类型、长度等,对于不符合的一律进行过滤。另一种方式为转义特殊字符,避免黑客的直接攻击。

3.1.3 数据封装

对客户端提交的数据进行封装,不要将数据直接存入cookie中,防止攻击者获取cookie中的重要信息;删除代码中存在的用户名、口令信息等敏感字段,替换成输入框。入侵者不会轻易就获取到用户名、口令信息。

3.1.4 设置错误页面

正常返回的错误页面通常含有数据库、服务器及系统的信息,攻击者可通过错误页面有效判断相关信息,提高攻击的准确性和便利性。系统管理员需设置无敏感信息的错误页面,防止错误页面信息泄露。当返回错误页面,应通过重定向到指定的错误页面,对调试信息进行有效保护。

3.1.5 最小化权限

过高的用户权限,会增大系统的风险。系统开发人员应只赋予系统用户必需的权限,不要随意授予数据库管理员的权限。

3.2 服务器方面

3.2.1 严格控制W eb目录的访问权限

站点的文件目录禁止Guest用户访问,将User用户权限修改成只读权限,切勿将管理权限的用户添加到访问列表。SQLServer将在注册表键和文件上设置合适的访问控制列表ACL(Access Control List),应用这些访问控制列表可实现权限控制。通过操作系统提供的加密文件系统EFS,数据库文件可在运行SQLServer的账户身份下进行加密,只有这个账户才能解密这些文件,使数据库更加安全。

3.2.2 最小服务原则

Web服务器应以最小权限进行配置,只提供Web服务,这样可以有效地阻止系统的危险命令,如ftp,cmd,vbscript,等。

3.2.3 加强应用系统文件访问控制

应用系统文件承载着信息系统的重要信息,应通过操作系统设置文件及文件夹的访问权限,对重要文件进行加密保护,提高其安全性。

3.3 数据库方面

3.3.1 合理的账号和权限

采用强壮的管理员口令,禁用或删除SA用户,只赋予应用程序用户必需的权限,防止数据库的未授权访问。尽量使用Windows身份验证模式。配备日志审计等。

3.3.2 必要的安全加固

删除多余的XP_CMDSHELL等存储过程。及时更新数据库系统补丁,关闭多余的数据库服务,在不需要时关闭数据库远程连接。

3.3.3 敏感信息加密

将保存在数据库users表中的用户名、口令信息以密文形式保存,也可以对users表进行加密处理,这样可以大大增加对鉴别信息访问的安全级别。

4 结束语

SQL注入攻击作为常见且高危的攻击方式,系统开发人员应高度重视SQL注入的防御工作,使用安全的编程方法,进行有效的输入校验,安全配置服务器和数据库,加强网站的巡查,可最大程度上防御SQL注入攻击。

[1]张勇,李力,薛倩.Web环境下SQL注入攻击的检测与防御[J].现代电子技术,2004(15):103-105.

SQL Injection Theory and Satety Protection of Electric Power Information System

NIU Fang-hua1,YANG Da-zhe2,LIU Rui-fang2
(1.State Grid M aintenance Com pany of SEPC,Taiyuan,Shanxi 030032,China;2.State Grid Shanxi Electric Power Research Institute of SEPC,Taiyuan,Shanxi 030001,China)

With the rapid development of electric power informationization,information system has become an important part of dailywork.Although it is convenient,a variety of attacks against the system arise.SQL injection is one of themostwidely spread WEB vulnerabilities,existing in theWeb application development.This article focuses on the causes of SQL injection vulnerabilities,and the methods and effectivemeasures to prevent SQL injection attacks in order to protect the safety and stable operation ofweb application of electric power information system.

electric power information system;SQL injection;safety protection

TP309.2

A

1671-0320(2014)04-0038-03

2014-03-28,

2014-05-21

牛方华(1979-),男,山西运城人,2008年毕业于中北大学计算机应用技术专业,工程师,从事信息通信工作;

杨大哲(1983-),男,河南南阳人,2009年毕业于山东大学热能工程专业,工程师,从事信息安全工作;

刘瑞芳(1963-),女,山西晋城人,1993年毕业于山西邮电中等专业学校市内电话通信专业,从事交换机通信及信息维护管理工作。

猜你喜欢

电力公司攻击者漏洞
国网甘肃省电力公司创新成果展示
漏洞
基于微分博弈的追逃问题最优策略设计
巨怪电力公司面试中
正面迎接批判
大型电力公司面临的财务风险
三明:“两票制”堵住加价漏洞
漏洞在哪儿
高铁急救应补齐三漏洞
有限次重复博弈下的网络攻击行为研究