首页 · 设计视角 · 平面设计 · 网站设计 · 工业设计 · 建筑环境· CG动漫 · UI界面 · 设计创意 · 色彩设计 · 网络编程 · 设计欣赏 · 广告欣赏 · 软件教程
推荐栏目:PhotoShop教程 平面设计教程 平面设计作品 字体设计 推荐文章:非主流照片处理教程 photoshop抠图 photoshop照片合成
您现在的位置: 平面设计资源网 >> 网络编程 >> 数据库类 >> Oracle >> 教程正文 >> 从黑客角度检验Oracle数据库的安全性

从黑客角度检验Oracle数据库的安全性

从黑客角度检验Oracle数据库的安全性

本文讨论的是从一种安全的角度来看黑客是如何攻击你的数据库,我们应该做什么防范。 

    一 State of Oracle Security (oracle的安全状态)

    1 来之媒体的报道:
    超过十分之一的于internet上公司数据库有安全隐患。一份来之750家美国数据库开发商开始对数据库安全表示忧虑。

    2 黑客世界的秘密:
    讨论会对数据库被黑的报道增多。
    – Blackhat, Defcon Expliots 蠕虫侵蚀着数据库
    – Alpha Voyager
    – Spida worm
    攻击oracle的白皮书
    3 oracle网站-Alerts Web page

    4 防火墙后边神秘的oracle是安全的
    大多数的折衷安全是内部工作的结果
    内部威胁是最危险的
    数据库中的非特权用户

    5 面对这样状况我们要做什么
    对漏洞的修复
    警惕风险和威胁
    找到正确的解决方案

    二 Securing the Listener service

    1 监听(listener)的脆弱
    监听是客户端和数据库的代理
    重要性:
    i) 分离了鉴定和审核
    ii) 以一个独立的进程运行
    iii) 接受命令执行数据库的外部任务
    监听服务的脆弱性
    在客户端和数据库建立的连接进程中,监听作为一个代理。客户端指向对监听的一个连接,监听依次来和数据库进行连接握手。
    问题存在于监听分离了鉴证,被外部数据库控制管理。监听作为一个独立的进程,在过去称为UID,接受命令执行任务。

    2 监听服务的安全问题
    带有password的监听是安全的
    -默认配置是无
    -lsnrctl设在password
    必须建立一个健壮的password
    -对暴力破解是不易攻击的
    保护好listener.ora文件
    -password存储在这里
    不要远程管理监听
    -在网络上password是不加密的。

    如何对监听进行安全控制:
    首先:在监听服务中设置passwod,许多DBA甚至没有意思到在必须在监听服务中设置password,监听服务接受远程的命令,如果你没有设置,任意人都可以发送命令。

    两种设置方法:
    1) 使用监听控制实用工具 – lsnrctl.
    2) 在listener.ora文件中设置。

    你必须设置一个强壮的password,一个不少于8位用数字和特殊单词组成的。如果设置比较脆弱,黑客程序将会试出你的密码。Password是存在listener.ora的文件中,如果用户可以读取,可以利用password日志远程的监听。同时也推荐你不要远程管理listener,因为密码在网上被明文传播,有可能被监听。推荐你只用来进行连接。

    监听命令:
    -LSNRCTL> help
    The following operations are available
    start stop status
    quit exit set*
    show*

    password rawmode displaymode
    trc_file trc_directory trc_level
    log_file log_directory log_status
    current_listener connect_timeout startup_waittime
    use_plugandplay save_config_on_stop
    可以通过set password来进行设置。有两个问题在password中:password是没有lockout feature。命令审核是和标准oracle的审核数据是分开的。Password是不过期的,因为没有passwod的管理特性。

    3 监听包(listener packet)

    当一个命令输入到监听控制器中会发生:
    向监听发生一条命令,如果监听是远程的,命令通过网络传播,上图是发送的数据包,我们可以看到报头中一些特殊的字符。在报尾可以看到listener要执行的远程命令,在这个例子中:
    COMMAND=status

 

三 listener attacke demo

1 缓冲区溢出:

覆盖堆栈的内存,执行恶意的代码。监听服务的缓冲区溢出:

1) 一个连接字符串的例子:

– (DESCRIPTION=(CONNECT_DATA=(CID=(PROGRAM=)(HO

ST=)(USER=))(COMMAND=status) (SERVICE=LIST80)(VERSION=135294976)))

2) 寻找缓冲区溢出:

改变适当的值看看会发生什么情况

– Try USER= with 4,000 Xs after it

– Try SERVICE= with 4000 Xs after it

– Etc…

黑客是如何发现缓冲区溢出的:

当一个命令发生到监听服务时,黑客试图在连接字符中加很长的字符串,例如发生USER=一个很上的字符串。如果数据库开发人员只为username分配了一个1024字节长的单元,当发送超过了1024个字节,其他的字符将覆盖后边的单元。所以程序要能自能的对长度进行检查。

2 监听器服务缓冲区溢出

i) Oracle 8.1.7

发生1k的字节COMMAND= dwon机

超过4k会使系统崩溃。

ii) oracle 9.0.1

发生1k的字节SERVICE=

3 利用报头区的值

典型的命令:

– .T.......6.,...............:................4.............(CONNECT_DATA=.)

垃圾字符描述了报头的信息

– Offset to data

– Size of connection string

– Size of packet

– Type of packet

4 窃取监听命令

发生一下的命令:

– .T.......6.,...............:................4.............(CONNECT_DATA=.)

改变报头表明40字节

– ......."...(DESCRIPTION=(ERR=1153)(VSNNUM=135290880)(ERROR_

STACK=(ERROR=(CODE=1153)(EMFI=4)(ARGS='(CONNECT_DAT

A=.)ervices))CONNECT'))(ERROR=(CODE=3 03)(EMFI=1))))

改变报头表明200字节

– ........"..>.H.......@(DESCRIPTION=(ERR=1153)(VSNNUM=135290880)

(ERROR_STACK=(ERROR=(CODE=1153)(EMFI=4)(ARGS='(CONNE

CT_DATA=.)ervices))CONNECT_DATA=(SID=orcl)(global_dbname=te

st.com)(CID=(PROGRAM=C:\Oracle\bin\sqlplus.exe)(HOST=anewman)

(USER=aaron))')) (ERROR=(CODE=303)(EMFI=1))))

如果你伪造数据包的大小,监听将随意返回任何数据在它的命令字符中将超过你发生的字符长。例如一个用户上交了100字符的命令,而对你的返回要10字符,监听将先返回10字符对你的原先的拷贝,但这样的返回不会终结,还会返回90个先前命令的字符。可以获得username,当然这样是难的,不过这样的危险还是存在的。

6 外部程序

动态库和共享lib中的函数能被pl/sql调用的通过创建lib和packages进行设置:

– CREATE LIBRARY test AS ‘msvcrt,dll’;

CREATE PACKAGE test_function IS PROCEDURE

exec(command IN CHAR);

CREATE PACKAGE BODY test_function IS

PROCEDURE exec(command IN CHAR)

IS EXTERNAL NAME “system”

LIBRARY test;

有许多安去问题和外部服务进程有关,Xprocs允许在oracle中创建函数,参照DLL或共享库文件在操作系统上。这个很强的特性使得数据库能任何操作系统可以做得事情。当然权利越大责任也越大。创建一个Xproc可以指向操作系统的任何一个dll,使得你可以执行操作系统的命令。同样象获得数据库服务器的资源那样,来获得系统资源。第一关心的是你有没有给一个用户creat library和create procedure的特权。

7 远程回调外部进程

非‘正式’支持

但它很有效

ExtPorcs 是监听的另一个连接点

– SID_LIST_LISTENER =

– (SID_LIST =

– (SID_DESC =

– (SID_NAME = PLSExtProc)

– (ORACLE_HOME = E:\oracle\ora81)

-(PROGRAM = extproc)

ExtProc任何审核一个用户

——它是无效的!!!!!

8 默认设置-对外进程

自动配置

-Oracle 8i –YES

-Oracle 9i-NO

Call listener

-Do not create ExtProc as another listener endpoint

-Create its own entry in the listener.ora file

 

四oracle in a Web application

1 绕过防火墙的攻击:

防火墙的配置:

– Block access through port 1521

– Only allow traffic to port 80

– Block UDP as well as TCP

SQL 注入

– Not specific to Oracle

-a web programming problem

许多管理都认为防火墙的数据库是安全的。及时是你的防护墙配置是很恰当的,也可以通过web应用程序进行攻击。这些攻击主要是由于开发应用程序者一些错误的编程所致。我们可以发现许多站点在这个方面都很脆弱。虽然因数据库不同攻击而异,但基本问题还是相同的对所有的数据库来讲。简单的一个检验你的数据库是否脆弱,是通过嵌入一个请求在没有地方,然后来验证结果。有些站点会返回语法错误。而许多只是捕获了错误,没有报道。当然这些站点仍然有脆弱,但是这些可以不被利用如果你不过任何错误消息发送反馈信息。

2 How does it work?

修改请求

改变这样的查询:

– Select * from my_table where column_x = ‘1’

To: – Select * from my_table where column_x = ‘1’

UNION select password from DBA_USERS

where ‘q’=‘q’

exploit是如何工作的?它是通过改变一个sql语句成另为一种,例如上面的例子,一个简单查询变成了2个查询。你可以嵌入第二条命令在查询中在其他的数据库中,Oracle不运行这样做,而代替的是攻击者需要去补充查询请求的结尾。注意结尾的‘q’=’q’,这样用的原因是我们可以处理第二条查询,ASP将加他加入网页的结尾,这条语句值是真的。

3 Example JSP page

Package myseverlets;

<….>

String sql = new String(“SELECT * FROM

[1] [2] [3] 下一页

2006-12-10 22:16:57 作者:佚名 阅读点击: 责任编辑:admin
关于 Oracle数据库 的文章
频道精彩推荐
阅读排行
赞助商链接
作品推荐
设为首页 | 加入收藏 | 今日更新 | 欢迎投稿 | 关于我们 | 版权说明 | 设计服务 | 网站地图 | 友情链接
Copyright © 2003-2008 www.AD020.com All Rights Reserved 版权所有 平面设计资源网