查看用密码登陆成功的IP地址及次数
grep "Accepted password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more
查看用密码登陆失败的IP地址及次数
grep "Failed password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more
当前都有谁在登录?
其对应的命令是 w
检查到有陌生IP在登录,不要恐慌之下只是干掉他们的 SSH 连接。除非你能够防止他们再次进入服务器,否则他们会很快进来并踢掉你,以防你再次回去。
whois 命令可以接一个IP地址,然后告诉你该IP所注册的组织的所有信息,当然就包括所在国家的信息。
谁曾经登录过?
CentOS系统,运行 cat /var/log/secure,可以看到大量尝试登录又失败的记录。
last 命令查看
登录后的历史记录会记录到二进制的 /var/log/wtmp 文件中(这里作者应该写错了,根据实际情况修改)因此很容易被删除。通常攻击者会直接把这个文件删掉,以掩盖他们的攻击行为。 因此, 若你运行了 last 命令却只看得见你的当前登录,那么这就是个不妙的信号。
回顾命令历史
运行 history 命令会显示出他们曾经做过的所有事情。 一定留意有没有用 wget 或 curl 命令来下载类似垃圾邮件机器人或者挖矿程序之类的非常规软件。
命令历史存储在 ~/.bash_history 文件中,因此有些攻击者会删除该文件以掩盖他们的所作所为。跟登录历史一样,若你运行 history 命令却没有输出任何东西那就表示历史文件被删掉了。这也是个不妙的信号,你需要很小心地检查一下服务器了。
哪些进程在消耗 CPU?
运行 top 然后看最前的那几个进程就行。
通过 losf 和 strace 来看看它做的事情是什么。
使用这些工具,第一步从 top 中拷贝出进程的 PID,然后运行:
strace -p PID
这会显示出该进程调用的所有系统调用。它产生的内容会很多,但这些信息能告诉你这个进程在做什么。
lsof -p PID
这个程序会列出该进程打开的文件。通过查看它访问的文件可以很好的理解它在做的事情。
检查所有的系统进程
消耗 CPU 不严重的未授权进程可能不会在 top 中显露出来,不过它依然可以通过 ps 列出来。命令 ps auxf 就能显示足够清晰的信息了。你需要检查一下每个不认识的进程。经常运行 ps (这是个好习惯)能帮助你发现奇怪的进程。
检查进程的网络使用情况
iftop 的功能类似 top,它会排列显示收发网络数据的进程以及它们的源地址和目的地址。类似 DoS 攻击或垃圾机器人这样的进程很容易显示在列表的最顶端。
哪些进程在监听网络连接?
通常攻击者会安装一个后门程序专门监听网络端口接受指令。该进程等待期间是不会消耗 CPU 和带宽的,因此也就不容易通过 top 之类的命令发现。lsof 和 netstat 命令都会列出所有的联网进程。通常让它们带上下面这些参数:
lsof -i
netstat -plunt
你需要留意那些处于 LISTEN 和 ESTABLISHED 状态的进程,这些进程要么正在等待连接(LISTEN),要么已经连接(ESTABLISHED)。如果遇到不认识的进程,使用 strace 和 lsof 来看看它们在做什么东西。
被入侵之后该怎么办呢?
首先,不要紧张,尤其当攻击者正处于登录状态时更不能紧张。你需要在攻击者警觉到你已经发现他之前夺回机器的控制权。如果他发现你已经发觉到他了,那么他可能会锁死你不让你登陆服务器,然后开始毁尸灭迹。如果你技术不太好那么就直接关机吧。你可以在服务器上运行 shutdown -h now 或者 systemctl poweroff 这两条命令之一。也可以登录主机提供商的控制面板中关闭服务器。关机后,你就可以开始配置防火墙或者咨询一下供应商的意见。如果你对自己颇有自信,而你的主机提供商也有提供上游防火墙,那么你只需要以此创建并启用下面两条规则就行了:
只允许从你的 IP 地址登录 SSH。
封禁除此之外的任何东西,不仅仅是 SSH,还包括任何端口上的任何协议。
这样会立即关闭攻击者的 SSH 会话,而只留下你可以访问服务器。
如果你无法访问上游防火墙,那么你就需要在服务器本身创建并启用这些防火墙策略,然后在防火墙规则起效后使用 kill 命令关闭攻击者的 SSH 会话(本地防火墙规则 有可能不会阻止已经建立的 SSH 会话,所以保险起见,你需要手工杀死该会话)
最后还有一种方法,如果支持的话,就是通过诸如串行控制台之类的带外连接登录服务器,然后通过 systemctl stop network.service 停止网络功能。这会关闭所有服务器上的网络连接,这样你就可以慢慢的配置那些防火墙规则了。
重夺服务器的控制权后,也不要以为就万事大吉了。不要试着修复这台服务器,然后接着用。你永远不知道攻击者做过什么,因此你也永远无法保证这台服务器还是安全的。最好的方法就是拷贝出所有的数据,然后重装系统(你的程序这时已经不可信了,但是数据一般来说没问题)
友情提示
如果检测出网站被扫被黑,那赶快去做一下措施吧!例如:禁用密码登录,禁用root登录,更改默认端口,使用证书登录。没被扫最好也做好安全措施,毕竟网络没有绝对的安全。具体可以参考我的另一篇文章:提高Linux服务器安全性的几个步骤