服务器被挖矿病毒&DDOS&被肉鸡&恶意病毒等入侵了的基本解决思路

服务器被挖矿病毒&DDOS&被肉鸡&恶意病毒等入侵了的基本解决思路

以下全部由个人经验分享,可供参考价值,如果是公司正式生产环境等影响重大的情况下请咨询相关专业人事,进行各操作前手动记录命令,做好文件备份,记录操作日志!
长期更新,有更多好的思路也请不吝分享。

表现情况

挖矿&恶意病毒:

  • CPU 或者内存等资源被使用枯竭,导致系统运行不稳定 硬件寿命下降,功耗异常等问题。

DDOS&被入侵当作肉鸡

  • 外网网卡出口或者入口流量巨大,堵塞网卡造成对外服务访问缓慢甚至无法访问。

恶意入侵

  • 有可疑计划任务、ssh公钥、文件被篡改加密丢失等,造成服务器数据丢失 失去服务器操纵权甚至宕机等。

解决方案

操作区分先后,请一步一步排查进行操作。
以上恶意入侵都按照流程排查,不同情况操作略有不同,自行判断。

简单思路

对于情况危急影响重大的时候快速定位:

  1. 先使用top命令按P使用CPU占用率排序,查找出可疑进程,获取pid。

如果无法获得进程请使用htop工具或者更高级的任务管理器。

  1. lsof -p $PID 命令查找此进程都在使用哪些文件,配合ll /proc/$PID一起查找出该进程的任务详情。
  2. 排查crontab -l 或/var/spool/cron目录,和/etc/rc.d/init.d/目录中的自启脚本,删除相关可疑任务。
  3. pidof 进程名 或者pgrep 进程名 查找出该进程的父进程,一同删除。
  4. 如果无法正常删除请使用chattr与lsattr命令检索权限,如果脚本重复重生,可以使用echo "" > 可疑文件 直接清空该脚本,病毒会检查脚本文件和进程是否被杀,只要我们不结束进程和脚本文件,让病毒每次执行空命令即可。后续再继续排查。
  5. 网络攻击使用iftop -i 网卡名 按p打开端口显示,排查可疑进出地址,可使用https://www.ipip.net/ip.html 查询此IP的威胁情报,在安全组中阻拦。
    如果没有国外用户的需求可以参考https://github.com/17mon/china_ip_list
    设置iptables策略禁止。参考以下脚本:注意安装iptables的ipset组件
mmode=$1

#下面语句可以单独执行,不需要每次执行都获取网段表
#wget -q --timeout=60 -O- 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | awk -F\| '/CN\|ipv4/ { printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > /root/china_ssr.txt

CNIP="/root/china_ssr.txt"


gen_iplist() {
        cat <<-EOF
                $(cat ${CNIP:=/dev/null} 2>/dev/null)
EOF
}

flush_r() {
iptables  -F ALLCNRULE 2>/dev/null
iptables -D INPUT -p tcp -j ALLCNRULE 2>/dev/null
iptables  -X ALLCNRULE 2>/dev/null
ipset -X allcn 2>/dev/null
}

mstart() {
ipset create allcn hash:net 2>/dev/null
ipset -! -R <<-EOF
$(gen_iplist | sed -e "s/^/add allcn /")
EOF

iptables -N ALLCNRULE
iptables -I INPUT -p tcp -j ALLCNRULE

iptables -A ALLCNRULE -s 103.129.252.0/22 -j RETURN
iptables -A ALLCNRULE -s 103.129.254.0/23 -j RETURN
#香港云信白名单
#iptables -A ALLCNRULE -s gateway.push.apple.com -j RETURN
iptables -A ALLCNRULE -s 17.188.0.0/9 -j RETURN
iptables -A ALLCNRULE -s 17.188.128.0/20 -j RETURN
#苹果apns白名单
##可在此增加你的公网网段,避免调试ipset时出现自己无法访问的情况
iptables -A ALLCNRULE -m set --match-set allcn  src -j RETURN
iptables -A ALLCNRULE -p tcp -j DROP


}

if [ "$mmode" == "stop" ] ;then
flush_r
exit 0
fi

flush_r
sleep 1
mstart

stat

  1. 使用stat命令排查常用命令是否被篡改。
#stat /bin/ps			\\比对最近更改和改动时间,是否为近期修改过,与服务器出现问题的时间是否相近。
  文件:"/bin/ps"
  大小:100208    	块:200        IO 块:4096   普通文件
设备:fd00h/64768d	Inode:101249429   硬链接:1
权限:(0755/-rwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2019-12-02 14:08:09.185409821 +0800
最近更改:2018-10-31 00:58:46.000000000 +0800
最近改动:2019-06-04 09:41:11.899229888 +0800
创建时间:-

Centos7之前的系统版本输出信息为英文,但是内容意思如上一致。
用此方法将其他常用命令都进行排查。

#stat /bin/netstat 
  文件:"/bin/netstat"
  大小:155096    	块:304        IO 块:4096   普通文件
设备:fd00h/64768d	Inode:102999346   硬链接:1
权限:(0755/-rwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2019-12-02 14:08:09.113410110 +0800
最近更改:2018-10-31 00:40:49.000000000 +0800
最近改动:2019-06-04 09:49:01.215884172 +0800
创建时间:-
#stat /bin/top 
  文件:"/bin/top"
  大小:106944    	块:216        IO 块:4096   普通文件
设备:fd00h/64768d	Inode:101249435   硬链接:1
权限:(0755/-rwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2019-11-26 15:52:58.799629495 +0800
最近更改:2018-10-31 00:58:46.000000000 +0800
最近改动:2019-06-04 09:41:11.911261591 +0800
创建时间:-
#stat /bin/cd
  文件:"/bin/cd"
  大小:26        	块:8          IO 块:4096   普通文件
设备:fd00h/64768d	Inode:100673623   硬链接:1
权限:(0755/-rwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2018-10-31 01:07:12.000000000 +0800
最近更改:2018-10-31 01:07:12.000000000 +0800
最近改动:2019-06-04 09:38:16.426944593 +0800
创建时间:

不知道某些命令的路径可以使用which查询,如下:

#which ifconfig
/usr/sbin/ifconfig
#stat /usr/sbin/ifconfig 
  文件:"/usr/sbin/ifconfig"
  大小:82056     	块:168        IO 块:4096   普通文件
设备:fd00h/64768d	Inode:3314359     硬链接:1
权限:(0755/-rwxr-xr-x)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2019-11-01 19:57:57.466116537 +0800
最近更改:2018-10-31 00:40:49.000000000 +0800
最近改动:2019-06-04 09:49:01.226913234 +0800
创建时间:-

可以先切换到/bin目录中使用
find . -type f -mtime -1过滤出最近一天被修改的文件,再使用stat查看详情
命令详见参考资料
以下略

  1. 如果没有被篡改请跳过此步,如果发现有些命令修改时间异常,请及时重装该命令。
    简单的方法直接把有问题的文件删除,然后从其他相同版本的系统中复制过来,注意删除前备份。
    有些时候此方法不见效,我们需要重装此命令工具,使用
    yum whatprovides 反查命令在哪个安装包中
    例如:yum whatprovides */ifconfig
    查询出来后先卸载再进行安装。

crontab rc.d

此命令也需要进行上面的检索,如果被篡改再使用就会出现风险。
先使用

#crontab -l		\\查看是否有异常的定时任务
如果有请使用
#crontab -e		\\编辑删除,并记录下来留档。
#cd /var/spool/cron/	\\切换到定时任务目录中排查
# ls
root
# vim root 		\\编辑或删除可疑任务。

如果提示没有权限或者无法删除请

# ls -l root 		\\检查常规权限配置
-rw------- 1 root root 36 Dec  2 09:11 root
#chmod 700 root		\\编辑权限
#lsattr root		\\检查底层权限
#chattr -ia root	\\解锁文件

修改完文件请继续将文件上锁以防被修改。
具体chattr的命令使用请见参考资料中的(Linux的chattr与lsattr命令详解)

#cd /etc/rc.d/init.d/		\\继续检索自启任务目录
#find . -type f -mtime -1 -ls	\\使用find过滤出最近被修改的文件并查看详情,将-mtime的参数改成2过滤俩天。
#ls -lh			\\列出所有文件 检索出可疑文件。

我这里贴出我使用正常的Centos7的目录情况供参考。Centos6的文件会比较多请自行斟酌。
在/etc/rc.d/中还有rc0-6的文件夹 都是在init.d文件夹中创建的链接文件,同前一起删除可疑文件。
注意备份记录!
关于rc.d文件夹的用处介绍请见参考资料.

* Centos7:
#ls -lh
总用量 104K
-rwxrwxr-x  1 root root  112 7月  18 14:03 Control_Service
-rw-r--r--. 1 root root  18K 8月  24 2018 functions
-rwxr-xr-x. 1 root root 4.5K 8月  24 2018 netconsole
-rwxr-xr-x. 1 root root 7.8K 8月  24 2018 network
-rw-r--r--. 1 root root 1.2K 4月  26 2019 README
-rwxr-xr-x. 1 root root  44K 6月   4 11:42 vmware-tools
-rwxr-xr-x. 1 root root  16K 6月   4 11:42 vmware-tools-thinprint
* Centos6.5:
# ls -lh
total 292K
-rwxr-xr-x. 1 root root 1.3K Nov 23  2013 abrt-ccpp
-rwxr-xr-x. 1 root root 1.6K Nov 23  2013 abrtd
-rwxr-xr-x. 1 root root 1.7K Nov 23  2013 abrt-oops
-rwxr-xr-x. 1 root root 1.7K Aug 19  2010 acpid
-rwxr-xr-x. 1 root root 2.2K Jun 28  2018 aegis
-rwxr-xr-x. 1 root root 2.1K Jan 30  2012 atd
-rwxr-xr-x. 1 root root 3.3K May 28  2014 auditd
-r-xr-xr-x. 1 root root 1.4K Nov 24  2013 blk-availability
lrwxrwxrwx  1 root root   51 Jun 15  2018 cloudmonitor -> /usr/local/cloudmonitor/wrapper/bin/cloudmonitor.sh
-rwxr-xr-x. 1 root root  12K Aug 13  2013 cpuspeed
-rwxr-xr-x. 1 root root 2.8K Nov 23  2013 crond
-rw-r--r--. 1 root root  19K Jul 10  2014 functions
-rwxr-xr-x  1 root root  817 Feb  2  2015 gshelld
-rwxr-xr-x. 1 root root 1.8K Jul 20  2011 haldaemon
-rwxr-xr-x. 1 root root 5.8K Oct 10  2013 halt
-rwxr-xr-x. 1 root root  11K Nov 23  2013 ip6tables
-rwxr-xr-x. 1 root root  11K Nov 23  2013 iptables
-rwxr-xr-x. 1 root root 1.9K May  5  2014 irqbalance
-rwxr-xr-x  1 root root 9.8K Jun 22  2012 jexec
-rwxr-xr-x. 1 root root  18K Nov 23  2013 kdump
-rwxr-xr-x. 1 root root  652 Oct 10  2013 killall
-r-xr-xr-x. 1 root root 2.1K Nov 24  2013 lvm2-lvmetad
-r-xr-xr-x. 1 root root 2.7K Nov 24  2013 lvm2-monitor
-rwxr-xr-x. 1 root root 2.6K Apr  7  2014 mdmonitor
-rwxr-xr-x. 1 root root 2.2K Sep 14  2012 messagebus
-rwxr-xr-x. 1 root root 3.0K Oct 10  2013 netconsole
-rwxr-xr-x. 1 root root 5.4K Oct 10  2013 netfs
-rwxr-xr-x. 1 root root 6.2K Oct 10  2013 network
-rwxr-xr-x  1 root root 6.8K Oct 16  2014 nfs
-rwxr-xr-x  1 root root 3.5K Oct 16  2014 nfslock
-rwxr-xr-x  1 root root 2.8K Oct 31  2016 nginx
-rwxr-xr-x  1 root root 2.5K Apr 10  2019 nscd
-rwxr-xr-x. 1 root root 1.9K Jul 15  2013 ntpd
-rwxr-xr-x. 1 root root 2.0K Jul 15  2013 ntpdate
-rwxr-xr-x. 1 root root 3.9K Feb 20  2014 postfix
-rwxr-xr-x. 1 root root 1.6K Jul 17  2012 psacct
-rwxr-xr-x. 1 root root 2.0K Mar  5  2014 quota_nld
-rwxr-xr-x. 1 root root 1.5K Sep 17  2013 rdisc
-rwxr-xr-x. 1 root root 1.8K Nov 23  2013 restorecond
-rwxr-xr-x. 1 root root 1.8K Dec 18  2011 rngd
-rwxr-xr-x  1 root root 2.1K Feb 22  2013 rpcbind
-rwxr-xr-x  1 root root 2.5K Oct 16  2014 rpcgssd
-rwxr-xr-x  1 root root 2.3K Oct 16  2014 rpcidmapd
-rwxr-xr-x  1 root root 2.5K Oct 16  2014 rpcsvcgssd
-rwxr-xr-x. 1 root root 2.0K Aug 15  2013 rsyslog
-rwxr-xr-x. 1 root root 1.7K Nov 23  2013 sandbox
-rwxr-xr-x. 1 root root 2.1K Nov 20  2012 saslauthd
-rwxr-xr-x. 1 root root  647 Oct 10  2013 single
-rwxr-xr-x. 1 root root 3.0K Feb 22  2013 smartd
-rwxr-xr-x. 1 root root 4.5K Nov 23  2013 sshd
-rwxr-xr-x. 1 root root 2.3K Feb 12  2014 svnserve
-rwxr-xr-x. 1 root root 1.2K Nov 23  2013 sysstat
-rwxr-xr-x. 1 root root 2.3K Nov 23  2013 udev-post

查找可疑文件 进程 地址 端口

top htop pidof pgrep

使用top命令查找出可疑进程按P 通过CPU占用率进行排序。
如果top命令无法查找出异常进程,请安装htop工具。

#rpm -ivh http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm 
#rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL        \\导入key 
#yum install htop		\\安装htop
#htop			\\进入htop任务管理器按P 以CPU占用率排序,找出进程PID或者进程名
#pidif 进程名
#pgrep 进程名		\\使用这俩工具查找出进程的父进程(PPID)

详见参考资料:htop详解

iftop

如果是网络攻击,请使用iftop工具对网卡进行监听,查找出内外流量异常的地址进行封禁。

#yum install epel-release	\\安装epel源
#yum install iftop		\\安装iftop工具
#iftop -i 外网网卡名		\\开始监听网卡流量,按p显示地址端口。

抓取异常的地址,可使用https://www.ipip.net/ip.html 查询此IP的威胁情报,在安全组中阻拦。
详见参考资料:Linux流量监控工具 - iftop 最全面的iftop教程

解锁 删除 修改可疑文件 地址 端口

lsof

记住此进程名和PID

#lsof -p PID	\\查找此PID在使用的文件,可以找到病毒文件的路径等信息
#ll /proc/PID	\\查找此PID更多信息

记录下来,在下面步骤全部删除。

kill pkill

在确定清除自启任务后结束进程

#kill -9 PID		\\强制结束PID进程
#pkill -9 进程名		\\强制结束该进程名相关的所有进程,注意记录留档,有一定风险!

lsattr chattr

通过lsof及ll将查找出来的文件全部删除。

#cd Dir		\\切换到目标文件夹,如果是存在某些系统目录内可继续使用find过滤出最近修改的文件。
#/bin/rm -rf FileNames		\\直接删除文件,注意删除前备份留档。
#lsattr	FileNames		\\查找此文件底层权限,如果无法删除请使用chattr解锁后再删除。

注意 如果进程反复出现,可使用清空病毒内容而不删除病毒解决。
可以使用echo "" > 可疑文件 直接清空该脚本,病毒会检查脚本文件和进程是否被杀,只要我们不结束进程和脚本文件,让病毒每次执行空命令即可。后续再继续排查。

iptables ipset

将查找出来的可疑地址全部拉黑在安全组中拒绝。
记录异常地址访问的端口,在此服务器中通过netstat工具查看是哪个服务监听的这个端口,排查或修复漏洞。
国外的黑客比较多,如果没有国外客户的需求可以参考简述流畅中的示例脚本 禁止所有国外地址。
跳转

常见漏洞预防等待续

参考资料:

Linux的chattr与lsattr命令详解
Linux系统下用find命令查找最近修改过的文件
linux下/etc/rc.d目录的介绍及redhat启动顺序
Linux 中 4 个简单的找出进程 ID(PID)的方法
IPList for China by IPIP.NET
htop详解
Linux流量监控工具 - iftop 最全面的iftop教程
排查Linux实例CPU资源使用率高达100%的异常问题

# Linux 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×