4.3 木马隐藏分析

一、预备知识:木马的隐藏方式

        木马一般采用本地隐藏和通信隐藏两种方式:

1、本地隐藏

        早期木马将自己设置为隐藏文件,或者命名为系统文件,但是这些方法已经能够被绝大多数安全软件很容易发现,为了自身的存在,木马必须寻找更隐蔽的隐藏方式。本地隐藏方式可以分为以下几种类型:

        (1)寄宿隐藏。寄宿隐藏是将木马程序隐藏在正常程序中,程序成为了木马的载体,对于一些不熟悉操作系统工作机制或粗心的用户比较有效。

        (2)变化隐藏。变化隐藏则是在不改变环境的情况下进行自我变化,通过更改文件名、时间、注册表等方式来迷惑目标用户。

        (3)协作隐藏。协作隐藏则将木马分成几个部分隐藏在不同位置,相互监视协助,是一种较为顽固的木马,全面查杀存在一定的难度。

2、通信隐藏

        通信端口会暴露木马的存在,因此木马将控制端设置为服务端,通过控制端主动检测并进行通信,能够绕过防火墙。通过建立触发机制,当服务端运行网络程序后木马会取得系统控制权,通过端口完成外部通信。

二、实验环境

        攻击机:win 7、上兴远程控制

        靶机:win xp

三、实验步骤

1、正常登录攻击机与靶机,分别使用“ping”命令测试对方IP地址的连通性;

2、生成木马服务端程序。在攻击机上,运行上兴远程控制软件,打开如下操作窗口。

3、选择“文件”——“配置服务程序”选项,打开如下所示对话框。在“IP通知http访问地址、DNS域名解析或静态IP”栏填写攻击机IP,其他信息的填写,参考“填写1说明”。

 4、单击“生成服务端”按钮,将生成木马程序。通过共享文件夹将生成的程序发到靶机上。

注:如果安装文件夹里面有破解文件,需要破解,再运行上兴远程控制!

5、在靶机中运行服务端程序,使得木马植入靶机,接受控制端控制;

6、在靶机上运行“任务管理器”,并不会发现木马程序对应的进程,但是会发现有两个进程很可疑,因为靶机上没有运行这两个进程。这两个进程存在的原因是:制作木马时选择了插入相关进程,从而实现进程的隐藏。

 7、也可以用Wsyscheck查看靶机进程。(个人感觉IceSword好用些)

8、手动卸载木马:

(1)结束calc.exe、IEXPLOER.EXE进程;

(2)停止木马对应的服务;

(3)在注册表中删除启动服务;

(4)通过注册表可以查看木马文件路径,清除木马文件。

四、任务与思考

        木马程序隐藏通常指利用各种手段伪装木马程序,让一般用户无法从表面上直接识别出木马程序。要达到这一目的可以通过程序捆绑的方式实现,程序捆绑方式是将多个.exe程序链接在一起组合成一个EXE文件,当运行该文件时,多个程序同时运行。程序捆绑有多种方式,如将多个EXE文件组合到一个EXE文件中、利用专门的安装打包工具将多个EXE文件进行组合。

        程序隐藏只能达到从表面上无法识别木马程序的目的,但是可以在任务管理器中发现木马程序的踪迹,这就需要木马程序实现进程隐藏。隐藏木马程序的进程在显示时能够防止用户通过“任务管理器”查看到木马程序的进程,从而提高木马程序的隐蔽性。目前,隐藏木马进程主要有两种方法:

(1)API拦截

        API拦截技术属于进程伪隐藏方式,它通过利用HOOK(钩子)技术监控并拦截系统中的某些程序对进程显示的API函数调用,然后修改函数返回的进程信息,将自己从结果中删除,导致“任务管理器”等工具无法显示该木马进程。

        API拦截的具体实现过程:木马程序建立一个后台的系统钩子(HOOK),拦截PSAPI的EnumProcessModules等相关函数的调用,当检测到结果为该木马程序的进程ID(PID)时直接跳过,这样进程信息就不会包含该木马的进程,从而实现隐藏木马进程的目的。

(2)远程线程注入

        远程线程注入属于进程真隐藏方式,它主要利用CreateRemoteThread函数在某一个目标进程中创建远程线程,共享目标进程的地址空间,并获得目标进程的相关权限,从而修改目标进程空间内部数据和启动dll木马。通过这种方式启动的1dll木马占用的时目标进程的地址空间,而且自身是作为目标进程的一个线程,所以它不会出现在进程列表中。dll木马的实现过程如下:

        1)通过OpenProcess函数打开目标进程;

        2)计算dll路径名所需的地址空间,并根据计算结果调用VirtualAllocEx函数在目标进程中申请一块大小合适的内存空间;

        3)调用WriteProcessMemory函数将dll路径名写入申请的地址空间中;

        4)利用函数GetProcAddress计算LoadLibraryW的入口地址,并将LoadLibraryW的入口地址作为远程线程的入口地址。

        5)通过函数CreateRemoteThread在目标进程中创建远程线程。

猜你喜欢

转载自blog.csdn.net/qq_55202378/article/details/126030575
4.3