查看: 4240|回复: 4

我的计算机安全观

[复制链接]
发表于 2008-12-30 10:57:12 | 显示全部楼层 |阅读模式
我的计算机安全观

Oldtiger

Wintel[001]架构是现代计算机的主流,占目前在用计算机总量的90%以上。Wintel架构衍生于IBM PC兼容机[002],早期遵循的是IBM的开放[003]标准,属于冯诺曼[004]SISD体系的一个分支,特征是①只有一个CPU[005]②只有一组线性编址[006]的内存。IBM PC兼容机的基本特征是①使用Intel(英特尔)的CPU[007]或与Intel兼容的CPU[008]②使用Microsoft(微软)[009]的操作系统,由此而缔造了Intel和Microsoft两个现代企业帝国。IBM PC选用的是Intel 8086[010] CPU,这是一种16[011]位的CPU,配用的操作系统是微软的MSDOS[012]。随着IBM对PC兼容机行业标准制订的失控,Intel的标准逐渐主导了PC兼容机的发展。为了保持对PC兼容机的主导地位,以Intel 80386为代表的Intel 32位CPU一直采取了与8086向前兼容的技术策略,从而导致了这些32位的CPU必须具有两种工作模式:16[013]位的实模式[014](Real mode)和32[015]位的保护模式[016](Protected mode),这是其它非Intel兼容CPU所没有的一道独特风景线。现代的PC兼容机在上电的时候以实[017]模式运行BIOS(以字符[018]显示界面为基本特征),直到BIOS把32位的操作系统引导起来之后(以图形[019]显示界面为基本特征),CPU才进入保护[020]模式工作状态。
在内存管理方面,实模式状态下CPU的最大线性寻址内存空间只有640[021]K(此一部分内存称为“常规内存[022]”或“低端内存[023]”),这意味着不管你在机器上插入的内存条实际容量有多少M多少G,CPU都只能线性地管理和使用最低端的640K,这常导致16位操作系统(MSDOS之类)出现“内存不足[024]”的怪现象且无法通过增加实际内存容量的方法来解决。为了解决这个问题,微软为首的软件厂商采用了“块存取[025]”的办法通过驱动程序来进行非线性分段管理,其中:640K~1M的部分内存空间称为“扩充内存[026]”(Expanded Memory),使用emm386.sys驱动程序进行管理,称为EMS内存规范;1M以上的部分内存空间称为“扩展内存[027]”(Extended Memory)或“高端内存[028]”(High Memory),使用himem.sys驱动程序进行管理,称为XMS内存规范。保护模式状态下CPU对内存采取了全程线性管理的方式,不再分段管理,称为“扁平内存[029]”(Flat Memory),最大寻址空间可达4G[030]。
在设备管理方面,实模式状态下大多采取直接存取访问的方式,因而常常需要对设备资源分配进行人工干预,这注定了实模式下设备存取数据的可信性[031],也注定了实模式下设备管理的局限性和极易混乱的特点。保护模式下的设备管理为了防止重蹈实模式的覆辙,全部采用了驱动程序分层管理的方式,尤其是采用了PnP[032]技术(Plug and Play,即插即用[033]),使得设备管理及其资源分配大为简化而有序,迎合了信息设备傻瓜化的趋向,但也降低了数据操作结果的可信程度,最典型的即是所谓“烂碟王”技术。
冯诺曼体系下CPU对内存的辨识并不作程序与数据[034]的区分,因而无法排除程序在运行期间不把内存中的程序段当作数据进行读写的可能,也不能排除把数据段当作程序来执行的可能,这已成为病毒偷袭正常程序的常用手段之一。为了解决这个问题,Intel在P4及以后的CPU上引入了禁执行位[035](Execute Disable Bit)技术,以保证程序与数据的区分,当然这需要在BIOS中把Execute Disable Bit选项设置为Enabled[036]。
根据IBM硬盘组织标准,每个硬盘最多可有4[037]个分区,各分区的起始扇区、终止扇区、扇区总数、所分予的文件系统类型、启动标志组成了“分区表[038]”(Partition Table)存放在(0[039],0[040],1[041])扇区上。在这四个分区中,最多只能有1[042]个可将boot标志为Yes(表示“已激活,可引导”)。若四个分区都没有标志为“已激活[043]”,则BIOS无法从硬盘上引导任何操作系统,但这并不影响利用其它硬盘引导操作系统后对该硬盘的读写。就微软的操作系统(MSDOS和Windows)而言,它们最多只能管理两个分区:主分区[044](Main Partition)和扩展分区[045](Extended Partition),因此在只安装了微软操作系统的硬盘上,我们最多只能看到2[046]个分区。主[047]分区的特点是可引导不可分卷,扩展[048]分区的特点是可分卷不可引导,因此只能把主分区标志为“已激活”而不能把扩展分区标志为“已激活”。
在硬盘上,(0,0,1)~(0,0,63)扇区称为“非操作系统管理区[049]”,也就是通过任何分区、格式化的办法都不可能修改其中数据的区域。在这个区域上,除了(0,0,1)扇区外,其它扇区都是被IBM“保留”用途的,由于IBM一直以来都并没有公布其真正用途也没有使用它们,因此一个干净的硬盘其(0,0,2)~(0,0,63)扇区应该全部为零[050]。但引导[051]型病毒往往利用IBM标准的这个特点,把病毒代码隐藏其间,成为先于操作系统引导、无法通过格式化-重装系统清除、杀毒软件监控不到的病毒天堂。因此我们在分区-格式化-系统安装之前,必须先检查(0,0,2)~(0,0,63)扇区,保证它们全部为零,才能保证安装出来的是一个干净的系统。即使平时系统运行期间,我们也应定期不定期地检查这个区域是否为病毒所侵占,以策安全。由于Windows(不管是2000、XP还是2003、Vista或2008版本)是运行在32[052]位保护[053]模式下的,对硬盘的访问需要通过驱动程序,硬盘的读写往往采用临时文件镜像的方式对原始数据进行保护,定点清零工作往往不甚可信,因此对(0,0,2)~(0,0,63)扇区的清零不宜在Windows上进行而应在运行16位实模式的MSDOS下进行。为此我们的硬盘上应同时安装16位DOS和32位(或64位)Windows两个操作系统,Windows用于日常应用,DOS则用于(0,0,2)~(0,0,63)扇区的安全检查和清零。DOS下清零可用NU[054]工具进行。
基于安装和引导DOS的需要,主分区卷应选择为FAT[055]文件系统格式,因为DOS不具备访问NTFS卷的能力也不能从NTFS卷上引导。为了保证日常应用中系统安全的需要,遵循微软公司的建议,Windows应安装在NTFS[056]卷上,其它日常应用的卷也应采用NTFS格式。这是因为NTFS卷具有“安全[057]”属性而FAT卷没有。因此Windows只能扩展分区卷而不可以装在主分区卷上。这就是“启动卷与系统卷分离原则”。
与Unix/Linux不同,Windows对卷的访问是通过盘符[058]进行的,这就是我们所熟悉的C:盘、D:盘……的来由,没有盘符Windows就不能读写卷上的任何数据或程序。盘符与卷之间的对应关系并不是固定的,我们可以把一个卷指定为C:盘,也可以按需要把它改称为D:盘或其它什么盘。把卷指定为某个盘符的过程称为卷的“挂载[059]”,而取消某个卷上所指定的盘符的过程称为“卸挂[060]”。由于主分区上以FAT格式安装DOS的启动卷(C:盘)缺乏安全属性,往往会成为病毒文件藏污纳垢的好地方,因此我们在Windows系统安装完成之后、正式投入使用之前,应将启动卷(C:盘)先行卸挂。在Windows上卸挂一个卷可用命令mountvol 盘符 /d来进行,例如,卸挂C:的命令为mountvol c: /d[061]
为了实现分时多任务、满足在有限内存空间(如128M、256M……)上实现4G的扁平编址的需要,Windows把内存空间按一定的大小(如4K或16K等,依版本不同而异)划分为若干页面[062]来管理。当多个进程同时竞争一个页面时,Windows会把页面上的原有数据或程序暂时写到硬盘的“页面文件[063]”pagefile.sys中去,从而腾出内存页面交给来竞争的进程。这就是“虚拟内存[064]”的来由。默认的情况下,Windows把pagefile.sys安排在系统卷中。内存页面的写出是非常频繁的,频繁的pagefile.sys写出需要频繁的文件定位表[065]计算,计算的累积误差极易导致文件定位的错误,造成与众多系统文件形成交叉链表[066],威胁系统的运行稳定。因此,仿照Linux建立Swap分区的做法,我们可以另建一个临时文件卷[067],把pagefile.sys从系统卷迁移到临时文件卷中去,以策系统文件免受页面误写。
病毒本质上也是一种计算机程序[068],也需要遵循操作系统的原则从外存上调入内存成为一个进程[069]或线程[070]后才有可能发作。利用根[071]下的autorun.inf文件趁盘打开的时候自动把病毒运行起来,是近年来诸多病毒触发的主要手段,包括大名鼎鼎的“熊猫烧香”。因此,如果我们利用NTFS的安全属性,把盘的根预先设定为“禁写[072]”,则这类病毒将失去运行触发的机会,甚至找不到藏身之处。这种办法不但对硬盘寄生病毒的防范有效,而且对U盘病毒的防范同样有效。同样的,如果我们把各用户的“启动[073]”项及其在注册表上的run[074]项设定为“禁写”,则众多利用开机机会触发的病毒也将遭遇同样厄运。
动态链接库[075](Dynamic Link Library)技术是32位操作系统普遍采用的技术,用于解决执行文件体积过于庞大[076]以及代码重用[077]问题。在把执行文件分解为一个个Dll文件之后,执行文件运行时即可按需要把相应的动态链接库调入内存,在动态链接库运行结束时可把它所占的内存空间释放出来,而未需要的动态链接库则不会调入内存,从而可实现以较少的内存空间开销运行较大执行文件的目的。因此,动态链接库本质上也是一种可执行代码文件,但它与.exe型的可执行文件不同,.dll文件没有可执行头部,不能自行进入内存运行,需要有调用它的.exe文件。为了简化开发量,Windows提供了一个公用的.dll调用接口rundll32.exe(Windows NT系列,在Windows 98系列上为rundll.exe),这样开发者只要把精力集中在体积短小精干的.dll开发上,既可以减少开发调试的难度和工作量,又有利于可执行文件在网上的传输。正是由于.dll的这些优点,不少病毒也采用了动态链接库的形式来编制,经网上传输之后,通过rundll32.exe调用来触发。因此,禁访问rundll32.exe[078]将有利于防范.dll型病毒的发作。事实上,在Windows的启动过程中并没有调用rundll32.exe,禁访问rundll32.exe对Windows的正常启动并无大碍。但进入Windows正常运行之后,控制面板各功能的使用需要rundll32.exe的支持,因此我们在使用控制面板功能之前,需要对rundll32.exe进行解禁,调用完控制面板功能之后,再把rundll32.exe禁起来。这样频繁的对rundll32.exe进行禁访/解禁操作当然会引起用户的不快,我们可以编写批处理[079]文件来简化这个操作过程,禁访的批处理文件里面添加一条命令cacls d:\Windows\System32\rundll32.exe /d everyone,解禁的批处理文件中添加的命令为cacls d:\Windows\System32\rundll32.exe /g everyone:r。其中,cacls是Windows带来的访问权限检测/设定命令,d:\Windows\System32\rundll32.exe是被设定访问权限的文件,开关/d表示删除[080](delete)全部访问权限,开关/g表示授予(giant)某种访问权限,参数everyone是被授权的用户名[081],参数f表示授予全部访问权限[082](Full rights),r表示授予只读访问权限(Readonly)。因此,禁访命令的意思就是“撤销所有用户everyone对文件d:\Windows\System32\rundll32.exe的全部访问权限”或“禁止所有用户everyone对文件d:\Windows\System32\rundll32.exe任何形式的访问”,带r参数的开禁命令的意思是“授予所有用户everyone对文件d:\Windows\System32\rundll32.exe只读的权限[083]”,而带f参数的开禁命令的意思是“授予所有用户everyone对文件d:\Windows\System32\rundll32.exe全部权限”。
除了二进制执行代码外,Windows还提供了另一种文本执行方式,即脚本[084](Script)方式。脚本本质是文本,通过解释程序Cscript.exe[085]和Wscript.exe[086]对脚本的解释型执行,隐藏了编程的复杂程度,大大降低了编程的入门门槛,因而广泛地应用于网络编程等方面。也正是由于脚本编写所具有的低门槛、适宜网络传输等特点,很多病毒尤其是初学者编制的病毒往往以脚本的形式出现。因此,在Windows的运行期间,如果将Cscript.exe和Wscript.exe设定为禁访问,则众多脚本病毒无法运行起来,从而对机器的安全性有利。与禁访问Rundll32.exe相类似,我们可以编制相应的禁访和解禁批处理简化操作。
Windows NT系列操作系统是32位(64位)的操作系统,由于内存分配/回收方式的改变,原来在16位DOS下开发的程序是不可以直接在Windows上运行的。为了信守向前兼容的承诺,Windows提供了一个16位仿真环境Wowexec.exe,让16位程序可以在仿真环境下正常运行,只要这些程序不涉及直接的设备访问[087]。这样某些16位的病毒就可以通过仿真环境在Windows上发作。随着DOS的渐行渐远、Windows的日益普及,多年后的今天仍在使用16程序的已然凤毛麟角,因此禁访问Wowexec.exe,对防范16位老病毒具有积极的意义。
上面已经介绍过,cacls.exe[088]是Windows带来的访问权限检测/设定命令,用于命令方式下对文件或文件夹访问权限的设定。我们可以利用它,病毒也同样可能利用它。对此,我们可以采取对cacls.exe易地易名之后,对原文件加以禁访问的办法,防止病毒对cacls.exe的访问。
以寄生方式来区分病毒,可分为“引导型[089]”和“文件型[090]”两大类(见课本P145)。对于引导型病毒,我们通过保证(0,0,1)~(0,0,63)扇区的干净来予以防范。对于文件型的病毒,我们在上面采取了破坏病毒运行环境或触发条件的办法,尽量使之无法进入运行[091]状态来加以抑制。但是,这些办法并未能完全防止病毒写入(寄生)到我们的硬盘、U盘之类外部存储器上来。对于已知的病毒,其文件名和存放位置都是固定的、已知的,MSDOS和Windows都有一个规定,即同一个文件夹上只能有一个同名[092]的文件或文件夹,即若一个文件夹里面若已有一个与病毒同名的文件或文件夹,且取消对该文件夹的任何访问权限,则病毒将无法寄生到我们的外存上。这就是我们“植疫苗”的思路。我们可以将已公布的病毒的存储位置和文件名资料收集起来,在相关位置上预先建立同名的文件夹,并设定everyone拒绝[093]访问它,则病毒想要进来也都没门。之所以选用预建同名的文件夹而不是同名的文件,是因为文件夹不占用盘上的数据空间,而文件则会占用数据空间,尽管这占用量对于现代的大容量硬盘而言不外九牛一毛,但我们该省的时候还是不该浪费。
有言道,“智者千虑终有一失”,我们尽管作了种种防范措施,但终难免某些采用我们尚未知的新技术的病毒,可能会突破我们的防线。三十六计中“败战计”最后一招是“走为上[094]”,我们也要有“走为上”的准备。万一系统被彻底攻破崩溃,或者限于时间无法清除病毒,那么我们应该有在最短的时间内恢复系统正常工作状态的能力。Windows ME和Windows XP提供的故障点恢复,可以是我们的思路之一。但故障点恢复技术需要Windows仍能正常工作,一旦Windows崩溃了,那么故障点恢复也就无从谈起。Symantec公司出品的Ghost可以是我们的一个不错的选择,Ghost提供有Windows的版本和DOS的版本,提供的操作有本地(Local)操作和网络(Network)操作,本地操作可以进行一个硬盘到另一个硬盘的整盘克隆、整个硬盘克隆为一个镜像文件、从整盘镜像文件中恢复整盘、一个分区(实际应该是“卷”,下同)到另一个分区的克隆、一个分区克隆为一个镜像文件、从镜像文件中恢复一个卷等操作,生成的镜像文件后缀名为.Gho[095]。生成镜像时还可以有非压、快压(Fast)、高压(High)三种压缩方式:非压方式是逐个扇区对应克隆,压缩比例1:1,由于不压缩,克隆的速度比较快,但生成的.Gho文件比较大;快压方式是抛弃全空扇区,只克隆有数据的扇区,这是一种克隆速度与镜像文件大小折中的办法;高压方式则不但抛弃全空扇区,还对数据扇区进行压缩,因此这种压缩方式压缩比高,但克隆速度较慢。在对NTFS卷进行压缩时,Ghost还会对NTFS的一致性进行检查。通常NTFS格式的系统卷由于日志文件回写不彻底,往往都会出现通不过一致性检查的问题,出现这种情况时,我们可以选择“继续[096]”(continue)强行克隆,大多数情况下这样克隆出来的镜像并不影响其复原效果。由于在Windows运行期间,系统卷有大量的文件处于打开[097](Open)状态,如果用Win版的Ghost32在Windows运行期间克隆系统卷,则做出来的镜像有可能因这些正在打开的文件而造成失真,无法在复原时使用。因此,对系统卷的克隆必须回到16位DOS下进行。目前已知有不少病毒是专门针对.Gho文件的,或删除或篡改文件内容,导致应急时镜像无法使用,因此,我们做的镜像就应该保存到FAT格式的DOS启动卷上,因为这个卷在Windows正常运行期间是卸挂[098]的,病毒无法访问这个已卸挂卷,从而保护了镜像免遭病毒荼手。另外,由于镜像文件都比较大,一般都在G级以上,如果频繁对DOS启动卷进行写[099]操作,则极易由于文件定位表计算误差造成与镜像的链表交叉,从而自我损坏镜像文件。因此,一般情况下不应因为启动卷尚有空间就把文件写到启动卷[100]上。
至此,我们大致介绍了做出一个“安全”的系统所需要考虑的若干要点。这些要点难免不够全面,也还存在许多漏洞,但一定会比拿张光碟稀里哗啦半个钟就可以宣称“装好了”的系统要安全得多。下一讲我们将介绍一些在网络安全方面系统安装所需要考虑的要点,敬请继续关注。
回复

使用道具 举报

发表于 2008-12-30 11:11:06 | 显示全部楼层
楼主调整一下格式吧,看起来好累!
期待你的下一期大作哦。
回复

使用道具 举报

发表于 2008-12-30 16:19:44 | 显示全部楼层
看得头都晕了
调整一下格式吧
回复

使用道具 举报

发表于 2008-12-30 20:38:31 | 显示全部楼层
这个是原创吗?                     
回复

使用道具 举报

发表于 2008-12-30 23:17:46 | 显示全部楼层
写得很好,计算机原理学的非常好。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | CSNA会员注册

本版积分规则

快速回复 返回顶部 返回列表