云服务器被植入挖矿木马,CPU飙升200%处理方案
1,通过执行top命令,即可在返回结果中看到当时系统的CPU占用率。
top -c
2.检查防火墙iptables规则中是否存在可疑端口
iptables -L -n 查看防火墙规则
vim /etc/sysconfig/iptables 清除防火墙中的可疑地址和 规则
iptables -A INPUT -s 可疑地址 -j DROP 删除入口方向可以地址
iptables -A OUTPUT -d 可疑地址 -j DROP 删除出口方向可以地址
3.清除计划任务
crontab -l 查看当前用户的计划任务
crontab -u username -l 查看特定用户的计划任务
查看其他计划任务文件
cat /etc/crontab
cat /var/spool/cron
cat /etc/anacrontab
cat /etc/cron.d
cat /etc/cron.daily
cat /etc/cron.hourly
cat /etc/cron.weekly
cat /etc/cron.monthly
cat /var/spool/cron
4.清除启动项文件(木马通过启动项实现持久化)
检查是否有异常启动服务
chkconfig -list (适用于centos7以下版本)
chkconfig 服务名 off 关闭恶意启动服务
systemctl list-unit-files(适用于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/
5.清除预加载so
检查/etc/ld.so.preload(该文件默认为空
6.清除ssh公钥(挖矿木马通常还会在~/.ssh/authoruzed_keys文件中写入黑客的SSH公钥)
排查~/.ssh/authorized_keys文件,如果发现可疑的SSH公钥,直接删除。
7.清除木马进程
top -c
ps -ef
(1)查找木马进程的文件路径
ls -l /proc/$PID/exe
kill -9 $PID
删除进程相对应的文件
(2)清除恶意程序与外部通讯监听的端口
netstat -antp
获取恶意进程文件路径并查杀
ls -l /proc/$PID/exe
kill -9 $PID
(3)查找近期新增文件,清除木马文件
find /etc -ctime -2 (这里指定目录为/etc,获取近2天内的新增文件)
lsof -c kinsing (这里要查看文件名为kinsing的相关进程信息)
判断进程为恶意进程的方法:
(1)执行ls -al /proc/$PID/exe 确认可疑进程文件的对应文件
(2)如果文件未被删除将文件上传至Virustotal进行检测,或者计算出对应的md5文件
可执行cat /proc/$PID/exe > /tmp/t.bin
将进程dump到特定目录,再上传文件到Virustotal或者计算dump文件对应的md5到Virustotal进行查询。如果有多款杀毒引擎同时检出,那基本可以判定该进程为恶意进程。
(3)Virustotal地址:*https://www.virustotal.com/gui/s
- 系统CPU占用率接近100%,却看不到是哪个进程导致的,这种情况一般是因为系统命令被木马篡改了。
(1)top源文件被篡改,恶意进程信息被过滤后返回
复原top命令
rm -rf /usr/bin/top && mv /usr/bin/top.original /usr/bin/top
(2)篡改预加载so文件,ls、top、ps等命令已经被木马的动态链接库劫持,无法获得木马进程相关的信息
复原so文件
> /etc/ld.so.preload && rm -rf 恶意so文件路径
Linux 入侵类问题排查思路
一、检查隐藏帐户及弱口令
-
检查服务器系统及应用帐户是否存在
弱口令
:
- 检查说明:检查管理员帐户、数据库帐户、MySQL 帐户、tomcat 帐户、网站后台管理员帐户等密码设置是否较为简单,简单的密码很容易被黑客破解。
- 解决方法:以管理员权限登录系统或应用程序后台,修改为复杂的密码。
- 风险性:高。
-
使用
last
命令查看下服务器近期登录的帐户记录,确认是否有可疑 IP 登录过机器:
- 检查说明:攻击者或者恶意软件往往会往系统中注入隐藏的系统帐户实施提权或其他破坏性的攻击。
- 解决方法:检查发现有可疑用户时,可使用命令
usermod -L 用户名
禁用用户或者使用命令userdel -r 用户名
删除用户。 - 风险性:高。
-
通过
less /var/log/secure|grep 'Accepted'
命令,查看是否有可疑 IP 成功登录机器:
- 检查说明:攻击者或者恶意软件往往会往系统中注入隐藏的系统帐户实施提权或其他破坏性的攻击。
- 解决方法: 使用命令
usermod -L 用户名
禁用用户或者使用命令userdel -r 用户名
删除用户。 - 风险性:高。
-
检查系统是否采用
默认管理端口
:
- 检查系统所用的管理端口(SSH、FTP、MySQL、Redis 等)是否为默认端口,这些默认端口往往被容易自动化的工具进行爆破成功。
- 解决方法:
- 在服务器内编辑
/etc/ssh/sshd_config
文件中的 Port 22,将22修改为非默认端口,修改之后需要重启 ssh 服务。
- 在服务器内编辑
-
-
- 运行
/etc/init.d/sshd restart(CentOS)或 /etc/init.d/ssh restart(Debian / Ubuntu)
命令重启是配置生效。
\3. 修改 FTP、MySQL、Redis 等的程序配置文件的默认监听端口21、3306、6379为其他端口。 - 限制远程登录的 IP,编辑
/etc/hosts.deny
、/etc/hosts.allow
两个文件来限制 IP。
- 运行
- 风险性:高。
-
-
检查
/etc/passwd
文件,看是否有非授权帐户登录:
- 检查说明:攻击者或者恶意软件往往会往系统中注入隐藏的系统帐户实施提权或其他破坏性的攻击。
- 解决方法: 使用命令
usermod -L 用户名
禁用用户或者使用命令userdel -r 用户名
删除用户。 - 风险性:中。
二、检查恶意进程及非法端口
-
运行
netstat –antp
,查看服务器是否有未被授权的端口被监听,查看下对应的 pid。
- 检查服务器是否存在恶意进程,恶意进程往往会开启监听端口,与外部控制机器进行连接。
- 解决方法:
- 若发现有非授权进程,运行
ls -l /proc/$PID/exe
或file /proc/$PID/exe
($PID 为对应的 pid 号),查看下 pid 所对应的进程文件路径。 - 如果为恶意进程,删除对应的文件即可。
- 若发现有非授权进程,运行
- 风险性:高。
-
使用
ps -ef
和
top
命令查看是否有异常进程
- 检查说明:运行以上命令,当发现有名称不断变化的非授权进程占用大量系统 CPU 或内存资源时,则可能为恶意程序。
- 解决方法:确认该进程为恶意进程后,可以使用
kill -9 进程名
命令结束进程,或使用防火墙限制进程外联。 - 风险性:高。
三、检查恶意程序和可疑启动项
-
使用
chkconfig --list
和
cat /etc/rc.local
命令,查看开机启动项中是否有异常的启动服务。
- 检查说明:恶意程序往往会添加在系统的启动项,在用户关机重启后再次运行。
- 解决方法:如发现有恶意进程,可使用
chkconfig 服务名 off
命令关闭,同时检查/etc/rc.local
中是否有异常项目,如有请注释掉。 - 风险性:高。
-
进入 cron 文件目录,查看是否存在非法定时任务脚本。
- 检查说明:查看
/etc/crontab
,/etc/cron.d
,/etc/cron.daily
,cron.hourly/
,cron.monthly
,cron.weekly/
是否存在可疑脚本或程序。 - 解决方法:如发现有不认识的计划任务,可定位脚本确认是否正常业务脚本,如果非正常业务脚本,可直接注释掉任务内容或删除脚本。
- 风险性:高。
- 检查说明:查看
四、检查第三方软件漏洞
- 如果您服务器内有运行 Web、数据库等应用服务,请您限制应用程序帐户对文件系统的写权限,同时尽量使用非 root 帐户运行。
- 检查说明:使用非 root 帐户运行,可以保障在应用程序被攻陷后,攻击者无法立即远程控制服务器,减少攻击损失。
- 解决方法:
- 进入 web 服务根目录或数据库配置目录。
- 运行
chown -R apache:apache /var/www/xxxx
、chmod -R 750 file1.txt
命令配置网站访问权限。
- 风险性:中。
- 参考示例
- 升级修复应用程序漏洞
- 检查说明:机器被入侵,部分原因是系统使用的应用程序软件版本较老,存在较多的漏洞而没有修复,导致可以被入侵利用。
- 解决方法:比较典型的漏洞例如 ImageMagick、openssl、glibc 等,用户可以根据腾讯云已发布的安全通告指导或通过 apt-get/yum 等方式进行直接升级修复。
- 风险性:高。
网站目录文件权限的参考示例如下:
场景:
假设 HTTP 服务器运行的用户和用户组是 www,网站用户为 centos,网站根目录是/home/centos/web
。
方法/步骤:
-
我们首先设定网站目录和文件的所有者和所有组为 centos,www,如下命令:
chown -R centos:www /home/centos/web
-
设置网站目录权限为750,750是 centos 用户对目录拥有读写执行的权限,设置后,centos 用户可以在任何目录下创建文件,用户组有有读执行权限,这样才能进入目录,其它用户没有任何权限。
find -type d -exec chmod 750 {} \;
-
设置网站文件权限为640,640指只有 centos 用户对网站文件有更改的权限,HTTP 服务器只有读取文件的权限,无法更改文件,其它用户无任何权限。
find -not -type d -exec chmod 640 {} \;
-
针对个别目录设置可写权限。例如,网站的一些缓存目录就需要给 HTTP 服务有写入权限、discuz x2 的
/data/
目录就必须要写入权限。
find data -type d -exec chmod 770 {} \;
被入侵后的安全优化建议
-
推荐使用 SSH 密钥进行登录,减少暴力破解的风险。
-
在服务器内编辑
/etc/ssh/sshd_config
文件中的 Port 22,将 22 修改为其他非默认端口,修改之后重启 SSH 服务。可使用如下命令重启:
/etc/init.d/sshd restart(CentOS)或 /etc/init.d/ssh restart(Debian/Ubuntu)
`
目录就必须要写入权限。
find data -type d -exec chmod 770 {} \;
被入侵后的安全优化建议
-
推荐使用 SSH 密钥进行登录,减少暴力破解的风险。
-
在服务器内编辑
/etc/ssh/sshd_config
文件中的 Port 22,将 22 修改为其他非默认端口,修改之后重启 SSH 服务。可使用如下命令重启:
/etc/init.d/sshd restart(CentOS)或 /etc/init.d/ssh restart(Debian/Ubuntu)