恶意软件扫描程序的正则表达式(PHP)

时间:2016-03-24 11:10:27

标签: php regex malware

美好的一天!今天的问题很简单。

我们在共享服务器上有很多网站,有时他们会被恶意软件攻击,他们开始发送电子邮件,或者他们试图感染其他邻居网站。

花了一些时间来清理许多服务器上的文件后,我开始认为可能有一个看看php文件的脚本对我来说真的很有帮助。

为每个网站提供完整的防病毒功能有点过多"我喜欢的是我可以远程管理的东西,这将为我提供扫描网络服务器的一些线索。

所以我想到了一个简单的PHP脚本,它只扫描每个目录和每个文件以搜索可疑模式。我实际上使用这两个正则表达式:

/eval\((base64|eval|\$_|\$\$|\$[A-Za-z_0-9\{]*(\(|\{|\[))/i

/mail\(/i

我知道,第二个是非常幼稚的,但它可以完成这项工作,因为我想知道某个php文件是否有邮件调用。

我尝试使用token_get_all,但我找到的唯一有用的令牌是T_EVAL,所以我回到了正则表达式。

我的问题实际上是这两个正则表达式是:

  1. 未优化(我感觉正则表达式有点太多cpu /耗时)
  2. 远远不够精确
  3. 我要问的是:

    1. 有更好的想法来实现相同的结果?
    2. 我也想与这些模式相匹配:
      ev​al(gzinflate(base​64_de​code('...');
      ev​al(gzuncompress(base​64_de​code('...');
      ev​al(gzinflate(str_rot13(base​64_de​code('...');
    3. 我认为eval|base64|gzinflate|gzuncompress|gzinflate应该是"首字母"要搜索的模式,但将正则表达式修改为:

      /eval\((base64|eval|gzinflate|gzuncompress|gzinflate\$_|\$\$|\$[A-Za-z_0-9\{]*(\(|\{|\[))/i
      

      没有给出我所尊重的结果。

      嗯,当然,如果你有更好的想法,那将非常受欢迎。

      注意

      我理解这个问题非常广泛,但我希望对这个主题有所了解,因为在没有任何保护的情况下处理数百个网站是非常耗时的。 如果这不是发布此问题的正确位置,我会删除它,我不想玷污董事会。

      另一个注意

      这不是"解决方案"我只想要一个有问题的结构化工具,我可以在家里(或用CRON)轻松使用,这只是警告我一些奇怪的东西,确实会有大量的误报。

2 个答案:

答案 0 :(得分:2)

我首先想到的是专业的病毒扫描和恶意软件清除软件。如果您想尝试自己尝试,可以考虑创建PHP脚本的md5()摘要数据库。扫描目录,制作摘要,将它们存储在数据库中。在重新扫描时,比较摘要。如果有任何新的摘要(出现新的PHP文件)或丢失的摘要(PHP文件消失)或更改的摘要(PHP文件被修改),它会让你快速提醒某些东西是不同的,你可以调查一下变化出乎意料。

答案 1 :(得分:0)

一旦您的服务器遭到入侵,就无法清除它

检测到感染后,唯一可行的安全方法是构建新服务器并将数据导入其中(检查这些数据后)

如果服务器受到感染,你就不能再相信它了,因为他可以骗你任何事情,比如文件的内容。

我知道这听起来很痛苦,但没有希望从感染中完全康复,并确保你已从中恢复过来。