黑客如何破坏我的 EC2 实例?

信息安全 网络服务器 SSH 系统妥协
2021-08-28 02:55:24

我的 EC2 实例最近被黑了。这并不重要,因为我刚刚启动我的网站并且我的服务器上还没有敏感信息,但我确实计划将来会有。我将终止受感染的服务器并设置另一台服务器以保护我的网站。

我的问题是我想确保这种情况永远不会再发生,我可以说服自己我的新服务器是安全的唯一方法是知道第一台服务器是如何被破坏的,并确保新服务器不会被相同的服务器破坏方法。但是,我无法识别/理解第一台服务器是如何被黑客入侵的。

使用的堆栈是 Rails 4.2.4 + Postgresql 9.3 + Puma + Nginx 1.4.6。我正在运行的服务器是 AWS EC2 t2.micro 实例上的 Ubuntu 14.04.2 LTS。我的 AWS 访问密钥尚未在任何地方发布,并且我是唯一应该拥有对我的服务器进行 SSH 访问的人。

现在我不是黑客,甚至不是一个好的系统管理员(虽然我正在学习)所以我必须对服务器是如何被渗透的保持开放的态度,但是因为我访问我的服务器的唯一方法是通过 SSH,我假设这也是黑客入侵的方式。我错误地将 SSH 端口 22 的入站安全组规则保留为 0.0.0.0/0 的来源,这也让我认为这很可能是黑客进入的方式。

我使用类似于命令的私钥通过 ssh 访问我的服务器

ssh -vi "/home/me/.ssh/my_private_key.pem" ubuntu@my_aws_instance.com

我收到一封来自 ec2-abuse@amazon.com 的电子邮件,通知我我的服务器一直在进行 DDOS 攻击。虽然我无法通过查看我的日志来验证这一点,但我确实发现了一些隐藏的 php 脚本,/var/tmp它们看起来好像是为了发送网络钓鱼电子邮件而设计的,这让我确信服务器确实被黑客入侵了。

hydra当我试图攻击自己的服务器时,没有为 ssh 设置密码。这对我来说意味着攻击者一定猜到了我的 RSA 私钥……除非我知道这实际上是不可能的

我不知道服务器可能受到损害的任何其他可能方式。有没有人有任何想法?我的任何假设或步骤是否错误?

入站安全组规则(被黑客入侵时):

HTTP               TCP    80      0.0.0.0/0
PostgreSQL         TCP    5432    0.0.0.0/0
SSH                TCP    22      0.0.0.0/0
Custom TCP Rule    TCP    9200    91.216.55.150/32

在此先感谢您的帮助。我确定我遗漏了很多有用的信息,所以如果您还有什么想知道的,请尽管询问。

编辑:

该网站确实包含一些相当标准的 Rails 数据输入功能。主要通过 html 表单,我还允许使用名为carrierwave的 gem 上传图像。

2个回答

使用的堆栈是 Rails 4.2.4 + Postgresql 9.3 + Puma + Nginx 1.4.6。我正在运行的服务器是 AWS EC2 t2.micro 实例上的 Ubuntu 14.04.2 LTS。


我使用私钥通过 ssh 访问我的服务器...

除非您已编辑 sshd 配置以允许密码登录,否则这足以确保远程攻击者无法暴力破解您的 SSH 登录。但是,如果您用作 SSH 客户端的计算机曾经遭到入侵,那么您也应该考虑到密钥遭到破坏。


黑客如何破坏我的 EC2 实例?

没有更多信息很难说。一份正在运行的服务、防火墙规则和一堆日志文件的列表会有所帮助。

我的问题是我想确保这永远不会再发生......

坚韧的饼干只要您有一个面向公众的 Web 服务器,它就会受到攻击。更好的方法是接受这种情况将来可能再次发生,并为此做好准备。你可以做的一些现实的事情是保持软件完全修补,调整你的防火墙规则(你真的需要访问整个世界吗?),在AWS 本地网络上实施IDS/IPS并通过它路由所有流量,最后记录所有流量并转发到强化的日志服务器

这可能是了解您是如何被黑客入侵的,以及将来如何防止它的最重要的一步。搜索日志文件是一种选择,但是拥有服务器日志的清晰可视化表示可以更容易地检测异常,并在服务器受到攻击时进行搜索。拥有一个单独的、经过加固的日志服务器很重要,因为如果您的 Web 服务器受到威胁,攻击者可以在本地擦除攻击痕迹。

如果您想更进一步,您可以自动化检测异常的过程,并在此基础上定义反应。

最好的解决方案是使用 Linux 实施第二个 EC2 实例。然后将 OpenVPN 安装到此实例。您实际上可以通过免费许可证(2 个并发用户)获得 OpenVPN 访问服务器,因为您是唯一一个通过 SSH 连接到 Web 服务器的人。拥有允许从 0.0.0.0/0 进行 SSH 的规则是个坏消息。此外,您的数据库端口不应向 Internet (0.0.0.0/0) 开放。

这是如何运作的?例如,为了通过 SSH 连接到 Web 服务器,您必须首先连接到 VPN 网络。然后使用其私有 IP SSH 到 Web 服务器。您的 Web 服务器的安全组规则如下所示:“允许来自 10.0.8.0/24 的 SSH” 如何在 AWS 上安装 OpenVPN 服务器?请点击此链接:在 AWS 上安装 OpenVPN 访问服务器