我的新Joomla 4网站是如何被黑客攻击的
在午夜过一刻,我刚上床,我决定检查我的电子邮件。我和几个工作朋友在阿登地区(比利时马尔梅迪)。
一封电子邮件引起了我的注意
日期:2022年10月12日星期三 19:57:03 +0000
发件人:Netcraft Takedown Service <
主题:在jug-arnhem-nijmegen.nl发现网站篡改 [问题 xyz]
去年七月,我与我所在的Joomla用户组一起推出了一款新的Joomla 4:https://jug-arnhem-nijmegen.nl/ 。三个月后,这个全新的网站,只有几个扩展且完全更新,可能已经被黑客攻击了!
发件人Netcraft与荷兰域名管理者SIDN合作,以保持.nl域名的安全。他们发现了一个黑客文件“hxxps://jug-arnhem-nijmegen[.]nl/Ox.php”,该文件用于篡改网站。他们要求我修复问题并向他们报告。如果不这样做,SIDN应该关闭该域名。
还有另一封关于黑客攻击的电子邮件。我的VPS托管服务也被Netcraft通知了。他们鼓励我也采取行动,如果不这样做,整个VPS将被关闭。
他们说的是对的,我的网站确实被黑客攻击了...
我使用FTP检查了网站根目录下的名为Ox.php的文件。我发现有两个文件是我们自己没有添加到网站上的
Ox.php 12-10-2022 20:41:24 - 一段显示“Hacked by”消息的PHP篡改代码
sec.php 12-10-2022 17:47:56 - 一个后门脚本,可以访问整个文件系统和Joomla的数据库
糟糕...
我立刻想起了几个月前一个德国朋友的故事,她的Joomla 4网站遭到了黑客攻击。在Joomla社区,我们都觉得这很奇怪,因为她是一个经验丰富的Joomla专业人士,对安全性非常重视。她告诉我,她发现黑客攻击时已经太晚了,无法获取完整的日志文件。
标准操作程序 (SOP)
让我们制定针对这种情况的“网站被黑SOP”
- 中和黑客攻击
- 保护黑客踪迹
- 网站文件
- 网站数据库
- 网站日志文件
- 预防未来的黑客攻击
- 分析网站是如何被黑的
- 恢复备份
- 通知数据主体
步骤1 - 中和黑客攻击
首先,我需要确保黑客无法再在服务器上使用他们的后门脚本。我把网站移动到另一个文件夹,并将权限更改为“700”。这意味着只有所有者可以通过SSH直接访问服务器上的文件。网站中的所有文件现在对外界不可用。
现在网站不可用,我为所有访客创建了一个index.html文件,上面写着“由于维护,本网站暂时不可用”的消息。
SSH / sFTP 登录
我使用SSH检查了整个VPS上的成功登录
# cat /var/log/auth.log | grep Accepted
幸运的是,只有我自己!上周所有的登录都是我通过SSH和sFTP完成的。注意:这种方法不是100%安全的:如果黑客获得了根目录外的文件写入权限,他们就能够修改auth.log。
新添加的文件
为了查看过去两天中添加了哪些文件,我使用了
# find . -mtime -2 -print
- Ox.php 12-10-2022 20:41:24
一个显示“被黑了”信息的PHP篡改 - sec.php 12-10-2022 17:47:56
一个后门脚本,可以访问整个文件系统和Joomla数据库 - configuration.php 12-10-2022 17:49:30
在末尾进行了一小修改,新增一行:“public $session_metadata_for_guest = true;” - administrator/templates/atum/error.php 12-10-2022 17:46:58
另一个用于上传文件的后门脚本 - administrator/index.php 12-10-2022 20:43:40
原来的index.php已被替换为“被黑了”屏幕,阻止任何管理员登录Joomla后端
注意:这种方法不是100%安全的,因为文件日期/时间可能会被更改。
步骤2 - 保护黑客踪迹
为了在稍后的时间分析黑客攻击,我保护了
- 文件(包括日期/时间)
- 数据库和
- 服务器日志文件。
我将文件/文件夹压缩成归档,从数据库中执行了mysqldump并压缩所有日志文件到另一个归档文件。我将所有归档文件下载到我的电脑上。
比计划晚了一个小时后,我睡觉了。明天我将分析黑客攻击...
步骤3 - 预防未来的黑客攻击
第二天,分析时间。我创建了一个新文档来记录关于黑客攻击的所有发现。然后我开始分析Joomla数据库。
数据库
#__users表只有2个用户。我的账户密码仍然相同,但我的最后登录时间是:22-10-12 15:46:28。#__action_logs表中的最后两条记录显示了我的账户PLG_ACTIONLOG_JOOMLA_USER_LOGGED_IN
- 2022-10-06 07:24:04
- 2022-10-12 15:46:28
10月12日下午我成功登录了。然而,当时我离我的电脑很远。我的浏览器历史记录显示10月6日的访问记录,但证实我10月12日没有登录到网站上。
有人用我的账户登录,但没有更改我的密码!
访问日志
因此,黑客在2022年10月22日15:46:28获得了我的网站超级管理员权限。他们添加了几個PHP文件,并可能使用了他们留在网站中的PHP后门脚本。我使用这些日期/时间和文件名作为分析访问日志的起点。
我注意到在登录期间,IP地址103.147.9.x很活跃。该IP地址首次出现在我的日志文件中的时间是
103.147.9.x - - [2022年10月12日 15:44:52 +0000] "GET /?view=article&id=51&catid=15 HTTP/2.0" 200 18275 "https://www.google.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36" "-"
因此,黑客通过Google.com找到了我的网站。
当我搜索Google上的那个id=51的文章页面时,我发现Google已经索引了我的页面,页面上有“J!+InfoRequestSessionProfileQueries101Log”,这意味着Joomla的调试模式开启。
在第一次http请求和登录之间几乎没有时间。值得注意的是,他们可能使用了Joomla的com_ajax结合Joomla的调试插件
- 103.147.9.x - - [2022年10月12日 15:45:16 "GET /administrator/index.php?option=com_ajax&plugin=debug&group=system&format=raw&action=openhandler
&15310a67461c94ffb5e6e6ce67bf67c3=1&max=20&offset=0 HTTP/2.0" 200 906 "https://jug-arnhem-nijmegen.nl/administrator/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36" "-" - 103.147.9.x - - [2022年10月12日 15:45:21 "GET /administrator/index.php?option=com_ajax&plugin=debug&group=system&format=raw&action=openhandler
&15310a67461c94ffb5e6e6ce67bf67c3=1&method=POST&max=20&offset=0 HTTP/2.0" 200 - 103.147.9.x - - [2022年10月12日 15:45:23 "GET /administrator/index.php?option=com_ajax&plugin=debug&group=system&format=raw&action=openhandler
&15310a67461c94ffb5e6e6ce67bf67c3=1&op=get&id=X9913f9017153a97bb42ad2b98e5ba232 HTTP/2.0" 200 - 103.147.9.x - - [2022年10月12日 15:46:28 "POST /administrator/index.php HTTP/2.0" 303
- 103.147.9.x - - [2022年10月12日 15:46:29 "GET /administrator/index.php HTTP/2.0" 200
然后黑客用后门文件替换了Joomla Atum后端模板的error.php页面
- 103.147.9.x - - [2022年10月12日 15:47:56 "POST /administrator/templates/atum/error.php HTTP/2.0" 200
之后,他们尝试使用后门脚本从public_html文件夹外获取更多服务器权限,但未成功。
第二位黑客
黑客可能在一个Facebook群组分享了这种攻击方法,因为后来在访问日志文件中又出现了一个未邀请的人。他们的部分操作
- 185.195.236.x - - [2022年10月12日 18:39:03 +0000] "GET /?fbclid=IwAR3mgGPsxDHwH43s-bXrYRE3V-WAoNQGFUYtfa-EFU0cwElKJLCeh4tTio4 HTTP/2.0" 200 5539 "https://m.facebook.com/" "Mozilla/5.0
- 185.195.236.x - - [2022年10月12日 18:40:36 "GET /sec.php?dir=/www&aksi=view&dirf=/www/configuration.php HTTP/2.0" 200 4706 "https://jug-arnhem-nijmegen.nl/sec.php"
因此,第二位黑客获取了Joomla的<强>configuration.php强>文件,其中包含数据库和SMTP凭证。
由于黑客似乎使用了Joomla的核心部分来未经授权访问我的网站,我联系了来自<强>Joomla安全打击团队强>(JSST)的David。我给了他有关黑客攻击的所有文档和服务器ssh访问权限。
几个小时后,David告诉我,他们确实发现了Joomla调试模式的漏洞,并且正在修复安全补丁。我可以移除被黑的网站并恢复我的干净网站。
第4步 - 恢复备份
在恢复备份之前,我更改了所有凭证
- SSH/FTP访问
- 数据库名、数据库用户名和密码(他们复制了configuration.php!)
- SMTP凭证(他们复制了configuration.php!)
- 所有Joomla用户账户的密码(幸好只有两个)
- Akeeba备份中的备份服务器凭证
之后,我恢复了黑客攻击之前的最新备份。
第5步 - 通知数据主体
当你有迹象表明个人信息已被泄露时,你还需要通知当地隐私监管机构。也许你还需要向当地警察报告。
在这种情况下,没有迹象表明个人信息(用于通讯录的姓名和电子邮件地址)已被窃取。我决定只通知订阅了邮件列表的所有人。我还通知了Netcraft和我的VPS提供商,我已经修复了问题。
为什么会发生这种情况?
我们的阿纳姆-尼姆威根JUG组织了2022年10月4日星期二的Joomla用户组会议。然而,我的同事生病了。除了演讲者外,只有其他一个人报名参加了活动。我们决定取消会议。
发送通讯录的问题
通过Acymailing发送“JUG会议已取消”的通讯录时,出现了问题。一半的邮件队列成功发送。另一半给出了“SMTP认证失败”错误。
我找不到问题的原因。所以我决定开启Joomla的调试模式,因为它在出现错误时提供有用的信息。但这次它并没有帮助我找到问题。
喝了一杯茶后,我发现问题所在:jug-arnhem-nijmegen.nl的DNS有一个mail.jug-arnhem-nijmegen.nl的MX记录。但是有两个不同的mail.jug-arnhem-nijmegen.nl记录,它们有不同的IP地址。正确的IP地址是发送成功时使用的。错误的IP地址导致了SMTP认证失败错误。
我最终能够发送所有通讯录,在网上发布了一些关于取消会议的消息,并且……完全忘记了关闭调试模式。谷歌索引了我网站上“JUG会议已取消”的文章,并在谷歌结果页面上显示了调试详情。
致自己:
- 在实时网站上使用Joomla的调试插件时,将其访问级别设置为超级管理员!
- 调试完成后,请关闭调试模式。
最后
我很高兴在事件发生后不久就发现了黑客攻击,并且能够确保黑客的踪迹。我的德国朋友证实,她的被黑的网站也处于调试模式。知道它是通过相同的漏洞被黑的,这让我的焦虑减少了一些。尽管漏洞具有严重的影响,但其严重性和可能性较低:您必须启用调试模式。
Joomla安全打击队能够修复这个安全问题(再次感谢!)并使带有调试模式的Joomla更加安全。2022年10月25日星期二,发布了Joomla 4.2.4安全发布,该发布解决了这个问题。
原定于10月的阿纳姆-尼姆威根JUG会议被安排在11月。在那个11月2日星期三的会议上,我们有很多参观者。除了有趣的J4迁移演示外,还简短地介绍了一个关于“JUG网站是如何被黑”的演示。
在Joomla社区杂志上发表的一些文章代表了作者对特定主题的个人观点或经验,可能并不与Joomla项目的官方立场一致
接受后,您将访问 https://magazine.joomla.net.cn/ 以外第三方提供的服务
评论 4
哇,Peter,这肯定提高了血压。很高兴一切都已澄清,并感谢你对它的详细说明。
这是一篇非常有意思的文章,谢谢!当网站被黑时总是很可怕,所以我欣赏对系统化法医分析过程的说明。
Peter,感谢你详细说明这一切——这将对网站被黑的人非常有帮助。
有了这个“指南”,他们将对自己的行动感到更加安全!
阅读它时,我(幸运地)确认了你采取的每一个步骤(我的一年前的 J3 网站被黑了,我确实按相同的顺序采取了所有相同的步骤)。
感谢你,Peter,这是一篇出色的详细分析。这将帮助许多人了解如何处理被黑的网站。我有一个遵循的过程,但我将确保采用你的一些优秀想法,这将有助于更好地识别事物并改进我的“必须执行”清单。