黑客狙击Oracle系统的八大套路(1)(2)
4. 从后门偷窃数据
在安全领域,这个概念被称为数据向外渗漏(exfiltration),这个词来自军事术语,其反面是向敌人内部渗透(infiltration),意思就是在不被发现的情况下偷偷潜出。对于从目标数据库获取数据的过程,可能就像从一些磁带备份中挑拣数据和还原数据库或者像从一个被毁坏的磁盘重复制一份拷贝一样简单。不过,也有可能涉及到窥探网络传输以获得相关的数据包。
Oracle有一个名为UTL_TCP的程序包,能够使外部连接指向其他服务器。对它稍微改编一下,就可以利用它从数据库发送一套低带宽数据流到远程主机。Oracle也附带了一些有用的程序包来隐藏数据流里的信息,如果你在发动潜入行动的时候担心入侵检测系统会监测到你的不法活动,那么可以充分利用这些功能秘密嵌入,包括DBMS_OBFUSCATION_TOOLKIT和DBMS_CRYPTO。
防范此类攻击的方法
防范此类攻击的最佳办法是安装入侵检测系统,这些系统能够检测网络中流入和流出的数据包。有一些检测系统还提供深入数据包检测,可以确实检查某些SQL,并可以通过设定规则在某种情况下触发报警器。这些工具还能够查找泄密迹象,例如添加的UNION、各种类型的short- circuiting命令、利用“--”注释进行截断等等。
5. 监听器
计算机世界最让人觉得了不起的事情就是,不管有多么困难的事,总有办法驯服它。尤其是在安全领域,一些漏洞如此的简单,而这些漏洞的出现仅仅是因为用户(也包括我们现在扮演的角色——黑客)并没有像软件设计者(程序员或软件开发员)本来预想的那样思考和行动。
Oracle监听器的设置是为了能够实现远程管理。那么如果攻击者把监听器的logfile设置为Unix .rhosts文件呢?这样攻击者就可以轻松的对.rhosts文件进行写操作。Unix上的这个文件设置了什么人可以不用密码而使用rsh、rlogin和rcp命令登录。你可以想想将会发生什么事情。
这其实只是围绕Oracle监听器安全问题的冰山一角而已。其他的还有缓冲区溢出等一大堆问题需要注意。事实上Litchfield的《Oracle黑客手册》里花了一整章的内容来讨论这个主题。
防范此类攻击的方法
从预防的角度而言,Oracle已经做出了一定措施来更好的保障系统安全,前提是你能够把它实施到位。首先,为监听器设置一个管理密码。对于担负着管理不断增加的密码重担的管理员而言,这看起来像是多余的,不过在你需求其他途径来保障监听器安全之前,好好地想想上面提到的和没提到的威胁。Oracle也添加了ADMIN_RESTRICTIONS,能够阻止特定的远程控制事件。
6. 权限提升
简单的说,“权限提升”包括使用现有的低权限帐户,利用巧取、偷窃或非法的方式获取更高的权限,甚至是数据库管理员的权限。
下面举个使用CREATE ANY权限的例子。假设我能通过一个拥有CREATE ANY TRIGGER权限的用户CYW访问数据库,这样我就能在任意的模式里创建触发器。如果你能追踪到一个任何用户都能执行写入操作的表,你在SYSTEM里创建了一个能够在低权限的你对该可写表进行插入或更新操作时执行的触发器。你编写的触发器会调用一个存储过程(也是你自己编写的),该存储过程会使用AUTHID CURRENT_USER为调用者授权。这就意味着,当该触发器运行“你”的存储过程时,拥有SYSTEM的权限。现在你的非法存储过程内部,包含了“EXECUTE IMMEDIATE 'GRANT DBA TO CYW'”。这样我就可以在触发器运行的时候插入到我的公共表里,该触发器由SYSTEM所有,而SYSTEM会调用我的change_privileges存储过程,这个存储过程使用AUTHID CURRENT_USER为我授权。这样“我”就可以在不改变我自身权限的情况下获得并执行SYSTEM的权限。
防范此类攻击的方法
数据库管理员该怎么应对这个问题呢?首先,你应该审核数据库的CREATE ANY权限,删除其中不需要的那些部分。其次,看看类似于www.securityfocus.com这类的论坛,看看关于权限提升的最新漏洞。最后,激活对某些特定类型数据库活动的审计功能并没有什么坏处,这样数据库就能让你实现自我保护。当数据库自行审核类似于GRANT DBA这样的事件时,你可以通过查看审计日志知道有没有出现恶意或突发的活动
7. 操作系统指令和安全
黑客并不总是通过shell命令行提示符登录到你的系统的。 不过,通过诱使Oracle数据库运行操作系统水平的指令,我们的确给黑客提供了一条运行指令的有效途径。这些指令能够删除和破坏文件、改写日志(以便隐藏他们的行踪)、创建帐户,以及其他一些能通过命令行输入指令达成的操作。他们是怎么做到的呢?尽管方法有很多,最容易的一种就是通过Java和PL/SQL这些程序语言。通常可以利用创建外部存储过程的能力,使之执行一个具备系统调用功能的存储程序。这个系统调用指令能够以首次安装时使用的oracle帐户权限执行。
防范此类攻击的方法
虽然Oracle在保护用户免受此类攻击上已经取得了一定进展,不过你最好还是把希望寄托在你的预防监测工作上。严密留意你的系统内部有没有出现这类活动,当有攻击者试图对你使用此类恶意攻击时,你最好能够事先掌握主动权。
8. 文件系统安全
对文件系统(filesystem)的访问是一个让你头大的棘手问题。“oracle”操作系统用户拥有所有Oracle软件和数据库数据文件的访问权限,所以如果数据库内部的某些用户利用UTL_FILE包访问filesystem上的文件时,他们就可以访问之前由于权限和角色限制而无权访问的很多数据库内部文件。
防范此类攻击的方法
Oracle引入DIRECTORY对象在防止此类攻击上也有一定作用。在10g系统中,必须通过DIRECTORY对象来定义某些类型的读写操作。这意味着用户必须拥有CREATE DIRECTORY权限,而在前面介绍的权限提升问题中,我们已经看到可以通过很多方法获取这种权限。即使这些也被解决了,还是有很多方法可以通过PL/SQL或Java语言来获取对filesystem的访问权限和对文件的读写权限。
总论:
就像上面讨论的一样,Oracle数据库产品有很多漏洞,有时候看起来就像由一些聪明透顶的工程师建造的一所豪宅,工程师固然聪明,但比那些觊觎此宅的黑客们忠厚老实多了。因此,他们没有预料到有人会利用这种种方法来偷砖窃瓦削弱豪宅的根基。黑客可以通过很多不同的方法进行攻击,侵入到目标数据库。
- 上一篇:如何提高Oracle性能
- 下一篇:不安装Oracle客户端也可以系统移植



