当前位置:C++技术网 > 资讯 > 系统安全常识:3 补丁安装程序做了什么?打补丁修复漏洞的原理是什么?

系统安全常识:3 补丁安装程序做了什么?打补丁修复漏洞的原理是什么?

更新时间:2016-07-29 19:10:40浏览次数:1+次

阅读本文前,请先阅读:
系统安全常识1:软件漏洞是什么?系统漏洞是什么?补丁是什么?漏洞和病毒什么关系?
系统安全常识2:如何知道系统是否需要打补丁?

    在前两篇文章中,我们介绍了漏洞和补丁的技术背景知识。现在要进入更加深入的环节,那就是:如何打补丁修复漏洞?打补丁修复漏洞的原理是什么?以及为什么打补丁修复漏洞需要重启系统生效?
    
    如果是手动打补丁,我们只需要下载一个补丁安装程序,然后双击运行,安装完补丁之后,补丁就打上了。获取补丁可以从第二篇文章给出的微软的补丁列表地址下载。
    如果是使用安全软件,或者Windows Update来安装补丁,则只需要选择一下,然后一键安装所有补丁。
    那么补丁到底做了些什么事情呢?我们先来了解下补丁运行的原理。
    漏洞的产生是因为设计或者开发软件的时候的疏忽,考虑不周,才遗留了后门,当然这个后门是无意间留下来的,当然,如果有人有心留漏洞,那也是有可能的。不管怎么样,最终的结果都是形成可执行程序文件或配套的文件,可以是exe也可以dll,还可以是基础数据文件。漏洞是针对整个运作的系统而言的,只要任何一个环节有漏洞,就会有风险。所以,漏洞不限于exe本身,或许exe或者dll等都是完好无损的,而且是功能完善的,但是因为系统机制设计不当,会让多个程序在合作完成功能的时候产生了空挡,才产生了可利用的漏洞。这是在系统设计级别的漏洞。
    另外一种则是程序在实现功能时,缺少考虑而让另外的情况可以趁虚而入,形成漏洞。所以,补丁要做的事情,就要解决各种原因造成的漏洞。
    所以,补丁的使命不是实现某个功能,而是堵住漏洞,也就是阻断被入侵的去路。这样就算成功了。所以写补丁程序并不是那么简单的完成一个功能而已,而是要对漏洞的机制了解的很好,然后从中砍一刀,砍断去路。
    很多软件执行都有一个预读入准备文件,在这个流程定义文件中,有执行程序要运行的所有步骤(比如先运行哪个程序,后运行哪个程序或先执行哪条命令,后执行哪条命令)。那么这样的文件实际上就定义了系统各个组件程序的合作的机制,也是系统运行的流程。如果是系统机制形成的漏洞,则可以在充分了解了系统机制之后,在系统中安插一个程序运行。那么在安插一个程序后,然后替换掉流程定义文件的内容,这样系统就可以启动一个新的流程执行,而且会加载新安插的程序运行,从而弥补了系统的不足,这样补丁就开始发挥作用了。
    那么我们安装系统机制形成的漏洞补丁,运行的补丁安装程序就是去替换流程定义文件以及释放一个新的程序。如果这个软件已经在运行了,那么就只能等待软件下次启动时才能加载新的流程定义文件和新安插的程序运行,这样补丁才开始发挥作用。如果安装补丁时,软件没有运行,那么软件启动后就可以生效了。而很多系统关键服务,都是一致运行着的,所以打补丁后,只有重启系统后才能生效。
    如果安装补丁时,流程定义文件被占用,因此补丁安装程序无法替换文件,所以就可能将新的文件放在一个目录里,然后会生成一个脚本文件,并让这个脚本开机启动。这样重启开机之后,脚本执行,然后就在软件或服务运行之前替换到了被占用的文件。所以这样的情况,也是需要重启才能生效的。
    如果是因为个别程序的漏洞,那么补丁安装程序只需要替换掉这个程序文件即可。这个程序文件可能是exe,也可以是dll,也可能是其他相关文件。如果补丁安装时这些文件被占用,那么也可以像上面一样,用开机时脚本来替换。如果没有被占用,那么直接替换完成就可以。
    当然,我们前面说的流程定义文件也可以是各种形式的记录,比如注册表,比如数据库文件等等,这里说的流程定义文件只是一个代表,表示规定流程的东西。我们知道注册表、ini文件或者数据库都可存储流程定义或者支持的文件类型等,请大家自己去类推,就不一一列举,这里主要说明一个原理。
    而对于文件替换,你可以使用文件替换,或者直接修改文件。你要知道,exe等也是一个文件,也是可以直接修改的。当然,这些工作都是补丁安装程序完成的,完成后,新文件就是没有这个漏洞了。
    安装完补丁后,补丁安装程序会将补丁的安装信息在系统中注册,将补丁的信息记录在注册表中,以备查询。
    有了这些了解后,你对修复漏洞和打补丁应该有了很深入的了解了。如果还有问题,请在文章底部留言提出交流。