(6)如何判断服务器被入侵
虽然你的网站是可以运行了,但想要网站 7*24
小时高可用不掉线,还远远不够,因为互联网还有一个看不见的手——入侵者。
如果你买的是云服务器,比如说腾讯云、阿里云这种,一旦你登录了你的服务器,随后没有设置安全组、密钥、用户、IP,或者没有修改密码、默认端口,那么你的服务器就很容易被入侵,一般是被挖矿,或者被操控当做DDOS的攻击者。
可以说,只要你不设置安全组、防火墙,那么你的服务器基本上就没了,别问我为什么知道,因为我的三台服务器就是这么被黑掉的。
我经历过的三种被黑的情况:
- 挖矿(目前也是最多的)
- DDOS(操控你的服务器攻击其他网站)
- 勒索(删库)
本篇文章来介绍一些常见的服务器入侵排查方法。
# 1、宕机
这个是最常见的,一般你的服务器被入侵了,服务器的进程就被杀死了,万一某一天你的网站打不开了,MySQL、Redis都挂了,基本上就是被黑了。
# 2、日志
# 2.1、日志记录
入侵者可能会删除机器的日志信息,可以查看日志信息是否还存在或者是否被清空。
[root@VM-8-8-centos ~]# du -sh /var/log/*
40K /var/log/anaconda
36M /var/log/audit
0 /var/log/boot.log
4.0K /var/log/boot.log-20191106
4.0K /var/log/boot.log-20200807
4.0K /var/log/boot.log-20200902
16K /var/log/boot.log-20201228
16K /var/log/boot.log-20210325
3.8M /var/log/btmp
5.9M /var/log/btmp-20210501
/var/log
这个目录存在很多操作的日志。
Linux系统常见的日志文件
路径1:/var/log/messages:记录 Linux 内核消息及各种应用程序的公共日志信息
路径2:/var/log/cron:记录 crond 计划任务产生的事件信息
路径3:/var/log/dmesg:记录 Linux 操作系统在引导过程中的各种事件信息
路径4:/var/log/maillog:记录进入或发出系统的电子邮件活动
路径5:/var/log/lastlog:记录每个用户最近的登录事件
路径6:/var/log/secure:记录用户认证相关的安全事件信息
路径7:/var/log/wtmp:记录每个用户登录、注销及系统启动和停机事件
路径8:/var/log/btmp:记录失败的、错误的登录尝试及验证事件
所以只要非法者登录,就一定会记录在这里,如果这些日志都被删除了,那么只有一个可能,就是毁尸灭迹。
下面来展开看看一些关键的日志:
# 2.2、登录失败日志
lastlog
命令对于的日志是/var/log/lastlog
,记录了最近一次的登录用户。
如果一个用户从未登录过,lastlog显示**Never logged**
。注意需要以root身份运行该命令。
[root@VM-8-8-centos etc]# lastlog
Username Port From Latest
root pts/1 119.91.91.73 Tue May 11 12:51:22 +0800 2021
bin **Never logged in**
daemon **Never logged in**
adm **Never logged in**
lp **Never logged in**
sync **Never logged in**
shutdown **Never logged in**
halt **Never logged in**
# 2.3、查看机器当前登录的全部用户
who
命令对应日志文件 /var/run/utmp
[root@VM-8-8-centos etc]# who
root pts/0 2021-05-11 10:36 (119.91.91.73)
root pts/1 2021-05-11 12:51 (119.91.91.73)
# 2.4、查看机器创建以来登陆过的用户
last 命令对应日志文件/var/log/wtmp
[root@VM-8-8-centos etc]# last
reboot system boot 3.10.0-1127.19.1 Wed Mar 24 14:45 - 14:05 (47+23:19)
root pts/3 120.91.21.11 Tue Mar 23 20:50 - 00:02 (03:11)
root pts/2 119.91.91.73 Mon Mar 22 12:34 - crash (2+02:11)
root pts/1 119.91.91.73 Mon Mar 22 11:40 - crash (2+03:05)
root pts/2 119.91.91.73 Thu Mar 18 15:35 - 09:01 (3+17:26)
命令输出字段介绍:
第一列:用户名
第二列:终端位置。pts/0 (伪终端) 意味着从诸如SSH或telnet的远程连接的用户.tty (teletypewriter) 意味着直接连接到计算机或者本地连接的用户
第三列:登录ip或者内核 。如果你看见:0.0 或者什么都没有,这意味着用户通过本地终端连接。除了重启活动,内核版本会显示在状态中。
第四列:开始时间
第五列:结束时间(still login in 还未退出 down 直到正常关机 crash 直到强制关机)
第六列:持续时间
# 2.5、异常流量
如果是挖矿和DDOS,必然会出现大流量,此时可以抓包试试。
可以使用命令 tcpdump
抓取网络包查看流量情况,或者使用工具iperf
查看流量情况。
tcpdump
抓包可以知道目标源IP、端口、数据包是什么。
# 2.6、抓取入侵者的信息
[root@VM-8-8-centos etc]# cat /var/log/secure | grep -i "accepted password"
Dec 28 17:32:18 VM-8-8-centos sshd[1698]: Accepted password for root from 119.91.91.72 port 38620 ssh2
Dec 28 17:35:04 VM-8-8-centos sshd[2166]: Accepted password for root from 119.91.91.72 port 7571 ssh2
Dec 28 17:40:59 VM-8-8-centos sshd[2963]: Accepted password for root from 119.91.91.72 port 63710 ssh2
Dec 28 18:04:12 VM-8-8-centos sshd[6523]: Accepted password for root from 119.91.91.72 port 32717 ssh2
查看这个IP是否可疑,如果不是自己的IP那很可能就是入侵者的IP(一般都是代理的IP)
# 2.7、top命令
top命令可以很容易知道服务器的CPU压力,还有进程消耗的CPU资源,如果是挖矿,很容易就被发现了。
但还有一种情况是:入侵者会隐藏挖矿进程,你使用top命令是无法显示这个挖矿进程的,这个就很脑壳痛了。
以上就是一些简单的排查方法,下一篇文章带你走进真实的服务器被黑排查过程。