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

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

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

通过修改二进制隐藏Backdoor,只从数据库层去检查是无法发现问题的.必须对操作系统中的Oracle文件进行前后hash比对才能发现问题.二进制文件的方式虽然隐蔽,但最大的问题是,需要做Oracle文件的替换.如果想要替换Oracle文件就必须把整个数据库停掉.在实际操作中需要大量的内部信息,才能有更大胜算.

(3)调用方式

Oracle支持多种语言来写存储过程,并不只限于SQL语句.为了躲避检查,很多有问题的存储过程会通过其它语言编写.大部分语句都支持调用本地某个动态库.如果把Backdoor封装成一个动态库,则可以通过调用的方式把Backdoor加载入内存中,调用执行.例如下面的Java后门就可以达到上述效果.

CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED “JAVALOADLIB” as

import java.lang.*;

import java.io.*;

public class JAVALOADLIB

{

public static void LoadLibrary(string theLibrary) throws IOException

{

System.load(theLibrary);

}

};

/

CREATE OR REPLACE PROCEDURE JAVALOADLIBPROC (p_command IN VARCHAR2)

AS LANGUAGE JAVA

NAME ‘JAVALOADLIB.LoadLibrary(java.lang.String)’;

/

EXEC JAVALOADLIBPROC(‘/Oracle/Oracle/product/11.2.0/db_1/ide/lib/hacker.dll’);

由于上述过程只是加载动态库,所以很可能DBA自己写的代码中也有类似逻辑,无法在数据库中武断的认为存在Backdoor或被Backdoor所用.这种方式只能通过对hacker.dll的检查进行查找.

4、内存级Rootkit技术

内存级Rootkit技术,主要方式就是把Backdoor隐藏于内存之中.隐藏于内存之中数据库本身基本是无法检查的,必须和操作系统共同合作.这种方式是4种Rootkit技术中最难被发现的,但同样也受内存的限制,一旦重启会直接被清空,需要再次植入.根据Oracle的特性,针对Oracle的内存级Rootkit技术主要可以分为三个大类:

  • SGA区的门道;
  • oradebug的门道;
  • 内存的门道.
  • (1)SGA区的门道

  • SGA区是数据库的内存共享区域,在SGA中数据会自动驻留一段时间或人为驻留.这种驻留给Backdoor隐藏带来了可能性.下面示例:我们首先创建一个DBA用户hacker,然后把它藏在内存中.

删除SYS.user$中hacker的记录,只会删除数据库中的hacker,而无法删除SGA中的hacker.无论是查询视图DBA_users还是基表x$kzsrt,都无法发现hacker的踪影.但hacker还是在以DBA权限正常访问数据库.

除去这种自动的在SGA区中驻留的方式外,还可以把存储过程或函数直接手动强行放入SGA区中.使用这种方式不会因为SGA区中数据库的交换,而被剔除.比起上面的方法更加稳定.这源于Oracle提供的dbms_shared_pool.keep.dbms_shared_pool.keep本意是帮助数据库在SGA区中固定某些包,是为了提高工作效率而设计的.而黑客可以利用该函数,把目标包存入数据库中,躲避安全扫描类软件的检查.

(2)Oradebug的门道

racle自带一个给Oracle支持人员追踪Oracle深层问题的工具-Oradebug.Oradebug可以对SGA内存中的数据库进行修改.正是这个特点,可以直接对内存中的关键参数进行修改.这里我们用Oradebug修改审计参数为例:原来审计参数是被关闭,现在直接通过Oradebug打开.把目标参数从0改成1即可.

很多变量的参数可以通过类似的方式,在内存中直接定位,然后用Oradebug修改成需要的值.

(3)内存的门道

这个部分需要操作系统的root权限.角度有两种,一种是在内存中发现需要的值(9i版本独有).另一种则是在内存中修改特定的值(10g的一种漏洞).简单说这种方式就是在内存中找到需要修改的关键点进行修改.

例如我们在内存中找sysawr的情况:

strings? /dev/shm/* | grep ‘password’ | less

….

m user$ where user#=:1

by sysawr password expire account lock

)change_password_on_first_use in (‘Y’,’N’)1

…..

当然不仅仅是找到关键点后进行修改.还可以利用某些漏洞对特定的部分进行整体编码修改,改成黑客掌握的密码.内存中的Backdoor隐蔽性最高,但操作中会有诸多限制,使用并不广泛.

5、小结

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

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

热点阅读