裕平 的个人资料Steven's Coffee Corner照片日志列表 工具 帮助
2005年8月

别为恶意程序打开门——如何控制NTFS权限和注册表权限

别为恶意程序打开门——如何控制NTFS权限和注册表权限


肖裕平

200588

 

 

在网络病毒和黑客日益猖獗的今天,root kitsroot kit是指入侵者用于入侵电脑系统的一系统列工具)和其它各种恶意程序(malware)在网络上无处不在,时刻威胁着用户的计算机安全。根据调查,导致用户“中招”比较典型的原因是:当用户以具有管理员权限的帐户登录计算机后,网页的浏览、电子邮件的收发或文档的编缉工作,都会导致这些恶意程序被意外地安装。所以,为了避免“中招”,计算机用户最好不要以具有管理员权限的帐号登录计算机,这样也可以在一定程度上减慢恶意程序传播的速度。

 

       当然,也有一些人认为这种解决方法是不实际的,因为没有管理员权限就不能够安装或运行很多应用软件。在有些时候,作为一个普通用户来使用电脑确实不太方便,而且有的时候,我们需要先以普通用户身份登录,然后注销后再以管理员身份重新登录。尽管这种情况并不发生的那么频繁,但作为网络管理人员,我们却不得不来考虑如何解决这些由NTFS权限和注册表权限所造成的困境,以使我们的计算机网络既安全稳定,又易于使用。

 

有很多人曾经问过我这样一个问题:在哪里开放一个权限就能使普通用户享有安装软件的权力,或者加上这个权限就能防止他们安装软件?尽管绝大多数应用程序的安装和操作问题都与权限息息相关,但不幸的是,无论是对于注册表或是NTFS,一个这样的单独权限本身并不存在,简单组策略(GPO)中也并没有向我们提供赋予或消除这种权限的设置。

 

       Windows 2000中,Microsoft使winnt/windows目录的默认权限变得更加严密,其中也包括system32文件夹。不属于AdministratorsPower Users组的成员只能从system32文件夹中读取,但不能往里面写入。我们知道,很多应用程序安装时都需要往system32目录中安装文件,所以除非安装软件的人具有管理员权限,不然很多软件的安装都会以失败告终。

 

       令人啼笑皆非的是,由于一些开发者无法动摇的坏习惯,现在有很多应用程序的安装都不再往system32目录中写入文件了,开发者没有将软件的.dll文件写入system32目录的意识。另一方面则正相反,一些软件却以操作系统会在system32文件夹中查找.dll文件为由,将大量的无论是有关或无关的文件都安装到system32目录中。因为早期的操作系统对system32缺乏权限的控制,所以普通用户都可以进行软件的安装。令人担心的是,在这种情况下,我们并不明白安装到system32目录中的文件是否会对系统造成威胁。在Win2K推出后,这种情况得到了控制,如果一个可能成为恶意程序的软件试图用特洛伊木马去替换操作系统的合法部份——它们大多数存放在system32文件夹中,那么这个安装过程最终会失败,除非安装者是以管理员身份在执行操作。这就是为什么我们不应该整天以管理员身份登录并操作计算机的一个很好的理由。而且,当用户是非管理员身份时,是不可能在无意间改变ntoskrnl.exe的,这在一定程度上可以使我们的操作系统运行得更加安全稳定。

 

       那么,那些合法的应用软件究竟该如何被安装呢?是否一定要先注销再用管理员帐户登录后安装呢?其实不用,在普通用户环境中使用Runas进行软件安装。就我所知,从没有哪位高人说过人们应该“永不”以本地管理员身份来操作电脑,我们需要注意的只是不要不加选择以管理员身份去运行所有的程序。而且,如果你实在不会使用Runas,最糟的情况下你也可以请你的管理员来帮忙,系统管理员总是能够以管理员身份来完成一次合法的安装。显然易见,这点麻烦比起你用本地管理员身份装完某个软件后电脑就不停重启所带来的困挠要好得多。

 

       注册表权限也可以干预应用软件的安装和操作。大多数应用软件会在注册表中存放一些有用的信息。当一个程序初始化安装时需要在注册表中建立一个新的键(KEY)以及一些数值的条目,而且这个程序也需要在注册表中存放一些相关的用户参数信息。举例而言,当我设置记事本的自动换行功能起作用或不起作用,那么记事本程序一定会在注册表中存放这些用户参数,当我下一次打开记事本时,记事本程序就会根据这些注册表中的参数来为我设置好使用环境。

 

       怎样才能在安装软件时有权力去更改注册表?这个问题的答案和解决安装软件时的NTFS权限问题的方法是相同的:使用Runas以管理员身份在普通用户环境中来安装软件。或者,如果你是在一个活动目录(AD)的环境中,你可以使用一个软件分发的GPO去分发一个应用程序。Windows Installer服务会在一个具有信任证书的系统帐户下来执行软件的合法安装,在这种情况下,NTFS权限和注册表权限都不会有问题。

 

       在我们的软件日常使用中,注册表权限也会引起一些问题,那是因为Win2K对注册表的默认权限作了一些改变。注册表的两个主要的子树(subtree)分别是HKEY_LOCAL_MACHINEHKEY_CURRENT_USER,前者是用来存放和电脑有关的一些设置;后者则是用来保存用户的一些特定设置的信息。因为可能不止一个用户来使用电脑,所以Windows支持多个HKEY_CURRENT_USER注册表并存。举例而言,如果Jack希望记事本能够记住自动换行,Rose却不喜欢自动换行,那么Windows能够存贮Jack的参数在JackHKEY_CURRENT_USER注册表子树中,而Rose的参数则存放在RoseHKEY_CURRENT_USER子树中。

 

我们经常会看到一个应用程序在注册表中会有两个键,一个在HKEY_LOCAL_MACHINE\SOFTWARE中,另一个在HKEY_CURRENT_USER\Software中。这些在HKEY_LOCAL_MACHINE中的设置是在软件安装时被生成的,而且以后也很少会被修改;而在HKEY_CURRENT_USER中的设置则是与计算机用户相关的,这些参数很有可能被随时修改。在众多软件中,并不是所有软件的设置信息都存放在注册表的HKEY_CURRENT_USER子树中。比如说,Microsoft Word中所有已被安装的附加项(add-ins)信息就没有被放入用户的HKEY_CURRENT_USER子树中,应用程序也不会从附加项的下一次安装过程中得到这些信息, Word将这些信息存放在了HKEY_LOCAL_MACHINE中。正是因为如此,当这些附加项下一次被安装时,Word就可以从HKEY_LOCAL_MACHINE中取得信息,自动对附加项进行设置。

 

       普通用户无法对HKEY_LOCAL_MACHINE\SOFTWARE的键进行写入操作,但是他们能够去改写他们各自的HKEY_CURRENT_USER\Software的键。所以应用程序可以将不同用户的相关信息写入到他们各自的HKEY_CURRENT_USER子树中去,这是一种很规范的作法,但是一些软件开发者并不理解HKEY_LOCAL_MACHINE HKEY_CURRENT_USER之间的区别,这可能是因为Windows 9x注册表缺乏安全性,而Windows NT 4.0以及更早的版本在HKEY_LOCAL_MACHINE\SOFTWARE的键值方面也缺乏安全性的考虑。所以当那些开发者开始进行32位的编程时,他们不需要去学习HKEY_LOCAL_MACHINE HKEY_CURRENT_USER之间的区别,举例而言, Autodesk的开发者们曾经开发了一个32位版本的AutoCAD,并将所有的信息都放在HKEY_LOCAL_MACHINE中。后来,使用Win2K的用户发现,由于普通用户帐户无法对HKEY_LOCAL_MACHINE进行操作,所以每个工作人员都必须以管理员身份登录去使用这个版本的AutoCAD,这对系统管理员来说简直是个灾难。

 

       利用Runas实现以管理员身份在普通用户环境中进行操作是解决这些开发者的失误的一个解决方法,但并不是唯一的方法。另一种途径是去找到AutoCAD使用了哪些注册表键并在这些键上释放权限。我们可以使用好几种方法去找到这些键,比如说,存放在HKEY_LOCAL_MACHINEHKEY_CURRENT_USER中的软件键的结构是subtree\Software\vendor-name(开发商名称)。因此,我们可以去看一下注册表中是否存在这样的或与之相近的键:HKEY_LOCAL_MACHINE\SOFTWARE\AutoDesk

 

       另一种方法是去执行SysinternalsRegmon工具(如下图所示)。这个工具能帮助你跟踪注册表的活动。通过观察Regmon的日志,我们就可以得知系统试图在哪些地方写入数据,与之相关的有哪些注册表键。(既然说到Sysinternals,我推荐你试一下RootkitRevealer这个工具,它可以帮助我们发现系统中可疑的root kits,你可以从http://www.sysinternals.com下载它。

 

 

 

你也可以下载Microsoft Windows Application Compatibility Toolkit 3.0(网址是:http://www.microsoft.com/downloads/details.aspx?familyid=7fc46855-b8a4-46cd-a236-3159970fde94&displaylang=en)。它包括了好些修补工具,比如Application Verifier。尽管不能支持所有的应用程序,但Application Verifie依然可以探测出200个以上的与系统不兼容的应用程序。如果你有什么软件在运行时出问题,那你就可以尝试通过运行Application Verifier来找到问题所在,它的日志可以告诉我们是什么引起了软件出问题,而且它还可以指出与之相关的注册表问题。

 

       在我们确定了与问题相关的注册表键后,将这个键上的可写权限赋予用户组(Users group),或者你可以为你指定的用户帐户建立一个独立的权限(右击这个有问题的键并选择“Security”选项)。如果你想要为整个企业用户在注册表中作大量的类似工作,我建议你使用GPO

 

       虽然NTFS和注册表权限并不是唯一导致用户或管理员应用程序兼容性程序的问题,但在引发问题的原因中它们占了很大的比例。一个小小的探测工作就可以查出权限问题是否存在,而花费很少的时间去调整权限就可以帮助我们避免更大问题的发生。可见,对于网络管理人员来说,预防胜于补救的意识以及规范的工作方法在某些时候比技术更为重要。

 

 

评论 (8)

请稍候...
很抱歉,您输入的评论太长。请缩短您的评论。
您没有输入任何内容,请重试。
很抱歉,我们当前无法添加您的评论。请稍后重试。
若要添加评论,需要您的家长授予您相应权限。请求权限
您的家长禁用了评论功能。
很抱歉,我们当前无法删除您的评论。请稍后重试。
您已超过了一天之内允许提供的评论数上限。请在 24 小时后重试。
因为我们的系统表明您可能在向其他用户提供垃圾评论,您的帐户已禁用了评论功能。如果您认为我们错误地禁用了您的帐户,请联系 Windows Live 支持部门
完成下面的安全检查,您提供评论的过程才能完成。
您在安全检查中键入的字符必须与图片或音频中的字符一致。

若要添加评论,请使用您的 Windows Live ID 登录(如果您使用过 Hotmail、Messenger 或 Xbox LIVE,您就拥有 Windows Live ID)。登录


还没有 Windows Live ID 吗?请注册

匿名 的图片
Steven 发表:
经常用的 什么事啊
8 月 15 日
匿名 的图片
doraemon 发表:
Symantec pcAnywhere这个软件你用过没?
8 月 11 日
匿名 的图片
沸腾的泡沫红茶 发表:
oooooo,居然还有"MM电脑拯救者"这种“神气”的称号,景仰中……
8 月 11 日
匿名 的图片
Steven 发表:
红茶 以后有什么问题都可以找我们的3K同志 他号称"MM电脑拯救者"哦!
8 月 11 日
匿名 的图片
Steven 发表:
对啊 如果你不是用管理员权限的帐号登进去 病毒就没有权力能在SYSTEM32里放东西。
8 月 11 日
匿名 的图片
Zhangl_3K 发表:
还是跟使用习惯有关,平时多注意,上网这么久还真没中过什么病毒。
8 月 10 日
匿名 的图片
Zhangl_3K 发表:
还是跟使用习惯有关,平时多注意,上网这么久还真没中过什么病毒。
8 月 10 日
匿名 的图片
沸腾的泡沫红茶 发表:
前段时间我遇到一个病毒,就在system32里产生一个文件,怎么删它它都会重新复制一个出来,我气坏啦。后来再网上找到解决办法,才修复了。但是总觉得现在整个操作系统还是有很多漏洞。
8 月 10 日

引用通告

引用此项的网络日志