Oracle的销售在向客户兜售其数据库系统一直把它吹捧为牢不可破的,耍嘴皮子容易,兑现起来可就不那么容易了。无论什么计算机系统,人们总可以找到***它的方法,Oracle也不例外。本文将和你们从***的角度讨论***是用哪些方法把黑手伸向了你原觉得他们不能触及的数据,但愿做为Oracle的数据库管理员可以清楚的阐明本身基础架构的哪些区域比较容易受到***。同时咱们也会讨论保护系统防范***的方法。程序员
1.SQL注入***算法
现在大部分的Oracle数据库都具备为某种类型网络应用服务的后端数据存储区,网页应用使数据库更容易成为咱们的***目标体如今三个方面。其一,这些应用界面很是复杂,具备多个组成成分,使数据库管理员难以对它们进行完全检查。其二,阻止程序员侵入的屏障很低,即使不是C语言的编程专家,也可以对一些页面进行***。下面咱们会简单地解释为何这对咱们这么重要。第三个缘由是优先级的问题。网页应用一直处于发展的模式,因此他们在不断变化,推陈出新。这样安全问题就不是一个必须优先考虑的问题。sql
SQL注入***是一种很简单的***,在页面表单里输入信息,悄悄地加入一些特殊代码,诱使应用程序在数据库里执行这些代码,并返回一些程序员没有料到的结果。例如,有一份用户登陆表格,要求输入用户名和密码才能登陆,在用户名这一栏,输入如下代码:shell
cyw’);selectusername,passwordfromall_users;–数据库
若是数据库程序员没有聪明到可以检查出相似的信息并“清洗”掉咱们的输入,该代码将在远程数据库系统执行,而后这些关于全部用户名和密码的敏感数据就会返回到咱们的浏览器。编程
你可能会认为这是在危言耸听,不过还有更绝的。DavidLitchfield在他的著做《Oracle***手册》(OracleHacker’sHandbook)中把某种特殊的pl/sql注入***美其名曰:圣杯(holygrail),由于它曾通杀Oracle8到Oracle10g的全部Oracle数据库版本。很想知道其做用原理吧。你能够利用一个被称为DBMS_EXPORT_EXTENSION的程序包,使用注入***获取执行一个异常处理程序的代码,该程序会赋予用户或全部相关用户数据库管理员的特权。后端
这就是Oracle发布的著名安全升级补丁SecurityAlert68所针对的漏洞。不过据Litchfield称,这些漏洞是永远没法彻底修补完毕的。浏览器
防范此类***的方法sass
总而言之,虽然说没有万能的防弹衣,但鉴于这个问题涉及到全部面向网络的应用软件,仍是要尽力防范。目前市面上有各式各样可加以利用的SQL注入检测技术。安全
对于软件开发人员来讲,不少软件包都可以帮助你“清洗”输入信息。若是你调用对从页面表单接受的每一个值都调用清洗例行程序进行处理,这样能够更加严密的保护你的系统。不过,最好使用SQL注入工具对软件进行测试和验证,以确保万无一失。
2.默认密码
Oracle数据库是一个庞大的系统,提供了可以建立一切的模式。绝大部分的系统自带用户登陆都配备了预设的默认密码。想知道数据库管理员工做是否是够勤奋?这里有一个方法能够找到答案。看看下面这些最经常使用的预设用户名和密码是否是可以登陆到数据库吧:
UsernamePassword
applsysapps
ctxsyschange_on_install
dbsnmpdbsnmp
outlnoutln
owaowa
perfstatperfstat
scotttiger
systemchange_on_install
systemmanager
syschange_on_install
sysmanager
就算数据库管理员已经很勤奋的把这些默认配对都改了,有时候想猜出登陆密码也不是一件困难的事情,逐个试试“oracle”、“oracle4”、“oracle8i”、“oracle11g”,看看碰巧是否是有一个能登陆上去的。
PeteFinnigan提供了一份关于缺省用户和对应密码的名单,该名单很是全面并且是最新的,并包括已经加密的密码。若是你用all_users来进行查询,能够尝试并比较一下这份名单。
防范此类***的方法
做为数据库管理员,应该按期审核全部的数据库密码,若是某些商业方面的阻力使你不能轻易更改容易被人猜出的密码,你能够尽可能心平气和地和相关人员解释,用一些直观的例子来阐明若是不修改密码的话会有什么很差的事情发生,会有什么样的风险存在。
Oracle也提供了密码安全profile,你能够激活该profile,在某种水平上增强数据库密码的复杂性,还能够执行按期密码失效。要注意要把这个功能设置为只对经过网络服务器或中间层应用服务器登陆的事件起做用。
3.蛮力***(BruteForce)
蛮力***,就像其名字所暗示的,就是不停的撬,直到“锁”打开为止的方法。对于Oracle数据库来讲,就是用某种自动执行的进程,经过尝试全部的字母数字组合来破解用户名和密码。
Unix的管理员就能够利用一款名为JohntheRipper的密码破解软件来执行这类的***。如今若是你下载某个补丁,你也能够利用这款软件来对Oracle进行蛮力***,敲开其密码。不过根据密码的复杂程度不一样,这多是个很费时的过程,若是你想加快这个进程,能够事先准备一张包含全部密码加密的表,这样的表叫作Rainbowtable,你能够为每一个用户名准备一张不一样的rainbowtable,由于这种密码加密算法把用户名做为助燃剂。在这里就再也不深刻介绍更多的细节问题了。
Oracle服务器的默认设置是,对某个特定账户输错密码达十次就会自动锁定该账户。不过一般“sysassysdba”权限没有这个限制,这多是由于若是你锁定了管理员,那全部人都将被锁定。这样的设置为咱们***破解软件(OraBrute)如开辟了一条生路,它们会昼夜不停地敲打你数据库的前门,直到它乖乖打开为止。
防范此类***的方法
想要抵御此类***,可使用以前说起的对付预设密码***的方法。不过好奇心太重的数据库管理员也可能下载上面提到的工具侵入本身的系统。这说明了你真正的风险来自何方。
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.权限提高
简单的说,“权限提高”包括使用现有的低权限账户,利用巧取、偷窃或非法的方式获取更高的权限,甚至是数据库管理员的权限。
下面举个使用CREATEANY权限的例子。假设我能经过一个拥有CREATEANYTRIGGER权限的用户CYW访问数据库,这样我就能在任意的模式里建立触发器。若是你能追踪到一个任何用户都能执行写入操做的表,你在SYSTEM里建立了一个可以在低权限的你对该可写表进行插入或更新操做时执行的触发器。你编写的触发器会调用一个存储过程(也是你本身编写的),该存储过程会使用AUTHIDCURRENT_USER为调用者受权。这就意味着,当该触发器运行“你”的存储过程时,拥有SYSTEM的权限。如今你的非法存储过程内部,包含了“EXECUTEIMMEDIATE’GRANTDBATOCYW’”。这样我就能够在触发器运行的时候插入到个人公共表里,该触发器由SYSTEM全部,而SYSTEM会调用个人change_privileges存储过程,这个存储过程使用AUTHIDCURRENT_USER为我受权。这样“我”就能够在不改变我自身权限的状况下得到并执行SYSTEM的权限。
防范此类***的方法
数据库管理员该怎么应对这个问题呢?首先,你应该审核数据库的CREATEANY权限,删除其中不须要的那些部分。其次,看看相似于www.securityfocus.com这类的论坛,看看关于权限提高的最新漏洞。最后,激活对某些特定类型数据库活动的审计功能并无什么坏处,这样数据库就能让你实现自我保护。当数据库自行审核相似于GRANTDBA这样的事件时,你能够经过查看审计日志知道有没有出现恶意或突发的活动
7.操做系统指令和安全
***并不老是经过shell命令行提示符登陆到你的系统的。不过,经过诱使Oracle数据库运行操做系统水平的指令,咱们的确给***提供了一条运行指令的有效途径。这些指令可以删除和破坏文件、改写日志(以便隐藏他们的行踪)、建立账户,以及其余一些能经过命令行输入指令达成的操做。他们是怎么作到的呢?尽管方法有不少,最容易的一种就是经过Java和PL/SQL这些程序语言。一般能够利用建立外部存储过程的能力,使之执行一个具有系统调用功能的存储程序。这个系统调用指令可以以首次安装时使用的oracle账户权限执行。
防范此类***的方法
虽然Oracle在保护用户免受此类***上已经取得了必定进展,不过你最好仍是把但愿寄托在你的预防监测工做上。严密留意你的系统内部有没有出现这类活动,当有***者试图对你使用此类恶意***时,你最好可以事先掌握主动权。
8.文件系统安全
对文件系统(filesystem)的访问是一个让你头大的棘手问题。“oracle”操做系统用户拥有全部Oracle软件和数据库数据文件的访问权限,因此若是数据库内部的某些用户利用UTL_FILE包访问filesystem上的文件时,他们就能够访问以前因为权限和角色限制而无权访问的不少数据库内部文件。
防范此类***的方法
Oracle引入DIRECTORY对象在防止此类***上也有必定做用。在10g系统中,必须经过DIRECTORY对象来定义某些类型的读写操做。这意味着用户必须拥有CREATEDIRECTORY权限,而在前面介绍的权限提高问题中,咱们已经看到能够经过不少方法获取这种权限。即便这些也被解决了,仍是有不少方法能够经过PL/SQL或Java语言来获取对filesystem的访问权限和对文件的读写权限。
文章如转载,请注明转载自【网管小王的独立博客】:http://www.5iadmin.com/