当前位置: 首页 > news >正文

主机有被植入挖矿病毒篡改系统库文件

查看主机有被植入挖矿病毒篡改系统库文件的行为

排查方法

挖矿病毒被植入主机后,利用主机的运算力进行挖矿,主要体现在CPU使用率高达90%以上,有大量对外进行网络连接的日志记录。

Linux主机中挖矿病毒后的现象如下图所示:

(一)Linux  系统
1、通过安装防病毒软件(详见附件),对主机进行全盘扫描和查杀,如无法清除的建议重新安装系统及应用;

2、如具备较强动手能力,可参照以下说明进行排查:

1)排查是否存在异常的资源使用率(内存、CPU等)、启动项、进程、计划任务等,使用相关系统命令(如netstat)查看是否存在不正常的网络连接,top 检查可疑进程,pkill 杀死进程,如果进程还能存在,说明一定有定时任务或守护进程(开机启动),检查/var/spool/cron/root 和/etc/crontab 和/etc/rc.local

2)查找可疑程序的位置将其删除,如果删除不掉,查看隐藏权限。lsattr chattr 修改权限后将其删除。

3)查看/root/.ssh/目录下是否设置了免秘钥登陆,并查看ssh_config配置文件是否被篡改。

3、在防火墙关闭不必要的映射端口号或服务,重启再测试是否还会有可疑进程存在。

4、建议系统管理员对操作系统及系统相关管理界面的登录设置强密码(10位以上,大小写字母、数字及特殊字符的组合);

(二)防范建议
目前防范挖矿病毒的主要措施有:

1、多台机器不要使用相同的账号和口令,登录口令要有足够的长度和复杂性,并定期更换登录口令;

2、定期检查服务器是否存在异常,查看范围包括但不限于:

a)是否有新增账户、未知进程;

b)系统日志是否存在异常;

c)杀毒软件是否存在异常拦截情况;

3、定期检测电脑、服务器、WEB网站中的安全漏洞,及时更新补丁;

4、对于服务器,建议配置访问控制,仅允许授权IP访问;

5、安装安全软件并升级病毒库,定期全盘扫描,保持实时防护;

6、从正规渠道下载安装软件,不安装未知的第三方软件,不点击未知的链接。
 

(三)针对挖矿进程的基本处理,后续还要做这几件事。

1检查网络连接是否有C2通信,查看是否有其他非正常连接

重点关注防火墙iptables,命令:iptables -L -n

2检查最近修改的文件,避免遗漏,因为挖矿病毒,往往还携带者其他病毒或工具包

命令:find /etc -ctime -2 (命令解释:指定目录/etc,且近2天内的新增文件)

3修补漏洞并加固系统

3.1你可以使用上述提到的沙箱确定病毒的家族,然后使用搜素引擎确认使用的漏洞, 并与自己的系统做比对

3.2通过病毒的行为确认漏洞。最常见的就是爆破各种服务的弱口令和未授权等。
 

(四)列举处理中会遇到的一些问题,推荐几个小技巧

使用top命令时,未发现cpu占用率高的进程?

1.系统命令被修改:

建议直接去其他正常主机上下载命令源文件至感染主机上

2使用busybox工具替代系统的命令:

存在守护进程监视操作行为,发现敏感操作挖矿程序自动停止

多试几次top命令,因为卡顿等原因有时会看到未来得及退出的进程,很实用。

预加载so文件,隐藏进程
 【技术向】Linux动态链接库预加载型后门

(五)删除文件和进程后,过段时间再次出现?

病毒采用了持久化的防护,要仔细检查启动项,计划任务,守护进程

1.查看计划任务,命令:cat /etc/crontab。计划任务文件有很多,不要看漏。

/etc/crontab;/var/spool/cron;/etc/anacrontab;

/etc/cron.d/;/etc/cron.daily/;/etc/cron.hourly/;

/etc/cron.weekly/;/etc/cron.monthly/;/var/spool/cron/

2.查看启动项

CentOS7以下版本:chkconfig –list;

CentOS7及以上版本:systemctl list-unit-files;

关闭启动项

CentOS7以下版本:chkconfig 服务名 off;

CentOS7及以上版本:systemctl disable 服务名;

启动项文件有很多,不要看漏。

/usr/lib/systemd/system;/usr/lib/systemd/system/multi-user.target.wants

/etc/rc.local;/etc/inittab;/etc/rc[0-6].d/;/etc/rc.d/

tem;/usr/lib/systemd/system/multi-user.target.wants

/etc/rc.local;/etc/inittab;/etc/rc[0-6].d/;/etc/rc.d/
 

谈谈处理Linux服务器(工作站)感染挖矿病毒的方法。

TLDR: 根据攻击者和攻击手段的不同,普通人没有办法可以100%确定地清除系统感染的恶意软件,建议备份重要数据后直接重装系统,重装完成后按照我们之前文章的办法进行加固。确定防护加固完成后,恢复用户数据时,需甄别并剔除可执行文件和其他可能有风险的文件。

注:本文所有清除操作建议使用Live CD启动服务器,而不要直接在已感染病毒的系统中操作,否则,您修改的密码可能被监听、您修复的文件可能被隐藏的病毒改回、您的操作可能使用了被篡改的工具根本不会生效、甚至您的操作过程还有可能被全程监控。

〇、本文操作使用Shell命令行方式并需要root权限执行,如果您不熟悉,建议直接放弃阅读本文然后重装系统。

一、定位清除占用CPU/GPU的进程

入门姿势:

使用top命令可以定位高CPU占用的进程

        # top

在top程序运行界面中点键盘C键即可按照CPU占用排序进程并人工定位异常进程

使用ps命令也可以定位高CPU占用的进程

# ps -eo cmd,pcpu,pid,user --sort -pcpu | head

找到高CPU占用的进程后,使用ls命令即可定位程序实际路径

# ls -l /proc/{pid}/exe

使用kill命令停止进程

# kill -9 {pid}

使用rm命令删除可疑的程序文件(注意命令正确性,敲错命令可能删错数据)

# rm -f {path}

GPU占用排查过程与上文过程类似,Nvidia显卡官方驱动自带命令nvidia-smi可以用于查看GPU占用情况,命令如下:

# nvidia-smi -q -d utilization -l

命令运行后会持续显示当前GPU占用情况,定位进程pid后可以用上文方法定位程序实际位置并处理。

放弃姿势:

1. 如果恶意程序使用了隐藏或者伪装技术则上述操作不一定可以精确定位其位置;

2. 如果恶意程序还有其他植入的后门,则恶意程序还会再次启动;

二、定位并清除未知网络连接的进程

入门姿势:

使用ss命令可以定位网络监听和对外连接情况,TCP协议使用下面的命令:

# ss -anpt

此命令显示所有TCP监听与链接,包含程序名、pid,定位恶意网络连接后进行处置。

查看UDP协议命令为:

# ss -anpu

不同的是,UDP没有状态,所以只会显示本端信息,如果要获取对端信息,需要使用tcpdump命令:

# tcpdump -i {网卡名} host {本地IP} and udp port {本地端口号}

从命令输出信息中,可以查看与之通信的对端IP和端口信息。如果信息没有加密,还可以保存抓包并进一步调试通讯内容。

获得连接目标IP地址后,可以使用公开的安全情报数据库服务查看IP是否为已知恶意IP,常见的有:

微步:https://x.threatbook.cn

360:  https://ti.360.net

放弃姿势:

1. 网络调查命令同样只在恶意程序没有使用伪装与隐藏技术的前提下才有效;

2. 有些攻击使用动态IP地址作为目标,IP地址不会记录在公开的威胁情报中;

3. 越来越多的网络流量使用了加密技术,网络抓包无法进行有效的数据分析;

4. 还存在更高端的攻击方法,如ICMP隧道,DNS隧道等。普通用自行调查难度更大,故此处未列出;

5. 调查时不仅要检查外部发起到本地的连接,还需要检查本地主动发起的连接,防火墙对已经被渗透的机器作用不大;

三、查找并修复异常的用户账户

入门姿势:

服务器被“挖矿”病毒感染,经常是由于用户使用了弱口令所致。如果是root用户或者有sudo权限的用户使用了弱口令,建议停止阅读本文并直接重装。其他普通用户建议备份用户数据后,删除用户及关联数据并重建,恢复用户数据时,需甄别并剔除可执行文件和其他可能有风险的文件。

使用root用户可以修改任何用户密码:

# passwd {用户名}

普通用户可以修改自己密码:

$ passwd

Linux系统ssh默认支持无密码登录,如果您不熟悉这项功能,强烈建议自行学习一下并开始使用。默认用户密钥位于~/.ssh/authorized_keys中,您可以用以下命令查看其内容:

$ cat ~/.ssh/authorized_keys

为了防止攻击者增加其他密钥信任文件,可以查看sshd_config的配置进行确认:

# grep AuthorizedKeysFile /etc/ssh/sshd_config

通常我们建议禁止root用户直接从ssh连接系统,而是管理员用户首先使用普通权限用户登录系统后,在有需要root权限操作时,临时使用sudo命令获得root权限。我们同时建议禁止密码方式远程登录,并强制所有用户使用证书方式登陆。可以用以下命令检查root用户当前登陆设置

# grep Root /etc/ssh/sshd_config

检查ssh是否允许密码登录:

# grep Password /etc/ssh/sshd_config

运行上述命令时,还应留意相关配置,防止黑客恶意修改,例如:允许没有密码的用户远程登录。

一旦系统root权限失陷,系统任何用户和任何文件均不可信,即使没有植入后门程序,也有可能增加用户或者修改系统内置用户配置作为入侵的后门。这可以通过检查/etc/passwd和/etc/shadow文件进行确认。

passwd文件格式如下:

32BA

1为用户名

2是密码字段,通常此字段为x,代表密码存放于shadow文件中,否则可能已被篡改

3、4分别是uid和gid,除了root用户外,其他用户uid和gid不应为0,否则可能已被篡改

5为用户全名,一般情况不重要

6为用户主目录路径,调查用户登陆权限时,目录内文件内容一定要查看

7为用户默认shell程序路径,此字段应为/etc/shells文件中的一项,或者为/usr/sbin/nologin、/bin/false,如果程序不是这些,或者对应程序被篡改,说明系统已经失陷

shadow文件格式如下:

1为用户名

2为加密后的密码,任何不以!开始的密码对应的用户都有可能可以远程密码登录,需仔细甄别其是否为系统合法用户

其他字段与本文关系不大,可自行上网查看

注意:除了检查shadow中密码字段外,还需要检查passwd中对应的用户主目录的内容才能确定用户是否可以远程登录,不要忘记,Linux默认支持无密码登录。

使用以下命令在linux下查看隐藏文件:

# ls -a

放弃姿势:

1. 攻击者使用后门程序可以绕过系统用户管理机制获得用户权限;

2. 即使只有普通用户使用了弱口令,攻击者依然可以通过本地漏洞获得root权限。参考sudo与polkit本地提权漏洞;

3. 如果有隐藏的后门程序,或系统不完整的情况,所有的修复均可能没有意义;

四、定位并清除系统自启动恶意程序

入门姿势:

攻击者想要持续控制被攻击目标,最简单的方法就是让恶意程序随系统启动。Linux系统中主要存在两种类型的启动程序设置,分别是,SysV形式的启动脚本和systemd系统管理机制。

SysV启动位置有:

/etc/init

/etc/init.d

/etc/rc.d

/etc/rc[0-6].d

/etc/rc.local

/etc/inittab

systemd启动位置有:

/etc/systemd

~/.config/systemd/user

注意:SysV和systemd并不是互斥的,检查应同时检查其对应位置的每个子目录的每个文件,并应根据发行版本的不同,检查系统脚本是否引入了其他启动位置,进行递归检查。

其他的启动位置:

Xserver启动位置有:

/etc/xdg/autostart

~/.config/autostart

系统启动命令行也可能引入外部启动参数,可以用以下命令查看:

# cat /proc/cmdline

放弃姿势:

1. Linux系统启动位置庞大繁杂,根据不同发行版本又有不同,部分脚本复杂度极高,这些都决定人工对其完整检查发现问题不具有性价比;

2. 安装不同的程序可能还会引入新的启动加载点,进一步增加了调查的难度;

3. 攻击者可能采用增加文件、修改文件、链接外部文件等各种手段,攻击目标经常是不易发现或迷惑性强的位置,人工调查难于发现;

4. 上述检查位置并不能覆盖所有启动检查项,具体启动项目名称和位置完全是所使用发行版本设计人员个人习惯和偏好决定,除非对特定系统非常熟悉,普通人检查很可能出现遗漏;

五、定位并清除定时启动的恶意程序

入门姿势:

Linux定时任务也是攻击者常用的恶意文件植入手段,常见的有cron、systemd-timers、at、自建驻留进程。

Cron任务常见的位置有:

/etc/crontab

/etc/cron.*

/var/spool/cron/

还可以使用以下命令查看当前用户的cron任务列表:

        # crontab -l

systemd-timers的位置在/etc/systemd子目录下,可以用以下命令查看:

# systemctl list-unit-files | grep timer

at调度命令列表可以用以下命令查看:

        $ at -l

常驻进程的定时任务根据进程设计者而定,无法统一方法查看,所以此类问题只能靠使用Live CD启动系统,然后清除所有可疑的自启动文件实现。

放弃姿势:

1. 定时任务本身比较简单,但是检查时需区分哪些是系统自带的,哪些是是被修改或增加了,如果没有正确识别,可能造成系统本身工作不正常;

2. 除了检查配置脚本本身,还需要检查其调用的目标脚本以及目标脚本调用的脚本和程序,“子子孙孙无穷尽”,实际工作量和难度也不能轻视;

六、定位并清除被篡改或增加的系统文件

入门姿势:

简单粗暴感染系统可执行文件和动态链接文件是恶意程序的祖传手艺了。不同Linux发行版包含命令可以用于对比程序安装完成后是否修改,从而发现被篡改的程序。

Redhat系统可以使用以下命令:

# rpm -Va

Debian/Ubuntu系统可以使用以下命令:

# dpkg -l | awk '/^ii/ { print $2 }' | xargs debsums | grep -vE 'OK$'

还可以使用专业杀毒软件进行全盘扫描,发现被感染文件。

放弃姿势:

1. 系统自带检查工具并不存储所有安装文件的信息,所以此检查过程不完全可靠;

2. 系统自带检查工具本身也可能被篡改,检查可能没有意义;

3. 如果恶意程序感染用户自己安装的文件,则检查完全不能发现文件异常;

4. Linux下的专业杀毒软件并不广泛,且杀毒软件很难发现脚本中的恶意代码;

七、查找并修复常见的系统配置文件与参数

入门姿势:

狡猾的猎手会在最出其不意的地方隐藏自己。Shell环境变量就是用户最容易忽视的地方。PATH/LD_LIBRARY_PATH/LD_PRELOAD/LD_AUDIT/alias篡改可以实现用户执行命令时主动触发恶意代码执行。

PATH变量:

此变量决定用户执行程序时系统定位目标程序的方式,默认情况下,普通用户会包含/bin, /usr/bin, /usr/local/bin等内容,root用户额外有/sbin, /usr/sbin, /usr/local/sbin等内容。如果攻击者篡改PATH变量的内容,可能导致用户运行了自己预料之外的恶意程序。可以使用以下命令查看PATH当前内容:

        # env | grep PATH

LD_LIBRARY_PATH/LD_PRELOAD/LD_AUDIT等变量:

此类变量影响动态链接程序运行时链接的实际依赖代码,默认情况下,这些变量都应为空。如果攻击者篡改变量的内容,用户在运行程序的同时,不知不觉加载并运行恶意代码。可以用以下命令查看类似变量的内容:

        # env | grep LD_

注意:配置文件/etc/ld.so.preload可以实现类似的功能,检查时不应忽略。

alias命令:

alias命令为shell内置命令,可以让用户改变一个命令运行的实际语义。攻击者可以利用此命令实现张冠李戴,让用户常见命令加载恶意代码执行,甚至隐藏或改变常见命令的结果。例如,以下命令可以让用户的ls命令永远返回空目录:

        $ alias ls=echo

可以单独运行alias命令查看当前所有命令别名:

        $ alias

系统环境变量通常受系统及用户目录配置文件的影响,系统配置文件位置有:

/etc/profile

/etc/profile.d

/etc/environment

/etc/bashrc

用户目录配置文件有:

~/.profile

~/.bashrc

~/.bash_profile

~/.bash_logout

~/.zshrc

如果用户使用X Window服务,配置文件还包括:

~/.xprofile

~/.xinitrc

注意:攻击者也可能直接在配置文件中植入恶意代码,用户登录时自动触发。而系统中可以写入恶意代码的配置文件也远远不止这些。

修改/etc/modprobe*或者/etc/modules*文件可以让系统加载恶意的内核模块代码;

修改/etc/initcpio或者/etc/initramfs文件可以让恶意代码写入到系统启动的早期内存镜像中;

同样,修改/etc/yum或者/etc/apt处的文件可能让你的系统升级操作替攻击者下载恶意代码;

甚至修改/etc/hosts也可以让你经常访问的网站变为黑客控制的投毒站点。

总之,这个可能被更改的列表的长度基本上只取决于攻击者的想象力。

放弃姿势:

1. 列表太长了,这里列不完,修复比重装还累;

2. 都改成这样了,还有必要修复么?

八、检查和修复系统业务文件

入门姿势:

黑手终于伸向你自己的业务程序和数据了。攻击者进入系统,修改了你网站的代码,或者给你的网站增加了一点代码,还可能,就是从你网站代码的漏洞进来的,怎么办?

根据你服务器进程的用户身份,如果是root用户身份,那么请停止阅读,备份数据,重装系统,修复代码漏洞,然后用专用非特权用户重新部署服务。部署时确认除了必要的用户上传目录外,服务用户不具有系统内任何文件的写入权限。如果是普通用户身份,备份数据后,删除用户所属的任何文件,修复漏洞后重新来过。

如果攻击者拥有系统文件写入权限,可能被写入恶意代码的位置包括但不限于:

l 修改服务器配置文件,或者服务目录配置文件,增加或修改服务的内容,形成后门

l 修改或者增加服务目录程序文件,植入一句话木马后门

l 增加服务目录包,为自己准备一个豪华版木马后门

l 增加或修改默认服务管理密码,例如,帮你的tomcat管理目录增加或者修改一个用户,使它变成一个后门

除非你为自己程序的每个文件保留了一份签名信息和文件名录,否则,在海量的程序代码中发现被攻击者修改或者增加的文件,几乎不可能。只能告诉自己吃一堑长一智了。

当业务遭受这种攻击时,“挖矿”可能是你最少需要担心的。此时服务器业务数据既可以被窃取,也可以被篡改。甚至,有经验的黑客还能在数据库中植入精心设计的触发器或者存储过程形成的后门程序,即使你恢复数据,他也能随时回来。

放弃姿势:

冰冻三尺非一日之寒,如果系统出现了这样的问题,那么,很有可能系统开发和部署的整个思路需要推倒重新来过。先不要考虑如何修复,首先止损;

九、检查并修复系统启动加载器与内核文件

入门姿势:

系统运行在病毒上,听起来是不是很新鲜刺激?对的,理论上,黑客可以把恶意代码植入系统引导器、磁盘的引导扇区、甚至BIOS硬件模块或者路由器的nvram配置区内。

事实上,上个世纪臭名昭著的CIH病毒就是针对系统启动代码和BIOS硬件本身进行攻击的。而公开消息称,美国网军有攻击硬件底层代码的病毒作为武器。这种情况,如果商业杀毒软件无法检测到病毒,可能只能请病毒专家了。

当然,为了避免这种情况发生,您可以试试secure boot(安全引导)功能,这需要BIOS和支持的操作系统相互配合完成。具体技术细节,可以查看主板和操作系统的官方文档。

云服务器 被植入挖矿木马,CPU 飙升 200%

一、什么是挖矿木马

挖矿木马会占用CPU进行超频运算,从而占用主机大量的CPU资源,严重影响服务器上的其他应用的正常运行。黑客为了得到更多的算力资源,一般都会对全网进行无差别扫描,同时利用SSH爆破和漏洞利用等手段攻击主机。

部分挖矿木马还具备蠕虫化的特点,在主机被成功入侵之后,挖矿木马还会向内网渗透,并在被入侵的服务器上持久化驻留以获取最大收益。
挖矿木马的整体攻击流程大致如下图所示:

二、挖矿木马中招特征

挖矿木马会在用户不知情的情况下利用主机的算力进行挖矿,最明显的特征就是主机的CPU被大量消耗,查看云主机CPU占用率的方法有两种:

控制台实例监控

主机执行TOP命令

如下图所示,通过执行top命令,即可在返回结果中看到当时系统的CPU占用率。

top -c

如果云主机CPU占用率居高不下,那么主机很有可能已经被植入了挖矿木马,会影响服务器上的其他应用的正常运行,需要立刻上机排查。

三、清理挖矿木马

及时隔离主机

部分带有蠕虫功能的挖矿木马在取得主机的控制权后,会继续对公网的其他主机,或者以当前主机作为跳板机对同一局域网内的其他主机进行横向渗透,所以在发现主机被植入挖矿木马后,在不影响业务正常运行的前提下,应该及时隔离受感染的主机,然后进行下一步分析和清除工作。

腾讯云主机可以通过设置安全组隔离主机,具体参考如下链接:https://cloud.tencent.com/document/product/215/20089

阻断异常网络通信

挖矿木马不仅会连接矿池,还有可能会连接黑客的C2服务器,接收并执行C2指令、投递其他恶意木马,所以需要及时进行网络阻断。

(1)检查主机防火墙当前生效的iptables规则中是否存在业务范围之外的可疑地址和端口,它们可能是挖矿木马的矿池或C2地址

iptables -L -n

(2)从iptables规则中清除可疑地址和端口

vi /etc/sysconfig/iptables

(3)阻断挖矿木马的网络通信

iptables -A INPUT -s 可疑地址 -j DROPiptables -A OUTPUT -d 可疑地址 -j DROP

清除计划任务

大部分挖矿木马会通过在受感染主机中写入计划任务实现持久化,如果仅仅只是清除挖矿进程,无法将其根除,到了预设的时间点,系统会通过计划任务从黑客的C2服务器重新下载并执行挖矿木马。

挖矿木马常见的计划任务通常是下载并执行sh脚本,如下图所示:

可以通过执行如下命令查看是否存在可疑定时任务,若有,则先保存相关记录用于后续分析,再进行删除:

查看系统当前用户的计划任务:

crontab -l

查看系统特定用户的计划任务:

crontab -u username -l

查看其他计划任务文件:

cat /etc/crontabcat /var/spool/croncat /etc/anacrontabcat /etc/cron.d/cat /etc/cron.daily/cat /etc/cron.hourly/cat /etc/cron.weekly/cat /etc/cron.monthly/cat /var/spool/cron/

清除启动项

除了计划任务,挖矿木马通过添加启动项同样能实现持久化。可以使用如下命令查看开机启动项中是否有异常的启动服务。

CentOS7以下版本:​​​​​​​

chkconfig –list

CentOS7及以上版本:​​​​​​​

systemctl list-unit-files

如果发现有恶意启动项,可以通过如下命令进行关闭:

CentOS7以下版本:​​​​​​​

chkconfig 服务名 off

CentOS7及以上版本:​​​​​​​

systemctl disable 服务名

另外,还需要仔细排查以下目录及文件,及时删除可疑的启动项:

/usr/lib/systemd/system/usr/lib/systemd/system/multi-user.target.wants/etc/rc.local/etc/inittab/etc/rc0.d//etc/rc1.d//etc/rc2.d//etc/rc3.d//etc/rc4.d//etc/rc5.d//etc/rc6.d//etc/rc.d/

排查的时候,可以按照文件修改时间来排序,重点排查近期被创建服务项。如下图所示,系统近期被创建了一个名为bot.service的服务,该服务在系统启动时会启动/etc/kinsing这个木马文件,需要关闭bot服务,并删除/etc/kinsing文件。

清除预加载so

通过配置/etc/ld.so.preload,可以自定义程序运行前优先加载的动态链接库,部分木马通过修改该文件,添加恶意so文件,从而实现挖矿进程的隐藏等恶意功能。
检查/etc/ld.so.preload(该文件默认为空),清除异常的动态链接库。可以执行`> /etc/ld.so.preload`命令进行清除。

清除SSH公钥

挖矿木马通常还会在~/.ssh/authoruzed_keys文件中写入黑客的SSH公钥,这样子就算用户将挖矿木马清除得一干二净,黑客还是可以免密登陆该主机,这也是常见的保持服务器控制权的手段。

排查~/.ssh/authorized_keys文件,如果发现可疑的SSH公钥,直接删除。

清除挖矿木马

(1)清除挖矿进程

挖矿木马最大的特点就是会在用户不知情的情况下,利用主机的算力进行挖矿,从而消耗主机大量的CPU资源,所以,通过执行如下命令排查系统中占用大量CPU资源的进程。

top -cps -ef

确认相关进程为挖矿进程后,按照如下步骤将其清除:

获取并记录挖矿进程的文件路径:​​​​​​​

ls -l /proc/$PID/exe

杀死挖矿进程:​​​​​​​

kill -9 $PID

删除挖矿进程对应的文件

(2)清除其它相关恶意进程

恶意进程与外部的C2服务器进行通信时,往往会开启端口进行监听。执行如下命令,查看服务器是否有未被授权的端口被监听。​​​​​​​

netstat -antp

若有未授权进程,按照如下步骤将其清除:
获取并记录未授权进程的文件路径:

ls -l /proc/$PID/exe

杀死未授权进程:

kill -9 $PID

删除未授权进程对应的文件

还可以通过如下命令排查近期新增的文件,清除相关木马

find /etc -ctime -2 (这里指定目录为/etc,获取近2天内的新增文件)lsof -c kinsing (这里要查看文件名为kinsing的相关进程信息)

风险排查、安全加固

对系统进行风险排查和安全加固,避免挖矿木马卷土重来,详情可参考如下链接:https://cloud.tencent.com/document/product/296/9604

四. 常见问题

明明刚刚清理了挖矿木马,没过多久就又卷土重来?

很多用户会反馈挖矿木马老是清理不干净,明明已经Kill了进程,删除了木马文件,没过多久,CPU占用率又上来了。究其根本,还是因为清除得不够彻底。大部分用户都只是Kill掉挖矿进程和对应文件,却没有清理计划任务和守护进程。

一般建议先清除计划任务、启动项、守护进程,再清除挖矿进程和其他恶意进程。

如何判定可疑进程是否为恶意进程?

如下图所示,未知进程kinsing监听本地31458端口,非常可疑,可通过如下方法判定:
(1)执行`ls -al /proc/$PID/exe`确认可疑进程对应的文件;
(2)若文件未被删除,则直接上传文件到Virustotal进行检测,或者计算出文件对应的md5,使用md5去Virustotal进行查询;若文件已被删除,可执行`cat /proc/$PID/exe > /tmp/t.bin`将进程dump到特定目录,再上传文件到Virustotal或者计算dump文件对应的md5到Virustotal进行查询。如果有多款杀毒引擎同时检出,那基本可以判定该进程为恶意进程。

Virustotal地址:https://www.virustotal.com/gui/s

为什么系统CPU占用率接近100%,却看不到是哪个进程导致的?

如下图所示,系统CPU占用率接近100%,却看不到是哪个进程导致的,这种情况一般是因为系统命令被木马篡改了,从而隐藏了木马进程的踪迹,让用户无法进行溯源分析。

命令篡改有多种方式,分别如下:
(1)top源文件被篡改,恶意进程信息被过滤后返回

通过执行如下命令即可复原:

rm -rf /usr/bin/top && mv /usr/bin/top.original /usr/bin/top

【相关文章】

https://blog.csdn.net/chenmozhe22/article/details/112578057

(2)篡改预加载so文件,ls、top、ps等命令已经被木马的动态链接库劫持,无法获得木马进程相关的信息

通过执行如下命令即可复原:

> /etc/ld.so.preload && rm -rf 恶意so文件路径

(3)通过其他未知手段篡改系统命令

可分别尝试如下两种方案解决:
i.从其他相同版本系统中拷贝命令源文件到当前系统中进行覆盖;可使用uname -a命令查看当前系统版本;

ii.或者安装busybox来对系统进行排查。

busybox是一个集成了300多个最常用Linux命令和工具的软件,可以使用busybox替代系统命令对系统进行排查;​​​​​​​

yum -y install wget make gcc perl glibc-static ncurses-devel libgcrypt-develwget http://busybox.net/downloads/busybox-1.33.0.tar.bz2tar -jxvf busybox-1.33.0.tar.bz2cd busybox-1.33.0 && make && make install

【相关文章】

https://www.cnblogs.com/angryprogrammer/p/13456681.html

日志在排查文件的时候至关重要,在Linux上一般跟系统相关的日志默认都会放到/var/log下面。

1、/var/log/boot.log

一般包含系统启动时的日志,包括自启动的服务。

2、/var/log/btmp

记录所有失败登录信息。非文本文件,可以使用last -f /var/log/btmp进行查看。

3、/var/log/cron

cron计划任务的日志,每当cron任务被执行的时候都会在这个文件里面记录。

4、/var/log/dmesg

包含内核缓冲信息(kernel ring buffer)。在系统启动时,会在屏幕上显示许多与硬件有关的信息。可以直接查看这个文件或者使用dmesg这个命令查看。

5、/var/log/lastlog

记录所有用户的最近信息。非文本文件,可以使用lastlog进行查看。

6、/var/log/maillog

包含来着系统运行电子邮件服务器的日志信息。

7、/var/log/message

包括整体系统信息,其中也包含系统启动期间的日志。此外,mail,cron,daemon,kern和auth等内容也记录在var/log/messages日志中。

8、/var/log/secure

包含验证和授权方面信息。例如,sshd会将所有信息记录(其中包括失败登录)在这里。

9、/var/log/yum.log

包含使用yum安装软件包的信息。

10、/var/log/anaconda/ 目录 或者 /var/log/anconda.log

包含在安装CentOS/RHEL时候的日志。

11、/var/log/audit目录

包含audit daemon的审计日志。例如:selinux开启的时候,这里就会有关于selinux审计的日志。

12、/var/log/sa/ 目录

包含每日由sysstat软件包收集的sar文件。

13、/var/log/cups

涉及所有打印信息的日志,即cups打印服务运行的日志。

14、其他文件或者目录

例如安装系统自带的一些软件的时候,默认的日志输出都是输出到这个路径下的,例如apache默认日志路径/var/log/httpd/,这个是为了遵循系统设计的一些规范。 

原文链接:https://blog.csdn.net/u013008898/article/details/133946077

相关文章:

主机有被植入挖矿病毒篡改系统库文件

查看主机有被植入挖矿病毒篡改系统库文件的行为 排查方法 挖矿病毒被植入主机后,利用主机的运算力进行挖矿,主要体现在CPU使用率高达90%以上,有大量对外进行网络连接的日志记录。 Linux主机中挖矿病毒后的现象如下图所示: &…...

Python 推导式介绍

Python推导式是一种简洁而强大的语法,用于在一行代码中创建集合(list、set、dictionary)的方式。推导式使得代码更加简洁易读,提高了代码的可读性和可维护性。Python中有列表推导式、集合推导式和字典推导式三种类型。 列表推导式…...

VUE3和SpringBoot实现ChatGPT页面打字效果SSE流式数据展示

在做这个功能之前,本人也是走了很多弯路(花了好几天才搞好),你能看到本篇博文,那你就是找对地方了。百度上很多都是使用SseEmitter这种方式,这种方式使用的是websocket,使用这种方式就搞复杂了&…...

ClickHouse入门篇:一文带你学习ClickHouse

ClickHouse 是一个用于联机分析处理(OLAP)的列式数据库管理系统(DBMS)。由于其独特的数据存储和处理架构,ClickHouse 能够提供高速数据插入和实时查询性能。下面是对 ClickHouse 的详细介绍,包括其特性、应用场景和架构: 特性 列式存储: 数…...

基于小程序实现的校园失物招领系统

作者主页:Java码库 主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】:Java 【框架】:spring…...

损失函数篇 | YOLOv8更换损失函数之Powerful-IoU(2024年最新IoU)

前言:Hello大家好,我是小哥谈。损失函数是机器学习中用来衡量模型预测值与真实值之间差异的函数。在训练模型时,我们希望通过不断调整模型参数,使得损失函数的值最小化,从而使得模型的预测值更加接近真实值。不同的损失函数适用于不同的问题,例如均方误差损失函数适用于回…...

(学习日记)2024.04.11:UCOSIII第三十九节:软件定时器

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…...

wordpress全站开发指南-面向开发者及深度用户(全中文实操)--wordpress是什么

WordPress简介 WordPress是一个开源的内容管理系统(CMS),广泛用于创建和管理网站。它最初是作为一个博客平台开始的,但现在已经发展成为一个功能强大的网站建设工具,可以用于创建各种类型的网站,包括个人博…...

瑞_23种设计模式_访问者模式

文章目录 1 访问者模式(Visitor Pattern)1.1 介绍1.2 概述1.3 访问者模式的结构1.4 访问者模式的优缺点1.5 访问者模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 拓展——双分派4.1 分派4.2 动态分派(多态&am…...

Docker网络代理配置 可能埋下的坑

Docker 网络代理配置 1. 在 /etc/systemd/system 目录下创建 docker.service.d 目录 sudo mkdir -p /etc/systemd/system/docker.service.d2. 在/etc/systemd/system/docker.service.d下创建 http-proxy.conf 文件 sudo touch /etc/systemd/system/docker.service.d/http-pr…...

外包干了3天,技术退步明显.......

先说一下自己的情况,大专生,19年通过校招进入杭州某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…...

分布式向量数据库-安装部署

下载 GitHub - pgvector/pgvector: Open-source vector similarity search for Postgres 源码编译 ##文件解压缩 unzip pgvector-0.6.2.zip ##编译 make && make install 功能验证 #安装扩展CREATE EXTENSION vector;#创建测试表CREATE TABLE items (id bigseri…...

【深入理解计算机系统第3版】有符号数和无符号数转换以及移位运算练习题2.23

题目 考虑下面的C函数&#xff1a; int fun1(unsigned word) {return (int) ((word << 24) >> 24); }int fun2(unsigned word) {return ((int) word << 24) >> 24; } 假设一个采用补码运算的机器上以32位程序来执行这些函数。还假设有符号数值的右移…...

Linux函数学习 epoll

1、Linux epoll函数 1.1、创建epoll实例 int epoll_create1(int flag); 返回值&#xff1a;-1 失败&#xff0c;非负数 成功 flag &#xff1a;默认传入0 1.2、管理epoll对象 int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event); epfd &#xff1a;e…...

2024年4月12日 十二生肖 今日运势

小运播报&#xff1a;2024年4月12日&#xff0c;星期五&#xff0c;农历三月初四 &#xff08;甲辰年戊辰月丙午日&#xff09;&#xff0c;法定工作日。 红榜生肖&#xff1a;羊、狗、虎 需要注意&#xff1a;牛、马、鼠 喜神方位&#xff1a;西南方 财神方位&#xff1a;…...

代码随想录第36、37天| 435. 无重叠区间 763.划分字母区间 56. 合并区间

435. 无重叠区间 435. 无重叠区间 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 贪心算法&#xff0c;依然是判断重叠区间 | LeetCode&#xff1a;435.无重叠区间_哔哩哔哩_bilibili 给定一个区间的集合 intervals &#xff0c;其中 intervals[…...

代码学习记录40---动态规划

随想录日记part40 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.04.10 主要内容&#xff1a;今天开始要学习动态规划的相关知识了&#xff0c;今天的内容主要涉及&#xff1a; 买卖股票的最佳时机加强版。 123.买卖股票的最佳时机III 188.买卖股票的最佳时机…...

java八股——消息队列MQ

上一篇传送门&#xff1a;点我 目前只学习了RabbitMQ&#xff0c;后续学习了其他MQ后会继续补充。 MQ有了解过吗&#xff1f;说说什么是MQ&#xff1f; MQ是Message Queue的缩写&#xff0c;也就是消息队列的意思。它是一种应用程序对应用程序的通信方法&#xff0c;使得应用…...

【前端Vue】Vue3+Pinia小兔鲜电商项目第5篇:整体认识和路由配置,本资源由 收集整理【附代码文档】

Vue3ElementPlusPinia开发小兔鲜电商项目完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;认识Vue3&#xff0c;使用create-vue搭建Vue3项目1. Vue3组合式API体验,2. Vue3更多的优势,1. 认识create-vue,2. 使用create-vue创建项目,1. setup选项的写法和执行…...

前端项目部署教程——有域名无证书

一、拉取nginx镜像 docker pull nginx //先拉取nginx镜像二、打包前端项目 1、将Vue打包项目传输到/usr/local/vue/下blog和admin文件夹下 2、在/usr/local/nginx下创建nginx.conf文件&#xff0c;格式如下&#xff1a; events {worker_connections 1024; }http {include …...

后端项目部署教程

一、打包jar包 lyamanoblog-server-0.0.1.jar ps:运行时可能会提醒不能有大写字母&#xff0c;所以用的都是小写字母 二、编写Dockerfile文件 FROM java:8 VOLUME /tmp ADD lyamanoblog-server-0.0.1.jarblog.jar ENTRYPOINT ["java","-Djava.securit…...

【微命令】git 如何修改某个分支的名字(git branch -m newbranch)

简要信息&#xff0c;快速记录 命令 # 切换到某个需要修改的分支 git checkout oldbranch# 修改分支名字 git branch -m newbranch假设作为git设计者&#xff0c;要用来修改branch的命令&#xff0c;那么就是 git branch作为前缀&#xff0c;然后进一步修改的命令是branch相关…...

Unity UI 优化技巧

将画布分割为多个 问题:当 UI Canvas 的任何元素发生变化时,都会影响整个 Canvas。 Canvas 是 Unity UI 的重要组成部分。它创建一个网格来表示放置在其顶部的 UI 元素,在 UI 元素更改时重建网格,并调用 GPU 来渲染实际的用户界面。 创建这些网络可能非常昂贵。UI 元素应…...

前端学习之DOM编程案例:抽奖案例

代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>抽奖案例</title><style>*{margin: 0;padding: 0;}</style> </head> <body><div id"container"&g…...

解决windows下Qt Creator显示界面过大的问题

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 问题描述 解决方法 1、右击此电脑--->属性 2、点击高级系统设置--->点击环境变量 3、 找到系…...

MySQL 通信协议 tcp c/s架构 jdbc java

简介 服务器启动后&#xff0c;会使用 TCP 监听一个本地端口&#xff0c;当客户端的连接请求到达时&#xff0c;就会执行三段握手以及 MySQL 的权限验证&#xff1b;验证成功后&#xff0c;客户端开始发送请求&#xff0c;服务器会以响应的报文格式返回数据&#xff1b;当客户…...

蓝桥杯第十三届电子类单片机组决赛程序设计

前言 一、决赛题目 1.比赛题目 2.题目解读 二、功能实现 1.关于定时器资源 1&#xff09;超声波和NE555需要的定时器资源 2&#xff09;定时器2 2.单位切换 3.数据长度不足时&#xff0c;高位熄灭 4.AD/DA多通道的处理 5.PWM输出 6.长按功能的实现 三、完整代码演…...

【Entity Framework】如何使用EF中的生成值

【Entity Framework】如何使用EF中的生成值 文章目录 【Entity Framework】如何使用EF中的生成值一、概述二、默认值三、计算列四、设置主键五、显示配置值生成六、设置日期/时间值生成6.1 创建时间戳6.2 更新时间戳 七、替代值生成八、无值生成九、总结 一、概述 数据库列的值…...

【MATLAB源码-第185期】基于matlab的16QAM系统相位偏移估计EOS算法仿真,对比补偿前后的星座图误码率。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1. 引言 M-QAM调制技术的重要性 现代通信系统追求的是更高的数据传输速率和更有效的频谱利用率。M-QAM调制技术&#xff0c;作为一种高效的调制方案&#xff0c;能够通过在相同的带宽条件下传输更多的数据位来满足这一需求…...

C++入门语法(命名空间缺省函数函数重载引用内联函数nullptr)

目录 前言 1. 什么是C 2. C关键字 3. 命名空间 3.1 命名空间的定义 3.2 命名空间的使用 4. C输入和输出 5. 缺省函数 5.1 概念 5.2 缺省参数分类 6. 函数重载 6.1 概念 6.2 为何C支持函数重载 7. 引用 7.1 概念 7.2 特性 7.3 常引用 7.4 引用与指针的区别 7…...