目录

门罗币概述及挖矿指南

近期对数字货币挖掘(“挖矿”)有比较高的热情,主要以门罗币(Monero/XMR)及其衍生货币为主,因为它们被很多黑客作为攻击后主要挖掘的货币——其可以在CPU上挖掘,且对CPU运算效率速度无特别的要求,因此适用于大部分无显卡的服务器挖矿。同时,由于其超强的匿名性和不可追踪性,被广泛用于灰色交易当中。

在最近这一周,我主要把时间花在了门罗币挖矿软件XMRig及配套的矿工池XMRig-Proxy上,开发者主要通过捐赠以及挖矿软件的1%-5%的捐赠来获得回报。经过查询,在2020年1月7日时,捐赠矿工池地址donate.v2.xmrig.com:5555下其正在进行Sumokoin(使用CryptoNightR算法)的挖掘。

本文的主要内容有以下部分:

  1. 云端部署分布式矿工池及矿工;
  2. 无捐献矿工编译方法;
  3. 部分平台的静态矿工编译。

云端部署分布式矿工池及矿工

在之前一周的时间里,我主要在阿里云、亚马逊云(Amazon Web Services)以及微软云(Microsoft Azure Cloud)上尝试部署矿工池以及矿工应用,谷歌云(Google Cloud Platform)对挖矿软件的检测十分严格,同时可能存在对流量监控的问题,一旦发现挖矿的就直接封禁项目。

矿工池

由于中国大陆对世界最大的门罗币矿场supportXMRmineXMR的连接速度有限,且丢包率较高,因此我选择了在海外服务器自建矿工池代理节点XMRig-Proxy,而后将矿工连接到自建矿工池节点,再将自建矿工池节点连接至矿场来提升连接的稳定性。

自建矿工池具有如下几个优势:

  1. 无需逐个配置矿工,只需要将矿工运行并且连接至矿工池即可;
  2. 不会在矿工设置文件中暴露钱包地址,只会暴露矿工池的IP地址(如果矿工池的流量经过转发,矿工池的IP地址也不会暴露),因此黑客可以安全地在任何入侵设备上挖矿;
  3. 通过修改矿工池的配置文件,可以统一调配所有连接的矿工执行特定的算法、开采特定的数字货币;
  4. 并发性能超高,在超低配置(1核1GB内存)的服务器上运行,同时连接的矿工数量能够超过10万;
  5. 矿场的同时连接数有限,一般单个钱包地址只允许100个矿工连接,通过矿工池作为代理,能够变相增加矿场允许连接矿工的数量;
  6. 矿工池可多级代理,即矿工池能够层层连接;
  7. 矿工池支持SSL证书,因此能够对传输数据进行加密及伪装,和正常HTTPS通信并无二致,能够绕开海外企业的数据监控(具体可参考谷歌云流量监控
  8. 如果矿工池直接接入Tor网络,则矿场也无法回溯矿工池的IP地址,目前,已经存在暗网上的门罗币矿池RespectXMR以保证绝对的匿名性。

因此,将矿工连接到自建矿工池也成为了黑客在攻击后的首要选择。

矿工池部署

我部署了两个矿工池,香港、美国各部署一个,原因如下:

香港矿工池

  1. 主要矿场在新加坡都有子节点,香港至新加坡的连接延迟一般低于50ms;
  2. 中国连接香港的延迟(约70ms)远低于中国直连新加坡的延迟(约150ms),香港可以辐射整个泛太平洋地区的矿工。

美国矿工池

  1. 各个云服务商在美国地区提供的云服务价格最低,在美国建矿工池节约频繁的矿工配置时间。

矿工池的部署可以参考GitHub的Wiki以及XMRig-Proxy官方文档

参考配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
{
    "access-log-file": null,                     // 
    "access-password": null,                     // null
    "algo-ext": true,
    "api": {
        "id": null,
        "worker-id": "Your Worker Name"          // web
    },
    "http": {
        "enabled": true,                         // web
        "host": "0.0.0.0",
        "port": 50001,
        "access-token": "password",              // web
        "restricted": true                       // web
    },
    "background": false,                         // 
    // 
    "bind": [
        {
            "host": "0.0.0.0",
            "port": 443,
            "tls": true
        }
    ],
    "colors": true,
    "custom-diff": 0,
    "custom-diff-stats": false,
    "donate-level": 0,                            // 0
    "log-file": null,                             // 
    "mode": "nicehash",
    "pools": [
        {
            "algo": null,
            "coin": "monero",                     // 
            "url": "pool-hk.supportxmr.com:443",  // 
            "user": "Your Wallet Address",        // 
	     "pass": null,
            "rig-id": "Your Worker Name",         // 
            "keepalive": true,
            "enabled": true,
            "tls": true,                          // HTTPS
            "tls-fingerprint": null
        }
    ],
    "retries": 3,                                 // 线线
    "retry-pause": 1,
    "reuse-timeout": 0,
    // HTTPS
    "tls": {
        "protocols": null,
        "cert": "TLS Certificate",                 // TLS
        "cert_key": "TLS Private Key",             // TLS
        "ciphers": null,
        "ciphersuites": null,
        "dhparam": null
    },
    "user-agent": null,
    "syslog": false,
    "verbose": true,
    "watch": true,
    "workers": true
}

无捐献版本XMRig

获取XMRig源码后,在/src/donate.h文件中将constexpr const int kMinimumDonateLevel = 1;修改为constexpr const int kMinimumDonateLevel = 0;即可。

静态XMRig编译

由于普通的动态编译版本是使用本机的支持库,直接指向本机支持库的地址,而不同设备下支持库的路径可能不同,因此可能导致软件无法运行的情况。选择对文件进行静态编译,静态编译后的文件将所有支持库融入文件当中,则可以在任何设备上都能够无差别运行,适合黑客大批量部署。

官方Release通道发布的版本均为静态编译文件,但是这些静态编译版本设定最低捐赠额度(每100分钟有最低1分钟/默认5分钟的挖矿时间捐赠给开发者),因此也并未给出详细的静态编译教程。

注意:由于我测试的矿机没有GPU,因此没有尝试任何AMD/NVIDA/CUDA的静态编译版本制作。

大部分服务器均为无GPU版本,因此下述编译方法应该也是大多数黑客所采用的,如果需要研究网络安全的部分,则应该仔细审查通过下述Linux静态编译方法编译出的二进制文件特征。

macOS静态编译方法

macOS由于系统标准化程度高,静态编译较为简单,可参考官方编译方法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 下载XMRig最新源码
git clone https://github.com/xmrig/xmrig.git
# 进入XMRig地址
cd xmrig

# 下载Portable Hardware Locality (hwloc),用于识别CPU个数以自动调整挖矿效率
curl -O https://download.open-mpi.org/release/hwloc/v2.1/hwloc-2.1.0.tar.bz2
# 解压及编译hwloc
tar xjf hwloc-2.1.0.tar.bz2
cd hwloc-2.1.0
./configure --disable-shared --enable-static --disable-io --disable-libxml2
make -j $(sysctl -n hw.logicalcpu)

# 编译XMRig
cd ../build
cmake .. -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DHWLOC_INCLUDE_DIR=../hwloc-2.1.0/include -DHWLOC_LIBRARY=../hwloc-2.1.0/hwloc/.libs/libhwloc.a
make -j $(sysctl -n hw.logicalcpu)

Linux静态编译方法

Linux系统的发行版众多,静态编译较为复杂,我主要使用Ubuntu系统,因此本文将以Ubuntu系统为例讲解静态编译方法。

注意:该编译方法暂时不完全,未成功编译SSL支持库,仍需要后续尝试并且补全。

需要静态编译的支持库有以下几个部分:

  1. Portable Hardware Locality(已完成,已测试,参考Issue
  2. libuv(已完成,待测试,参考官方编译方法
  3. libssl(暂未开始尝试)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 下载编译所需要的支持库
sudo apt-get install git build-essential cmake libuv1-dev libssl-dev libhwloc-dev
# 下载XMRig最新源码
git clone https://github.com/xmrig/xmrig.git

# 下载并编译Portable Hardware Locality
cd ~
wget https://download.open-mpi.org/release/hwloc/v2.0/hwloc-2.0.4.tar.bz2
tar xjf hwloc-2.0.4.tar.bz2
cd hwloc-2.0.4
./configure --disable-shared --enable-static --disable-io --disable-libudev --disable-libxml2
make

# 设定build文件目录
cd xmrig && mkdir build && cd build

# 编译
cmake .. \
  -DUV_LIBRARY=/usr/lib/x86_64-linux-gnu/libuv.a \      # libuv
  -DHWLOC_INCLUDE_DIR=~/hwloc-2.0.4/include/ \          # hwloc include目录
  -DHWLOC_LIBRARY=~/hwloc-2.0.4/hwloc/.libs/libhwloc.a  # hwloc libhwloc.a文件
make

其它

谷歌云流量监控

我在谷歌云曾经部署过V2Ray代理作为流量中转,但由于谷歌云对免费容器的限制,我从未在上面部署过任何矿机。

然而,谷歌云在最近一周两次向我发送警告,声称检测到我在容器中进行挖矿。我的所有设备的非大陆段IP流量全部通过谷歌云中转,但从未在谷歌云上部署过矿机进行挖矿,因此,谷歌云极有可能对所有经过设备的流量进行监控。

出于安全考量,建议所有用户不要再使用谷歌云架设任何代理,尤其是通过明文传输的HTTP数据切勿再经过谷歌云。普通的代理主要起通道作用,安全性本身就远低于传统VPN,因此任何明文传输的数据都极容易被监听。

若无其他选择,架设后所有的数据也务必使用TLS加密。

JavaScript浏览器挖矿脚本

效果十分震撼,但时间有限暂未开始此部分写作。

捐赠

随波逐流,附一个XMR地址
8579JuUDatseeMWWSBzQwr8aBuq58RViLeFSS5xNHueL3vV8rFm2nSaU4oyVoF2v9eBzM4rMGWwaaTciKSs4cyuiD9PApL5