科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网安全频道网络安全利用NeopPI检测网站后门

利用NeopPI检测网站后门

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

当上述条件得到满足时,攻击者们往往会寻求一种利用部署网页shell代码并进行持续访问的方式来发动入侵。这种代码会建立起一套可以顺利访问网页服务器的"虚拟"shell。这种shell通常会在系统接受的指令执行及文件访问动作中,夹杂其它讨厌的恶意功能。

来源:51CTO 2011年4月19日

关键字: 网站后门 NeopPI

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共4页)

部署一套网页shell到底有多简单?

这些shell的部署能够通过下列方法来加以简化:命令注入、文件上传漏洞、不安全的FTP(即文件传输协议)以及包含漏洞的远程文件。如果攻击者能够使目标网页服务器执行其所提供的后门程序,他们就能够使shell获得与网页服务器同样高的权限来对主机操作系统进行访问。

如果我们不能够安全地依靠传统方法,例如基于签名认证的扫描工具,来检测网页shell,那还有其它的备选方案吗?现在,让我们一同进入NeoPI吧。

NeoPI

概述

NeoPI是一个由Python所编写的脚本,它使用多种统计方法来检测存在于文本及脚本文件中的,经过伪装处理或加密过的内容。NeoPI的预期目的是帮助我们定位网页shell的隐藏代码标识。NeoPI在发展方面的重心在于创造一套可与其它现有检测方案(例如Linux恶意软件检测或传统的基于签名认证/密钥信息的检索手段)同共作用的强大工具。

NeoPI是一款独立的平台,能够在安装了Python 2.6的任何操作系统平台上运行。要运行这套脚本的用户,首先需要获得读取计算机中所有文件的权限,这样该工具才能进行全盘扫描。

NeoPI将对整个文件系统由基层目录开始进行循环扫描,并按照一系列检测结果对文件进行评估分类。这种分类能够帮助我们识别哪些文件有较高的机率可能已经被经过加密的网页shell所侵入。它同时还提供了一种称为"总体"评分的系统,可以由单独的检测做出个别的文件分类。

分析方式讲解

NeoPI利用以下几种不同的统计方法,来尝试判断对象文件中包含恶意代码的可能性。

最长的字符串

最长的字符串指的是该种检测手段将文件中长度最长且不间断的字符串作为判断标识。这种方式相当实用,因为经过伪造处理的代码在经过编码的文本文件中往往是作为一条超长的字符串进行存储的。当前多数主流的编码方法,例如base64编码,都会产生一个没有空格字符的超长字符串。由于典型的文本及脚本文件,其内容在字符串的长度方面普遍较短,因此找出那些反常的长串字符可能有助于我们识别该文件中是否存在恶意代码。

  1. longest = 0  
  2. words = re.split("[\s,\n,\r]", data)  
  3. if words:  
  4. for word in words:  
  5. if len(word) > longest:  
  6. longest = len(word)  
  7. return longest 

上述代码的功能是将某字符串以"单词"为单位用空格、换行及回车加以拆分后获得的结果。其运行之后将自动确定那些最长的字符串内容并在处理之后返回分析结果。

熵是一种用来衡量及描述某值在不确定性方面所表现出来的强度的概念。Shannon(Claude Shannon,信息熵概念及符号逻辑与开关理论的奠基者)位是字节。该测试通过计算来确定目标编码文件中字节数最少的某个文件所必需的"Shannon熵值"。熵测量在识别加密型网页shell方面功效卓著,因为加密过程往往会使对象文本字符串的熵值大幅提升。

  1. entropy = 0  
  2. for x in range(256):  
  3. p_x = float(data.count(chr(x)))/len(data)  
  4. if p_x > 0:  
  5. entropy += - p_x * math.log(p_x, 2)  
  6. return entropy 

上面的代码将对Shannon熵值的具体"数据"进行计算并返回一个0到8之间的浮点数。所谓熵值代表的是"数据"的字节熵量。而浮点数字则相当于表示该"数据"所必需的字符位数。一个包含大量随机内容或特殊信息的文件将需要更多的字符位数来进行描述,也因此产生了较大熵值。利用这种功能来对浮点数值在从2到8区间的日志记录文件进行分析,返回的结果将介于0和1之间。而配合其它计算熵的措施协同工作,上述分析可能将对识别网页shell有所帮助。最终获得的数值越大,数据显示的各种信息的随机性越强、种类越多,也就是说熵量越大。

巧合指数

巧合指数(简称I.C.)是指一种用来对文本进行加密分析或自然语言分析的技术指标。它可以计算某个所有字母的出现机率相对平均的文本中,其字母组合的出现情况。这类计算往往会在分析不同类型的文本后得出挖的结论数值;无论该文本使用的是口头语言还是脚本语言。这一结论性数值在确定诸多同类文件中的异常文本文件中是非常有用的。这可能表明该文件所包含的文本部分有问题,无论是重新编码操作还是加密过程,都会使结果偏离正常的字符应用分布情况。

  1. char_count = 0  
  2. total_char_count = 0  
  3. for x in range(256):  
  4. char = chr(x)  
  5. charcount = data.count(char)  
  6. char_count += charcount * (charcount - 1)  
  7. total_char_count += charcount  
  8. ic = float(char_count)/(total_char_count * (total_char_count - 1))  
  9. self.ic_results.append({"filename":filename, "IC":ic})  
  10. # Call method to caculate_char_count and append to total_char_count  
  11. self.caculate_char_count(data)  
  12. return ic 

上面的代码代表对"数据"的巧合指数进行计算,并返回一个浮点数值。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章