龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 数据库类 > Oracle 技术 >

简析基于本地的Oracle安全扫描(1)(2)

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
检查权限包含“ANY”的用户和角色 如果一个用户或是角色具有包含单词“ANY”的权限,这对黑客来说就是很有用的。一个较好的例子就是权限“SELECT ANY

检查权限包含“ANY”的用户和角色

如果一个用户或是角色具有包含单词“ANY”的权限,这对黑客来说就是很有用的。一个较好的例子就是权限“SELECT ANY TABLE”,黑客可能想看到其他用户的表中的数据,但是可能没有那个用户的访问权限或者不能看到用户的表。因为表可能是私有的(private),不开放给其他任何用户访问。但是如果黑客能够找到有“SELECT ANY TABLE”权限的其他用户,那么他就仍然能得到他想要的,例如:

SQL> connect dbsnmp/dbsnmp
Connected.
SQL> select name,password from sys.user$;
select name,password from sys.user$
*
ERROR at line 1:
ORA-01031: insufficient privileges


SQL> connect sys/change_on_install
Connected.
SQL> grant select any table to dbsnmp;

Grant succeeded.

SQL> connect dbsnmp/dbsnmp
Connected.
SQL> select name,password from sys.user$;

NAME PASSWORD
------------------------------ ------------------------------
SYS D4C5016086B2DC6A
SYSTEM D4DF7931AB130E37

2 rows selected.

SQL>

在这个例子中,用户“dbsnmp”不能看到“sys”的私有表“user$”,但是在授权“SELECT ANY TABLE”给“dbsnmp”后,表“user$”就可以被选择查询了。

检查具有“with admin”或者“with grant”特权的用户

这两个权力可以在给对象授权的时候添加。对象权限被授予给用户或者角色,让他们可以访问或更改对象。添加“with grant”选项意味着被授权的用户能将被授予的权限授权给其他用户。这意味着某一个用户可以将管理特定对象的权限传给没被授权可以访问整个架构的用户。

第二个权力“with admin”,可以在授予系统权限的时候授予。对象权限允许一个用户改变数据,系统权限允许用户改变架构,建立和改变对象。“with admin”与“with grant”相似,主要是允许有“with admin”的系统授权的接受者授予这种权限给其他用户。

这部分脚本输出任何被授予这两种权力的权限。这些权限,以及被授予这些权限的用户,使得黑客很容易找到一个取得对象和数据的方法,如果他们可以猜到一个用户的密码,而不必获取访问权限,或者成为“dba”用户,或者更高级别的用户。

检查外部用户(EXTERNAL)

外部用户是说允许一个应用程序用户通过操作登陆,并且由操作系统自己验证访问数据库的权限而不需要Oracle验证。这个特性非常有用,如果你想要运行批量工作或者更多工作,同时不想在脚本中艰难地编制用户名和密码,或者不想在命令行敲入用户名和密码,那么有了这个特性,用户名和密码就可以通过使用一条操作系统命令 ps -ef | grep sqlplus来获得。

这部分脚本定义一些由操作系统管理的数据库帐户。这些帐户的密码在SYS.USER$中被显示为EXTERNAL以说明他们是由操作系统验证的。使用这些帐户来避免密码在命令行可见,或密码被编码在脚本中,对系统安全来说是很好的方法。因为当黑客发现一个外部用户并获得了到它一个访问后,将会同时获得到数据库的一个访问。所以应当慎用或考虑不使用外部帐号。

除了这种方法,还有很多方法可以用来识别由操作系统验证的用户。如用户名前缀是POS$,它就可能是外部用户。一些安装文件参数也用来控制外部用户,它们是:remote_os_authent 和os_authent_prefix。讨论这些参数和其他形式的外部变量识别超出了本文章的讨论范围。对于本文来说,找出一些外部变量,并且提示黑客可能会不怀好意地使用它们已经足够了。

系统权限-ALTER SYSTEM and CREATE LIBRARY

在Oracle数据库中有很多系统权限。这些系统权限可以直接被授予给一个用户或角色。从系统视图中查询出它们,就可以看到可用的权限。这样的视图可以由以下的SQL语句产生:

SQL> select * from system_privilege_map;

PRIVILEGE NAME PROPERTY
--------- ---------------------------------------- ---------
-3 ALTER SYSTEM 0
-4 AUDIT SYSTEM 0
-5 CREATE SESSION 0
-6 ALTER SESSION 0

-225 ALTER ANY OUTLINE 0
-226 DROP ANY OUTLINE 0
-227 ADMINISTER RESOURCE MANAGER 1
-228 ADMINISTER DATABASE TRIGGER 0

126 rows selected.

SQL>

精彩图集

赞助商链接