【问题标题】:Help needed to nab the malware viral activity using awk使用 awk 获取恶意软件病毒活动所需的帮助
【发布时间】:2011-09-06 04:23:50
【问题描述】:

我的服务器遇到问题,因为有时恶意软件会在文件末尾或开头添加代码。我已在我所知的范围内修复了安全漏洞。我的托管服务提供商已告知现在安全性足够,但我对我网站上的病毒/恶意软件活动变得偏执。我有一个计划,但我不太熟悉 sed 或 awk 或 gawk 等 Linux 编辑器,因此需要您的帮助。我可以使用我的 PHP 知识来做到这一点,但这将非常耗费资源。

由于恶意软件/病毒在文件的开头或结尾添加代码(以便网站不会显示任何错误),请您告诉我如何编写一个递归查看所有 .php 文件的命令(我将使用帮助来更改父目录和所有子目录中的其他类型的文件),并在文件的开头和结尾添加特定标签,例如 XXXXXX_START 和 YYYYYY_END。

然后我需要一个脚本来读取所有 .php 文件,并检查代码的第一行是否为 XXXXX_START,最后一行是否为 YYYYYYY_END,如果发现任何文件不同,则创建报告。

我将设置一个 cron 来检查所有文件并将报告通过电子邮件发送给我,如果发现任何差异。

我知道这不是 100% 万无一失的,因为病毒可能会在注释行之后添加数据,但这是我能想到的最佳选择。


我已经尝试了以下命令在开始时添加数据 -

sed -i -r  '1i add here' *.txt

但这不是递归的,它只向父目录文件添加行。

然后我发现了这个 - BEGIN 和 END 是特殊模式。它们不用于匹配输入记录。相反,它们用于为您的 awk 脚本提供启动或清理信息。 BEGIN 规则在第一个输入记录被读取之前执行一次。在读取所有输入之后执行一次 END 规则。例如:

awk 'BEGIN { print "Analysis of `foo'" }
     /foo/ { ++foobar }
     END   { print "`foo' appears " foobar " times." }' BBS-list

但不幸的是,我无法破译任何东西。

非常感谢您对上述细节的任何帮助。欢迎任何其他建议。

问候,

尼丁

【问题讨论】:

  • 您最好为每个文件生成一个 SHA-256 哈希,并在托管服务提供商以外的地方(U 盘、笔记本电脑或其他地方)记录官方哈希.当您需要检查时,您会在托管服务提供商上重新生成文件的哈希值,然后将这次获得的内容与上次记录的内容进行比较。任何差异都是由于文件更改造成的。最可能的原因是您忘记了更新文件并且没有更改保存的哈希值,但它给您提供了有限数量的文件(希望)来查看。

标签: linux editor sed awk gawk


【解决方案1】:

您可以使用以下内容来修改文件(也可以创建名为 .bak 的备份文件):

find . -name "*.php" | xargs sed -i.bak '1iSTART_XXXX
$aEND_YYYY'

您可以使用以下 shell 脚本来检查文件:

for f in `find . -name "*.php" -print`
do
    START_LINE=`head -1 $f`
    END_LINE=`tail -1 $f`

    if [[ $START_LINE != "START_XXXX" ]]
    then
        echo "$f: Mismatched header!"
    fi

    if [[ $END_LINE != "END_YYYY" ]]
    then
        echo "$f: Mismatched footer!"
    fi
done

【讨论】:

  • 小心使用反引号。如果您遇到此错误,请在 Google 上搜索“参数列表太长”。或者只是find -name "*.php" -print | while read f; do case $(sed -n -e '1p' -e '$p' "$f") in $'START_XXXX\nEND_YYYY') continue;; esac; echo "$f: mismatch"; done
【解决方案2】:

使用版本控制和/或备份;如果出现可疑活动,请关闭实时站点并从备份或版本控制源重新安装。

【讨论】:

  • 我们已经在服务器上为我们工作了 SVN,因此我们能够将站点恢复正常。我们有一个提交后代码,它会自动在服务器上部署代码,但问题是恶意软件也编辑了 .svn 文件夹中的文件。 SVN 版本控制是每个开发公司不可或缺的一部分,但这并不能保证任何事情。我正在尝试追踪正在编辑我的文件的程序,但在此之前我需要让我的系统足够工作,以免我的业务受到影响。
【解决方案3】:
$ find . -type f | grep "txt$" | xargs sed -i -r  '1i add here'

将该命令应用于当前目录中或下的所有文件。您可能可以将 grep 逻辑折叠到 find 中,但我喜欢简单的咒语。

【讨论】:

  • 如果这些文件不定期更改,另一种方法可能是只计算每个文件的校验和(例如 md5sum),然后检查它是否仍然匹配。
  • 感谢您的快速回答。我喜欢校验和的想法,但是随着我们不断更改站点上的内容,文件也在不断变化。你能解释一下你在答案中写的命令吗
  • @Nitin:您发布过程的一部分将是在您上传文件之前生成文件的校验和,或者(不太令人满意)在上传文件后立即生成它们。如果您没有足够好的发布流程,现在可能是开始实施的好时机。
  • 说真的,如果你不使用版本控制,你注定要失败。停止媒体,分配一两天时间让某人设置它,然后半天让整个工作人员学习基础知识。可能您的一些开发人员已经熟悉版本控制系统,至少足以运行“svnadmin init”和 Google 如何设置访问控制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
  • 1970-01-01
相关资源
最近更新 更多