4、探秘黑客踪
4.1 寓言公寓楼
城市一角有一栋单身公寓楼,公寓有门有窗。到了晚上,主人下班回来,拿钥匙打开门进屋,关门熄灯休息, 平时窗户半开着,通风透气,保持空气清新。
一台云服务器好比作一间单身公寓。黑客好比作不速之客,不请自来,黑客进屋有两条路可走,一条路是开门大摇大摆进来,另一条路是翻窗进屋,多少需要一些飞檐走壁的功夫。
公寓门比较先进,使用了电子密码锁,需要输入正确密码才能开门进屋。黑客是不知道密码的,不能进屋。
单身公寓的1605室在16楼,小明在这间公寓里住了小一年了,最近新交了一位朋友小芳,这段时间留宿在公寓。小明和新朋友上下班有早有晚,所以小明给她开了一个新账号,设了新密码。小明有点懒,把账号和密码设成一样的了,心想16楼很少有人来,楼道有24小时监控,谅他也没人敢私闯民宅。
过了一个月,两人闹别扭,小芳就搬出去住了。小明心情不好,独自郁闷,忘记收回给小芳的账号密码。
社区附近来了一个外国流浪汉。流浪汉是一名高智商的人士,喜欢无拘无束,过着狂野不羁的生活。有一天,流浪汉在公寓楼内闲逛,走着走着就到了1605房间,看见门上有一位姑娘头像剪影,还纹上了几个字母“fang”,那是小明和小芳秀恩爱时留下的。流浪汉灵机一动,不是很多人拿亲友名字做密码吗?且试一试密码锁。这一试不要紧,公寓门居然打开了。
于是,流浪汉住进了这间单身公寓,和小明过起了错峰式“同居”生活。小明白天去上班,晚上回家住。流浪汉白天过来住公寓,自个儿做饭吃,吃饱了就睡,天黑前离开。后来,流浪汉不满足了,晚上也来公寓,怕被主人小明发现,偷偷在小明喝水的杯子里放了一粒安眠药,溶解了无影无踪,小明喝了下了安眠药的白开水,晚上会睡得很香、很沉。于是,晚上也是流浪汉的天下了。
如此“同居”过了一个月,小明发现了一些异常,冰箱里的鸡蛋莫名其妙少了几个,茶几上的面巾纸也用得很快,早上带走了垃圾,晚上回来垃圾桶里又冒出啃剩下的鸡腿骨。
小明把这些异常情况跟他的好朋友小清说了,小清是一位知名的私家侦探,破获很多疑难案件。接到小明的消息,小清立刻来到小明的公寓,里里外外勘察了一遍,然后小明就去上班了。小清的目光留在公寓门上的姑娘剪影和“fang”上,似乎明白了什么。输入密码,公寓门自动打开了。小清又到大楼的视频监控室,调阅了小明公寓外的监控视频,看到那名流浪汉每天来来往往。小清修改了公寓门密码,又报了警。警方调查以后,发出了通缉令。
晚上,小明回来,小清把发生的一切一五一十地告诉了小明,小明大吃一惊,然后就开心地笑了,很高兴能有小清这样的侦探朋友。
4.2 查询访客志
前面说到,一台云服务器好比一间单身公寓,而黑客就好比闯入公寓的流浪汉。进入公寓可以从门进,也可翻窗进来,从高层公寓的窗户进屋,难度大一些,窗户还拉了钢丝网。
从门进屋,对一台云服务器就好比远程SSH登录进来,云服务器主人是管理员,也是通过SSH登录进来的。云服务器对外暴露的服务端口,可以接受访问请求返回响应,但不欢并迎不速之客从端口潜入并接管服务器。翻窗进屋,就好比攻击云服务器的服务端口,有漏洞的端口才能进去,所以翻窗难度很大
对于陌生人来说,从门进屋也不容易,除非知道门禁密码或者门禁遭到破坏。
有没有陌生人闯入云服务器,翻一翻系统登录日志就清楚了。就像调阅单身公寓的视频监控,有谁到访一目了然。
Linux的last命令能查询云服务器最近的SSH登录日志。
# last
图 Linux服务器的系统登录日志
4.3 孜孜找不同
几年前玩过一款小游戏,名叫找不同:两张图画满了形状各异的物体或几何图形,两张图绝大部分相同,只有几个形状不同而且隐藏在两张图画里。从登录日志里找蛛丝马迹,有点像玩找不同的游戏。很快找不同见效了,找到不同之处,有了新发现。
绝大多数登录记录的源地址是192.168.x.x,是云数据中心局域网地址,登录用户是root,与管理员的日常管理习惯一致。
有一条陌生IP地址记录引起了我的注意,登录账号是jira,最后退出时间是4月8日04:09到04:19,与木马文件sd-pam的最后修改时间“Apr 8 04:19”完全吻合。
可以推断,黑客用jira用户登录进系统,在10分钟内植入木马程序,然后扬长而去,静静等待“肉鸡”主机传回挖矿数据(数字货币)。
4.4 惊现无秘码
黑客是怎么知道登录账号和密码的?
我们知道,SSH是应用层通信加密协议,所有通信信息都是经过高强度加密的,很难破译,所以截获密文再破译的可能性几乎为零。猜测暴力破解密码的可能性也为零。猜测暴力破解密码的可能性也为零。
黑客登录账号jira并不是管理员常用的root账号,进一步证明账号密码不是破译而来的。
还有另一种可能,密码丢失是因为管理员疏忽大意,使用了容易猜测的简单密码,例如:123,123456,abc,或者密码干脆等于账号。
我们来验证一下,弱密码的猜测是否成立。到目前为止,我还不知道账号jira的密码。
通过跳板机用root登录到JIRA云服务器。 然后,切换到另一个普通用户jira1(该账号登录受限,不可远程登录),root用户切换到普通用户不用输入密码。接着,从普通用户jira1切换到用户jira,此时必须输入jira用户的密码。输入密码jira,居然切换成功了,证明jira账号的密码也是jira !!!这里我表示无语。
# ssh root@192.168.1.x
# su – jira1
$ su - jira
云服务器有一对泄了密、形同明文的账号和密码,就好比公寓泄密了密码,任由他人自由进出、来来往往。公寓被攻陷,进了流浪汉;服务器安全防线被攻破,“挖矿”的木马程序被植入,二十四小时不停地挖数字虚拟货币。
4.5 紧锁失密门
查询系统内没有正常进程在使用jira用户,确认jira用户暂时闲置无用。立即修改jira用户密码,并锁定账号。
# passwd jira # usermod -L jira
又巡视了一遍操作系统,/etc/passwd、/etc/shadow都没有可登陆的用户。从SSH端口攻入云服务器的入口都被封堵。
做完这些事情之后,初步判断系统已经安全后,我的心情才逐渐舒缓下来。
周一上班后立即与云服务器管理员取得联系,系统管理团队对云服务器集群作了漏洞扫描和安全加固。
4.6 探寻黑客踪
心情放松下来,才有空闲思考黑客从哪里来,怎么进来的,还做了什么事!
查询百度,4月8日的黑客入侵源地址来自挪威。但是,黑客并不一定藏身挪威,甚至跟挪威一点关系都没有。因为入侵源地址可能只是一个跳板,一台受操控的“肉鸡”主机而已。
此后的5月1日,又有一波黑客来袭,大白天(下午14:34到14:41)大摇大摆地在侵入的云服务器待了6分钟,但并没有修改上一波黑客留下的木马程序。5月的黑客源地址来自瑞士,他会是谁呢?是上一波黑客,回来巡视取胜的旧战场。还是新来的“有道德的”黑客,看到有人捷足先登,悄然离去。不得而知,但一切皆有可能。
再往前看,1月10日到18日,先后有四次登录记录,地址来源各不相同,185.112.82.230、185.112.82.235、41.231.5.34和188.166.171.252,分别来自俄罗斯、俄罗斯、突尼斯和荷兰。
源地址的多样化,似乎表明黑客们可以随意出入这台云服务器。是什么原因吸引黑客们蜂拥而至呢?为什么是jira用户,而不是别的用户呢?
答案是端口扫描,并通过扫描获知公开信息,进而攻击服务器漏洞。
4.7 解读黑客术
黑客程序扫描公网IP地址或者扫描域名的HTTP端口(80端口、8080端口),分析返回的HTML文本,经过过滤、提取候选词,再与词库中的关键字对比。如果关键词匹配,从关键词关联的应用库提取对应的应用程序,推断该地址的HTTP端口提供该应用服务。例如:提取到jira关键词,推断该服务器提供JIRA服务;提取到sonarqube关键字,推断该服务器提供SonarQube服务,等等。
图 HTTP服务的默认页面暴露了具体服务
图 HTTP服务返回的默认响应暴露了具体服务
这些通用公共应用的安装指南,大多数会提示用户新建同名的操作系统账户,例如jira、mysql和redis等,以此用户来安装公共应用。一些粗心的管理员,会给系统账户设置简单密码。这正是这一类黑客程序攻击能得逞的关键原因之一。
互联网上IP地址浩如烟海,为什么偏偏是这台云服务器呢?
比较笨的办法是按地址段逐个IP扫描,发现IP地址上有开放的端口,再实施攻击、破解,攻破端口后,取得系统权限,植入木马程序。
一个国家所分配的IP地址号段是固定不变,除非有新增的IP地址号段。国家IP管理机构再给其国内的云服务提供商分配IP地址号段,这也是固定的,甚至可以公开查询任意一个云服务商的IP地址号段。同一个云服务提供商的云安全基础设施是共用的,有相同的护盾,也有相同的漏洞,只要在一台云服务器上发现了漏洞,很可能其他云服务器也有类似的漏洞。
向云服务提供商租用虚拟服务器的内容提供商,由于安全管理制度、安全基础软件和安全管理团队的共性,其管理的云服务器集群也就有了相似的安全性和相似的漏洞。举一反三,照猫画虎,攻击者攻陷一台云服务器后,很容易扩大战果攻击更多云服务器。
前文说到,黑客植入的木马程序是“挖矿”程序。在下一集将对这个“挖矿”程序动手术,肢解程序为几大块,分析它内部运行机制,对外通信联络模式等等。
本文是作者原创作品,原文发表在公众号 云服务器反黑客入侵攻防实录(二)