简析基于本地的Oracle安全扫描(1)(3)
查看哪个系统权限被授权给了一个用户或是一个角色,使用下面的SQL语句:
|
本文选择了最显著的两个系统权限最为例子,是:“ALTER SYSTEM” 和 “CREATE LIBRARY”。第一个可能会允许黑客改变系统参数或更多,第二个权限,“CREATE LIBRARY”允许用户建一个库。这个权限非常危险,因为它可能导致权限的扩大。
utl_file_dir 位置
有很多Oracle数据库早期使用的参数,它们中的很少能被分析出来,这从安全角度考虑是很危险的。控制数据库包UTL_FILE读写目录的参数就是一个很好的例子。如果这个参数被设为“*”(不包括引号),那么UTL_FILE包就可以被读写到机器上Oracle安装用户(通常是用户(ORACLE)访问的任何目录。一个有“ALTER SESSION”权限的用户就可能会复制库缓存(library cathe)到一个跟踪文件,然后通过UTL_FILE读取文件的任何内容。如果添加任何用户或修改密码,那么清晰的文本密码都仍然会被看到(只要它不被从缓存中清除)。
下一项检查就是通过把这些参数列出来(这只针对信息),来发现这些参数都在哪儿。 这部分的最后一项检查是检查主要跟踪路径:如果utl_file_dir和user_dump_dest相同,那么你可能有和上面描述类似的问题。如果上面的情况都不满足,那就不值得找utl_file_dir了。可能某个人已经把它放到了一个路径下。
具有清晰文本密码的数据库连接
数据库连接允许用户很容易地访问其他数据库的数据。这些连接甚至可以通过使用同义字而隐藏起来,使得SQL不指示真实数据的地址。一个简单的数据库连接可以像下面这样定义:
Create database link test_link |
“using”字句支持或者是一个完整的连接字符串,或者是在tnsnames.ora中定义的一个服务器名称。从其他数据库重新得到数据可以使用下面的例子:
SQL> select * from scott.emp@test_link;
有两种数据库连接:共有(public)和私有(private)。Public数据库连接允许任何包含PL/SQL代码的用户通过连接访问远程数据库。Private数据库连接提供更好的安全保障,远程数据库只允许那些拥有连接帐号的用户或是PL/SQL代码访问。
很可能建立一个数据库连接,作为普通用户而不是专门用户连接到远程数据库。样本脚本中的测试允许你观察分配给连接到这个数据库的任何数据库连接的用户名和密码,同时还有权威用户和密码
数据库连接对黑客来说是一个好方法,可以从一个不安全的数据库访问一个安全数据库。黑客可以访问一个防御较弱的数据库,找到一个安全的数据库的用户的用户名和密码。然后他就可以通过连接或直接登陆来访问数据了。
总结
从脚本的输出也可以收集到其他信息,或者可以很容易地改变脚本来提供其他没有覆盖到的细节。使用样本脚本作为一个开始,再添加或修改脚本来覆盖其他问题,这样相对来说比较简单。脚本允许添加附加检查来使数据库的规范检查更自动化。
一个这样的检查可以是检查有多少用户有角色“dba”。如果任何用户的密码难度不够大,这个角色都将是危险的。检查你的数据库中的每个用户都能做什么,哪个对象是可执行的或可访问的,是被谁执行和访问的,这些检查都是重要的。
监测Oracle数据库中已知的使用和已经被发现的漏洞也是很有用的。监测运行数据库的操作系统的安全,监测数据库连接的网络的安全也是很重要的。同样值得检查数据库中对象的状态和PL/SQL代码,来确定没有任何用户改变任何事情或为了将来的使用添加任何对象。
Oracle同时提供执行权限被授予为public的很多包和对象,这就是说,每个用户都可以访问它们。黑客可以不怀好意地使用用一些如UTL_FILE,UTL_HTTP和UTL_TCP的包。这一点是要说很多public包是很容易被访问的,而可能是不应该被访问的。评估什么访问是被授权的同时废除所有的也是不需要的。
作者:Pete Finnigan 原文链接:http://www.securityfocus.com/infocus/1522
(责任编辑:铭铭 mingming_ky@126.com TEL:(010)68476636)



