欢迎来到天天文库
浏览记录
ID:37752739
大小:30.15 KB
页数:29页
时间:2019-05-30
《如何检测、禁用隐藏服务》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、检测并禁用隐藏服务隐藏服务的概念是由hxdef和rootkit这些后门工具提出的。这些后门工具通过挂钩系统本地调用来隐藏自己,原本通过调用WindowsAPI调用查看系统服务的企图都是徒劳的。所以这时的系统是不可靠的,不值得信任的。目前针对查找隐藏服务的工具已经有很多,比如IceSword,knlsc,FHS等等。虽然这些软件都是免费的,但是它们到目前为止都不是开源,所以将自己的实现版本展示出来,正如knlsc的作者所说的那样,这是一个简单的小程序。 Knlsc是通过将%SystemRoot%/System32/Config/System这个Hive文件转储出来,提取出
2、ControlSet001/Services的子项再与RegEnumKeyEx的输出结果进行比对,发现若是在RegEnumKeyEx的输出结果中没有的子项就可以认为是一个隐藏的服务。当然knlsc还认为隐藏服务必须同时拥有ImagePath,Start,Type三个键值。据说knlsc运行时还将从资源段中放出一个驱动程序,但是估计这个驱动是假的。将knlsc托壳后用VC从资源段中导出的文件是一个没有EntryPoint但有MZ标志的驱动,没有办法进行反汇编。或许作者使用了SMC技术,放出资源文件后在进行修改,在执行文件中也有NtLoadDriver的调用片段,但是同一作者的k
3、nlps中的资源驱动却未作任何的处理。要实现检测隐藏服务的功能其实没有必要使用驱动程序,即使可以验证knlsc驱动的真实性。直接对Hive文件的转储也不是必须的,虽然这只要通过修改GaryNebbett的示例代码就可做到。 Hive文件的转储可以通过RegSaveKey函数来进行,rootkitrevealer就是使用这个API的扩充函数RegSaveKeyEx工作的,至少到目前为止还没有挂钩这类函数的后门,但是世上没有永远的安全,在理论上是可行的,可能不得不对该函数的输出文件进行处理,这将在一定程度上影响该函数的执行时间。使用该函数时还必须赋予调用进程以SE_BACK
4、UP_NAME权限。 在实现中将“HKEY_LOCAL_MACHINESYSTEMControlSet001Services"的子项都转储为Hive格式文件(使用DumpServiceInfo函数),存放在C:tmp.hive,在C盘下不可有同名文件,否则会发生Dump错误。现在的问题是如何对Hive格式文件进行处理,在这一点上必须感谢PetterNordahl-Hagen所写的NTRegistryHiveaccesslibrary,它是TheOfflineNTPasswordEditor的一部分。本人的实现很大程度上就是参照他的程序,然而这个库工作在Linux
5、环境,但是它向VC编译器移植的工作量是极少的,只需稍加修改。1.将 #include 去掉2.将程序中三处的#defineD_OFFS(o)((void*)&(key->o)-(void*)hdesc->buffer-vofs) 改为 #defineD_OFFS(o)((int*)&(key->o)-(int*)hdesc->buffer-vofs)因为在VC中无法打印void*类型,只得改为int* 。3.将程序中唯一的一处使用snprintf函数该为_snprintf,即snprintf(path,maxlen,"(...)%s",tmp);
6、改为_snprintf(ptth,maxlen,”(…)%s”,tmp);4.添加两个VC不支持的函数来使编译通过voidbzero(void*s,intn){ memset(s,0,n); }intstrncasecmp(constchar*s1,constchar*s2,size_tn){return_stricmp(s1,s2);} 为了表示对PetterNordahl-Hagen的尊重,我不再修改他的库文件ntreg.c和ntreg.h(除了以上移植的需要),而是将所有需要重写和添加的函数放到KHS.C文件中,这样可以使原来的库文件保持其独立
7、性。 由于在Petter库中openHive函数使用open和read函数来进行hive文件的读取,在VC条件下的read函数有一个问题,每当文件中存在一个0x1a的二进制数值时,read函数就会在那儿终止,这样就会导致hive文件无法完全导入。所以就使用了WindowsAPI重写openHive,命名为My_openHive。相应的还重写了closeHive,writeHive并加上了前缀My_。 随后GetPatterns函数将使用RegEnumKey枚举的服务键值名称保存在patter
此文档下载收益归作者所有