Oracle的出售在向客户兜销其数据库体系一向把它吹捧为牢不可破的,耍嘴皮子简略,完成起来可就不那么简略了。不论什么计算机体系,人们总能够找到进犯它的办法,Oracle也不破例。本文将和咱们从黑客的视点评论黑客是用哪些办法把黑手伸向了你原认为他们不能触及的数据,期望作为Oracle的数据库办理员能够清楚的说明自己根底架构的哪些区域比较简略遭到进犯。一起咱们也会评论维护体系防备进犯的办法。
1.SQL注入进犯
现在大部分的Oracle数据库都具有为某种类型网络运用服务的后端数据存储区,网页运用使数据库更简略成为咱们的进犯方针体现在三个方面。其一,这些运用界面十分杂乱,具有多个组成成分,使数据库办理员难以对它们进行彻底检查。其二,阻挠程序员侵入的屏障很低,即便不是C言语的编程专家,也能够对一些页面进行进犯。下面咱们会简略地解说为什么这对咱们这么重要。第三个原因是优先级的问题。网页运用一向处于开展的形式,所以他们在不断改动,移风易俗。这样安全问题就不是一个有必要优先考虑的问题。
SQL注入进犯是一种很简略的进犯,在页面表单里输入信息,悄悄地参加一些特别代码,诱使运用程序在数据库里履行这些代码,并回来一些程序员没有料到的成果。例如,有一份用户登录表格,要求输入用户名和暗码才干登录,在用户名这一栏,输入以下代码:
|
假如数据库程序员没有聪明到能够检查出相似的信息并“清洗”掉咱们的输入,该代码将在长途数据库体系履行,然后这些关于一切用户名和暗码的敏感数据就会回来到咱们的浏览器。
你或许会认为这是在骇人听闻,不过还有更绝的。David Litchfield在他的作品《Oracle黑客手册》(Oracle Hacker’s Handbook)中把某种特别的pl/sql注入进犯美其名曰:圣杯(holy grail),因为它曾通杀Oracle 8到Oracle10g的一切Oracle数据库版别。很想知道其效果原理吧。你能够运用一个被称为DBMS_EXPORT_EXTENSION的程序包,运用注入进犯获取履行一个反常处理程序的代码,该程序会赋予用户或一切相关用户数据库办理员的特权。
这便是Oracle发布的闻名安全晋级补丁Security Alert 68所针对的缝隙。不过据Litchfield称,这些缝隙是永久无法彻底修补结束的。
防备此类进犯的办法
总而言之,尽管没有全能的防弹衣,但鉴于这个问题涉及到一切面向网络的运用软件,仍是要极力防备。现在市道上有林林总总可加以运用的SQL注入检测技能。
还能够用不同的侵略检测东西在不同的水平上检测SQL注入进犯。拜访专门从事Oracle安全性研讨的Pete Finnigan的安全网站http://www.petefinnigan.com/orasec.htm,在该网页查找“sql injection”,能够取得更多相关信息。Pete Finnigan曾在其博客上陈述称Steven Feurstein现在正在编写一个称为SQL Guard 的pl/sql程序包,专门用来防止SQL注入进犯。
关于软件开发人员来说,许多软件包都能够协助你“清洗”输入信息。假如你调用对从页面表单承受的每个值都调用清洗例行程序进行处理,这样能够愈加紧密的维护你的体系。不过,最好运用SQL注入东西对软件进行测验和验证,以保证满有把握。
2. 默许暗码
Oracle数据库是一个巨大的体系,供给了能够创立一切的形式。绝大部分的体系自带用户登录都装备了预设的默许暗码。想知道数据库办理员作业是不是够勤勉?这里有一个办法能够找到答案。看看下面这些最常用的预设用户名和暗码是不是能够登录到数据库吧:
|
就算数据库办理员现已很勤勉的把这些默许配对都改了,有时分想猜出登录暗码也不是一件困难的工作,逐一试试“oracle”、“oracle4”、“oracle8i”、“oracle11g”,看看可巧是不是有一个能登录上去的。
Pete Finnigan供给了一份关于缺省用户和对应暗码的名单,该名单十分全面并且是最新的,并包含现已加密的暗码。假如你用all_users来进行查询,能够测验并比较一下这份名单。
防备此类进犯的办法
作为数据库办理员,应该定时审阅一切的数据库暗码,假如某些商业方面的阻力使你不能简略更改简略被人猜出的暗码,你能够尽量平心静气地和相关人员解说,用一些直观的比如来说明假如不修正暗码的话会有什么欠好的工作产生,会有什么样的危险存在。
Oracle也供给了暗码安全profile,你能够激活该profile,在某种水平上加强数据库暗码的杂乱性,还能够履行定时暗码失效。要留心要把这个功用设置为只对经过网络服务器或中间层运用服务器登录的工作起效果。
3. 蛮力进犯(Brute Force)
蛮力进犯,就像其姓名所暗示的,便是不断的撬,直到“锁”翻开停止的办法。关于Oracle数据库来说,便是用某种主动履行的进程,经过测验一切的字母数字组合来破解用户名和暗码。
Unix的办理员就能够运用一款名为John the Ripper的暗码破解软件来履行这类的进犯。现在假如你下载某个补丁,你也能够运用这款软件来对Oracle进行蛮力进犯,敲开其暗码。不过依据暗码的杂乱程度不同,这或许是个很费时的进程,假如你想加速这个进程,能够事前预备一张包含一切暗码加密的表,这样的表叫做Rainbow table,你能够为每个用户名预备一张不同的rainbow table,因为这种暗码加密算法把用户名作为助燃剂。在这里就不再深化介绍更多的细节问题了,咱们能够查阅http://www.antsight.com/zsl/rainbowcrack/取得更多信息。
Oracle服务器的默许设置是,对某个特定帐户输错暗码达十次就会主动确定该帐户。不过一般“sys as sysdba”权限没有这个约束,这或许是因为假如你确定了办理员,那一切人都将被确定。这样的设置为咱们黑客破解软件(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. 权限提高
简略的说,“权限提高”包含运用现有的低权限帐户,运用巧取、偷盗或不合法的办法获取更高的权限,乃至是数据库办理员的权限。
下面举个运用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现已针对许多缝隙在数据库内部打上了补丁,并且侵略监测体系能体构额定的安全保证。所以数据库办理员应该对每一种缝隙都铭记在心,警惕性才是防备的要害,尽量履行好自己拟定的安全方案。