我最近阅读了一篇关于分析恶意 SSH 登录尝试的文章。这让我开始思考,我的 Debian 机器上的 SSH 用户名、密码组合是否不常见?我是否已成为暴力字典攻击的目标?让我们看一下/var/log/auth.log.0:
Sep 23 07:42:04 SLUG sshd[8303]: Invalid user tyjuan from 210.168.200.190
Sep 23 07:42:09 SLUG sshd[8305]: Invalid user tykeedra from 210.168.200.190
Sep 23 07:42:14 SLUG sshd[8307]: Invalid user tykeem from 210.168.200.190
Sep 23 07:42:19 SLUG sshd[8309]: Invalid user tykeshia from 210.168.200.190
Sep 23 07:42:25 SLUG sshd[8311]: Invalid user tyla from 210.168.200.190
Sep 23 07:42:30 SLUG sshd[8313]: Invalid user tylan from 210.168.200.190
Sep 23 07:42:35 SLUG sshd[8315]: Invalid user tylar from 210.168.200.190
Sep 23 07:42:40 SLUG sshd[8317]: Invalid user tyler from 210.168.200.190
Sep 23 07:42:45 SLUG sshd[8319]: Invalid user tylerfrank from 210.168.200.190
Sep 23 07:42:50 SLUG sshd[8321]: Invalid user tyliah from 210.168.200.190
Sep 23 07:42:55 SLUG sshd[8323]: Invalid user tylor from 210.168.200.190
所以看起来不太好。现在我知道我已经成为攻击的目标,并且我的一些用户名、密码组合很弱,我想知道我该如何...
- ...确定我的 Linux 机器是否已被渗透?
- ...消除肇事者留下的任何损害?
- ... 防止这种情况在未来发生?
更新
关于撤消肇事者留下的任何损害的任何建议?
很多人似乎建议使用 DenyHosts,但我已经看到在我的系统上使用Fail2Ban取得了很多成功。它监视(可配置)数量的故障,然后执行一个操作 - 在我的服务器上,该操作是使用 iptables 删除来自主机的所有流量。在 10 次登录失败后,他们被禁止,这就是它的结束。
我将它与 Logcheck 结合使用,以便我始终知道我的服务器上发生了什么。
如果您有任何证据表明有人确实闯入了您的系统(您发布的日志不是这方面的证据),那么您唯一的解决方案是备份您需要保留的所有数据,擦除机器,重新安装和恢复从备份。否则,没有办法确定。
有效的登录尝试也已登录,因此如果您看到暴力尝试然后成功,这很好地表明发生了不好的事情。
我使用DenyHosts来监视我的日志中是否存在可疑的 SSH 流量,并将其配置为在某个时间点自动对主机进行防火墙。
请注意,您还希望通过多种其他方式来监控您的机器以查看它是否受到威胁,包括负载模式、登录活动、定期流量嗅探、监控正在运行的进程和打开的端口,以及使用诸如 tripwire 之类的工具确保文件完整性。
如果您只打算做一个,那么监控系统负载是检测入侵的一种非常有效的方法,因为大多数机器在被入侵时都用于发送大量垃圾邮件或接收大量流量等事情。如果您是一个高价值目标,并且人们可能会出于将您的主机变成僵尸以外的其他原因试图专门闯入您,那么这可能没有用,但仍然很有价值。此外,还需要监控负载来进行分析并确定何时需要投资更多硬件或更好的软件。
您还应该进行全面的日志分析,查看 auth.log 和其他内容以了解意外情况。日志文件分析是一个竞争激烈的市场,问题尚未解决,但有一些免费工具,如 logwatch,可以配置为每天向您发送摘要。
层层安全!
“* ...消除肇事者留下的任何伤害?”
算了,如果发生攻击,最好的建议是从头开始重新安装(确保在新安装中插入任何漏洞)。很容易注意到后门或隐身进程,最好重新安装。
“*……以后不要再发生这种事了?”
安全更新
严密的防火墙
强密码
关闭不必要的服务
忘记 Tripwire,它相当昂贵。请改用 AIDE。它是免费的,易于设置(尽管需要一些时间来决定要排除哪些临时目录,或者进行其他配置)。
你运行它,它会建立一个包含所有文件的数据库。再次运行它,它会告诉您哪些文件已更改。
另一件事是安装 CSF,它有一个拒绝主机类型的阻止程序,当人们反复登录失败时,它会将它们添加到您的防火墙规则中。您还可以要求 SSH 登录也具有公钥,脚本小子可以尝试尽可能多的登录。
看看logcheck、portsentry和tripwire等工具。随机字典 SSH 尝试很常见,所以我不会太担心。您可能想要更改端口以进行随机混淆,但您仍然会不时看到随机尝试,在互联网上拥有一台机器就是生活。
我在服务器上用来帮助防止这些攻击的一件事是DenyHosts。DenyHosts 将阻止恶意用户尝试登录。自从安装它以来,我的日志文件的登录尝试条目要少得多。
使用公钥/私钥对作为额外的身份验证是一种很好的做法;这样用户就无法在没有正确密钥的情况下通过 SSH 登录;对于一个蛮力的人来说,这几乎是不可能猜到的。可以在这里找到一篇关于此的好文章。
单独使用密码短语对于 SSH 身份验证来说非常可靠;但是还有更多的漏洞!注意所有使用开放端口的应用程序;如果它们包含漏洞利用者可能会超越您的系统。一个很好的例子是由于我们当前使用的 webstats 软件中的错误而安装在我们的服务器上的垃圾邮件机器人。
Fail2ban 是一个访问日志实时分析器。它可以配置为阻止任何尝试登录失败的任何 IP。这可以避免字典攻击,而无需移动 ssh 端口。chkrootkit 和 rootkithunter 是检查入侵的好工具。如果入侵成功,最佳实践是复制数据(仅复制数据,而不是可执行文件),擦除并重新安装,因为很难 100% 确定系统是干净的。
这里没有任何迹象表明您的盒子已被盗用。即使您的密码很弱,只对每个用户名进行一次登录尝试的字典攻击也极不可能成功。
但是,如果你知道你的密码很弱,那就加强它们吧!我个人喜欢pwgen(由 Debian 打包)。每次运行时,它都会生成大量强大但相对发音相对容易记住的候选密码(至少对我而言),例如 yodieCh1、Tai2daci 或 Chohcah9。
但是,如果有其他证据表明您的系统已被破坏……从轨道上用核弹攻击它。这是唯一确定的方法。
不可执行的数据可能是可以挽救的,但是任何具有可执行内容(这可能包括诸如 MS Office 文档和一些配置文件之类的东西)的东西都必须删除,除非您愿意并且能够手动检查它以确保它没有t 变得敌对或接受它可能是敌对的可能性,并且如果您保留它,它会损坏您的系统或为未来的重新妥协提供途径。
我喜欢的一个小的附加保护是对传入的 ssh 连接进行速率限制,以减慢任何字典攻击或类似攻击。不要指望这可以单独保护您,但是除了其他答案中的建议(包括禁用密码身份验证)之外,还要使用它。
使用 iptables: