我需要一些帮助来追踪我服务器上的漏洞。我的服务器第二次受到病毒感染的下载文件的威胁。
根据文件系统日期,在 45 分钟内,我服务器上的 4 个 exe 文件被相同病毒的重命名版本替换。
我的 Web 服务器正在运行内核版本为 2.6.32-31-generic 的 Ubuntu 10.4.3 LTS,并保持完整的补丁和最新状态。
访问 shell 的唯一方法是通过 SSH 和我随身携带在 USB 记忆棒上的受密码保护的私钥。密码 SSH 登录被禁用,服务器日志(我知道可以修改,但我有充分的理由相信他们没有)表明没有使用 SSH 登录服务器。
Web 服务软件堆栈非常复杂。有带 Suhosin v0.9.29 的 PHP (5.3.3-1)、nginx 1.0.9(现在更新到 1.0.10)、Tomcat(在监狱中,我怀疑没有关联)和 MySQL 5.1.41。
我承认,在第一次攻击时,为了缓解头痛,我已经满足于愉快地 chmod -R 777 我的 web 目录。现在我运行了一堆乱七八糟的 PHP 脚本,包括但不限于 WordPress、vBulletin 和几个自制产品;其中前两个始终是最新的,而后者在编写时非常小心,以逃避或规范任何用户输入的值。
鉴于文件权限较弱,但服务器访问受到强烈限制,我很想怀疑在允许执行随机代码的众多 PHP 脚本之一中存在漏洞。
我已经完全锁定了文件权限。nginx/php 都作为 www-data:www-data 运行,所有文件仅授予执行和读取权限 ( chmod -R 550 /var/www
)。
然而今天,在这一切之后,我的服务器再次遭到入侵。
问题是,被替换的文件仍然有550
权限,SSH 日志显示没有登录,我完全不知道下一步该做什么或尝试。
我试图在被一个非常基本的 PHP 脚本替换的路径上重新创建攻击:
$file = fopen('/var/www/mysite.com/path/to/file', 'w');
fwrite($file, 'test');
fclose($file)
但这给了我适当的权限被拒绝错误。
任何人都可以请告诉我接下来在哪里寻找这个漏洞的来源?我的文件权限是否遗漏了什么?
我知道服务器一旦受到攻击,就几乎永远“消失”了。但这不是一个真正的选择。我已经递归地搜索了我的整个 /var/log 文件夹以查找受影响的文件名,希望能找到一些东西,但什么也没出现。
我还搜索了 cron 文件夹或其他地方的任何脚本,这些脚本可能在第一次攻击时放置在以后再次攻击,但是 (a) 什么也没找到,并且 (b) 不应该找到任何东西,因为/etc/ 中的文件不能被 www-data 修改(假设是 nginx/PHP 渗透点)。
我应该补充一点,我两次都在 nginx 访问日志(组合样式)中找到了受感染文件的名称,但什么也没找到。但是,我确实理解/意识到存在许多从我的 grep 中隐藏文件名的方法。