吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 17176|回复: 15
收起左侧

[转载] 【转帖】记一次特洛伊木马实战分析

  [复制链接]
默小白 发表于 2019-3-4 11:38
使用论坛附件上传样本压缩包时必须使用压缩密码保护,压缩密码:52pojie,否则会导致论坛被杀毒软件等误报,论坛有权随时删除相关附件和帖子!
病毒分析分区附件样本、网址谨慎下载点击,可能对计算机产生破坏,仅供安全人员在法律允许范围内研究,禁止非法用途!
禁止求非法渗透测试、非法网络攻击、获取隐私等违法内容,即使对方是非法内容,也应向警方求助!

转自:https://xz.aliyun.com/t/4209

正文:

这是一个在跑安服的朋友给我的一份病毒样本,让我帮忙分析分析,找到攻击目标和残留后门以便于清理后门。花时间分析了一下发现是一个DDOS的样本,值得我写一写分析过程。

他发给我的是一个文件夹,打开后有两个程序和一个文件夹。

img
不过这个叫beijing名的程序当时给了我一个很奇怪的感觉。。事实证明我的感觉是正确的,这个程序是某网杯一道简单的逆向题…为什么给我的样本里面还有题…算了,继续分析下一个soft程序。先查看一下所有的字符串找一找有用的信息:

img
有些attack字样的字符串,以及http协议、一大堆IP地址等:

img
开始分析,看主程序:

v3 = alloca(16);
  CSysTool::CloseAllFileDescs();
  CSysTool::Ower6msf();                         // 第一组数据解密
  std::string::string((std::string *)&v11);
  CUtility::GetModuleFullPath((CUtility *)&v11, v8);
  v4 = (CFileOp *)std::string::c_str((std::string *)&v11);
  if ( CFileOp::GetTgtFileSize(v4, v5) != g_iFileSize )
    MEMORY[0] = 0;
  CUtility::GetParentPath((CUtility *)&v10);
  v6 = std::string::c_str((std::string *)&v10);
  if ( strstr(v6, "gdb") != 0 )                 // 反调试
    MEMORY[0] = 0;
  HGrd9((int)&v12);
  std::string::operator=(&g_strSN, &v12);       // g_strSN  =  DbSecuritySpt
  std::string::~string((std::string *)&v12);
  Mndyuf((int)&v13);
  std::string::operator=(&g_strBDSN, &v13);     // g_strBDSN  =  selinux
  std::string::~string((std::string *)&v13);
  BGtd98();
  std::string::operator=(&g_strBDG, &v14);      // g_strBDG  =  getty
  std::string::~string((std::string *)&v14);
  Osdku6();
  std::string::operator=(&g_strML, &v15);       // g_strML  =  /tmp/moni.lod
  std::string::~string((std::string *)&v15);
  wer54();
  std::string::operator=(&g_strGL, &v16);       // g_strGL  =  /tmp/gates.lod
  std::string::~string((std::string *)&v16);
  CSysTool::CheckGatesType();                   // check GatesType
  CSysTool::Ikdfu94();                          // 第二组数据解密
  if ( (unsigned __int8)CSysTool::IsUpdateTemporary() )
  {
    CSysTool::DoUpdate((CSysTool *)argc, (int)argv, v9);
  }
  else if ( g_iGatesType == 1 )
  {
    MainBeikong();
  }
  else if ( g_iGatesType > 1 )
  {
    if ( g_iGatesType == 2 )
    {
      MainBackdoor();
    }
    else if ( g_iGatesType == 3 )
    {
      MainSystool(argc, (char **)argv);
    }
  }
  else if ( !g_iGatesType )
  {
    MainMonitor();
  }

先看第一组解密函数:

img
以上是第一组数据解密后的变量。再来看第二组解密后的:

img
再来观察查询g_iGatesType的值的函数:

img
以上函数用来对比当前程序所在的目录,如果与MonitorFile路径相同,GatesType则为0,与BackDoorFile相同,GatesType则为2,如果与Systools中的任何一个路径相同,GatesType则为3,否则为1。

集合起来就是:

g_iGatesType  =  0   /usr/bin/.sshd
g_iGatesType  =  1   其他路径
g_iGatesType  =  2   /usr/bin/bsd-port/getty
g_iGatesType  =  3 aBinNetstat     ; "/bin/netstat"
                   aBinLsof        ; "/bin/lsof"
                   aBinPs          ; "/bin/ps"
                   aBinSs          ; "/bin/ss"
                   aUsrBinNetstat  ; "/usr/bin/netstat"
                   aUsrBinLsof     ; "/usr/bin/lsof"
                   aUsrBinPs       ; "/usr/bin/ps"
                   aUsrBinSs       ; "/usr/bin/ss"
                   aUsrSbinNetstat ; "/usr/sbin/netstat"
                   aUsrSbinLsof    ; "/usr/sbin/lsof"
                   aUsrSbinPs      ; "/usr/sbin/ps"
                   aUsrSbinSs      ; "/usr/sbin/ss"

而后会根据GatesType的值来执行不同的功能:

GatesType == 0:

执行MainMonitor函数:

img
创建子进程并向/tmp/moni.lod文件写入进程号,读取并删除/tmp/notify.file文件,线程循环挂起一分钟。

GatesType == 1:

执行MainBeikong函数:

img
结束并删除/tmp/moni.lod进程。创建自启动项/etc/init.d/DbSecuritySpt,并写入#!/bin/bash\n(filepath)\nfilepath为当前程序路径。创建自启动项/etc/rc(1-5).d/S97DbSecuritySpt,执行ln -s /etc/init.d/DbSecuritySpt (filepath)创建软链接。

判断当前g_iDoBackdoor的值以及当前进程是否为root用户创建,如果都为true,则结束/usr/bin/bsd-port/getty.lock进程和/usr/bin/bsd-port/udevd.lock进程,并删除第二个文件。并且命令执行拷贝进程文件于/usr/bin/bsd-port/getty

如果是root执行的程序,则命令执行拷贝进程文件在/usr/bin/.sshd

如果不是root执行的,则删除/tmp/notify.file

最终执行MainProcess函数,删除进程路径下的update_temporary。在/etc/resolv.conf下添加DNS(8.8.8.8和8.8.4.4)。初始化conf.n和cmd.n文件,初始化计算机基本信息(cpu、os、net、内存和磁盘信息)。初始化330个DNS地址。读取/usr/lib/libamplify.so文件配置amp资源数据。

后面就是服务端根据受害者计算机返回的信息,初始化数据执行对应的DDOS攻击:

img

GatesType == 2:

img
判断是否存在/usr/bin/bsd-port/getty.lock后门文件,存在则写入进程号并创建etc/init.d/selinux/etc/rc(1-5).d/S99selinux启动项文件,之后和上面创建启动项相同,不过项目换了一个,就不多说了。然后判断如果存在Systools中的文件,则复制到/usr/bin/dpkgd/md文件下生成netstat,lsof等文件,并设置0755权限,最后又执行了同上面一样的MainProcess函数。

GatesType == 3:

img
执行MainSystool函数。此函数主要调用上面所说的复制过去的netstat、lsof、ps等程序,而后过滤掉进程目录,服务端输出。

总结:

攻击者远程服务器已经找到,该木马功能为安装不同的启动项,并且安插后门,过滤木马端口信息等,生成不同路径下的副程序来持续攻击,攻击服务器根据受害机返回信息实施不同的DDOS攻击。所以样本文件中的那一组文件夹是什么东西也就很明了了。


soft.zip (457.45 KB, 下载次数: 29)

免费评分

参与人数 3吾爱币 +5 热心值 +3 收起 理由
willJ + 3 + 1 鼓励转贴优秀软件安全工具和文档!
安静如黎-写年华 + 1 + 1 热心回复!
孟德兄 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

longfei9527 发表于 2019-3-4 11:59
别以为我看得懂这份心, 我只是路过看看而已
afanti 发表于 2019-3-4 12:11
wertshbl123 发表于 2019-3-4 13:00
Overcoder 发表于 2019-3-4 14:53
思路清晰明了,过程详细,感谢大佬的分享!
a826472071 发表于 2019-3-5 15:23
看不懂,哈哈哈哈
tfrist 发表于 2019-3-13 02:51
学习一下 感谢分享
bingu888 发表于 2019-3-13 21:51
666看不懂0.0
南城北风起 发表于 2019-3-14 16:02
我以为我能看的懂,连续的代码已经看花了眼睛
scleeb 发表于 2019-3-22 09:05
我就知道你打字多,你说的对
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 09:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表