oracle数据库 尽管是一个功能性很强大的数据库系统,可是仍然逃不过 黑客 的破坏,也就是说,不管什么计算机系统,人们总能够找到攻击它的方法,Oracle也不例外。本文将和大家从黑客的角度讨论黑客是用哪些方法把黑手伸向了你原以为他们不能触及的数据,希望作为Oracle的数据库管理员能够清楚的阐明自己基础架构的哪些区域比较容易受到攻击。
1.SQL注入攻击
如今大部分的Oracle数据库都具有为某种类型网络应用服务的后端数据存储区,网页应用使数据库更容易成为我们的攻击目标体现在三个方面。其一,这些应用界面非常复杂,具有多个组成成分,使数据库管理员难以对它们进行彻底检查。其二,阻止程序员侵入的屏障很低,即便不是C语言的编程专家,也能够对一些页面进行攻击。下面我们会简单地解释为什么这对我们这么重要。第三个原因是优先级的问题。网页应用一直处于发展的模式,所以他们在不断变化,推陈出新。这样安全问题就不是一个必须优先考虑的问题。
SQL注入攻击是一种很简单的攻击,在页面表单里输入信息,悄悄地加入一些特殊代码,诱使应用程序在数据库里执行这些代码,并返回一些程序员没有料到的结果。例如,有一份用户登录表格,要求输入用户名和密码才能登录,在用户名这一栏,输入以下代码:
cyw’); select username, password from all_users;–
如果数据库程序员没有聪明到能够检查出类似的信息并“清洗”掉我们的输入,该代码将在远程数据库系统执行,然后这些关于所有用户名和密码的敏感数据就会返回到我们的浏览器。
你可能会认为这是在危言耸听,不过还有更绝的。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的安全网站,在该网页搜索“sql injection”,可以获得更多相关信息。Pete Finnigan曾在其博客上报告称Steven Feurstein目前正在编写一个称为SQL Guard 的pl/sql程序包,专门用来防止SQL注入攻击,详情请查看以下网页。
对于软件开发人员来说,很多软件包都能够帮助你“清洗”输入信息。如果你调用对从页面表单接受的每个值都调用清洗例行程序进行处理,这样可以更加严密的保护你的系统。不过,最好使用SQL注入工具对软件进行测试和验证,以确保万无一失。
2. 默认密码
Oracle数据库是一个庞大的系统,提供了能够创建一切的模式。绝大部分的系统自带用户登录都配备了预设的默认密码。想知道数据库管理员工作是不是够勤奋?这里有一个方法可以找到答案。看看下面这些最常用的预设用户名和密码是不是能够登录到数据库吧:
UsernamePassword
applsysapps
ctxsyschange_on_install
dbsnmpdbsnmp
outlnoutln
perfstatperfstat
scotttiger
systemchange_on_install
systemmanager
syschange_on_install
sysmanager
就算数据库管理员已经很勤奋的把这些默认配对都改了,有时候想猜出登录密码也不是一件困难的事情,逐个试试“oracle”、“oracle4”、“oracle8i”、“oracle11g”,看看碰巧是不是有一个能登录上去的。
Pete Finnigan提供了一份关于缺省用户和对应密码的名单,该名单非常全面而且是最新的,并包括已经加密的密码。如果你用all_users来进行查询,可以尝试并比较一下这份名单,详细名单请参阅:。
防范此类攻击的方法
作为数据库管理员,应该定期审核所有的数据库密码,如果某些商业方面的阻力使你不能轻易更改容易被人猜出的密码,你可以尽量心平气和地和相关人员解释,用一些直观的例子来阐明如果不修改密码的话会有什么不好的事情发生,会有什么样的风险存在。
Oracle也提供了密码安全profile,你可以激活该profile,在某种水平上加强数据库密码的复杂性,还可以执行定期密码失效。要注意要把这个功能设置为只对通过网络 服务器 或中间层应用服务器登录的事件起作用。
3. 蛮力攻击(Brute Force)
蛮力攻击,就像其名字所暗示的,就是不停的撬,直到“锁”打开为止的方法。对于Oracle数据库来说,就是用某种自动执行的进程,通过尝试所有的字母数字组合来破解用户名和密码。
Unix的管理员就可以利用一款名为John the Ripper的密码破解软件来执行这类的攻击。现在如果你下载某个补丁,你也可以利用这款软件来对Oracle进行蛮力攻击,敲开其密码。不过根据密码的复杂程度不同,这可能是个很费时的过程,如果你想加快这个进程,可以事先准备一张包含所有密码加密的表,这样的表叫做Rainbow table,你可以为每个用户名准备一张不同的rainbow table,因为这种密码加密算法把用户名作为助燃剂。在这里就不再深入介绍更多的细节问题了,大家可以查阅获得更多信息。
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数据库产品有很多漏洞,有时候看起来就像由一些聪明透顶的工程师建造的一所豪宅,工程师固然聪明,但比那些觊觎此宅的黑客们忠厚老实多了。因此,他们没有预料到有人会利用这种种方法来偷砖窃瓦削弱豪宅的根基。黑客可以通过很多不同的方法进行攻击,侵入到目标数据库。
【编辑推荐】
SQL数据库和ACCESS数据库使用区别
ACCESS改为SQL需要注意哪几个地方 数据库导入以后,自动增加字段需要重写,所有的数字类型需要增加长度,最好用decimal。 所有的默认值都丢失了。 主要是数字类型和日期类型。 所有now(),time(),date()要改成getdate()。 所有datediff(‘d‘, time1, time2)要改成datediff(day, time1, time2) 有可能一些true/false类型不能使用,要变为1/0。 备注类型要通过cast(column as varchar)来使用。 CursorType要改成1,也就是打开数据库时要给出第一个数字参数为1,否则记录可能显示不完整。 isnull(rowname)要改成rowname = null ACCESS的数据库中的自动编号类型在转化时,sql server并没有将它设为自动编号型,我们需在SQL创建语句中加上identity,表示自动编号! 转化时,跟日期有关的字段,SQL SERVER默认为smalldatetime型,我们最好将它变为datetime型,因为datetime型的范围比smalldatetime型大。 有时用smalldatetime型时,转化失败,而用datetime型时,转化成功。 对此两种数据库进行操作的sql语句不全相同,例如:在对ACCESS数据库进行删除纪录时用:“delete * from user where id=10“,而对SQL SERVER数据库进行删除是用:“delete user where id=10“. 日期函数不相同,在对ACCESS数据库处理中,可用date()、time()等函数,但对SQL SERVER数据库处理中,只能用datediff,dateadd等函数,而不能用date()、time()等函数。 在对ACCESS数据库处理中,sql语句中直接可以用一些VB的函数,像cstr()函数,而对SQL SERVER数据库处理中,却不能用。 ACCESS转SQL SERVER的数据库的几点经验 的数据库中的自动编号类型在转化时,sql server并没有将它设为自动编号型,我们需在SQL创建语句中加上identity,表示自动编号! 2.转化时,跟日期有关的字段,SQL SERVER默认为smalldatetime型,我们最好将它变为datetime型,因为datetime型的范围比smalldatetime型大。 我遇见这种情况,用smalldatetime型时,转化失败,而用datetime型时,转化成功。 3.对此两种数据库进行操作的sql语句不全相同,例如:在对ACCESS数据库进行删除纪录时用:“delete * from user where id=10“,而对SQL SERVER数据库进行删除是用:“delete user where id=10“. 4.日期函数不相同,在对ACCESS数据库处理中,可用date()、time()等函数,但对SQL SERVER数据库处理中,只能用datediff,dateadd等函数,而不能用date()、time()等函数。 5.在对ACCESS数据库处理中,sql语句中直接可以用一些VB的函数,像cstr()函数,而对SQL SERVER数据库处理中,却不能用。
用手机上网会不会中病毒呢?原因什么呢?
会中病毒,我用手机上网曾经中过,中毒之后手机自动删除了我好多重要的电话号码,给我添了好多麻烦。 1、手机病毒的实现原理 手机病毒其实也和计算机病毒一样,它可以通过电脑执行从而向手机乱发短信息。 严格的讲手机病毒应该是一种电脑病毒,这种病毒只能在计算机网络上进行传播而不能通过手机进行传播,因此所谓的手机病毒其实是电脑病毒程序启动了电信公司的一项服务,例如电子邮件到手机短信息的功能,而且它发给手机的是文档,根本就无破坏力可言。 当然也有的手机病毒破坏力还是比较大的,一旦发作可能比个人电脑病毒更厉害,其传播速度,甚至会比“我爱你”病毒更快。 侵袭上网手机的病毒,会自动启动电话录音功能,并将录音四处传送,病毒也会自动打出电话、删除手机上的档案内容,以及制造出金额庞大的电话账单。 由于部分手机病毒是从自动打出电话时散播,因为手机网络联系得太完善,因而它比电脑病毒影响更广,而将来随手机设计更复杂及功能更多元化,病毒带来的灾害亦会更广。 另外由于手机还有其他的数据通讯方式,例如短信息,WAP服务,一方面他们确实能给我们带来方便,只需按几个键就可以换个LOGO,下载你喜爱的铃声。 但也正是这些功能,可以写入系统或记忆体的指令,破坏者只要找出缺口,传出一个带毒的短信息,以Assembly Programming改变系统的机内码(machine code),将指令藏在记忆体中,然后在开启其他手机的电话本,大肆传播病毒,在一定时间内发作,破坏手机的开机系统。 2、手机病毒的攻击方式 现在有不少手机用户担心WAP手机将会成为黑客攻击的重要对象。 因为通过网络直接对WAP手机进行攻击比对GSM手机进行攻击更加简便易行。 对此,一些专家曾指出,由于此类技术难度很大,加之手机网络运营商大多已在WAP服务器和“网关”部位设置安全系统,所以一般用户基本不用担心。 黑客如果对手机进行攻击,通常有三种表现方式:一是攻击WAP服务器使 WAP手机无法接受正常信息。 二是攻击、控制“网关”,向手机发送垃圾信息。 三是直接攻击手机本身,使手机无法提供服务。 这种破坏方式难度相对较大,但目前的技术水平还很难达到。 基于上面的攻击方式,WAP手机等一切与计算机信息系统网络相关的产品将面临新的安全要求,这一切至少告诉我们,基于WAP“网关”防毒的产品需求已经产生,有关的手机厂商们,电信公司们该把这个问题提到议程上来了。 对于WAP手机用户,也要随时留意新的信息,防患于未然。 3、手机病毒的主要类型 目前市面上已经出现的病毒共有6种,它们分别是: A、第一种是“EPOC_ALARM”,它总是持续发出警告声音,虽无大害,却也颇为烦人; B、第二种是“EPOC_BANDINFO.A”,它发作时会将用户信息变更为“Somefoolownthis”; C、第三种是“EPOC_FAKE.A”,它会在手机的屏幕上显示格式化内置硬盘时画面,无需惊慌,因为实际上手机并不会执行格式化操作的; D、第四种是“EPOC_GHOST.A”,它会在画面上显示“Everyonehatesyou”的话; E、第五种是“EPOC_LIGHTS.A”,它会使背景灯BackLight持续闪烁; F、第六种是“EPOC_ALONE.A”,它可以使键盘操作失效;等等。 这六种病毒中前五种的危害并不很大,并且还有种恶作剧的味道,但第六种“EPOC_ALONE.A”却是一种恶性病毒。 当电脑执行有毒的程序时,会显示红外线通信接收文件时所显示的画面,并在此时将病毒悄悄地藏入内存之中。 当病毒在内存中安营扎寨之后,会在电脑画面上显示“Warning-Virus”的信息,此后手机便不接受任何键盘操作。 当您发现以后,可以输入“leavemealone”来解除病毒常驻。 4、对手机病毒采取的措施 A、关闭乱码电话 当对方的电话打过来时,本来屏幕上显示的应该是来电电话号码,但却显示别的字样或奇异的符号。 如果遇到上述场合,接电话者应不回答或立即把电话关闭。 如接听来电,则会感染上这种病毒,同时机内所有新名词及设定将被破坏。 B、尽量少从网上下载信息
动易程序Access和SQL Server数据库的区别是什么?
SQL Server数据库的特征及其与Access数据库的区别内 容Access特征MS SQL特征版本桌面版网络版,可支持跨界的集团公司异地使用数据库的要求节点一人工作,要锁定,其他人无法使用 节点多,支持多重路由器管理权限否管理权限划分细致,对内安全性高防黑客能力否数据库划分细致,对外防黑客能力高并发处理能力100人或稍多同时支持万人在线提交,在其它硬件例如网速等条件匹配的情况下可完全实现导出XML格式可以,需要单作程序可导出成为XML格式,与Oracle数据库和DB2数据库通用,减少开发成本数据处理能力一般快是否被优化过否是














发表评论