本文介绍了三种windows在ring3层可用的进程伪装技术。
进程命令行和当前路径欺骗
PEB(进程环境块)是保存进程运行信息的一个用户态的数据结构。PEB中定义了当前模块的名称,命令行参数和当前路径等信息,有一些进程监视工具(如ProcessHacker)是直接读取该数据结构的信息,然后显示给用户,辅助用户进行分析。(PEB结构的定义可以查看 http://www.nirsoft.net/kernel_struct/vista/PEB.html)
我们要修改进程的命令行参数和当前路径,需要修改ProcessParameters结构。
我们只需关注CurrentDirectory、ImagePathName和CommandLine三个字段。
实现思路比较清晰,首先取得当前进程PEB结构的地址,然后修改结构体的相关位置即可。核心代码如下。
执行完这段代码,当前进程的信息就会被修改,接下来我们可以加入一些普通的shellcode加载器代码来执行shellcode,这样我们的后门进程进行了一定程度的伪装。看一下效果。
shell可以正常使用,没有任何影响。
父进程欺骗
通常情况下,我们通过CreateProcess API创建进程,父进程ID就是此API运行的内存空间所属的进程ID,但是通过使用STARTUPINFOEX结构体,并传入修改后的进程信息列表(LPPROC_THREAD_ATTRIBUTE_LIST )来修改待创建进程的父进程。实现思路为首先创建一个进程的LPPROC_THREAD_ATTRIBUTE_LIST,然后修改父进程PID,最后将相关信息传入CreateProcess完成父进程欺骗(需要有)。核心代码如下(代码可从此处下载:http://www.didierstevens.com/files/software/SelectMyParent_v0_0_0_1.zip):
看一下效果:
同形异义字
同形异义字是指字符的形状近似但却不是同一个字,unicode编码可以表示的字符数量庞大,其中不乏一些形状相近的,利用这些字符就可以在操作系统中创建一个文件名与正常文件名十分相似的恶意文件。我经给整理部分效果比较好的形近字写成了一个脚本(https://github.com/hl0rey/evilchar),利用该脚本可以达到如下效果(只看文件名的话已经很难分辨哪个是正常的文件了):
总结
把三种手法灵活使用,也许能让我们的后门在用户机器中潜伏更长的时间。