走近科学:如何一步一步解码复杂的恶意软件

写在前面的话

在检测网站安全性的过程中,最麻烦的一部分工作就是要确保我们能够找出网站中所有已存在的后门。绝大多数情况下,攻击者会在网站各种不同的地方注入恶意代码,并以此来增加再次感染该网站的成功率以及尽可能久地实现持续感染。

虽然我们之前已经给大家介绍过数百种后门以及相应的影响,但今天我们想跟大家更加深入地讨论一些关于恶意软件的分析技术,即如何解码复杂的高级恶意软件。

本文所分析的恶意软件感染样例早在几个月前就已经出现了,但是受这种恶意软件变种所感染的网站(例如WordPress和Joomla等CMS)数量却一直在增加。

恶意软件

成功感染目标网站之后,攻击者可能会进行注入后门和Web Shell、以及添加伪造的管理员用户等恶意操作。一般来说,攻击者都会采用一种或多种技术来隐藏自己的恶意代码,例如编码、加密和混淆等等。

请大家先看下面给出的代码段。其中,攻击者同时使用上面举例的三种技术。接下来,我们会一步一步地告诉大家如何对这段代码进行解码和分析。

原始的恶意软件代码段:

简化代码

在解码过程中,最重要的是要理解代码的逻辑结构。为此,我们使用了PHP Beautifier来将之前的代码段转换成了下图所示的格式:

虽然目前为止代码仍然是不可读的,但是我们现在至少已经了解了代码的编程逻辑架构。

攻击者一开始声明了一个名叫”$hc7e1d20″的变量,而这个变量是没有任何实际意义的。根据我们的经验来看,这个变量的值(406)可能是攻击者用来标识恶意软件变种版本的。

  1. <?php 
  2.  
  3. $hc7e1d20            = 406; 
  4.  
  5. $GLOBALS['be10eb436'] = Array(); 
  6.  
  7. global $be10eb436; 
  8.  
  9. $be10eb436 = $GLOBALS; 

除此之外,还有一些全局变量也对我们理解代码不会提供任何帮助,我们可以直接忽略它们。

这个恶意软件样本基本上使用的是字符/字符串修改技术,攻击者在变量中存放了很多十六进制字符,然后再将它们编译成不同的变量。

第一个样例如下:

  1. ${"\x47\x4c\x4fB\x41\x4c\x53"}['tbb6a']  
  2.  
  3. ="\x2d\x3d\x3e\x35\x4e\x73\x7d\x4f\x65\x77\x59\x41\x5f\x70\x6a 
  4.  
  5. \x69\x23\x3b\x51\x21\x57\x74\x4b\x46\xd\x5b\x2b\x20\x38\x76\x68\x2e\x3f 
  6.  
  7. \x44\x4d\x34\x67\x6f\x6b\x7c\x64\x7a\x31\x24\x5c\x4c\x40\x3c\x28\x5a\x79 
  8.  
  9. \x2a\x58\x78\x7e\x6c\x63\x43\x71\x49\x33\x47\x54\x36\x53\x75\x27\x5e\x29 
  10.  
  11. \x56\x66\x26\x32\x2c\x62\x30\x2f\x6e\xa\x50\x22\x25\x52\x5d\x45\x60\x42 
  12.  
  13. \x48\x39\x61\x37\x7b\x4a\x9\x55\x3a\x6d\x72"; 

这段代码可以直接通过下面的bash命令来进行转译:

  1. $ echo -e"\x47\x4c\x4fB\x41\x4c\x53" 
  2.  
  3. GLOBALS 
  4.  
  5. $ php -r 'echo"\x47\x4c\x4fB\x41\x4c\x53";' 
  6.  
  7. GLOBALS 

这个值(${GLOBALS}[‘tbb6a’])似乎使用了某些特殊字符来防止被转译,但是恶意软件最终似乎并没有使用这个值。现在,我们就可以创建一个简单的PHP脚本,然后自动化地打印出所有的变量以及相应的值。

查找和替换

得到这些信息之后,我们就可以使用查找和替换功能了。

第一个变量如下:

  1. $be10eb436[$be10eb436['tbb6a'][55] .$be10eb436['tbb6a'][75] 
  2.  
  3. . $be10eb436['tbb6a'][8] .$be10eb436['tbb6a'][63]]                                                                                                                                   =$be10eb436['tbb6a'][56] .$be10eb436['tbb6a'][30] . $be10eb436['tbb6a'][97]; 
  4.  
  5. $be10eb436['tbb6a'][55]  = ‘l’ 
  6.  
  7. $be10eb436['tbb6a'][75]  = ‘0’ 
  8.  
  9. $be10eb436['tbb6a'][8]   = ‘e’ 
  10.  
  11. $be10eb436['tbb6a'][63]] = ‘6’ 
  12.  
  13. $be10eb436['tbb6a'][56]  = ‘c’ 
  14.  
  15. $be10eb436['tbb6a'][30]  = ‘h’ 
  16.  
  17. $be10eb436['tbb6a'][97]  = ‘r’ 

我们可以得到下面的转译结果:

  1. $be10eb436[‘l . ‘0’ . ‘e’ . ‘6’] = ‘c’ .‘h’ . ‘r’; ---- $be10eb436[‘l0e6’] = ‘chr’; 

为了增加代码的可读性,我们将’be10eb436′替换成了’arr’(因为它被声明为了一个array()),然后我们继续对字符进行转译。

几分钟之后,我们得到了如下所示的代码:

 

现在一切已经更加明朗了,接下来我们还要对代码进行一些调整。其中,前几个变量可以直接替换成下列形式:

  1. $arr['l0e6'] = ‘chr’; 
  2.  
  3. $arr['ac6c24d1'] = ‘ord’; 
  4.  
  5. $arr['s8bb921e'] = ‘strlen’; 

将代码种各个变量和值调整到相应位置之后,我们就得到了上述代码中的第一个函数:

  1. function l3f5($nd0f2d, $yaf8a49ab) 
  2.        { 
  3.        global$arr; 
  4.        $wb1a= ""
  5.        for($a5be536 = 0; $a5be536 < strlen($nd0f2d);) 
  6.                { 
  7.                for($jd82720f = 0; $jd82720f < strlen($yaf8a49ab) && $a5be536 <$arr['s8bb921e']($nd0f2d); $jd82720f++,$a5be536++) 
  8.                        { 
  9.                        $wb1a.=chr(ord($nd0f2d[$a5be536]) ^ ord($yaf8a49ab[$jd82720f])); 
  10.                        } 
  11.                } 
  12.        return$wb1a; 
  13.        } 

恶意目的

替换了所有的函数以及变量之后,我们就可以得到如下所示的代码段了:

 

得到了完整并且可读的恶意代码之后,我们发现了几个有意思的地方:

1. 其中有一个名叫l3f5() 的函数,该函数负责通过按位异或计算来执行加密和解密操作。

2. 函数 q057860()采用了两层异或加密/解密计算。

a) 第一层计算中,密钥是一个预定义的常量: ($w158 = ‘2cef0f87-62fe-4bb9-a1de-4dc009e818ea’;)。

b) 第二层所使用的密钥来自于POST参数或HTTP coockie。

c) 这个函数主要用来对经过加密的序列化数据进行解码。其中,序列化数据是攻击者通过cookie或POST参数传递给恶意脚本的。

3. 解码数据可能包含:

a) 可执行的PHP代码。

b) 提供关于后门和PHP版本信息的命令。

总结

现在网上有很多不同类型的恶意软件,但并非所有的恶意软件都是直接通过脚本来执行恶意命令的。比如说在这个样本中,它可以通过$_POST或$_COOKIE请求来接收任意命令,而Web服务器默认是不会记录这种行为的。

为了防止网站被恶意软件所感染,我们强烈建议管理员采用类似文件完整性监测以及Web应用防火墙(WAF)等安全措施。除此之外,我们还建议管理员定期检查网站的日志记录以尽早地发现可疑行为。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/124077.html<

(0)
运维的头像运维
上一篇2025-02-23 02:54
下一篇 2025-02-23 02:55

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注