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

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

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

由于考虑到可能被数据库扫描软件捕获的可能,很多黑客倾向采用Oracle自带的,对整个存储过程进行加密的warp技术.Oracle能内部识别warp加密的内容,且不提供解密函数进行解密.黑客甚至会特别说明这是一个系统自带包,以此混淆管理员的判断,但事实上,已经有相当一部分安全厂商完全掌握了warp技术的加解密原理,并且在安全产品中加入了warp还原的能力.真正具备warp还原能力的安全产品,会在warp解密后,立即检测出Backdoor的“尾巴”.

2、数据库级Rootkit技术

数据库级的Rootkit技术,在主流数据库Backdoor手段中采用最为广泛,因为其更便于实施,且行为足够隐蔽,具有数据库权限即可完成所有Rootkit.

Rootkit的整体思路分为两种:

  • 第一种是改变访问路径:通俗说就是你以为你访问的是A,其实你访问的是B.
  • 第二种思路是隐藏Backdoor:由于大部分安全产品进行检查都在视图层,而视图层有很多可隐藏Backdoor的手段.我们使用一组DBA用户进行举例说明,黑客A夺取SYSDBA权限后,创建DBA用户hacker/hacker.并使用RootKit技术使hacker这个用户无法被查出.非法DBA用户hacker/hacker就是这个Backdoor.

(1)换路径

换路径的思路相对比较老,主要在Oracle 9i中可以使用.手段是利用synonym创建同名视图,例如:想查询有哪些用户,安全产品通常使用Select username from dba_users这样的语句;很容易发现hacker用户.但如果查询到的是我们自己创造的假dba_users,那隐蔽hacker用户就很简单了.

如何能用户访问到假的dba_users?这和Oracle 在找目标时的顺序密切相关.Oracle会先在当前用户下寻找是否有,如果没有就去private Synonyms中寻找,再找不到才会去public Synonyms中寻找.黑客会利用Creating or modify a public synonym pointing to a different object,把自己定义的视图别名成SYS.dba_user来欺骗查询的安全产品.

(2)修改视图

修改视图的思路是根据换路径的思路延展开来,但使用面最广泛,Oracle全版本通用.既然要做假视图,改路径,还不如直接对视图本身动手.

下图是all_users的视图内容:

create or replace view all_users

(username,user_id,created)

as

select u.name,u.user#,u.ctime

from sys.user$ u,sys.ts$ dts,sys.ts$ tts

where u.datats# = dts.ts#

and u.tempts# = tts.ts#

and u.type# = 1;

comment on table ALL_USERS is ‘Information about all users of the database’;

comment on column ALL_USERS.USERNAME is ‘Name of the user’;

comment on column ALL_USERS.USER_ID is ‘ID number of the user’;

comment on column ALL_USERS.CREATED is ‘User creation date’;

图中标红的地方是这个视图的条件判定,如果我们在这个条件中再加一条and u.name !=”HACKER”,再重建这个视图通过Select * from all_users;就再也无法查询出HACKER用户了.类似的情况不单独发生在视图all_users上,类似的还有常用来查询的dba_users、v$session,、gv_$session、flow_sessions、v_$process、dba_jobs等,这些都可以通过这种方式隐藏掉非法用户以及非法用户创建的各种视图、函数等.

在这种方式的基础上随着对视图内容的深入理解,还可以通过不满足视图中的判断条件,来使用目标隐身.

例如在ALL_users中列出的用户需要满足sys.user$.datats = sys.ts$.ts#.如果我们让这个等式不成立那hacker也就不会被显示出来.DATATS#中的数值一般在0-4之间,使用update语句对hacker用户进行调整,把他的DATATS#改到1337,不在0-4的范围内.这样sys.user$.datats = sys.ts$.ts#的等式无法成立,就查询不到hacker.下图中红线的部分很明显的显示虽然hacker已经查询不到,但依旧可以用hacker进行登录.

3、操作系统级Rootkit技术

操作系统级Rootkit技术,额外需要操作系统权限.权限至少是Oracle用户的权限.思路主要可以分成三类:

  • 替换文件:利用某些关键操作前的文件替换操作后的文件,实现只有在基表层有记录的目的.
  • 修改二进制文件:这个主要是修改Oracle文件的某些判定逻辑.
  • 构建调用方式,调用外部动态库:Oracle数据库支持多种语言,通过这些语言直接在数据库中构建调用本地操作系统中的动态库.这些动态库中有需要使用的Backdoor.

(1)替换文件

替换文件的思路是用某些操作前的文件覆盖操作后的文件.使得操作只有部分生效,从而达到隐藏Backdoor的目的.其中比较常见的是Oracle home/dbs/下orapworcl文件的替换.我们还是使用hacker/hacker的例子.

假如我们创建了DBA用户hacker.后把文件orapworcl备份下来,接着用drop user hacker cascade;对用户hacker进行彻底删除.删除后再把备份的orapworcl重新拷回替换新生成的orapworcl.这时候在SYS.USER$层验证会发现hacker已经消失了.但如果使用hacker/hacker还是可以以DBA身份登陆到数据库中.

这种方式虽然可以逃过SYS.USER$层的验证,但如果查询基表x$kzsrt还是可以发现hacker用户的行踪.

 

可以看到删除hacker用户后,把orapworcl拷贝回去hacker依旧可以登陆.SYS.user$中得记录被清除,但追到最终得基表x$kzsrt 发现其实hacker还在.有效的隐藏了hacker的存在.

(2)二进制文件

二进制文件的思路主要是两种:

第一种的本质是通过改变路径,使访问者访问到错误的目标.另一种是改变二进制中的判断条件,隐藏Backdoor,这可以看作是数据库级Rootkit的升级版.

第一种方式中,在Oracle文件中查询sys.user$,可以发现如下语句:

如果我们把作为查询目标的sys.user$,改成我们自己创建的SYS.aser$,我们就可以掌控呈现何种查询结果.

在Oracle文件中找到sys.user$,替换成我们的SYS.aser$.这样,用户以为查询的是sys.user$,但实际上查询的是SYS.aser$,即可实现隐藏Backdoor的目的.

除了改路径外,还可能出现改变查询的条件语句.我们回到Oracle中查看,会发现如下代码:

上图中可以看到关键语句:

select inst_id,username,decode(sysdba,1,’TRUE’,’FALSE’),decode(sysoper,’FALSE’) from x$kzsrt where valid=1? and username != ‘INTERNAL’

同样把这句改成:

select inst_id,’FALSE’) from x$kzsrt where username not in(‘INTERNAL’,’HACKER’).

就可以达到隐藏hacker用户的目的.

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

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

热点阅读