PHP Manual
/
来自实践的经验

有一天,黑客会攻击你的网站

04. 08. 2020

这不会发生在你身上吧?:DDDDDDDD

在管理300多个网站的过程中,我时常会遇到各种紧急状况。有时他们相当激烈,但往往是完全平庸的。如果你和我一样,过去曾被编程所诱惑,而且你也知道编程是一种痛苦,你一定会同意我的看法。

在邪恶黑客的控制下

当一个网络应用变得流行时,它就会成为黑客的一个诱人的目标。他们的动机通常不是要搞垮整个网站,恰恰相反。事实上,黑客希望你,作为服务器管理员,完全没有意识到他们的存在。一个好的黑客会等上几个月,观察网络服务器并获得最宝贵的东西--你的数据。

为了保护你的用户,必须对所有数据进行加密并有多层保护。对于密码,使用其中一个慢速函数,如Bcrypt + salt,Argon2,PBKDF2,或Scrypt。Michal Spacek已经写过关于安全等级的文章,我感谢他对文章的补充。作为一个网站所有者,在与程序员讨论时,你必须坚持正确的密码散列。否则,你就会哭,就像你之前的许多人一样,他们也自欺欺人地认为这与他们无关。

你能知道你什么时候被攻击了吗?

我注意到,当一个网络服务器的流量达到一定的阈值时(在捷克共和国,大约是每天50多个访问者),它就会开始突然受到一系列针对它的攻击。为了使事情变得不容易,攻击者总是有优势,因为他可以选择基础设施的哪一部分开始攻击,而你--作为网络服务器的所有者--必须及时认识到这一点,为自己辩护,并为下一次做更好的准备。

比如说,在上个月有多少次针对你的攻击?你确切知道吗?你为他们中的多少人辩护过?还有人可以访问你的服务器吗?

如果现在有人在攻击你怎么办?而现在...现在还......?

不幸的是,没有一个放之四海而皆准的方法来识别攻击。但有一些工具可以给你带来显著的优势。

最近对我来说最有效的是什么?

  • 当攻击者不知道你的服务器的物理位置时,他们的处境更加困难。通过Cloudflare可以很好地混淆物理架构信息,它可以代理(和双向加密)所有网络通信。它还具有其他一些优势,如更快地从国外检索,自动保护免受DDOS攻击,资产压缩,最后但并非最不重要的是,自动阻止流氓访客。我的所有网站都使用Cloudflare(而且几乎每个项目都使用不同的技术)。
  • 错误记录。总是这样,一切都这样。有可能你的应用程序包含了很多由你的程序员犯下的错误。无论是未捕获的异常、应用程序错误、SQL注入,等等。如果你用PHP编程而不了解日志,那么Tracy(可能还有Sentry等其他工具)和服务器本身的访问日志就足以发现问题。错误记录不是一个很好的条件,而是一个必须的条件。我在我积极维护的所有网站上记录错误,并将新的错误信息发送到我的电子邮件,以便我立即知道。
  • 安全和更新的平台。你的网站上有WordPress吗?你知道如何正确地更新它吗?你知道你面临的所有风险吗?当某些东西是免费的,它几乎总是以牺牲其他东西为代价。就我个人而言,我使用Nette framework第3版进行应用开发,每周更新一次,并积极寻找安全漏洞进行修补。就像你定期对你的汽车进行维修一样,你需要定期对你的网站进行维修,至少每月一次。网站维护包括更新所有外部库和持续监测日志。如果你使用的是一个旧版本的库,那么攻击者很可能知道这个漏洞并试图利用它。 问题是什么时候 在我的地区,大量的人以令人难以置信的方式低估了安全,并将非常容易被破解和利用的内容暴露在互联网上。

事实上,即使是大公司也会犯错,甚至在XSS(跨站脚本)攻击这样的小事上。

问题不在于是否有人会破坏你的网站。问题是它何时会发生,以及你是否会有足够的准备来应对它。也许一个黑客已经访问你的服务器几个月了,而你还不知道(还)。

发生麻烦时该怎么办

当你发现黑客的工作时,通常已经太晚了,黑客已经完成了他们需要做的一切。他很可能在服务器上放置了恶意软件,并至少部分控制了该机器。

这是一个混乱类型的问题,你需要迅速采取行动

由于这是攻击的最后阶段,我个人建议将网络服务器与互联网完全断开,并开始逐步弄清所发生的一切。另外,我们永远不会确切知道服务器是否隐藏了其他东西。攻击者总是有一个显著的先发优势。

如果我们决定把最后的工作备份放回服务器上,我们将对攻击者有很大的帮助。他已经知道如何闯入你的服务器,而且没有什么可以阻止他在几个小时内再次这样做。此外,该备份可能包含恶意软件或其他类型的病毒。

虽然这在我的客户中是一个非常不受欢迎的选择,但我个人总是建议先完全删除WordPress网站,或任何客户不更新的有很多安全威胁的系统。例如,如果你在一台服务器上托管了30个超过2年的网站,你几乎可以保证其中至少有一个网站包含某种形式的漏洞。

如果你不了解这个问题,你最好尽早联系一个合适的专家,他对你的问题有深刻的了解,并从大的方面理解事情。

伦理说明:

如果你正在为一个发生了安全事故的客户管理网站,你有责任通知他们。如果任何数据(如密码,但往往更多)被泄露,你也必须通知最终用户,他们的密码是公开的,他们应该在任何地方改变它。如果你使用缓慢的散列函数(例如,Bcrypt + 盐),你将使攻击者大大增加破解密码的难度。(不幸的是,Bcrypt密码可以被破解)。如果你希望定期收到关于你的账户是否被泄露的信息,我建议在Have i been pwned? 注册。有关安全漏洞的更多信息,请访问OOO网站。

原子的习惯

在过去的六个月里,我读完了[Atomic Habits](https://www.melvil.cz/kniha-atomove-navyky…

由于处于技术债务不同阶段的公司和个人都找过我,我想总结一下最糟糕的事情。

  • 用于服务器通信的FTP没有意义。它是一种不安全的协议,由密码控制。如果你想让别人访问,他们需要知道密码,并且可以做和你一样的事情。如果你想剥夺他的访问权,你不能,唯一的办法是改变密码。最好是完全改用SSH并使用RSA密钥。很多时候,我很惊讶,现在连公司都在解决这个问题。千万不要把所有的密码都做成一个表。当然,也从来没有为整个团队分享过一个。
  • 源代码属于Git,数据属于数据库,静态内容(图片、PDF等)属于磁盘上的文件。选择错误的数据存储会使应用的设计和安全性变差。一个PDF的URL(例如有发票)应该包含随机生成的内容,只有收件人知道。对于极其敏感的内容(如银行对账单),重要的是在磁盘上对内容进行加密,只在登录后提供。
  • 网站的非公开部分必须包含META标题noindexnofollow,以避免被谷歌索引。你的竞争对手不能知道的敏感内容必须有密码保护。
  • 在你的服务器上禁用目录内容列表。如果设置不当,整个网站可以被机器抓取以找到敏感文件。
  • 项目根基!绝不能有直接指向配置文件的URL。 例如,Nette does it right就是从第一个教程开始。公开可用的git存储库](https://smitka.me/open-git/)也是如此。这种类型的脆弱性极易被低估,其后果往往是悲惨的。
  • 该错误也可能是由一个无心的开发错误引起的。对于每一个变化,由一个活生生的人进行代码审查是非常重要的。许多bug在人类看到代码之前就被PHPStan或类似工具发现了。
  • 千万不要通过电子邮件发送可读形式的密码,总是有其他方法来解决。
  • 旧版本的图书馆和软件的安全问题。机器人每秒都在互联网上爬行,并攻击已知的安全漏洞(SQL注入、XSS、CSRF...)。很多已知的漏洞都有旧版本的WordPress。

还有很多漏洞,不同项目的问题也不同。如果你需要做一个快速的服务器审计,我建议使用Maldet,然后聘请一个合适的专家来帮助你做一个全站审计,而不仅仅是出于安全原因。

安全工程师就像海洋中的塑料--只是永远的。适应它。

自然界的作用和反应原理

你也会注意到,大自然几乎总是使用反作用力原则。这意味着在一个特定的环境中发生的事情,周围的生物体对它的反应是不同的。这种方法有很多优点,但有一个巨大的缺点--你将永远被甩在后面。

作为一个有思想的人(设计师、开发者、顾问),你有一个很大的优势,那就是可操作性--也就是说,提前知道某一部分大的风险,并积极防止它们发生在第一时间。你可能永远无法防止所有的错误,但你至少可以减轻后果,或者建立控制机制,及早发现问题,以便你有时间作出反应。

大多数攻击发生在很长一段时间内,如果你记录,通常会有足够的时间发现问题。

Jan Barášek   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.
2.
Status:
All systems normal.
2024