如何检测、禁用隐藏服务

如何检测、禁用隐藏服务

ID:37752739

大小:30.15 KB

页数:29页

时间:2019-05-30

如何检测、禁用隐藏服务_第1页
如何检测、禁用隐藏服务_第2页
如何检测、禁用隐藏服务_第3页
如何检测、禁用隐藏服务_第4页
如何检测、禁用隐藏服务_第5页
资源描述:

《如何检测、禁用隐藏服务》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。