【问题标题】:Finding a malicious script on my webserver with bash使用 bash 在我的网络服务器上查找恶意脚本
【发布时间】:2013-07-11 19:11:58
【问题描述】:

我的网络服务器遇到问题。 有人用泄露的 wordpress 感染了它。 问题如下,文件中某处存在一些恶意 phpscript。 恶意脚本在网络服务器 (/home) 上的每个文件中都放置了一个 iframe 但问题是我不知道脚本在哪里,我在 /home 中有数千个网络文件,它可能在任何地方。 我知道如何删除所有 iframe,但我的想法是删除触发器。 所以我在徘徊如何解决它,我可能有一个解决方案,但我需要你的建议

我注意到脚本不时执行,但完全随机(大约每周一次) 现在假设我使用以下 shell 命令(目前每 30 分钟运行一次)清除了所有恶意 iframe

find /home -type f | xargs sed -i 's$<iframe src="[^"]*" width="2" height="2" frameborder="0"></iframe>$ $g'

现在我所有的 php 文件都没有 iframe,我的想法是在 iframe 再次出现时提醒我。 像这样,如果我有 iframe 出现的大致时间,那么我可以查看 apache 日志以查看调用了哪个 webscript。

所以我创建了另一个 bash shell,我想听听你的建议,看看它是否可以。 我会在服务器上每 30 分钟运行一次,直到收到邮件。

然后我会查看 apache 日志以检查最近 30 分钟的日志。

这就是我正在考虑的 bash:

#!/bin/bash     
find /home -type f | xargs grep -q '<iframe src="[^"]*" width="2" height="2" frameborder="0"></iframe>'     #Find the string in all file on my all directory
if [ $? -eq 0 ] #if the result is not equal to zero
then
        echo "At the following time : " $(date +%H-%M-%S) | mail -s "[Serveur Leaked] Bad iframe has been found " me@mymail #we send a mail with the date
        find /home -type f | xargs sed -i 's$<iframe src="[^"]*" width="2" height="2" frameborder="0"></iframe>$ $g' #we replace the iframe with a whitespace
else    
        exit 1  
fi

exit 0

我真的需要找到一个解决方案,因为正如我所说的,我每 30 分钟运行一次查找和替换 shell 命令,这需要很多过程。

但我不能让 iframe 在我的服务器上放置太久,否则我的网站会被 google 列入黑名单,我负担不起。

非常感谢您对未来的建议。

安塞尔

【问题讨论】:

  • 我找到了可以帮助你的东西:unix.stackexchange.com/a/13462/40596
  • 或许也可以将此问题发布到security.stackexchange.com
  • 如果您是唯一应该修改这些文件的人,那么您也许可以使用 filemtime() 来测试文件的最后修改时间与您的脚本上次运行的时间。

标签: bash shell virus


【解决方案1】:

一旦您找到了您想要监控的 iframe 文件,也许 inotify 的 shell 脚本版本 inotifywait 将是最简单的解决方案。在您的脚本中使用它,如下所示:

#!/bin/sh
while inotifywait -e modify /var/log/messages; do
    if tail -n1 /var/log/messages | grep httpd; then
        kdialog --msgbox "Apache needs love!"
    fi
done

一般来说,有更好的文件监控工具,例如 auditd,它包含预构建的实用程序,专为安全和审计而设计。

另外,fanotify 提供用户信息并可以有效地监控整个卷。查看出色的示例工具:fatrace

inotify 存在几个重大问题:它无法可靠地监控新创建的文件夹,并且无法识别文件更改的来源 (PID)。这些都不在这里,但是直接使用 inotify 需要一些编码。

【讨论】:

  • inotify 建议的想法是在文件更改时有一个挂钩来运行他的脚本,而不是每隔 30 分钟运行一次。
  • 好点,在这种情况下,围绕 inotify 构建的命令行实用程序可能会很好地完成工作。我已经相应地编辑了我的答案。
  • 非常感谢您的两个回答。 floflo,即使 inotify 看起来很有趣,我认为我的编码技能还不够好,无法使用它.. 但我会尝试。无论如何,您的回答为我的研究提供了新的途径。再次感谢,我会在成功时与您保持联系。
【解决方案2】:

您可以使用inotify 在您的 html 文件发生更改时获得通知,并且仅在这种情况下运行您的脚本。

当您知道您的文件被修改(例如通过上述 inotify)时,您可以使用进程的 proc 系统(或类似lsof)来找出哪个进程打开了修改后的文件。

【讨论】:

  • 感谢您的回答。但问题是,由于服务器被几个人使用,经常会有一些人在服务器上更改他们的文件......
【解决方案3】:

这可能不是 PHP 脚本造成的,黑客可能已经获得了您服务器的密码。该网站提供了一些资源,可以指导您检查哪些内容

http://wordpress.org/support/topic/new-malware-code-injection-attack

这里是关于如何加强安装的 Wordpress 文档

http://codex.wordpress.org/Hardening_WordPress

更改系统的 root 密码将是一个不错的起点。

为了让您了解您可能面临的恶意复杂程度

http://blog.sucuri.net/2013/05/auto-generated-iframes-to-blackhole-exploit-kit-following-the-cookie-trail.html

我的同情。

【讨论】:

  • 感谢您提供所有有用的链接。但是我仍然认为这是网络注入,因为我已经更改了所有密码并检查了日志..(root ssh 帐户和所有 ftp 帐户)它是仍然在.. 但我很高兴我会用你的链接找到一些新的 trakc..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-31
  • 2010-10-28
  • 2012-07-11
  • 1970-01-01
  • 1970-01-01
  • 2013-09-09
相关资源
最近更新 更多