我如何确定我的Linux机箱是否已经被渗透?

我最近阅读了一篇关于分析恶意SSHlogin尝试的文章 。 这让我想到,在我的Debian盒子上的SSH用户名,密码组合是不是很普遍? 如果我被powershell字典攻击的目标? 我们来看看/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盒子是否已经渗透?
  • …消除肇事者留下的任何伤害
  • …防止这种情况在未来发生?

UPDATE

任何build议, 消除肇事者留下的任何损害?

很多人似乎都在build议DenyHosts,但是在我的系统上我已经看到很多Fail2Ban的成功。 它监视(可configuration的)数量的故障,然后在我的服务器上执行一个动作,即使用iptables从主机中删除所有stream量。 10次​​login失败后,他们被禁止,这是它的结束。

我将它与Logcheck结合使用,以便我始终知道我的服务器上发生了什么。

如果您有任何证据表明有人真的进入了系统(您发布的日志不是证据),那么您唯一的解决scheme是备份所有需要保留的数据,擦除机器,重新安装和恢复从备份。 否则,没有办法确定。

有效的login尝试也被logging下来,所以如果你看到一个蛮力尝试,然后成功,这是一个很好的迹象表明发生了一些不好的事情。

我使用DenyHosts监视日志中的可疑SSHstream量,并将其configuration为在某个时间点自动将主机防火墙closures。

请注意,还有其他一些方法可以监控您的计算机是否受到攻击,包括加载模式,login活动,定期stream量嗅探,监控正在运行的进程和打开的端口以及使用tripwire等工具确保文件完整性。

如果你只想做一个,监控系统负载是一个非常有效的方式来检测危害,因为大多数机器被入侵时被用来做一些事情,如发送大量的垃圾邮件或以其他方式接收大量的stream量。 也许没有用,如果你是一个高价值的目标,人们可能会试图具体闯入你,而不是把你的主机变成僵尸,但有价值的原因。 还需要加上监测负载进行分析,并确定何时需要投资更多的硬件或更好的软件。

你还应该做全面的日志分析,查看auth.log和其他意想不到的事情。 日志文件分析是一个竞争激烈的市场,问题还没有解决,但有像logwatch这样的免费工具,可以configuration为每天发送摘要。

安全通过层!

忘了Tripwire,它相当昂贵。 使用AIDE代替。 它的免费,易于设置(虽然需要一些时间来决定排除哪些临时目录,否则configuration)。

你运行它,它build立一个所有文件的数据库。 再次运行,它会告诉你哪些文件已经改变。

还有一件事是安装CSF,它有一个拒绝主机types阻止器,因为人们反复login失败,它会将它们添加到您的防火墙规则中。 您还可以要求SSHlogin拥有公共密钥,脚本小子可以尝试尽可能多的login。

 "* ... determine if my Linux box has been infiltrated?" 
  • 寻找奇怪进程的迹象。 我通常使用chkrootkit的工具( http://www.chkrootkit.org
  • 用另一台机器上的nmap做一个portscan。 如果你的盒子已经被盗用,那么盗号者可能会安装一个后门

“* …消除肇事者留下的任何伤害?”

忘记它,如果发生了攻击,最好的build议是从头重新安装它(确保在新安装中插入任何漏洞)。 不通知后门或隐形进程是很容易的,你最好重新安装。

“* …防止这种情况发生在未来?”

  • 安全更新

  • 防火墙严密

  • 强密码

  • closures不必要的服务

看看logcheck , portsentry和tripwire等工具。 随机字典SSH的尝试是很常见的,所以我不会太担心。 你可能想要改变随机混淆的端口,但你仍然会随时看到随机的尝试,这是在互联网上有一台机器的生活。

我在服务器上用来防止这些攻击的一件事是DenyHosts 。 DenyHosts将阻止恶意用户尝试login。 由于安装它,我的日志文件有更less的login尝试条目。

使用公钥/私钥对作为额外的身份validation是一个很好的做法; 这样用户不能通过SSHlogin没有一个正确的密钥; 这将是相当不可能猜测一个蛮力forcer。 关于这个好文章可以在这里find。

单独使用密码短语对于SSHauthentication来说非常稳固; 但是还有更多的漏洞! 注意所有使用开放端口的应用程序; 如果他们包含一个漏洞,剥削者可能会超越你的系统。 一个很好的例子就是我们服务器上安装的垃圾邮件机器人,因为我们当前使用的webstats软件存在一个错误。

Fail2ban是一个访问日志实时分析器。 它可以configuration为阻止任何IPlogin失败次数。这样可以避免字典攻击,而无需移动SSH端口。 chkrootkit和rootkithunter是检查入侵的好工具。 如果入侵成功,最好的做法是复制数据(只是数据,而不是可执行文件),擦除和重新安装,因为确实很难100%确定系统是干净的。

这里没有什么可以暗示你的盒子已经被盗用了。 即使您的密码相当薄弱,只会在每个用户名中引发一次login尝试的字典式攻击极不可能成功。

但是,如果你知道你的密码很弱,那就加强他们! 我个人喜欢pwgen (由Debian包装)。 在每一次运行中,它都会产生大量强大但相对易懂的密码候选(至less对我来说)是很容易记住的,比如yodieCh1,Tai2daci或Chohcah9。

但是,如果有其他证据表明您的系统已经被入侵,请将其从轨道上移开。 这是唯一确定的方法。

不可执行的数据可能是可挽救的,但任何具有可执行内容(这可能包括MS Office文档和一些configuration文件之类的东西)必须去,除非你愿意并能够手动检查它,以确保它没有“不会变成敌对的,或者接受它可能具有敌意的可能性,或者破坏你的系统,或者提供一个未来再妥协的途径。

我喜欢的一个小额外的保护措施是限制传入的SSH连接,以减缓任何字典攻击或类似的。 不要指望这会保护你自己,除了在其他答案的build议,包括禁用密码authentication,使用此。

使用iptables:

 $ iptables -A INPUT -p tcp --dport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT $ iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPT $ iptables -A INPUT -p tcp --dport 22 -j DROP 

这个线程有一些不好的build议,例如:

  • 使用ssh的非标准端口(错误!)
  • 使用一些第三方安全工具(添加不必要的依赖/复杂性)
  • configuration您的防火墙阻止或白名单(维护头痛)

简单地调整你的/etc/ssh/sshd_config来改善安全性:

  • PermitRootLogin no
  • 仅为系统中拥有ssh帐户的用户configurationAllowUsers
  • 考虑只使用“PasswordAuthentication no”的物理密钥

如果你是盒子已被渗透。 重build盒子。

将启用ssh的所有时间。 把它移到高端口。

有一个名为“Tripwire”的程序,非常适合入侵检测,但安装非常困难。 如果没有别的,你应该通读他们的文档,以便你了解问题。

在将计算机挂接到互联网之前,您需要安装入侵检测。

为了确保整个世界甚至不能尝试这样的事情,把IP列入白名单SSH连接是个好主意。

我如何确定我的Linux机箱是否已经被渗透?

启动只读媒体(livecd)并将文件与您的备份或原始媒体进行比较。

只是看看奇怪的行为。 当然,如果你花点时间才能对“正常”情况有一个好的感觉,那么这是最容易的。

您发布的错误不表示妥协。 只是有人在尝试。

我怎样才能消除肇事者留下的任何伤害?

在系统遭到破坏之前,重新安装并从备份中恢复。

看到:

我怎样才能防止这种情况发生?

看到:

  • 防止暴力攻击ssh?
  • 数百个失败的sshlogin
  • Ubuntu服务器SSH
  • 你采取哪些步骤来保护Debian服务器?

你可以看盒子看看有什么进出,并寻找任何可疑的东西。 看到这个职位: https : //stackoverflow.com/questions/124745/sniffing-network-traffic-for-signs-of-virusesspyware

PSAD与Shorewall配合是一个很好的方式来赞扬你的iptables规则。

我也使用Fail2ban来跟踪我的SSHlogin

使用rkhunter或chkrootkit或两者; 从外面扫描你的盒子,看看打开了什么端口

无论如何,如果你拥有的是无效的用户,没有必要担心:)

非常不同的东西:尝试在IP地址上使用Google ! 一个自称为土耳其STARTURK的黑客可能试图破解你的网站。

虽然它看起来像是对你的系统的暴力攻击,但很可能是这个黑客只是试了一下,现在已经去了其他的网站。

正如许多人所指出的,Tripwire / AIDE是查找系统更改的最佳方式。 不幸的是,牛不在那个谷仓里,因为它必须configuration在一个已知好的系统上。

有一件事可以帮助你至less开始使用你的RPM数据库来检查文件的md5sums。 基本要点是:

 rpm -qa | xargs rpm -V 

这不是完美的各种原因。 首先,您的本地RPM数据库理论上可能已经改变。 其次,大多数发行版使用预链接,并且RPM不能预知链接。 MD5似乎已经从那个过程中改变了,这是合法的。

最好的build议是这样的:如果你不确定你是否被攻陷,那么现在是重build的时候了。

为了防止未来的安全问题,您可以看看OSSEC ,我使用它来对我们的服务器进行文件完整性检查和日志监控,这是非常完整和易于configuration的。 它可以发送邮件通知,您可以通过命令行或Web界面检查警报…

http://www.ossec.net/

取自网站:

“OSSEC是一个开源的基于主机的入侵检测系统,它执行日志分析,文件完整性检查,策略监控,rootkit检测,实时警报和主动响应。

  • 日志分析它可以检查你的服务器上的日志文件,并通过规则提醒你(有很多预先定义的,你可以添加自己的)

  • 文件完整性tripwire /助手像function,所以你会看到如果有任何文件已被修改您的服务器上

  • 政策监控:检查一些“最佳实践”安全规则

  • rootkit检测:rkhunter,chkrootkit类似function

  • 实时警报和主动响应:您可以configurationossec自动对警报作出反应(我不使用这个,但是您可以使用它来阻止对主机的ssh访问,从而导致失败的连接尝试)

真的很好的产品,它非常活跃

硬化你的盒子,你也可以使用lynisbastille