我们使用通常的 LAMP 堆栈运行共享托管网络服务器。它从很多年前就开始运行了(呃,Apache-1.3 和 PHP-3 天?)并经历了许多迭代。我们努力制定良好的系统管理政策,例如使所有堆栈保持最新、检查弱密码、最小化攻击面、使用 suhosin、密切关注系统日志等。当然,每个虚拟主机都被限制在它的目录中(用于 FTP 访问和 php open_basedir)。
但归根结底,它始终是一个网络服务器,运行由客户上传的不受信任的 PHP 废话(阅读:没有任何 IT 经验的未知和大多数愚蠢的用户),HTTP 暴露给世界(网络表单和诸如此类)......这些场景是并不少见:
- 用户将其密码提供给太多人,其网站遭到破坏
- 用户的 PC 受到威胁,FTP/Web 应用程序/任何密码都从那里被盗
- 用户安装了蹩脚的 PHP 东西并且它被破坏了
- 用户安装了很好的 PHP 东西(它甚至存在吗?)但是多年没有更新并且它被破坏了
- 用户编写自己的 PHP 内容(哎呀!他们从 ---------- 墙里出来了!)
- 等等。你明白了。
在调查受感染的 PHP/JS/HTML/任何东西时,我们有时会发现 javascript 形式的恶意软件(在 .js 文件中或嵌入在 html 中),有时我们甚至会在 .zip 文件中找到包含 Microsoft Windows 的恶意软件/病毒。
在这样一个狂野的环境中,不可能在网站上重复运行自动漏洞测试,而且可能也没有多大用处。我还认为像 mod_security 这样的东西在这样一个共享的、通用的、失控的环境中是不可能的。
但我想知道是否有任何我们可以在服务器端运行的类似防病毒软件,至少是为了寻找被众所周知的 javascript 或可执行文件破坏的网站,或者旧版本 PHP 网络应用程序中的已知漏洞。每晚从 cron 运行的东西,并获得一个很好的电子邮件报告。
有这样的事吗?clamav 能检测到一些讨厌的 JS 东西吗?(我假设我们已经可以使用它来检测上传的带有 Win32 恶意软件的 zip 文件)还有什么我没有想到的可以在服务器端运行以进行静态扫描?以及存储在 MySQL 中的内容(例如,从表单上传并存储在 SQL 中以便稍后在网页上显示的 javascript)?
除了 ClamAV 之外,还可以考虑使用Maldet进行其他恶意软件检测。根据文档,它具有与 ClamAV 集成的能力,尽管我还没有亲自设置它。
Snort 可以在上传恶意软件时进行检测。此外,使用 Cloud Linux 或 SELinux 等。如果配置为这样做,这可以防止许多作品危害站点。您也可以在 Web 服务器上运行 Kaspersky Scan,它会检测到一些东西,但并不总能正确地对其进行杀毒。最重要的是,您可以实施策略,上传的任何内容都必须具有受限访问权限,以及您可以做的是防止覆盖除特殊文件夹之外的文件,这些文件夹不能从外部链接。这是可能的,并且有很多方法可以做到这一点。ACL、SELinux、SUEXEC 等。
Clam AntiVirus是您想要的工具。它在邮件系统中看到了共同的职责,但您没有理由不能监控通过您的 Web 应用程序传入的上传。
请记住,您可能需要更改应用程序代码才能有效地使用它。它需要处理这样一个事实,即 ClamAV 将独立于您的应用程序扫描、检测并可能删除/阻止文件。最好的选择是从您的应用程序为每次上传调用 ClamAV,但这可能比您愿意投入的开发时间要多。
我建议您尝试使用 Linux 恶意软件检测 ( http://www.rfxn.com/projects/linux-malware-detect/ )。将其放入 cron 以运行定期扫描:
0 * * * * /usr/local/sbin/maldet -r ~ >输出