资讯 政企安全
此为临时链接,仅用于文章预览,将在时失效

oracle 数据库攻防案例,“数据库已锁,请上交比特币”| 硬创公开课(总结+视频)

作者:又田
2017/11/28 08:25

oracle 数据库一直占据全球数据库市场份额之首,由于关注度和使用率高,目前被发现的漏洞数量同样居首。漏洞攻击是黑客最惯常使用的手段,以窃取或篡改数据为主要目的,甚至通过攻陷数据库控制整个系统。

这些攻击手段大多有迹可循,本期硬创公开课,雷锋网宅客频道邀请了安华金和攻防实验室安全专家刘思成,他将通过分析典型攻防案例,帮助大家掌握黑客攻击手法和特征,提前感知威胁,提早进行安全防护。

嘉宾介绍

oracle 数据库攻防案例,“数据库已锁,请上交比特币”| 硬创公开课(总结+视频)

刘思成,安华金和攻防实验室安全专家。多年数据库漏洞及攻防原理研究经验,参与发现国内首个国际数据库漏洞,并获 CVE 认证。至今与团队成功发现数据库漏洞 13 个,包含多个国际数据库中高危漏洞以及国产数据库超高危、高危漏洞,具备深厚的数据库攻防研究能力与经验储备,关注全球数据安全事件,并通过攻防演练还原泄漏原因和攻击手段,并提供专业的安全解决思路。

以下是公开课总结文实录+视频,在不妨碍原意的表达上,雷锋网略有删节,视频附在文末:

若想获得此次公开课完整 PPT,请关注微信公众号宅客频道(微信ID:letshome),回复“oracle数据库 ”。

内容介绍

本期雷锋网硬创公开课包含但不限于以下内容:

1. 在运维测数据库安全将面对哪些安全挑战?

2. 数据库配置不当带来的安全挑战。

3. 数据库漏洞带来的安全挑战。

4. 数据库勒索病毒带来的安全挑战。

oracle数据库虽然经历了几十年的发展,但还存在着这样或那样的安全问题,数据库的安全风险是多个角度、多个层面共同作用的结果。我们用的数据库扫描工具给很多客户做过数据库安全检查,在检查中发现了各种问题。其中包含默认密码、数据库后门、数据库配置不当、敏感数据、高危审计、版本错误、数据库漏洞以及数据库勒索病毒等。今天我和大家分享的是运维侧最常见的三种安全问题:数据库配置不当、数据库安全漏洞和数据库勒索病毒。

数据库配置不当

oracle 数据库存在几千个参数配置项,难免在配置中出现错误或者不合理的情况。当发生错误配置时,带来的安全问题甚至比数据库漏洞造成的后果要严重的多。我们把和安全相关的数据库配置分为四类:

1)参数设置不当。

2)角色设置不当;

3)系统权限设置不当 ;

4)包权限设置不当。

其中,参数设置不当是指,某些参数进行了错误设置,这是针对所有数据库用户而言,错误的设置可能会给漏洞提供温床、也可能本身就能当作漏洞执行。角色、系统权限和包权限设置不当是专门针对低权限数据库用户而言,错误的设置可能导致低权限用户利用特定角色、系统权限或包把自己提权到 DBA 或其他默认高权限用户。

1、用户真实案例

oracle 数据库攻防案例,“数据库已锁,请上交比特币”| 硬创公开课(总结+视频)

有一次,我们在用户现场用数据库漏扫产品帮用户做安全检查,结果发现用户侧上图所示的参数被设置成了*。用户一开始觉得这个设置没什么大问题,随着我们向用户展示如何利用这个错误配置项,攻击数据库,用户发现原来这个错误配置会造成严重后果。

那么,上图所示 UTL_FILE_DIR 和 utl_file是用来做什么的呢?

l UTL_FILE包:用来读写操作系统上的文本文件

l UTL_FILE_DIR :Oracle 的一个静态参数,负责确定UTL_FILE 读写路径。

1)参数配置不当

当 UTL_FILE_DIR 的参数被设置为*的时候就意味着可以用数据库用户访问操作系统Oracle 账号下的所有文件。假如你是黑客,你会怎么利用这点来攻击数据库呢? oracle 数据库攻防案例,“数据库已锁,请上交比特币”| 硬创公开课(总结+视频)

当我们具备读写文件的能力,最直接的做法就是利用写的权限,在home/oracle 下写一个脚本。例如这个脚本可以让我们在home/oracle 路径下创建一个脚本 hell,该脚本可以塞入到Oracle 账号权限下能执行的所有行为,作为黑客的我们就可以为所欲为了。当然,这只是个演示,于是我们写的是Hello world。 oracle 数据库攻防案例,“数据库已锁,请上交比特币”| 硬创公开课(总结+视频)

理想很美好,但现实却很骨感。在windows上如果数据库账号未经过降权限处理,此举或许可行,但对于linux来说不可以,因为如此创建的文件并没有执行权限,根本无法执行或被调用。新建的文件不行,但如果是覆盖已有的文件,或许就能达到目的。其中,可以覆盖的文件有很多例如oracle_home\bin 路径下的 dbstart。但是这种脚本的方式需要调用才能执行,很可能很久之后才能被动触发,如此守株待兔哪有主动出击来得畅快呢。 oracle 数据库攻防案例,“数据库已锁,请上交比特币”| 硬创公开课(总结+视频)

这时候,我们可以调整思路去覆盖一些对数据库直接产生影响的文件。例如下图所示的这个文件,是数据库下的密码文件,里面存储了sys用户在身份验证时的密码和一些关键信息。

 oracle 数据库攻防案例,“数据库已锁,请上交比特币”| 硬创公开课(总结+视频)

▲orapworcl 是Oracle 的密码文件

图中是orapworcl的结构,其实完全不用弄清楚其中的细节,只要使用一个密码已知的该文件,将其中的二进制覆盖到目标文件即可。如此一来,就达到了任意用户可修改SYS用户密码的效果。 oracle 数据库攻防案例,“数据库已锁,请上交比特币”| 硬创公开课(总结+视频)

根据上述想法,咱们把整个文件中的内容替换成我们已知密码的文件,再使用低权限账号执行sql ,完成之后当再一次登录数据库时会发现,原来 sys 账号的 test 密码已经无法正常登录,修改后的sys 密码却可以正常登录数据库。 oracle 数据库攻防案例,“数据库已锁,请上交比特币”| 硬创公开课(总结+视频)

至此,我们完成了利用ult_file_dir 参数错误配置,实现低权限用户可在数据库服务器上注入脚本和修改SYS账号密码的攻击演示。

除上述案例中讲述的一类参数配置错误导致的安全问题,角色权限、系统权限和包权限设置不当,同样会导致低权限用户直接获得提权至DBA,或能够控制操作系统、越权执行任意sql 语句。

 2)角色权限设置不当

例如,角色权限设置不当。当角色被赋予低权限用户,相当于交出了完整的java权限,可以让低权限用户通过Oracle 账号权限获得操作系统的操作权限,从而可在操作系统上为所欲为。

3)系统权限设置不当

系统权限设置不当一旦出现,这种情况就更危险了。执行任意存储过程的权限一旦被赋予低权限用户,后者可以利用某些调用者权限存储过程实现提权到DBA的目的。

4)包权限设置不当

包权限设置不当也是一件麻烦事儿。如果把包权限给了低权限用户,低权限用户就可以利用语句以SYS权限调用执行计划函数,从而有机会执行任意sql语句。

总结下来,因为数据库配置不当带来的安全隐患表现为:

角色权限设置不当——AVASYSPRIV角色给予低权限用户

系统权限设置不当——EXECUTE ANY PROCEDURE权限给低权限用户

包权限设置不当——DBMS_IJOB包权限给低权限用户

2、防护建议

那么如何既简单又高效的解决配置不当引起的安全问题?针对配置不当,我们提供三条安全防护建议,90%的安全问题都可迎刃而解:

1)严格按照Oracle官方网站的建议进行配置,切莫简单满足应用需求,而自毁长城。

2)对所有账号实施最小权限控制。尤其是对于第三方开发调试所给予的数据账号密码一定要保持满足需求下的最小权限,最小权限将有效的减小数据库被入侵的威胁。

3)禁止或删除数据库对OS文件访问的函数或存储过程,避免殃及整个数据库所在的操作系统和内网环境。

此外,还有一种更省事的办法,就是直接用成熟的数据库漏扫产品进行定期检查。

数据库安全漏洞

数据库漏洞威胁一直是数据库的严重威胁。从不同角度来看数据库存在多种不同分类方式,按照漏洞属性分,数据库漏洞大体分为两种类型:第一是数据库专有漏洞,第二类是通用性软件漏洞。

 oracle 数据库攻防案例,“数据库已锁,请上交比特币”| 硬创公开课(总结+视频)

上图的分类并不完善,但涵盖了最主流的数据库漏洞类型。接下来,一起看一个跨越多版本的、覆盖面广、很难被发现的数据库漏洞组合利用案例:

1、真实案例:从协议上入侵Oracle

该案例是我们首次在用户的数据库中发现,同时存在 CVE-2012-1675 漏洞和 CVE-2012-3137 漏洞。这两个漏洞单均为中危漏洞,但两者组合使用会呈现出高危漏洞的效果。两个漏洞和数据库通讯协议密切相关,一旦被黑客利用,可以借此从网络端对 Oracle 数据库发动攻击。

黑客组合使用该漏洞组合可以分为三步:依次为探、改、破。

第一步:探。利用CVE-2012-1675 窃听用户客户端和数据库之间的通讯内容,盗取数据;

第二步:改。利用代理转发机制,对特定语句进行改包,以此返回黑客想盗取的信息;

第三步:破。通过网络窃取拿到数据库登录包的身份验证部分,再利用CVE-2012-3137漏洞进行离线暴力破解,拿到数据库的用户名和密码。

在讨论细节前,我们先探讨一下这两个漏洞的适用范围和原理:

TNS劫持(CVE-2012-1675)包含三个特点:

可用范围广(10g到11g大部分版本受到影响)

属于机制问题,多年未修复

隐藏性好(入侵过程不易留下痕迹)

离线暴力破解(CVE-2012-3137):截获到登录包后可以通过特定标记算出加密的密码。

简单说,TNS劫持原理是基于Oracle 支持多个实例注册在一个监听下,实例去注册监听有两种方式

第一种方式:本地注册

第二种方式:远程注册

同名的实例和IP端口会被误认为是一组RAC,而后按照负载均衡调用。

oracle 数据库攻防案例,“数据库已锁,请上交比特币”| 硬创公开课(总结+视频)

于是黑客只要知道目标数据库所注册的TNS在哪,伪造一组IP端口和实例名把自己通过远程注册的机制,注册到TNS中,就像下图中展示的有两个test11test实例。一个test11test是本地注册的,另一个是黑客通过远程注册的。当黑客把自己注册成同名实例后,只要维持好心跳,让TNS一直以为远程实例存活,TNS就可能把客户端发起的会话转发到黑客的伪造的实例上,从而发给黑客。黑客继而将会话再转发回数据库即可。

 oracle 数据库攻防案例,“数据库已锁,请上交比特币”| 硬创公开课(总结+视频)

Tns劫持本质就是一个大代理,因为负载均衡把一部会话转到黑客处,黑客改包后在转回给真实数据库处理。这样数据库和客户端可能在一段时间内都无法感觉到其中的变化。因此,劫持可以默默潜伏偷听敏感信息或者直接对来包进行改包,得以查询敏感信息。

1)TNS劫持的真实效果

 oracle 数据库攻防案例,“数据库已锁,请上交比特币”| 硬创公开课(总结+视频)

模拟黑客在同一个监听下利用远程和本地分别注册两个同名实例。客户端访问监听,监听按照客户端中的数据库名信息分配数据库,由于监听下有2个同名实例名,客户端链接很可能会被分配到劫持者的数据库实例下,再通过配置劫持者的本地监听把客户端请求指回原数据库。

 oracle 数据库攻防案例,“数据库已锁,请上交比特币”| 硬创公开课(总结+视频)

测试客户端链接196次,目标数据库实例获得113次,劫持数据库实例获得83次基本满足负载均衡的假设。上图的第一个实例是local server真实的数据库实例,第二个实例是 remote server 黑客伪造的,通过上述方式我们可以截获约一半的客户端发送到服务器的合法链接,并从其中盗取数据,甚至进行改包。

2)离线暴力破解原理

 oracle 数据库攻防案例,“数据库已锁,请上交比特币”| 硬创公开课(总结+视频)

离线暴力破解(CVE-2012-3137)这个漏洞的原理是如果能获取Oracle 数据库登录包中的身份验证部分,则可以通过这个包来计算出当前登录所使用的账号和密码。在深入探讨之前,咱们还是一起看下身份验证部分的原理:

在Oracle发起连接后,Oracle客户端向Oracle数据库发送自己的版本号,包含加密算法等信息。最终2边确定使用什么加密算法,然后进行O5logon(身份验证协议)验证:

首先,客户端通过包把要进行身份验证的用户传输到数据库端。

接着,数据库端会针对身份校验用户名找到用户名对应的密码,通过一些列复杂的参数把密码算成一个48个字节的字符串,这个字符串被称为auth_sesskey。然后把auth_sesskey和随机盐通过网络包返回给客户端。

然后,客户端拿到服务器端的auth_sesskey,根据自己掌握的密码解出其中的随机数,在利用随机数生成客户端的 auth_sesskey和authpassword。

最后,数据端进行判断,如果成功则身份验证通过,后面再进行权限等的验证;如果失败则登录失败。

o5logon 协议具体算法

 oracle 数据库攻防案例,“数据库已锁,请上交比特币”| 硬创公开课(总结+视频)

oracle 数据库攻防案例,“数据库已锁,请上交比特币”| 硬创公开课(总结+视频)

上文提到客户端发给服务器的第一个包,上图中画红线的位置就是此次进行身份验证的用户,用户名是明文的。再看服务器给客户端的回包,回包中存在两个关键参数,也就是随机盐:AUTH_sesskey 和auth_vfr_data。其中,AUTH_sesskey是以Oracle_hase 为key 用当时系统通过一些列参数生成的40个字节随机数,使用aes-256-cbc进行加密生成;Oracle_hase则是Oracle中存储的对应用户名的密钥进行sha1和md5的结果。后面的客户端的 auth_sesskey 和 auth_password 也是通过类似的手段计算得出。

离线暴力破解

离线暴力破解漏洞正是利用存在该漏洞的版本,如果你使用正确的密码算出Oracle_hash。用Oracle_hash再对网络包中的auth_sesskey 进行解密,你会发现40个字节的随机字符串中的最后4个字节是0x40x040x040x040这种模式,并非一组毫无规律的随机数。因此,可以反推出用于计算oracle_hash的密码是真正的数据库密码。

 oracle 数据库攻防案例,“数据库已锁,请上交比特币”| 硬创公开课(总结+视频)

2、防护建议

如何防护数据库漏洞引发的对运维侧的攻击,我们提出两条防护建议:

1)如果允许第一时间内打补丁是非常必要的。官方补丁能解决95%的问题,攻击数据库经常都是用的很老的漏洞,0day比例就很小。

2)如果由于测试结果或环境的问题无法打补丁,那么只能采用具备虚拟补丁能力的数据库防火墙产品进行加固,虚拟补丁通过规则可以防护大部分已知数据库漏洞的攻击。

视频内容:

视频主要介绍一套组合漏洞,TNS 劫持+离线暴力破解,这两个漏洞本身危害极大,加在一起可以更加扩大它的使用范围。我先简要介绍一下 TNS 远程劫持,TNS 远程注入劫持只需要知道目标数据库的 IP 地址、端口号和实例名,知道这三项后可通过欺骗的方法,把自己注册到 TNS 监听上,以伪装成一个数据库实例。

然后客户端在访问数据库的时候,会通过监听进行均衡,监听很容易把客户端会话引到这台假的服务器上,假的数据服务器为了保证客户端和数据库不发现它,还要通过代理的方法,重新把数据导回到真正的数据库上,从而达到欺骗两边的目的。

而 TNS 监听使不法分子监听数据库上的所有会话,也就是数据库客户端和数据库之间的会话会被不法分子监听到,不法分子就会拿到上面的明文信息,甚至在一定计划条件下可以对明文信息进行转包或者篡改包,使不法分子利用该会话权利拿到自己想要知道的真正的数据。

不仅如此,其还为离线破解密码创造了有利条件,离线暴力破解是通过数据库登录信息包来获得密码信息的方法,它可以快捷有效的通过离线数据库包中的密文进行解密,来获得真正数据库所使用的密码。补充一下,这两个漏洞危害较大,离线破解方法,基本上可以全版本通杀,而对应的 TNS 劫持则相对只局限在 10 和 11 这两个大版本上。

下面进行TNS 劫持演示。TNS 劫持是通过脚本来执行,首先,第一个脚本是为维护转发包,并不会马上启动,是等待有数据进来后才开始干活,我们通过第二个脚本注册数据库实例,它会把 我14.200 这台机器注册到 0.58 的 TNS 上,而以oracl11的名字来注册。

而我们演示的环境背景是以 192.168.14.204 作为数据库,来要劫持其数据库的会话信息。我先要成功的注册过去,也就是说现在客户端对 这台机器已经进行了链接的话,很可能会被他们连接到,这时候我开一个招商器,看看有没有效果。这时候我们直接登录上去,我插一句话,一会儿就来搜寻有没有这句话,为了保证一次能成功的话,我们可以多开几个,然后确定可以捕捉到。

开始查询后我们先首先查第二个有没有,很快就发现第二个会话已经成功被我们劫持到了,拿这个被劫持到的会话说,它的通讯信息已经被我们成功劫持到了,也就是我们完成了劫持的动作,然后,后面的所有的客户端对这个客户端的访问都可以在本机实现,而本机理论上是不会劫持到这些报告,这也就是 TNS 劫持的效果。我们再看看它同时捕获到了一个登录信息会话,就是这个包,这个包就是登录会话包,可以看到在登录汇会话包中有两个关键的包,一个是这个由数据库发给客户端的,我在这个包的范围内,我的机器不是客户端,因为客户端应该是它,但是被我欺骗了,同时我最后再把这块反发回去,我们把这两个信息提炼出来,给大家展示一下怎样做离线暴力破解。

我们只需要两个有用的信息就可以了,并不是所有的信息都是有用的,第一个串是数据库数据库发给客户端的加密信息,这个串包含着 oracle的加密信息和随机盐。第二个包是由于客户端发给服务器的,里面也包含了两个关键的加密串,这两个关键的加密串将揭露数据库的某些重要信息。首网络中用户名是明文的,所以我们并不担心,关键我们要了解的是数据库的密文,这块我们进行一下处理,第一个是加密串,第二个加密串,然后返回,这四个串拿到之后,我们把它写到我们的配置文件中,这个是我们解包程序的配置文件,我把它粘进来,保存一下,然后这时候我使用我的解包文件,我们计算一下这个用户对应的密码,至此我已经给大家演示了整套TNS加暴力破解的整个攻击过程。

视频内容结束。

因为视频中使用的是基于原理的暴力破解,所以可以支持所有的版本,并且需要前后两个数据包,而我们今天讨论的是基于漏洞的离线破解,所以只需要来自客户端到服务器一个包,并不需要另一个回包。而基于漏洞的暴力破解,主要影响 11 版的几个版本。

数据库勒索病毒

数据库勒索病毒,这是目前最为常见,也最为危险的数据库攻击方式。已经在用户处发现多起案例。其中,和数据库有关系的主要有三种:

客户端软件比特币勒索

Oracle 升级包恶意脚本

文件系统加密比特币勒索

文件系统加密相对来说,和数据库关系没那么紧密。这种类型基本只在windows上遇到过,不过据悉已经在linux上发现了文件勒索病毒。该病毒的勒索目标主要是文件系统上的一些特定后缀的文件。根据和数据库相关的程度可以分为三种:不加密数据文件、只加密文件头 和文件整体加密。

如果有备份这种情况下不会造成什么影响,直接启用备份即可,在确定没有备份的情况下可以考虑如下解决方式:

第一种,不加密数据文件。这种往往只加密了图片、执行文件、word文档等文件,对数据文件根本不加密。出现这类现象虽然会导致数据库无法使用,但起因只是因为把数据库的执行文件加密了。由于库文件未被加密,数据不存在丢失风险。把库文件转移到其他安全的机器上即可快速恢复数据库。

第二种,虽然加密了库文件,但只加密了库文件的头。这种相比第一种要麻烦一些,需要借助Oracle 官方或第三方dul 来抽取数据,抽取数据后重建数据库即可解决问题。

第三种,库文件被整体加密。这种比较棘手,没有备份就只能通过硬盘先恢复被删除的原库文件,恢复的多少和结果就比较随机了。

近些年,文件系统加密的勒索病毒也开始逐渐支持对库文件进行加密。防护此类攻击的最佳方式即做好备份工作。

1、真实案例:Plsql dev 软件比特币勒索

 oracle 数据库攻防案例,“数据库已锁,请上交比特币”| 硬创公开课(总结+视频)

上图是客户某次登录Oracle数据库时出现的勒索警告:要求用户上交5个比特币来换取解锁数据库的服务。经过到用户侧进行实地调研,最后锁定了用户一台机器上的破解版PL SQL Developer上。经过检查发现,PL SQL Developer主目录的自动执行sql脚本中存在35KB的恶意代码。黑客用Oracle 加密函数对内容进行了加密,破解后确定导致登录失败就是这个恶意脚本所为。

1)勒索软件原理介绍

oracle 数据库攻防案例,“数据库已锁,请上交比特币”| 硬创公开课(总结+视频)

解析上述脚本后可以将其梳理成图中样式。这个恶意脚本包含了4个存储过程和3个触发器。一共组成上图显示的三条攻击线:红线、绿线和紫线。每条线触发的条件不同,造成的危害也各不相同。勒索软件的原理是利用第三方数据库管理工具的自动执行脚本。在脚本中写入恶意存储过程和触发器。这些自动脚本会在程序链接数据库的过程中自动执行。勒索者正是利用管理脚本这种会自动执行且无任何提示的特点偷偷的将4个存储过程和3个触发器植入到数据库中。

其中,红线DBMS_SUPPORT_INTERNAL 

oracle 数据库攻防案例,“数据库已锁,请上交比特币”| 硬创公开课(总结+视频)

红线由触发器和存储过程共同组成。触发器触发的条件是数据库实例重启,重启后该触发器会触发存储过程删除SYS.TAB$中大部分数据库用户的信息,并在删除前秘密备份一份sys.tab$信息用于勒索后给客户恢复。这条线的主要核心是图中标号为1和2的SQL语句块。

标记1的这个语句是判断是否发动入侵的依据。勒索者根据当前库存在的时间决定是入侵数据库实施勒索还是先保持潜伏,直到条件成熟再爆发进行勒索。勒索者认为运行超过1200天的数据库是值得入侵的,里面很可能存在用户重要的数据,于是判断是否满足1200天(这里的1200天是指数据库实例创建的天数,而不是恶意软件入侵的天数),一旦满足则继续后续的入侵。

标记2的这个语句是整个存储过程的核心。勒索者首先对tab$表进行备份,把备份的表设置成一定特点的随机名称,方便收到赎金后从新帮用户找回数据。接着马上删除了tab$表中除了SYS用户和第38号用户的全部信息。并把勒索信息写入到日志文件alert中,向用户实施勒索。请注意这条线的报错信息应该是ORA- 20312.如果在日志中发现ORA- 20312信息,很有可能您的数据库已经中了红线的招式,建议查找是否存在表名类似ORACHK样式的表来进一步判断是否已被入侵。

绿线DBMS_SYSTEM_INTERNAL   

oracle 数据库攻防案例,“数据库已锁,请上交比特币”| 硬创公开课(总结+视频)

绿线同样是由触发器和存储过程共同组成。触发器的触发的条件是用户登陆数据库,当登陆时,该触发器会触发存储过程经过一些列判断后阻止用户正常访问数据库。这条线的主要核心是图中标号为1和2的SQL语句块。

标记1的这个语句是判断是否发动入侵依据。勒索者根据当前所有表的最小统计时间决定是入侵数据库实施勒索还是先保持潜伏,直到条件成熟再爆发进行勒索。勒索者认为超过1200天的是值得入侵的,里面很可能存在用户重要的数据,于是判断是否满足1200天,一旦满足则继续后续的入侵。

标记2的这个语句是判断用户的客户端是否满足C89239.EXE,如果满足则不弹窗报错阻止登陆。如果不满足则弹窗报错阻止登陆。把错弹出来阻止用户登陆,向用户实施勒索。其中注意这条线的报错信息应该是ORA- 20313。普通用户会被弹窗阻止是因为触发器报错导致,而DBA用户会无视报错信息成功登入,在登入后删除对应触发器和存储过程可解决这种入侵。第二步判断的C89239.EXE应该是勒索者收到赎金给用户提供的解决方案。

紫线  DBMS_SYSTEM_INTERNAL   oracle 数据库攻防案例,“数据库已锁,请上交比特币”| 硬创公开课(总结+视频)

紫线同样由触发器和存储过程共同组成。可见,这种攻击主要是依靠存储过程和触发器的配合进行。触发器触发的条件是创建恶意存储过程的用户登陆数据库,当该用户登陆时,该触发器会触发存储过程对该用户下的非系统表中的数据进行清除。这条线的主要核心是图中标号为1和2的SQL语句块。

标记1的这个语句是判断是否发动入侵。勒索者根据当前表空间的表的最小统计信息收集时间和当前时间比决定是入侵数据库实施勒索还是先保持潜伏,直到条件成熟再进行勒索。勒索者认为超过1200天的数据库是值得入侵的,里面很可能存在用户重要的数据,于是判断是否满足1200天,一旦满足则继续后续的入侵。

标记2的这个语句是当前用户对自己的表执行truncate操作,清掉用户数据,并把勒索信息写入到日志文件alert中。请注意这条线的报错信息应该是ORA- 20315。这条线是最危险的一条线,勒索者删除了表中数据并未,做相应的备份。恢复数据存在一定的难度,利用闪回机制或mydul等第三方工具可能能从数据库文件中恢复数据,但随着时间的流逝难度会越来越大、恢复数量则会越来越少。

视频内容:

我给大家演示一个数据库,它将被作为攻击机,然后我们用这种带有恶意脚本的 plsql 来登录这台机器,登录结果应该是这三个触发器和存储过程完全建立在这台数据库上,然后我们再登录。

登录成功后,可以看到触发器是这三个文件,已经成功建立,同样的存储过程也建立起来了。然后我们首先看一下,如果应用帐号来登录存在恶意触发器和存储过程的系统会产生什么样的效果,我们把它注销掉,然后用应用帐号登进来。这时候我们发现登录失败,这就是这个比特币勒索应用帐号的策略,当应用帐号登录时会发出 20313G 这个触发器进行工作。

20313G 触发器做了什么?

20313G 这部是由触发器和存储过程构成,就是只要用户登录就可以触发这个过程,而登录过程里主要有两件事,一是是否触发的条件判断,二是进行弹窗并拦截用户正常访问。可以清楚的看到,它的判断条件只有两点,第一如果这个表空间的时间比 1200 天多,我们就认为这个数据库执行不够长的时间就会触发,并且会判断一下客户端使用客户端是否是这个程序。可能是你交了赎金后,我们猜测黑客会给你发一个类似的客户端,帮助你不会被这种方式锁死。

当然这种解决方式也比较简单,只要用管理员帐号或 DBA帐号把备用触发器和存储过程删掉就可以。我们先看看有没有登录,用 DBA 帐号登录,这样会触发另外一个恶意的存储过程,所以说对方是一环扣一环的。我们在登录后表面看起来没有变化,其实在后面已经触发了第二个触发器,并且使第二个存储过程开始执行。触发的触发器,我们通过日志文件可以找到。这时候 DBA 帐号登录的话,会触发这个触发器,这个触发器是 20315,找到 20315这个触发器。

其触发方式是什么?如果你是对应触发器的帐号来登录,就会触发这个触发器,其中有部分操作是需要对当前的表有全部控制权的,可以看到它的准备阶段和上面的触发器有一定的判断,它的关键点是删除表中数据的过程,用这种方式去删除表中数据的话,其实给我们恢复数据带来一定麻烦。也就是说这个触发器比上面的触发器危险得多,它会直接对表中的数据进行大量的删除。

这是 20315 触发器,我们再看一下最后一个 20312 的触发器,那个触发器相对于两个触发器比较特殊,它需要数据库重启,这时候需要的权限也相对比较大,所以一般需要 CSC 帐号激活。在我登录后再重新登录帐号,登录之后,就会创建以 CSC 帐号为对应触发器的存在过程。为了给大家看第一组触发器的影响,我故意重启一下,现在再看一下,这时候触发器其实应该已经触发了,我们在这边看一下,到底触发没触发。它的号是 20312,我们可以看到 20312 已经触发了,在这边可以看到明文。

20312 这个触发器触发需要重启服务器,而它承担较多工作,其中它会把这张表拷贝到这张表去,并且会把这张表上的数据进行删除,直观的效果就是创建一张新的表出来。而有没有出现这张表,也可以作为我们判断它是否执行的依据,当然我们看日志也很容易看到有没有被触发。其实这部分的记录方式是,如果发现你已经中招了,但是在日志中还可以找到这个信息,导入回到被他删除的那个信息中。

视频结束。

我们来了解一种和客户端勒索病毒类似的Oracle升级包恶意脚本。两者手法基本完全一致。细小区别在于,客户端勒索病毒主要存在于客户端的一些自动执行脚本中,这些恶意脚本如果被放在升级包中就成了Oracle 升级包恶意脚本。

2、防护建议

如何防护数据库勒索病毒的攻击,有三条防护建议:

1)无论是客户端还是升级包都请从正规渠道下载,并计算MD5值千万别用破解版,免费的结果是省了小钱丢了数据。

2)利用数据库防火墙等类似产品对勒索病毒进行传播阻断,需要选用有上下文判断能力的成熟防火墙产品。

3)定期使用数据库漏扫工具进行查杀,排除安全隐患。

问答环节

问题1:用盗版的oracle数据库会有什么后果。

回复:所谓的盗版 oracle 数据库,它们其实是正版的,然后可能被插入了一些恶意脚本。一个软件使用前请计算一下文件的 MD5 值,官网是有的。而且实际上oracle数据库可以从oracle 官网下载免费版体验,就是给大家学习用的,所以我觉得没有必要在网上自己找一个可能不安全的版本。

问题2:有什么方式可以避免数据库被入侵。

回复:避免被入侵的方法。简单说,你把数据库该打的补丁定期打了,然后跟数据库链接的第三方客户端,用正版的。oracle自己也提供一些免费的第三方工具。做好上述两点你的数据库就有一定的安全保障了。如果你要是怕一些像开始我说的那些配置参数设错了,就可以去我们官网下一个免费的数据库扫描器试一试。

问题3:数据库防火墙如何在网上防止勒索病毒的。

回复:有一些数据库防火墙其实是可以理解上下文的,对一些加密数据库的存储过程进行解密。通过上下文的语义判断整体逻辑和把加密的存储过程解密成明文,那么就有可能通过一些规则或者策略,来把一些攻击行为屏蔽掉,当然这种是基于已知的,对于未知的,应该是没有太多的办法。

若想获得此次公开课完整 PPT,请关注微信公众号宅客频道(微信ID:letshome),回复“oracle数据库 ”。

长按图片保存图片,分享给好友或朋友圈

oracle 数据库攻防案例,“数据库已锁,请上交比特币”| 硬创公开课(总结+视频)

扫码查看文章

正在生成分享图...

取消
相关文章