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

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

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
简介 就像任何一个大的软件包,Oracle的默认安装不能让大多数安全的系统即装即用。默认安装的一些方面确实是明显不安全的。这就很大程度上依赖数据库管理人员来确定系统是正确配

简介

就像任何一个大的软件包,Oracle的默认安装不能让大多数安全的系统即装即用。默认安装的一些方面确实是明显不安全的。这就很大程度上依赖数据库管理人员来确定系统是正确配置的,从而避免这些不安全问题。

这篇文章将会探究安装Oracle关系型数据库管理系统的扫描,通过做这样的扫描,将会发现一些普通的安全隐患。当然一篇短短的文章不可能覆盖Oracle安装的所有安全隐患,本文围绕一个简单的脚本而写,读者可以从这里下载:www.pentest-limited.com/scanner.sql.

这篇文章并不想取代一个完整的Oracle安全性审查,或是Oracle精进测试;此外,对于基于这篇文章的脚本是否可以被描述成一个搜索器也存在争议。文章的意图其实是说明要想检查出一些普通问题是多么简单,简单的安装弱点可以引起安全问题。脚本是使用Oracle标准内部语言PL/SQL编写,以便实用方便。针对文章的目的,脚本只适用于关系型数据库管理系统(RDBMS),并且只覆盖有限的测试集。

检查

这篇文章讨论了一个脚本以及一些它所执行的简单测试用例,脚本是围绕每一个测试而构造的。每一个测试检查以下每一段所描述的问题。

默认用户-检查已知的密码

最容易访问数据库的方法是利用默认帐户(default accounts)。那些默认帐户中的大部分都有大家都已知的默认密码。默认帐户在大多数数据库上不被安装,但是也有少量关键的会作为用户已经安装的例子和附加功能的一部分而一起被安装。

脚本的第一部分很难编码所有的默认用户,密码和它们的哈西表(hashes)。作为检查,只是简单地比较存储在数据库中的哈西表和脚本中提供的那些,如果存在一个匹配,那么默认用户的密码就保持不变。

很明显,这个问题的解决是改变密码或是删除不需要的用户。如果有些默认用户的密码被修改了,就要考虑其他问题了。如用户“dbsnmp”是由一个智能代理使用,作为Oracle企业管理器(OEM)来执行来自远程控制台的任务。如果密码被改变了,而且OEM正在运行,那么密码同样需要在文件 $ORACLE_HOME/network/admin/snmp_rw.ora file. 中修改

检查那些容易被猜出来的用户密码

提供的脚本不包含这项检查,因为这可以很容易从脚本中推导出来。读者检查正常用户密码可以到达的深度取决于读者自己。最简单的检查是查看用户是否设置密码和用户名一样,你还可以使用一个简单的字典,根据这个字典来做检查。从视图ALL_USERS中选择所有用户,然后产生另一个SQL脚本是相对比较简单的。例如可以是:

SQL> set head off
SQL> set feed off
SQL> set verify off
SQL> set termout off
SQL> set pages 0
SQL> spool check.sql
SQL> select 'connect '||username||'/'||username||';'
2 from all_users;

connect SYS/SYS;
connect SYSTEM/SYSTEM;
connect OUTLN/OUTLN;
connect DBSNMP/DBSNMP;
connect MTSSYS/MTSSYS;
connect PETE/PETE;
connect RAJK/RAJK;
SQL> spool off

然后运行输出脚本检查是否任何一个用户有和用户名相同的密码。其他“检查”脚本可以用同样的方法生成,通过使用一个或者从文件读入,或者存储在数据库表中的字典。

内在的用户(INTERNAL)连接

内在的用户名“INTERNAL”,Oracle 8i不赞成使用,同时被Oracle 9i删除了。作为替代语句“connect sys/sys as sysdba”被使用。对于Oracle8i,用户名“INTERNAL”有一个默认密码“ORACLE”。如果用户“SYS”没有改变它的密码,那么尝试作为内部连接可以使用密码“oracle”。

检查有“DBA”(数据库管理员)权限的用户

这项检查脚本中也不包含,纯粹是因为简单。在Oracle8i中存在大量系统权限和具有强大权限的默认角色。所有可用的系统权限都可见,用户“SYS”可以通过运行下面的选择语句得到,或者一个访问过这个对象并且预先知道用户名的用户也可以。

SQL> select * from system_privilege_map;

一个目的不纯的黑客可以使用任何数量的系统权限。在这个脚本中检查了两种系统权限。对于找出哪个用户被授权为角色“dba”的规律也是很有帮助的。当然,这并不能抵御滥用特殊权限的特殊用户;但是,一般情况下,黑客都是授权自己为“dba”或者使用一个有这种权限的帐号,这就很容易被发现。下面的SQL代码指出如何实现:

SQL> select grantee
2 from dba_role_privs
3 where granted_role='DBA';

GRANTEE
------------------------------
CTXSYS
SYS
SYSTEM

SQL>

不要忘记,角色可以被角色授予权限,所以要找到这些用户,需要递归查询。

精彩图集

赞助商链接