Dome 325

我的地盘!

  博客中心 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 登录 ::
  24 随笔 :: 272 文章 :: 33 评论 :: 0 Trackbacks
Cached @ 2025/6/14 10:52:34Control ASP.skins_cogitation_controls_blogstats_ascx
<2006年6月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

留言簿(1)

随笔档案

文章档案

搜索

最新评论

  • 1. SAP资料下载
  • SAP下载网,
    SAP资料共享网站,完全免费
    资料全由网友共享,大家共享,大家下载
  • --SAP99

阅读排行榜

评论排行榜

Cached @ 2025/6/14 10:52:34Control ASP.skins_cogitation_controls_singlecolumn_ascx

以前,我曾认为只要不随便运行网友发来的文件就不会中 病毒 木马 ,但后来出现了利用 漏洞 传播的冲击波、震荡波;以前,我曾认为不上小网站就不会中网页 木马 ,但后来包括国内某知名 游戏 网站在内的多个大网站均在其首页被黑客挂上了 木马 。从此,我知道:安全,从来没有绝对的。   虽然没有绝对的安全,但如果能知已知彼,了解 木马 的隐藏手段,对于 木马 即使不能百战百胜,也能做到及时发现,使损失最小化。那么, 木马 究竟是如何躲在我们的系统中的呢?    最基本的隐藏:不可见窗体+隐藏文件    木马 程序无论如何神秘,但归根究底,仍是Win32平台下的一种程序。Windows下常见的程序有两种:   1.Win32应用程序(Win32 Application),比如 QQ Office等都属于此行列。   2.Win32控制台程序(Win32 Console),比如硬盘引导修复程序FixMBR   其中,Win32应用程序通常会有应用程序界面,比如系统中自带的“计算器”就有提供各种数字按钮的应用程序界面。 木马 虽然属于Win32应用程序,但其一般不包含窗体或隐藏了窗体(但也有某些特殊情况,如 木马 使用者与被害者聊天的窗口),并且将 木马 文件属性设置为“隐藏”,这就是最基本的隐藏手段,稍有经验的用户只需打开“任务管理器”,并且将“文件夹选项”中的“显示所有文件”勾选即可轻松找出 木马 (见图1),于是便出现了下面要介绍的“进程隐藏” 技术 第一代进程隐藏 技术 :Windows 98的后门   在Windows 98中,微软提供了一种能将进程注册为 服务 进程的方法。尽管微软没有公开提供这种方法的 技术 实现细节(因为Windows的后续版本中没有提供这个机制),但仍有高手发现了这个秘密,这种 技术 称为RegisterServiceProcess。只要利用此方法,任何程序的进程都能将自己注册为 服务 进程,而 服务 进程在Windows 98中的任务管理器中恰巧又是不显示的,所以便被 木马 程序钻了空子。   要对付这种隐藏的 木马 还算简单,只需使用其他第三方进程管理 工具 即可找到其所在,并且采用此 技术 进行隐藏的 木马 Windows 2000/ XP (因为不支持这种隐藏方法)中就得现形!中止该进程后将 木马 文件删除即可。可是接下来的第二代进程隐藏 技术 ,就没有这么简单对付了。    第二代进程隐藏 技术 :进程插入   在Windows中,每个进程都有自己的私有内存地址空间,当使用指针(一种访问内存的机制)访问内存时,一个进程无法访问另一个进程的内存地址空间,就好比在未经邻居同意的情况下,你无法进入邻居家吃饭一样。比如 QQ 在内存中存放了一张图片的数据,而MSN则无法通过直接读取内存的方式来获得该图片的数据。这样做同时也保证了程序的稳定性,如果你的进程存在一个错误,改写了一个随机地址上的内存,这个错误不会影响另一个进程使用的内存。    你知道吗——进程(Process)是什么   对应用程序来说,进程就像一个大容器。在应用程序被运行后,就相当于将应用程序装进容器里了,你可以往容器里加其他东西(:应用程序在运行时所需的变量数据、需要引用的DLL文件等),当应用程序被运行两次时,容器里的东西并不会被倒掉,系统会找一个新的进程容器来容纳它。   一个进程可以包含若干线程(Thread),线程可以帮助应用程序同时做几件事(比如一个线程向磁盘写入文件,另一个则接收用户的按键操作并及时做出反应,互相不干扰),在程序被运行后中,系统首先要做的就是为该程序进程建立一个默认线程,然后程序可以根据需要自行添加或删除相关的线程(见图2 进程关系图)   1.进程插入是什么   独立的地址空间对于 编程 人员和用户来说都是非常有利的。对于 编程 人员来说,系统更容易捕获随意的内存读取和写入操作。对于用户来说,操作系统将变得更加健壮,因为一个应用程序无法破坏另一个进程或操作系统的运行。当然,操作系统的这个健壮特性是要付出代价的,因为要编写能够与其他进程进行通信,或者能够对其他进程进行操作的应用程序将要困难得多。但仍有很多种方法可以打破进程的界限,访问另一个进程的地址空间,那就是“进程插入”(Process Injection)。一旦 木马 DLL插入了另一个进程的地址空间后,就可以对另一个进程为所欲为,比如下文要介绍的盗 QQ 密码    2. 木马 是如何盗走 QQ 密码   普通情况下,一个应用程序所接收的键盘、鼠标操作,别的应用程序是无权“过问”的。可盗号 木马 是怎么偷偷记录下我的 密码 的呢? 木马 首先将1DLL文件插入到 QQ 的进程中并成为 QQ 进程中的一个线程,这样该 木马 DLL就赫然成为了 QQ 的一部分!然后在用户输入 密码 时,因为此时 木马 DLL已经进入 QQ 进程内部,所以也就能够接收到用户传递给 QQ 密码 键入了,真是“家贼难防”啊!    3.如何插入进程   (1)使用 注册表 插入DLL   早期的进程插入式 木马 的伎俩,通过修改 注册表 中的[HKEY_LOCAL_MACHINESoftwareMicrosoftWindows NTCurrentVersionWindowsAppInit_DLLs]来达到插入进程的目的。缺点是不实时,修改 注册表 后需要重新启动才能完成进程插入。   (2)使用挂钩(Hook)插入DLL   比较高级和隐蔽的方式,通过系统的挂钩机制(即“Hook”,类似于DOS时代的“中断”)来插入进程(一些盗 QQ 木马 、键盘记录 木马 Hook方式插入到其他进程中“偷鸡摸狗”),需要调用SetWindowsHookEx函数(也是一个Win32 API函数)。缺点是 技术 门槛较高,程序调试困难,这种 木马 的制作者必须具有相当的Win32 编程 水平。    你知道吗——什么是API   Windows中提供各种功能实现的接口称为Win32 API(Application Programming Interface,即“应用程序 编程 接口”),如一些程序需要对磁盘上的文件进行读写,就要先通过对相应的API(文件读写就要调用文件相关的API)发出调用请求,然后API根据程序在调用其函数时提供的参数(如读写文件就需要同时给出需要读写的文件的文件名及路径)来完成请求实现的功能,最后将调用结果(如写入文件成功,或读取文件失败等)返回给程序(见图3 应用程序、Win32 API、系统的关系图) 3)使用远程线程函数(CreateRemoteThread)插入DLL   在Windows 2000及以上的系统中提供了这个“远程进程”机制,可以通过一个系统API函数来向另一个进程中创建线程(插入DLL)。缺点很明显,仅支持Windows 2000及以上系统,在国内仍有相当多用户在使用Windows 98,所以采用这种进程插入方式的 木马 缺乏平台通用性。    木马 将自身作为DLL插入别的进程空间后,用查看进程的方式就无法找出 木马 的踪迹了,你能看到的仅仅是一些正常程序的进程,但 木马 却已经偷偷潜入其中了。解决的方法是使用支持“进程模块查看”的进程管理 工具 (如“Windows优化大师”提供的进程查看) 木马 DLL模块就会现形了。    不要相信自己的眼睛:恐怖的进程“蒸发”   严格地来讲,这应该算是第2.5代的进程隐藏 技术 了,可是它却比前几种 技术 更为可怕得多。这种 技术 使得 木马 不必将自己插入到其他进程中,而可以直接消失!   它通过Hook 技术 对系统中所有程序的进程检测相关API的调用进行了监控,“任务管理器”之所以能够显示出系统中所有的进程,也是因为其调用了EnumProcesses等进程相关的API函数,进程信息都包含在该函数的返回结果中,由发出调用请求的程序接收返回结果并进行处理(如“任务管理器”在接收到结果后就在进程列表中显示出来)   而 木马 由于事先对该API函数进行了Hook,所以在“任务管理器”(或其他调用了列举进程函数的程序)调用EnumProcesses函数时(此时的API函数充当了“内线”的角色) 木马 便得到了通知,并且在函数将结果(列出所有进程)返回给程序前,就已将自身的进程信息从返回结果中抹去了。就好比你正在看电视节目,却有人不知不觉中将电视接上了DVD,你在不知不觉中就被欺骗了。   所以无论是“任务管理器”还是杀毒 软件 ,想对这种 木马 的进程进行检测都是徒劳的。这种 木马 目前没有非常有效的查杀手段,只有在其运行前由杀毒 软件 检测到 木马 文件并阻止其 病毒 体的运行。当时还有一种 技术 是由 木马 程序将其自身的进程信息从Windows系统用以记录进程信息的“进程链表”中删除,这样进程管理 工具 就无法从“进程链表”中获得 木马 的进程信息了。但由于缺乏平台通用性而且在程序运行时有一些问题,所以没有被广泛采用。    你知道吗——什么是Hook   HookWindows中提供的一种用以替换DOS下“中断”的一种系统机制,中文译名为“挂钩”或“钩子”。在对特定的系统事件(包括上文中的特定API函数的调用事件)进行Hook后,一旦发生已Hook的事件,对该事件进行Hook的程序(: 木马 )就会收到系统的通知,这时程序就能在第一时间对该事件做出响应( 木马 程序便抢在函数返回前对结果进行了修改)    毫无踪迹:全方位立体隐藏   利用刚才介绍的Hook隐藏进程的手段, 木马 可以轻而易举地实现文件的隐藏,只需将Hook 技术 应用在文件相关的API函数上即可,这样无论是“资源管理器”还是杀毒 软件 都无法找出 木马 所在了。更令人吃惊的是,现在已经有 木马 (:灰鸽子)利用该 技术 实现了文件和进程的隐藏。要防止这种 木马 最好的手段仍是利用杀毒 软件 在其运行前进行拦截。    跟杀毒 软件 对着干:反杀毒 软件 外壳    木马 再狡猾,可是一旦被杀毒 软件 定义了特征码,在运行前就被拦截了。要躲过杀毒 软件 的追杀,很多 木马 就被加了壳,相当于给 木马 穿了件衣服,这样杀毒 软件 就认不出来了,但有部分杀毒 软件 会尝试对常用壳进行脱壳,然后再查杀(小样,别以为穿上件马夹我就不认识你了)。除了被动的隐藏外,最近还发现了能够主动和杀毒 软件 对着干的壳, 木马 在加了这种壳之后,一旦运行,则外壳先得到程序控制权,由其通过各种手段对系统中安装的杀毒 软件 进行破坏,最后在确认安全(杀毒 软件 的保护已被瓦解)后由壳释放包裹在自己“体内”的 木马 体并执行之。对付这种 木马 的方法是使用具有脱壳能力的杀毒 软件 对系统进行保护。    你知道吗——什么是壳   顾名思义,你可以很轻易地猜到,这是一种包在外面的东西。没错,壳能够将文件(比如EXE)包住,然后在文件被运行时,首先由壳获得控制权,然后释放并运行包裹着的文件体。很多壳能对自己包住的文件体进行加密,这样就可以防止杀毒 软件 的查杀。比如原先杀毒 软件 定义的该 木马 的特征是“12345”,如果发现某文件中含有这个特征,就认为该文件是 木马 ,而带有加密功能的壳则会对文件体进行加密(:原先的特征是“12345”,加密后变成了“54321”,这样杀毒 软件 当然不能靠文件特征进行检查了)。脱壳指的就是将文件外边的壳去除,恢复文件没有加壳前的状态。

分享按钮发布于: 2006-06-24 18:02 wolfzhang 阅读(835) 评论(0)  编辑 收藏

评论

标题
姓名
主页
内容 
  登录  使用高级评论  Top 订阅回复  取消订阅
[使用Ctrl+Enter键可以直接提交]