提供数据安全性的系统和方法

文档序号:6467251阅读:418来源:国知局
专利名称:提供数据安全性的系统和方法
背景技术
1.发明领域本发明是针对计算机中存储数据的保护,特别是对那些从外部源输入的数据的保护。
2.先有技术简述数据可从多种数据源加载到计算机上,包括电子传输,如因特网和内部网(intranet)传输,从CD-ROM、软盘或其他输入/输出装置下载。一旦这些文件已被下载,则文件的发送者或创建者便没有办法保持对信息的控制。这种情况已变得特别重要,因为有更多的包括专有内容的秘密文件和材料正以这种方式传送。
考虑到上述情况并为了克服先有技术的缺陷,开发了本发明。
发明概要本发明提供用于数据安全性的系统和方法,例如防止其后对文件的再传输或未授权的打开文件。
附图简述

图1是方框图,显示用于数据安全性的系统的方法的一个实施例。
图2是方框图,显示根据本发明的一个实施例的一个安全的数据传输系统的一部分。
图3是方框图,描绘根据本发明的一个实施例在应用程序接口部件与装置驱动器之间的交互作用。
图4A-C是根据本发明的一个实施例的注册表(registry)监视系统的流程图。
图5A-D是根据本发明的一个实施例的共享存储器封锁方法的流程图。
图6是根据本发明的背接通法(back-channeling)的一个实施例进行操作的计算机系统方框图。
图7是根据本发明的背接通法的一个实施例在存储库(memoryvault)系统中文件打开的流程图。
图8是根据本发明的背接通法的一个实施例在存储库系统中文件读/写的流程图。
图9是根据本发明的背接通法的一个实施例在存储库系统中的文件信息请求的流程图。
图10是根据本发明的背接通法的一个实施例在存储库系统中的文件改变请求的流程图。
图11是Windows9X操作系统的系统体系结构布局方框图。
图12是WindowsNT操作系统的系统体系结构布局方框图。
图13是说明本发明的堆栈定位法的一个实施例的流程图。
图14是说明本发明的堆栈定位法的再钩连(re-hooking)步骤的流程图。
图15是根据本发明的一个实施例监视系统时钟改变或修改的方法流程图。
图16是通过以预先确定的跟踪间隔校验系统时钟值来监视系统时钟改变或修改的方法流程图。
图17是根据本发明的端口封锁法的一个实施例进行操作的计算机系统示意图。
图18是根据本发明的端口封锁法的一个实施例进行操作的计算机系统中的端口请求流程图。
图19(a)是根据本发明的端口封锁法的一个实施例进行操作的计算机系统中的端口打开请求流程图。
图19(b)是根据本发明的端口封锁法的一个实施例进行操作的计算机系统中的端口关闭请求流程图。
图19(c)是根据本发明的端口封锁法的一个实施例进行操作的计算机系统中的安全检查流程图。
图20是根据本发明的网络封锁法的一个实施例进行操作的计算机系统示意图。
图21是根据本发明的网络封锁法的一个实施例进行操作的计算机系统中的网络请求流程图。
图22是根据本发明的原理为阻止来自文件系统的调用而插入的掩护器驱动器(cloaker driver)的图示。
图23是本发明的一个实施例的流程图,该实施例中调用处理是对从文件系统管理器下行到来的选定调用类型进行的,并向上返回到文件系统管理器。
图24是Windows95操作系统的文件系统逻辑层次图。
图25是在Windows95操作系统的文件系统逻辑层次内一个典型的文件系统请求链的图示。
图26A-26G是图2的处理调用5和返回例行程序的流程图。
图27是根据本发明的一个实施例传送一个信息包的系统的流程图。
图28A-28B是根据本发明的一个实施例传送一个电子包的方法流程图。
图29是Windows9X操作系统的系统体系结构布局图。
图30是WindowsNT操作系统的系统体系结构布局图。
图31是本发明的文件骗术(spoofing)法的一个实施例的流程图。
发明详述现在详细参考附图,这里相似的参考数字对应于若干图中的相似部件,图1显示用于数据安全性的系统和方法的一个实施例,其中包含数据安全系统10。在本实施例中,如图所示,数据安全系统10最好包含打包器(packager)12和客户机(client)或接收器14。如这里将详细描述的那样,本实施例中的打包器12的操作用于创建安全数据内容,而接收器14的操作用于管理安全数据的使用。在一个最佳实施例中,打包器10和接收器14在一计算机网络上组合操作以创建和保持数据安全。虽然图中没有画出,但在其他实施例中,如果希望的话,打包器10和接收器14可以彼此独立地使用。如这里所用的术语“计算机”、“计算机系统”或“系统”应被广泛地解释为包括能够接收、传送和/或使用信息的任何装置,包括但不限于处理器、微处理器或类似装置、个人计算机(如膝上、掌上PC、台式或工作站)、网络服务器、大型计算机、电子有线或无线装置(如电话)、交互电视(如适于与因特网连接的电视机或与电视机一起使用的电子装置)、蜂窝电话、个人数字助理、电子寻呼机、以及数字手表。在所示一例中,信息以电子邮件形式传送。再有,本发明的计算机、计算机系统或系统可在网络上(如因特网、内部网或外部网(extranet))上与其他系统组合操作,或者可以作为单独的系统进行操作。
这一实施例中的打包器10最好是通过创建一个可执行程序来进行操作,该可执行程序能安全地向接收者发送数据。接收器14最好包含一个或多个装置驱动器和一个应用程序接口,如这一实施例中的Win32过程,它管理安全数据的使用。如这里将详细描述的那样,在这一实施例中有9个含有内核方式模块的装置驱动器作为接收器14的一部分。这里所使用的术语“数据”或“信息”是可以交换使用的,并应广泛地解释为复盖任何类型的信息、数据或其他内容,如文本、图形、音频、视频或任何组合,而且有任何所希望的格式,如任何适当的计算机文件格式。
当受保护信息的发送者希望向外部源发送一包专有的或敏感的数据时,通常是响应屏幕上的提示而选择一个要打包的文件。然后选择用于操作那包数据的允许规则设置。这些允许规则设置可以是多种不同类型的,如要进行的特定操作(例如禁止复制)、允许的副本数(例如2)、占有的时间限(如1小时)。这些可以是基本的允许规则或者是可以定制的。这里将描述根据本实施例的打包器12的一个最佳实施例。
当终端(end)用户从打包器12接收到数据时,该终端用户打开该文件,而且在这可执行包中的一个传感器程序最好是进行校验以确定接收器14是否是在运行,一旦确定之后,便向接收器14发出信号,告知它应该处理该包。在这个实施例中,传感器程序寻找一个能读这个可执行包的驱动器。在本实施例中接收器14至少包含一个装置驱动器,最好包含9个装置驱动器,下文中将更详细地描述。在未显示的其他实施例中,希望时可利用更多些或更少些装置驱动器和/或不同类型的装置驱动器。为了演示的目的,下面将首先针对单一装置驱动器来描述本实施例中9个装置驱动器的功能方面,因为装置驱动器的数量是可改变的。一般地说,在这个实施例中要下载的文件的安全性是由接收器14通过使用一个保护驱动器和相应的包含安全数据文件的存储库来维持的。要受保护的所有数据文件最好都存储在这个库中。在效果上,该库是受保护文件的保管所(repostory)。如果不能找到这个驱动器,则该包通知用户需要一个驱动器和/或复盖它本身从而破坏它本身,或者提供某些其他的所希望的选择。如果找到了驱动器,则驱动器从存储在存储库中的数据中解析出规则并创建“标志”文件供计算机使用,并且对存在于存储库外部的这个可执行文件进行复盖(切碎)以去掉这个可执行文件和数据的一切痕迹。在这一实施例中,该驱动器创件一个标志文件,该驱动器使用一个存储在存储库中的虚拟表把这标志文件映射到实际文件,作为计算机过程使用的空间占有者。
在本实施例中,存储库是硬盘上的空间,含有要受保护的文件以及内部安全性数据,如下文中将描述的存储库控制块、文件控制块、存储库分配表和存储库数据块。在这一实施例中,在存储库中包含的文件包括该文件的计算机名,由驱动器产生的或由数据创建者产生的该文件的名字以及实际数据文件本身。存储库分配表(Vault AllocationTable)的作用是一个可由驱动器寻址的链接表,它把计算机名链接于赋给该文件并存储在该存储库中的名字。再有,在这一实施例中存储库中的数据最好是加密的和/或可以是压缩的,被填充的,然后交错存储的(interlaced),从而提供进一步的安全性。该存储库还最好由各级外部保护加以保护,这在下文中将详细讨论。
驱动器是一个针对存储库的驱动器,当它被下载时把它自己放在计算机用户和存储库之间。该存储库和驱动器被加载到硬盘驱动器上。该驱动器监视计算机中的低层次调用,并使用虚拟表和来自计算机用户的输入对存储库中的文件进行操作以保护该文件系统而不管其内容如何。该驱动器是在计算机引导时加载。该驱动器知道它自己的位置和存储库的位置并对它本身和存储库赋予新的标志名供计算机操作系统用户利用。因为计算机是对这些标志(假的)名进行操作而不知道该驱动器驻留于计算机硬盘驱动器上时的真实文件名或位置,所以该驱动器和存储库的存在及位置对该系统的用户而言是不可见的,或者说是“被遮掩”的。因为它们是不可见的,所以在计算机启动以后是不能由计算机用户寻址的。实际上,驱动器监视地址指向计算机中文件的低层次调用指令。当该文件对应于存储库中所存文件的标志或驱动器本身时,该驱动器最好截断那个指令从而封锁用户对指定文件的访问。
该驱动器是在硬盘驱动器上并被引导到存储器中。驱动器迫使计算机首先引导这被遮掩的驱动器从而使它是第一个启动的驱动器,并使计算机最后关闭这被遮掩的驱动器。因为它首先初始化或首先引导起来,该驱动器总是在工作,所以总能遮掩驱动器和存储库以及存储库内的组成部分(elements)。以这种方式,这些组成部分总是受到保护并准备好供操作。
因为该驱动器是第一个,所以它总能遮掩需要被遮掩的东西。这是第一级防御,它使得难于定位系统内要被攻击的文件。如果这被遮掩的驱动器不是第一个被钩连(hooked)的话,则这是一个很好的指示,表明一个未授权用户正在试图攻击或侵入该驱动器或存储库文件中包含的敏感数据。对这些数据进行工作的被遮掩的驱动器是第一个被启动的。当计算机启动时,它被钩连到文件系统中。这些钩连是可识别的,而该驱动器感知这些钩连并对它们计数。如果该驱动器感知它不是第一个钩连,则该驱动器最好试图在已存在的钩连之上建立钩连。在其他实施例中,系统被安排成该驱动器破坏其自身和存储库,其作法是重复地覆写硬盘驱动器中它所在的那些部分。以这种方式,使数据不能被窜改。
在操作过程中,该驱动器为计算机的实际操作系统创建标志或位置的持有者。这些标志也是进入驱动器的入口,该驱动器把标志名翻译成实际名。该驱动器截断对操作系统的低层次调用,以确定该过程是否要在存储库内的文件上进行。如果该过程是要在该存储库内的文件上进行,则该驱动器将该功能及实际文件名与库分配表中的允许表比较,以确定那个过程是否能在识别出的文件上进行。如果该允许被拒绝,则该驱动器或者能通过WIN32层返回一个“该文件不能被找到”或“已进行了非法命令”的消息并阻止处理过程,或者能通过覆盖写来破坏它本身。如果允许被允许,则驱动器进入该表以得到特定文件的存储库地址。该驱动器使用该地址以及存储库分配表中的加密压缩和填充信息,把文件从存储库中拉出并按指令对其进行操作。存储库控制块监视该文件被如何使用,以确定它是否遵从了关于该文件允许使用次数或持续时间的规则设置。
一个黑客有可能在系统启动之前进入系统并对存储库定位,所以提供了若干保护层以防止对该文件或驱动器的未授权复制、移动、传输或操作。于是,在驱动器和存储器中纳入了相互独立和分层的保护机制。
第一个机制是把存储库、驱动器和/或允许数据库锚定(anchor)在被授权的计算机中。对这些项目的锚定点最好在该系统第一次运行时确定。锚定点被定义为存储库、驱动器或允许数据库驻留的起始群集(clusters)所在的地址。在这个实施例中最好有各种锚定组合并用作加密/解密的密钥。如果在这一实施例中后来该密钥不“工作”,则表明这些文件中有一个或多个被移动或修改。所以,系统在操作前将检验该驱动器、存储库和/或允许数据库是否已被移动。如果是,则在这个实施例中,它将指令驱动器覆盖写它本身及存储库,因为这种移动是已被窜改或移动的指示。所存储文件或驱动器在计算机硬盘驱动器上的起始点通常是计算机制造商、计算机型号以及先前在计算机硬盘驱动器上存储的数据和文件量的函数。所以这等价于一个随机发生器识别代码。如果该驱动器或存储库被启动,但它不认出它自己的锚定位置,它将覆盖写它本身。再有,如果它不能认出相应组成部分(相应的驱动器或存储库)的地址,它便知道或者它或者其他部分已被移动因而被帘改,于是将覆盖写它们本身。
再有,该驱动器能向存储库发送一个CRC型检验和。该存储库在允许对一文件进行操作之前利用该校验和以确认驱动器的完整性和同一性。如果彼此不能相认,则它们将覆盖写它们本身,以实现阻止对文件的未授权使用。
在处理过程中,对存储库内的文件数据进行操作的计算机程序将最好是创建其他软件操作所需要的数据文件。一个例子是用于打印。打印文件在存储库内创建中间数据文件,从而在存储库外部不会发生“背接通”。结果,创建临时文件供其使用的其他软件程序实际上是通过该驱动器进行工作以实现它们在存储库内的操作。
如果该存储库和/或驱动器要以某种方式再传送给一个非授权计算机,则本发明在端口管理系统级进行操作以阻止任何数据离开,如下文中将详细讨论的那样。
避开这种保护的一种尝试可能是把一个受保护的文件复制到一个会对应于存储库中未发现的文件的总文件中。实际上,使用如MicrosoftWord中已知的“剪切板”功能。该驱动器监视这些低层次操作系统调用。当由驱动器监测到一个对存储库中文件的复制命令时,则驱动器通过WIN32层显示一个消息,告诉用户或者是存储器满,或者是没有存储器或者是非法操作。
如前文指出的那样,在本实施例中最好有9个装置驱动器。在本实施例中这9个装置驱动器在图1中标识为DGCOMM 22,它主要负责Win32过程(标识为DG32 20)与驱动器之间的通信;DGFS 24,它作为文件系统驱动器进行操作;DGPRMDB 26,它负责维持允许数据库和使允许生效;DGVAULT 28,它负责存储库并含有全部被加密的数据;DGGUARD 30,它保护对输入/输出端口、注册表(registry)、TCP/IP和共享存储器的访问;DGWATCH 32,它定时检验系统完整性;DGTIMER 34,它提供规则的计时器间隔;DGANCHOR 36,它防止移动或攻击各组成部分;以及DGCRYPT 38,它提供对数据的加密/解密。
DG32 20是Win32过程,它的作用是接收器14的命令中心。在这一实施例中,DG32 20注视要执行的包并提示用户给出文件命以存储包有效负载;通知DGFS 24一个包有效负载应被吸收到存储库中;当DGFS 24通知DG32 20有一个应用正试图打开一个受保密的文件时,向终端用户呈现一个对话;当应用退出时通知装置驱动器;当允许期满时应允许装置驱动器的要求封锁剪切板访问并终止应用。
DGCOMM 22处理Win32层和装置驱动器层之间的所有通信。在这一实施例中,DGCOMM 22最好是提供单个一组装置驱动器输入/输出控制功能,它们被从Win32层调用以向装置驱动器层发送信息或从装置驱动器层接收信息,并提供由其他装置驱动器使用的功能以通知Win32它应调用一个装置以从装置驱动器层提取某些信息。
在这一实施例中的DGFS 24负责维持穿过可安装的文件系统管理器的文件系统调用。DGFS 24最好提供如下主要功能实施对受保密的文件的应用访问,为数据进出存储库提供通道,为标志文件制造假的文件大小以及隐藏或“遮掩”受保密的系统文件。
在这一实施例中的DGVAULT是一个自含式(self-contained)文件系统,用于存储受保密的文件以及由打开DCCRYPT文件的应用程序创建的临时文件。最好是存储库中的所有数据都被加密并包含各组成部分,包括存储库控制块(Vault Control Block)、文件控制块(FileControl Block)、存储库分配表(Vault Allocation Table)和存储库数据。
在这一实施例中的DGPRMDB 26含有关于存储库中文件的信息;例如,文件允许信息,包括但不限于数据文件可被打开的时间长度,一个文件可被打开的次数,在其后一文件不再可以被打开的日期,文件打印允许以及剪切板允许。此外,该允许数据库最好包括存储库中使用的文件名,凡打开过的每个包的包ID以及系统ID。
在这一实施例中的DGCRYPT 38提供对系统的加密和解密服务,例如,重解密(heavy decryption)以从受保密的包中得到受保密的文件数据,对进、出DGVAULT 28所管理的存储库的数据进行轻度加密/解密,以及对DGPRMDB 26管理的允许数据库进行轻度加密。
在这一实施例中的DGANCHOR 36为系统提供另一层安全性。例如,在这一实施例中,DGANCHOR 36根据文件的物理位置以及作为加密/解密密钥的所有锚的组合,为系统中的每个文件确定一个唯一的标识(锚)。
在这一实施例中的DGGUARD 30负责封锁对各种注册表条目(registry entries)的访问,例如串行和并行端口连接,网络连接,数据牵引和置放,以及续传电子邮件连接。
DGWATCH 32的作用是该系统的看门狗。在这一实施例中,DGWATCH 32以最好是规则的时间间隔询问系统中的所有装置驱动器以保证系统的完整性。
在这一实施例中的DGTIMER 34为系统提供内部计时服务。在本实施例中,DGTIMER 34按最好是规则的时间间隔调用DGWATCH 32以确信所有部件仍在适当地运行,按最好是规则的时间间隔调用DGPRMBD 26从而使计时器和允许信息能被更新,以及在计划进行整个系统完整性检验之后按短的时间间隔调用DGPRMBD 26,例如几秒钟一次。在本实施例中这9个装置驱动器的能力以及各装置驱动器在运行中彼此之间的关系,将在下文中更详细地描述。
根据本实施例的另一个保护机制是监视系统注册表。注册表是配置数据的分层存储仓库。注册表可以追踪计算机上存储的所有软件,以及程序间的关系。注册表可以追踪多个用户和硬件配置。在多个用户当中的优选(preference)可以改变。
在注册表中的每一段数据有一个与其关联的键(Key)值。名字和值一起被称作一个值条目。一个键类似于一个文件夹而它本身可以包含一个或多个文件夹(它们可被称作子键)以及一个或多个名字—值对。键也可被称作名字或操纵柄(handle)。为访问数据和提取所存储的值,需要正确的键。
因为注册表是一个数据库,因而是一个数据存储位置,它可用于泄出数据(Leaking data)。在这里使用的“泄出数据”意思是从希望在其中使数据被保密的系统向外传送数据。一个过程可以向注册表写信息,例如用于临时存储。然后另一个过程可以访问这注册表中的信息并把该数据写入一个注册表键中。然后另一过程可以从这个注册表键中读出该数据并写入盘或其他存储装置,从而泄出数据。于是,对于数据安全性重要的应用,需要限制数据从注册表泄出。
下面说明监视注册表的方法和系统的若干实施例,它们可能会减少或消除从注册表泄出数据。本发明防护各个过程以拒绝向系统的不可见方面传送数据。这包括例如限制向文件系统写、在通信端口上传送数据、与其他过程共享存储器以及向注册表写数据。
注册表监视方法的一个实施示例包含向调用过程要求一个注册表键的操纵柄,为该操纵柄请求一个注册表键值,以及通过检验被保密的过程清单和拒绝清单来得到安全性许可证以完成这些请求。因为向注册表添加内容的能力被封锁,从注册表删除内容的能力也被封锁。所以,该系统包括一种方法用于修改和删出含有安全性校验的键和值。
图2和图3描绘根据本发明的一个实施例的计算机系统100。注册表条目护卫驱动器120与文件系统钩连驱动器140通信。这两个驱动器都存在于内核(环0)级130。应用程序160在较高级140上运行。当应用160请求访问注册表110或共享存储器115时,护卫驱动器120与钩连驱动器140一起监视和处置这些请求。
一个包携带数据并向命令中心提供相关联的信息,该命令中心是应用编程接口(例如Win32过程)的一个组件。一个通信驱动器处置应用编程接口与多个装置驱动器之间的通信。它提供单个一组装置驱动器I/O控制功能,这些功能由应用编程接口调用以向装置驱动器发送信息或从中提取信息。由钩连驱动器调用通信驱动器以通知命令中心有一过程正试图打开一个被打包的文件。这些装置驱动器与应用编程接口一起服从发源者(originator)的允许选择,把被打包的内容调度到一个存储库中并支持对该内容的访问。命令中心可以注视要被执行的包并提示用户给出文件名以保存包的有效负载。它可以通知文件系统钩连驱动器有一个包的有效负载应被吸收到存储库中。它可以向用户呈现一个对话,指出一个应用正试图打开一个包文件。当应用退出时它还可以通知装置驱动器106。当允许期满时,命令中心可以应允许装置驱动器的请求封锁剪切板访问和终止应用。允许信息包含在一个数据库中,它可以包括例如文件名、包ID、文件系统ID和文件允许信息。文件允许信息包括但不限于一个文件可被打开的时间长度或次数、在其后一个文件不再可以被打开的日期以及打印和剪切板允许。
文件系统钩连驱动器140从正在等待访问一包或被吸收的文件的用户那里得到数据请求。当钩连驱动器140收到这些请求时,它对过程进行安全检查,然后询问用户。然后该过程被添加到被保密的过程清单中。注册表监视器被告知该过程是受保密的,因而它可以在将来封锁访问。
图4A-C描绘本发明的一个实施示例。本领域技术人员将会理解,对注册表监视系统的各种改变,包括安全检查以封锁对键和值的封锁,等效于这里所描述的步骤,因而在本发明的精神和范围之内。图4A描绘注册表打开键调用的过滤序列示例。进行这一调用是要得到一个由注册表键到一调用过程的操纵柄。注册表键操纵柄调用是在步骤302进行的。在步骤304,确定一个过程ID和注册表键。根据这一信息,在步骤306,通过检验被保密过程清单,确定该过程是否是受保密的。随着各个调用的启动,这受保密过程清单被持续地更新。如果该过程是受保密的,则在步骤308确定该注册表键是否是在拒绝清单中。这拒绝清单也是被持续更新的。如果这注册表键是在拒绝清单上,则在步骤310该过程被拒绝访问注册表,而这一调用在步骤312被成功地过滤。如果该过程不在受保密的清单上或者如果该注册表键名不在拒绝清单上,则在步骤314完成这一请求而该调用在步骤312被成功地过滤。
图4B是注册表键值调用过滤序列的流程图示例。在步骤316请求该操纵柄的注册表键值。在步骤318确定过程ID和注册表键值。在步骤320,再次查询受保密过程清单以确定该过程是否是受保密的。如果该过程是受保密的,则在步骤322确定该注册表键是否在拒绝清单上。如果该注册表键是在拒绝清单上,则在步骤324该过程被拒绝访问注册表键值,而且该调用在块326被成功地过滤。如果该过程不在受保密清单上,则在步骤328完成该请求,而该调用在块326被成功地过滤。如果该注册表键不在拒绝清单上,则在步骤330处理值请求,并在步骤332确定该值是否在拒绝清单上。如果该值不在拒绝清单上,则在步骤328允许完成该请求,而该调用在块326被成功地过滤。如果该值在拒绝清单上,则在步骤324拒绝对注册表键值的访问,而该调用在块326被成功地过滤。
然后操纵柄和值可被删除或修改。用4C中描绘了删除或修改序列的流程图示例。在步骤334进行删除或设值调用。然后在步骤336确定过程ID。然后,在步骤338通过检验该过程是否在受保密过程清单上来确定该过程是否是受保密的。如果该过程不是在受保密过程清单上,则在步骤340完成该请求,并在步骤342通过建立一个记录并把该记录送入受保密过程清单,来使该调用被追踪。如果该过程是在受保密的过程清单上,则在步骤344不允许完成该请求。在步骤342,通过建立一个记录并把该记录送入受保密过程清单,来使该调用被追踪。
进一步说明一个注册表监视系统,这里的注册表按这里描述的方法被监视。此外,本发明的一个实施例包括一个计算机,它被配置成根据这些方法监视注册表。本发明的一些实施例进一步包括一个机器可读的介质,其中含有根据这里描述的方法监视注册表的程序。
另一保护机制是监视和管理共享存储器。共享存储器可用于两个或多个当前正在运行的任务或线程之间的通信。一个程序创建的存储器段可以由其他过程访问。
共享存储器还可被利用供泄出数据。如果一个过程向一共享存储器位置写信息而另一过程从那个位置访问信息,则发生数据泄出。
已知为封锁共享存储器,通常要避免过程访问序列外的数据以保证只使用更新过的数据。在由第一个过程使用期间,对共享存储器空间的访问被禁止,然后才打开封锁允许共享该空间的过程去访问更新过的数据。现有技术中已知的存储器封锁不能解决数据泄出问题。因此,在数据安全性重要的地方,便需要限制从共享存储器泄出数据。
这里公开的实施例可以禁止具有共享页面的过程访问受保密的数据。对共享页面的封锁过程可以减少或消除从共享存储器中泄出数据。实施例包括在一过程被允许打开一受保密的数据文件之前进行安全检查。这种安全检查可以包含查明该过程的共享存储器状态和确定该过程是否在受保密过程清单。
共享存储器封锁过程可分成两个主要部分。第一部分包含钩连服务调用,包括用于收集数据的预约、提交和释放调用。第二部分包括使用数据以控制对受保密数据的访问。
针对图2和图3,当钩连驱动器202收到请求时,它调用注册表条目护卫驱动器204以确定该过程是否是受保密的以及是否存在共享页面。护卫驱动器204检验受保密的过程及共享存储器记录。如果不存在共享,则该请求可被应允,如果存在共享,则护卫驱动器204通知钩连驱动器202该过程不是受保密的,所以该请求被拒绝。如果这些页面不是共享的,则该用户被允许访问受保密的数据并把该过程放到受保密过程清单上。
下面是本发明的一个实施示例。本领域技术人员将会理解,对共享存储器封锁的各种改变,包括安全检查以确定这些过程是否是受保密的和这些页面是否是共享的,等效于这里所描述的步骤,因而在本发明的精神和范围内。图5A-D中描绘了共享存储器封锁的实施示例。图5A是页面预订调用过滤序列示例的流程图。预订调用为一个发请求的应用预定一个存储器页面。该过滤序列在步骤402中提供该调用而开始。然后在步骤404中该调用被过滤,作法是首先根据请求参数确定该页面能否被共享。如果该页面不能被共享,则在步骤406允许完成该请求。如果该页面能被共享,则在步骤408该预定调用被追踪,作法是建立一个记录并把该记录送入一个共享存储器清单。该记录可以包括过程ID、页面号和共享计数。图5B描绘用于过滤一页面提交调用的序列示例。在步骤410提供了一个页面提交调用,用于为发请求的过程或为其后发请求的过程提交存储器页面。在步骤412,通过访问共享存储器清单确定该页面是否被另一过程共享。如果该页面是被共享的,则在步骤414通过访问受保密过程清单确定这些共享过程中是否有哪一个为受保密的。受保密过程清单是通过连续编译当用户试图打开受保护文件时产生的记录而建立的。如果任一个过程是受保密的,则不允许页面共享,如步骤416中所示,而且在步骤418中该提交调用被追踪。如果两个过程都不是受保密的,则在步骤420建立一个新的共享存储器记录,并在步骤422用这新记录中包含的信息去更新共享存储器清单。对任何共享页面的过程还更新共享计数。如果该页面不是共享的,则在步骤424中完成该提交请求。然后进行被提交的应用。图5C描述页面释放调用的过滤序列示例。页面释放调用可以用于释放一些或全部地址空间的存储器页面。在步骤426提供这一调用。在步骤428通过检验受保密过程清单来确定该过程是否是受保密的。如果该过程是受保密的,则在步骤430对该页面覆盖写,以删除受保密的数据,并在步骤432删除共享存储器清单中其页面号与覆盖写的页面相同的全部记录。如果该过程不是受保密的,则在步骤432中也从共享存储器清单中删除其页面号对应于未受保密过程页面的全部记录。一旦页面被删除,则在步骤434该页面释放调用被追踪。
在一个过程被允许通过钩连驱动器打开打包的数据之前,要进行安全检查以确定该过程的共享存储器状态,并因此确定是否应允对该过程的访问。没有任何带有共享页面的过程被允许访问打包的数据。图5D是共享存储器状态安全检查流程图。在步骤490中该安全检查被启动。在步骤492确定该过程是否有任何页面带有大于零的共享计数。如果该过程有任何页面带有大于零的共享计数,则该过程没能通过安全检验,于是在步骤414拒绝对该过程的访问。如果该过程没有任何页面其共享计数大于零,则在步骤416应允对受保密数据的访问并把该过程添加到受保密过程清单。
又一个实施示例是针对一个共享存储器封锁系统,其中该系统根据这里描述的方法封锁存储器。所示共享存储器封锁系统实施例包含一个应用编程接口以把一个或多个打包的文件调度到一个受保密的存储库并支持文件内容访问。该应用编程接口包括一个命令中心去监视包访问。一个文件系统钩连驱动器与该命令中心通信并与一注册表条目护卫驱动器通信,以进行共享存储器封锁。
进一步公开的是受保密数据传输系统,它具有接收器部件用于访问由发送者提供的受保密的文件内容,这里该接收器包括一个共享存储器封锁系统。
根据本发明的又一个保护机制是这里将要描述的数据背接通。
为了防止数据被未授权访问,该数据可被加密。加密算法通常设计成使用一对密钥—一个密钥用于加密,一个密钥用于解密。加密用于使信息编码并把它作为加密的文件发送。加密也可用于建立两个计算机之间的安全连接,从而使窃听者不能截断被交换的数据。
一个加密的容器(container)可用于保护计算机系统中的数据。一个加密的容器是盘上的一个保留区,受保护的数据被复制和保存到它的上面。这可通过建立一个加密的文件来实现,该文件被作为文件系统安装并起文件系统的作用。先有技术的加密容器允许内容发布者向用户发布内容而不危及内容的安全。客户端容器(container-opener)打开器应用程序用于访问这加密的容器。客户端容器打开器可以以任意多种方式限制对加密容器内数据的访问。例如,它可以允许该数据只在某些时候或具有付款密钥证明时才能被访问。
一旦该容器被打开而且该数据被释放,则先有技术的加密容器系统便有有限的安全性。当在运行先有技术的软件和操作系统的计算机中打开一个文件时,在系统操作过程中,例如在打印过程中,数据可能泄出到应用中(例如剪切板或其他系统应用)并可能被复制和不安全地留在那里。这危及了该系统的安全。
某些客户端容器打开器可以带有集成的数据显示机制,它允许用户观看该保密数据。例如,Filio(NextPage公司)提供了一个观看者浏览器用于显示文件,该观看者浏览器通过关掉应用级控制来防止对数据的未授权使用。然而,这意味着当Filio中的文件被显示时,数据仍能被保存到剪切板上并受到来自系统级的其他方式攻击。
由客户端容器打开器应用程序做出的水印或数字指纹能用于追踪已被打开并从加密容器中去掉的内容的来源。这将允许追踪已被未授权发布的内容。然而,这仍允许数据被未授权用户观看。
所公开的实施例允许一个包括存储器存储库系统的计算机系统由未保护的应用使用来自该存储库的受保密的数据,而不必修改这些应用或安全性缺口。这是通过实现这些未保护应用所用的或所产生的数据的背接通(back-channeling)来完成的(换句话说,这类数据的隔离和任何这类数据的创建都是在该存储库中而不是在系统存储器中的任何其他地方),从而以保护原始受保密数据的相同方式进行保护。
参考图6,在一个最佳实施例中,背通道法在计算机系统500上实现。计算机系统500含有存储器510,它可以以任意多种方式配置,且可以包括若干存储器系统和多种存储器介质。在存储器510中驻留至少一个存储库520。在一个最佳实施例中,存储库520使用一个文件的逻辑构造,并在其中嵌入一个简单的、稳健的文件结构,能管理来自异类(heterogenous)文件源的数据。存储器510及硬件只能由驻留在内核(环0)级530中的内核方式应用程序直接访问。这种内核方式应用程序之一是文件系统安全驱动器540。如箭头所示,在任何较高级的较高级应用程序(在图6中集体显示为550)只通过驻留在内核(环0)级530中的应用程序访问存储器。在本发明的一个最佳实施例中,与文件系统安全驱动器540相关联的安全系统保证由较高级应用560提出的数据请求总是由文件系统驱动器540处置。文件系统安全驱动器540保持关于运行中的受保密过程、较高级应用用于访问受保密文件及其他存储库文件的文件操纵柄、以及文件系统安全驱动器540能用于访问受保密文件及其他存储库文件的存储库文件操纵柄的信息。文件系统安全驱动器540使用这些信息确保对存储库信息的访问是可能的但是是受限制的。这一点是通过对文件打开、文件读/写、文件信息、以及文件改变这些请求的截断和作用来完成的。对这些请求的处置示于图7至图10。
参考图7,一个过程发出一个文件打开请求,该请求由文件系统安全驱动器540(图6)接收。一收到文件打开请求(600),该请求便被检验看是否是针对受保密文件(605)。如果是,则该请求被检验看该发请求的过程是否在受保密过程清单中(610)。
如果该请求是针对受保密文件的,而发请求的过程不在受保密过程清单上,则由安全驱动器对发请求的过程进行安全检查(615)。如果该过程未通过安全检查,则该发请求的过程得到对0字节标志文件的访问而不是对所请求的文件的访问(620)。如果该过程通过了安全检查,则对许可进行检查并询问用户是否要打开一个受保密文件(625)。如果许可是不允许的,或者如果用户不想打开它,则该发请求的过程得到对0字节标志文件的访问而不是对所请求的文件的访问(620)。如果用户确想打开它,则此过程被添加到受保密过程清单(630)。(关于打开一受保密文件的信息将被传送到安全驱动器的一部分中,以便监视所允许的文件打开个数。)将对该过程给予一个文件操纵柄并将建立相应的存储库文件操纵柄;这些操纵柄将存储在打开文件清单上供检索(635)。以这种方式,一个文件被打开并准备好用于背接通(640)。
如果该请求是针对一个受保护文件的,而且发请求的过程是在受保密过程清单上,那么如果该过程先前未曾打开这个请求的文件,则将发生检验与询问(225)。如果该过程在先前已打开了该文件,则该过程的活动被背接通(back channoled)。该过程被给予一个文件操纵柄,并将创建相应的存储库文件操纵柄;这些操纵柄将存储在打开文件清单上供检索(635)。一个文件被打开并准备好用于背接通(640)。
如果该请求不是针对受保密文件的,则受保密过程清单被查询,看该请求是否是由受保密过程做出的(645)。如果是,则进行检验看该文件是否存在(650)。如果它不存在,则为了背接通,在存储库中建立一个对应于文件请求655的文件。以这种方式,一个受保密的过程不允许在存储外建立文件(不受保密的文件)。这就是背接受——不允许一个受保密的过程把保密信息“泄漏”到不受该存储库保护的文件中。
如果该请求是由一个受保密过程发出的,但针对的不是一个受保密的文件,则该文件打开请求的文件请求标记被修改,从而在这个未受保密的文件中的数据不能被抹掉或修改。以这种方式,一个受保密的过程能访问存储库外的未受保密数据,但不能对它写——防止受保密的数据写到未受保密(不在存储库中)的文件中。该修正过的请求被传送到文件系统以完成该请求(665)。
如果该请求不是针对一个受保密的文件,而且不是由受保密的过程发出的请求,则该请求不涉及安全性问题,于是该请求被传送到文件系统以完成该请求(665)。
以这种方式,受保密的数据只能由受保密的过程访问,由受保密过程打开的新文件总是在存储库中创建,而且由受保密过程打开的不保密文件不能被写入。
如图8中所示,当文件读/写请求被文件系统安全驱动器(540,图6)截断时也会实施背接通。当在700收到这样一个请求时,便在705进行检验看该文件操纵柄是否在打开文件清单中。如果是,则该文件是在存储库中。在710进行检验看此发请求的过程是否在受保密过程清单中。如果是,则在715在相应的存储库文件上实现该请求,从而完成该请求,从而在720背接通这读或写请求。如果不是,则该请求是由一不受保密过程发出的针对一个受保密文件的请求,于是在725该请求被拒绝。
如果在检验705该文件操纵柄不是在打开文件清单上,则进行进一步的检验看该过程是否在受保密过程清单上(730)。如果不是,则允许文件系统完成该请求(735)。如果是,则检验该请求是否是一个写请求(740)。如果不是,则该文件可被打开,即使它是一个不受保密的文件而该过程是一个受保密的过程,因为读一个不受保密文件不会泄漏任何保密数据。该请求被传送到文件系统735。如果该文件是不保密的,而该过程是受保密的,而该请求是写,在这种情况下存在数据泄漏的危险。所以写请求被封锁(725)。
以不同的方式处理文件信息请求——正确的文件大小甚至能被不受保密的过程访问。这是文件大小欺骗(spoofing)——在该最佳实施例中,文件系统把受保密文件的访问看作是指向一个零字节文件,于是,如果由文件系统处理一个文件大小请求,则将返回一个零大小。在此最佳实施例中,不保密的过程被允许看到保密文件的大小,所以,参考图9,当收到请求时(900),进行检验看它是否是存储库文件(805)。如果它不是存储库文件,则把请求传送到文件系统以完成该请求(810)。如果它是一存储库文件的操纵柄或该存储库文件的名字,则检验并返回相应的实际存储库文件的大小(815)。
对文件改变请求——不是读、写或打开的改变请求——的处理与对文件写的处理类似。参考图10,当收到文件改变请求时(900),检验该请求看所访问的文件是否是存储库文件(905)。如果是,则用新的文件信息更新打开文件清单以及其他数据库(910)。如果该文件不是一个存储库文件,则检验该过程看它是否是一个受保密过程(915)。如果它不是一个受保密过程,则不涉及任何安全性问题,于是该请求被传送到文件系统以完成该请求(920)。如果它是一个受保密过程但该文件不是受保密的,则该请求被封锁,以保证该受保密过程将不会损坏先前存在的数据(925)。
本发明的再一个实施示例是针对一个文件系统安全驱动器,其中该驱动器根据这里提供的方法实现一个具有背接通的存储库系统。所示文件系统安全驱动器包含一个驻留在内核级上的驱动器,它监视文件系统请求并允许在必要时有限制地访问驻留在存储库上的文件和创建存储库文件。
进一步公开的是一个受保密的数据传输系统,它具有接收器部件去访问由发送者提供的受保密文件的内容,这里的接收器包括一个存储库系统和一个按照这里提供的方法工作的文件系统安全驱动器。
再进一步公开的是一个计算机,被配置成包括一个存储库系统和一个被编程的计算机可读介质,以监视文件系统请求并按照这里提供的方法允许有限地访问驻留在存储库上的文件和创建存储库文件。
根据本发明的另一种保护机制是堆栈定位(stack positioning),这里将详细描述这一机制。
计算机系统通常包括一个或多个本地的或连成网络的数据存储装置。在这种计算机系统上执行的典型的应用程序通过调用由操作系统提供的标准文件系统服务(如在数据存储装置上创建、读和写文件的服务)来访问这些数据存储装置。
装置驱动器是一组由计算机实现的指令,它们实现一般输入/输出操作的针对装置的方面。在典型的操作系统中,如装置驱动器等软件应用以“内核方式”或“用户方式”运行。一个虚拟装置驱动器是这样一类装置驱动器,它有对操作系统内核的直接访问,如通过以内核方式运行来实现。
“内核方式”是处理器的一种具有高度特权的存储器访问方式。“用户方式”是处理器的不那么有特权的存储器访问方式。存储器访问方式是处理器硬件状态的一部分。内核方式特权级也称作“环0”,而用户方式特权级也称作“环3”。内核方式访问允许虚拟装置驱动器在很低的级别上与系统和硬件资源交互作用。
在传统的操作系统中,装置驱动器可以表示为一个在另一个顶上的分层结构。这种分层结构有时也称作堆栈(stack)或调用链(callingchain)。通常控制一硬件装置的驱动器是最低级别的装置驱动器。如果在硬件驱动器之上只有单个装置驱动器,则该驱动器称作单片(monolithic)驱动器。然而,在最低级别驱动器上可以放置多个驱动器。对由最低级别驱动器控制的一个或多个硬件装置的输入和输出请求(“I/O请求”)首先由最高级别驱动器处置,然后由任何较低级别的中间驱动器逐一处理,最后由最低级别的驱动器处置。
文件系统驱动器一般是最高级别驱动器,叠放在数据存储装置的装置驱动器(例如硬盘驱动器)的上面。文件系统驱动器实现指向文件系统的I/O请求的高级别方面,如创建、打开、扩展以及删除文件和目录的那些请求。在单个计算机中可以存在多个文件系统驱动器,而文件系统驱动器可以针对不同类型的文件系统,如FAT和NTFS文件系统。
在具有可安装的文件系统管理器和分层装置驱动器的操作系统中监视I/O请求,这在本领域是已知的,这些操作系统有例如Windows95、Windows98和WindowsMe操作系统,它们可从华盛顿州Redmond的微软公司得到,这里统称为“Windows9X”。在Windows9X操作系统中,可通过注册一个与可安装的文件系统管理器钩连的文件系统应用编程接口来实现文件系统监视。Windows9X提供一个函数,称作IFSMGR InstallFileSystemApiHook,它被设计成用于监视对文件系统的I/O请求。这一服务允许虚拟装置驱动器通过钩连到文件系统调用中来监视所有的文件系统活动。借助系统初始化过程中对IFSMGR InstallFileSystemApiHook的调用,一个虚拟装置驱动器可以把自己插入所有文件系统请求的堆栈中。
多少有些不同的途径已经用于监视面向对象的操作系统上的文件系统,这类操作系统有例如WindowsNT操作系统及其后继的操作系统,如Windows2000,它们可从华盛顿州Redmond的微软公司得到,这里统称为“WindowsNT”。在WindowsNT中,I/O请求用称作I/O请求包(“IRPs”)的数据结构来描述,它们用于软件应用和驱动器之间的通信。所有对硬件装置的IRP都由以内核方式操作的装置驱动器处理。高级别的、中间的以及低级别的驱动器交换IRP以完成给定的I/O请求。最低级别驱动器调用一个称作硬件访问层(Hardware AccessLayer,HAL)的NT层以获得对硬件的直接控制。已知在WindowsNT系统上把文件系统监视器实现成一个装置驱动器对象,它创件过滤器装置对象并把那些对象附着在目标文件系统装置对象上,从而使文件系统监视器将看见指向被监视数据存储装置的所有IRP。
在电子计算机的文件系统领域需要防止未授权的活动(activity)。未授权活动包括,但不限于,从受保密的文件或受保密的文件系统向一个未受保密的文件系统装置驱动器发送数据,以及蓄意的、未授权的或偶然的对数据的修改或损坏,例如被计算机病毒。传统的文件系统驱动器,例如用于检测和监视文件系统中活动的文件系统监视器,通常不包括有效的安全措施来防止在目标数据存储装置之上高于最高级别装置驱动器的级别上由软件应用或被成层的装置驱动器采取的未授权活动或者使它本身成层的企图。
还应该理解,这里所用的术语“装置驱动器”或“驱动器”包括直接或间接访问或控制硬件装置的任何一组由计算机实现的指令,包括但不限于装置驱动器、虚拟装置驱动器(VxD)、使用NT内核方式体系结构的指令组、使用Win 32驱动器模式(WDM)的指令组、以及其他指令组,它们以任何计算机语言针对任何计算机、计算机体系结构、网络或操作系统写成。
虽然在图中所示实施例含有一个装置驱动器,为了演示的目的被描绘成“文件系统监视器”,但如这里所使用的术语“文件系统监视器”一般地指使用本发明的堆栈定位的任何种类装置驱动器。本发明范围内的装置驱动器可以实现可由装置驱动器实现的任何种类有用的功能,包括但不限于通用目的的监视、许可监视、过滤、加密、解密、病毒检测、数据镜象、指向任何装置的I/O功能以及其他功能,而且不限于监视或与文件系统有关的功能。实现堆栈定位的任何驱动器装置都适当地落入本发明的范围。
本发明的一个实施例可在Windows9X操作系统上实现。现在参考图11,Windows9X操作系统的组成部件在用户方式(user mode)代码1000和内核方式(kernel mode)代码1030之间分割,它们提供不同级别的系统保护。对于一个实施例,用户方式代码1000包括一个能运行16位和32位软件应用1021-1022的系统虚拟机1020和多个MS-DOS虚拟机1025。在这个实施例中,内核方式代码1030包含低级别的操作系统服务和虚拟装置驱动器,如虚拟机管理器1040、本发明的文件系统监视器1050以及可安装的文件系统管理器1060。
在可安装的文件系统管理器1060的下面是用于文件系统(如FAT和NTFS)的多个文件系统驱动器1070-1072。在文件系统驱动器1070-1072的下面是块I/O子系统1080。块I/O子系统1080包括一个I/O监督器(supervisor)1081,它管理那些通过文件系统分层结构传送的请求,还包括一个单片式驱动器1082用于端口I/O,以及分层的多个装置驱动器1083-1084。
在这个实施例中,在来自用户方式代码10的和来自以用户方式1000运行的应用1021-1022的I/O请求被送到可安装的文件系统管理器1060之前,第一装置驱动器1050阻断所有这些I/O请求。第一装置驱动器1050能监视和过滤(如果希望过滤的话)在可安装文件系统管理器1060、文件系统驱动器1070-1072以及块I/O子系统1080中发生的所有文件系统活动。借助系统初始化过程中对IFSMGR InstallFileSystemApiHook的调用,在操作系统启动或重启动时第一装置驱动器1050被钩连到这类调用中,在此时它在功能上被插入到所有文件系统请求堆栈上的最上层位置。从可安装的文件系统管理器1060向下窜过多层结构1083-1084中的每个驱动器,一个I/O请求从最高级别传送到最低级别,而当一请求的结果沿这堆栈向上传到该I/O请求的源头时,这些装置还能看到这个请求结果。在该堆栈上的每个装置驱动器可以自己服务于一个I/O请求而不把它传送到较低级别,或者如果希望的话它本身产生一个新的I/O请求。这种装置驱动器可以实现那些需要等待的功能,如等待一个中断,或等待一个装置变为可用的。在这种等待过程中,装置驱动器只是简单地返回到它的调用者,允许发出调用的应用或装置驱动器与此I/O请求平行地进行其他工作。另一种作法是,发出调用的应用或装置驱动器可以简单地等待(“锁住”)直至I/O请求完成。
在另一实施例中,参考图12所示,本发明可以在WindowsNT操作系统上实现。如本技术领域所知,在WindowsNT下以用户方式运行的应用1100可以向操作系统服务1110发送I/O请求。I/O管理器1120接收I/O请求,并在各驱动器之间协调I/O请求包的传送。在另一种作法中,各驱动器可以彼此直接通信,无需I/O管理器1120或其他装置来协调各驱动器之间的信息传送。
如WindowsNT这类操作系统的传统输入/输出系统包含多个装置驱动器1130-1132用于处理I/O请求。这种装置驱动器由例如文件系统驱动器1130和分层的多个装置驱动器1131-1132来加以说明。I/O管理器1120通常向负责管理I/O请求目标的文件系统驱动器1130发送I/O请求包。然而,如本技术领域所知,文件系统监视器1150能以面向对象的方式附加到其他装置驱动器1130-1132上。于是,I/O管理器1120把对目标装置驱动器1130-1132的I/O请求包引导到已附着在目标装置驱动器1130-1132上的文件系统监视器1150。在所示实施例中,文件系统监视器1150附着在这多个文件系统驱动器对象1130的每一个上。
图13是在文件系统监视器1250中使用堆栈定位提供数据安全性的一种方法的一个实施例的流程图。为了说明的目的,所示实施例中的文件系统监视器1250对文件系统请求进行过滤,这些请求是指向文件系统的I/O请求。然而,应该理解,本发明可以有用地实现于任何装置驱动器中,不管这种装置驱动器的目的如何,也不必考虑文件系统或监视功能。
如图13中所示,每次检测到文件系统请求时,本发明的堆栈定位过程在步骤1200开始。在步骤1210,过程确定该文件系统过滤器是否被步骤1223中先前的迭代关掉。如果是,则过程在步骤1225继续,允许其后的调用不被过滤,并在步骤1233退出。
回到步骤1210,如果文件系统过滤器未在先前被关掉,则过程在步骤1220继续,并确定这是否是步骤1200检测到的第一个文件系统请求。如果是,则过程在步骤1230继续,并确定调用模块的地址。因为这是第一个文件系统请求,在逻辑上保证了该文件系统监视器1250是刚被加载,所以在功能上处于与该文件系统关联的装置驱动器堆栈中的最上层。在一个WindowsNT实施例中,调用模块是通过参考文件系统监视器1250上附着的装置字段来确定的,当文件系统监视器1250在功能上处于装置驱动器堆栈中的最上层的该字段将为零。继续到步骤1231,该过程存储在步骤1230中确定的调用模块的地址。过程在步骤1232继续完成过滤功能以及在文件系统监视器1250中实现的其他有用功能。然后,该过程在步骤1233结束。
回到步骤1220,如果它不是由步骤1200检测到的第一个文件系统请求,该过程在步骤1221继续,并确定调用模块地址。在一个WindowsNT实施例中,调用模块是通过参考文件系统监视器1250上附着的装置字段来确定的,如果有任何装置对象已附着在文件系统监视器1250上,则该字装将不为零。在步骤1222,调用模块地址与先前在步骤1231存储的地址比较。通过在这一点上比较调用模块地址,文件系统监视器1250将能检测出任何其它装置,它试图通过把自己放在调用模块和文件系统监视器1250之间来得到高于文件系统监视器1250的优先级。如果在步骤1222这两个调用模块地址相同,则过程在步骤1232继续。
如果在步骤1222这两个调用模块地址不相同,则过程在步骤1223继续,并设置标志指出关掉过滤。这个标志与在步骤1210检测的标志相同。该过程在步骤1224继续并启动再钩连过程,下文中将参考图14描述这个再钩连过程。在步骤1224之后,过程在步骤1225继续,允许其后的调用不受过滤地进行,并在步骤1233退出。
图14是再钩连过程的一个实施例的流程图。在步骤1300,本发明的再钩连过程被启动。在步骤1310继续,该过程对所存储的一个计数增1,该计数表明这个再钩连过程已被启动多少次。继续到步骤1320,该过程确定所存储的计数是否已达到最大阈值。该最大阈值是一个预先确定的值,它触发一个可编程的安全性响应。
在对防害数据安全性企图的容限为零的那些实施例中,最大阈值值为1是适当的。在可以接受某种容限的实施例中高于1的最大阈值将是适当的。在另一些实施例中将以不同的阈值使多个或不同的可编程安全性响应生效。
可能会发现,大范围的可编程安全性响应是符合希望的。可编程安全性响应包括但不限于破坏曾被请求的数据,或者,如果这数据是存储在一个安全虚拟文件系统中的话,则破坏数据和这安全虚拟文件系统二者。可编程安全性响应的再一些实施例包括终止打开的应用、破坏数据存储装置上的文件系统监视器、停止计算机的操作、以及使计算机进入一种需要重新启动的状态。前述只是举例,不应被认为是根据本发明对可编程安全性响应的限制。
回到步骤1320,如果所存储的计数已达到最大阈值,则在步骤1330,启动这可编程安全性响应,然后该过程在步骤1350结束。
如果所存储的计数尚未达到最大阈值,则在步骤340该过程启动该文件系统监视器1050的重附着(reattachment)。这可通过在堆栈的功能上最顶级启动一个新的文件系统监视器1050来实现。在诸如WindowsNT这样的面向对象的环境中,对单一驱动器对象可以有许多个附着(attachment),而且不必要从堆栈中去掉或卸掉文件系统监视器1050,尽管可能会希望这样做。在另一实施例中,可以通过编辑调用链,使先前初始化的文件系统监视器1050返回到功能上的最高级别,从而实现再附着。
在步骤1340,该过程还使指出关掉过滤过程的标志复位,表明可以恢复过滤。参考图13,这一标志与步骤1223中设置并在步骤1210被检验的那个标志是同一标志。
在另一实施示例中,根据这里的任何实施例的堆栈定位的特点可被纳入到背接通过程中,如图6-8中所示任何实施例中的背接通过程。一个好处是最上层堆栈位置可以保证背接通直接作用于调用过程而不是任何中间的文件系统过滤器。
根据本发明的又一个保护机制是监视时钟操作,下面将对此进行描述。
某些计算机程序含有一些限制,它们限制程序的使用时间。这些限制或者可由同意程序使用条件的许可证来规定,或者可由程序的所有者或提供者规定。例如,软件的试用版通常允许在一个指定时段内使用,例如30天。设置试用软件有效期的一种已知方法是记录系统时钟信息(包括日期和时间信息)并把期满日期设为该日期之后的第30天。另一种已知的方法是使期满日期编程到计算机代码中。利用这种方法,只有当系统时钟早于该期满日期时程序才能运行,不管该程序是何时安装到计算机系统上的。
根据这两种方法中的任何一种,用户都被禁止在期满日期之后执行该计算机程序。通常,在期满日期之后执行一个程序的尝试会产生一个屏幕消息,告诉用户该程序已经过期。克服这个期满日期参数的一种已知方法是人为地把系统时钟重新设置到一个落在允许时间段内的日期和时间,即重设到早于期满日期的时间和日期。
已经有一些解决这一问题的尝试,作法是在系统时钟日期迟于期满日期时用户试图执行一程序之后,便完全地使不依赖于系统时钟信息的程序失效。然而,这一解决办法是苛刻的,就是说,它不允许用户校正系统时钟和继续使用或许是被允许的软件。
在计算机系统领域需要防止对嵌入计算机代码中的使用限制(例如有效期参数)进行破坏,而同时又不会永久性地使对程序或其中的数据的使用或访问变成无效。本发明通过提供一种监视系统时钟以防止未授权访问数据的方法和装置来满足这一需求。本发明检测对系统时钟的修改或改变,并使与时钟有关的许可变成无效直至系统时钟返回到它的正确值为止。
现在参考图15,图中显示根据本发明的一个最佳实施例用于监视计算机系统时钟的方法框图。根据这一方法,时钟监视器与存储在存储器中的许可数据库通信。许可数据库包含至少一个与时钟有关的许可字段和一个具有所存储时间值的存储时间值字段。每个许可字段包含至少一个与时钟有关的许可。与时钟有关的许可是控制对数据进行访问的参数,这种控制是基于来自系统时钟的信息,如时间和日期信息,或者系统时钟的速度。在本领域已知计算机系统基本上是根据系统时钟进行操作。
与时钟有关的许可包括例如用日期、小时或分钟指定一个用户有多长时间可以访问该数据。实现这一许可的一种方法是对访问时间减量,这个访问时间是从一过程访问该数据的时刻直到该过程到期的时刻。该访问时间在内部被追踪;然而,从系统处理器的“滴嗒声”(tick)中导出系统时钟速度被用于对访问时间减量。如果在处理过程中该访问时间被完全用完,则该过程将自动被终止。在访问时间期满之后,该数据将被覆盖写并删除。与时钟有关的许可的另一个例子是指定一个日期,在那一天该数据将不再可用。用户将能访问该数据直至期满日期的到来。如果一个过程在期满的那一天让数据打开,则过程会自动被终止,而数据被覆盖写并删除。与时钟有关的许可的又一个例子是指定一个授权日期,在那一天该数据将变为可访问的。根据这一许可,在未过授权日期之前用户将不能访问该数据。一旦已过授权日期,该用户将能访问该数据。与时钟有关的许可的其他例子包括“无许可”或“无限制使用”。受到与时钟有关的许可限制的数据可以存储在存储装置上,如硬盘、软盘、CD-ROM或磁带上,或者可以嵌到许可数据库或计算机程序之中。
时钟监视器包含计算机代码,它在执行时启动对时钟监视器的初始化(步骤1412)。在本发明的一个实施例中,该计算机代码是一个计算机程序,它存储在计算机可读介质上,例如磁盘或光盘。该计算机代码可以是单一的代码模块,或者最好是分解成一系列模块用于实现时钟监视器的那些功能。在一个实施例中,通过发出实现代码模块功能的调用,使那些公用功能能被单一代码模块实现不只一次。一旦开始初始化,该时钟监视器便从系统时钟读取当前时间(步骤1414)。然后时钟监视器确定许可数据库是否被初始化,这包括它是否已在先前的场合被初始化(步骤1416)。在本发明的一个实施例中,一个计算机程序的执行会通过许可数据库驱动器使许可数据库初始化。如果许可数据库驱动器被加载到计算机系统上,则认为该数据库被“初始化”了。在这个实施例中,时钟监视器计算机代码可以嵌入到计算机程序中用于初始化许可数据库。在另一实施例中,确定许可数据库是否被初始化的步骤涉及从许可数据库中读取所存储的时间值。如果所存储的时间值是零,则该数据库未被初始化。如果所存储的时间值不为零,则数据库是被初始化了。
如果许可数据库被初始化了,则从步骤1414得到的当前时间值与许可数据库中存储时间值字段中所存储的时间值进行比较(步骤1418)。如果从步骤1414得到的当前时间值迟于所存储的时间值,则在步骤1420将当前时间值存储在存储时间值字段中。如果由步骤1414得到的当前时间值早于所存储时间值,则在步骤1422使与时钟有关的许可无效,从而防止访问该数据。
如果许可数据库未被初始化,则在步骤1224将步骤1414得到的当前时间值存储在存储时间值字段中。根据图15中描绘的方法,在步骤1420、1422或1424任何一个步骤之后,在步骤1426时钟监视器被初始化。
图16显示根据本发明的一个实施例的方法,这里,在时钟监视器初始化之后,按预先确定的追踪间隔检验系统时钟以证实系统时钟的完好。间隔检验是在步骤1528开始的。一个内部时钟使用系统时钟速度对步骤1414得到的当前时间值增量并跟踪真正的系统时间。真正的系统时间是存储的时间值加上一个内部占用时间(elapsed time),这个占用时间是从时钟监视器被初始化的时间算起的。该内部占用时间最好存在许可数据库中。在预先确定的跟踪时间间隔,在步骤1530时钟监视器读取系统时钟的时间值,并在步骤1532将它与内部时钟保持的真实系统时间进行比较。预先确定的追踪时间间隔可以是任何时间值,但最好是在零到60秒的范围内。最好这个预先确定的追踪时间间隔为1分钟。也是在步骤1532,根据步骤1530读出的系统时钟时间值和真实系统时间的比较结果,时钟监视器产生一个时间偏差。该时间偏差与一个可接受的偏差进行比较。这可接受的偏差最好是预先确定的,而且可以是任何时间值,例如在零秒至3小时范围内的时间值。最好是这可接受的偏差为3小时。
如果时间偏差是在可接受的偏差之外,则在步骤1534时钟监视器得出结论该系统时钟值已被改过,于是使所有与时钟有关的许可变为无效。如果时间偏差在可接受的偏差范围内,则在步骤1536时钟监视器使与时钟有关的许可生效。在步骤1538,存储真实系统时间,最好是存在许可数据库中,然后在步骤1540完成间隔检验。
在一个实施例中,如果在步骤1534中或在图15的步骤1422中,与时钟有关的许可变为无效,则一般会重复图16中的步骤。如果在图16中那些步骤的这一循环中所产生的时间偏差在可接受的偏差之内,则与时钟有关的许可重新生效,这些许可按需要生效,真实系统时间被存储,最好是存储在许可数据库的存储时间值字段中,从系统时钟读出的时间值存储在许可数据库中的最后一个已知的好系统时间字段。
在另一实施例中,当计算机关闭时,真实系统时间与系统时钟值比较。如果系统时钟值在可接受的偏差范围内,则把系统时钟值存储到存储时间值字段中。这使得能考虑和存储相对较小的偏差。
另一种保护机制是端口封锁。在计算机系统中,过程可以访问许多系统资源,如串行端口或到因特网的连接。在受保密的数据被不受保密的应用访问的场合中,必须开发出一种手段,借以能限制那些不受保密的应用进行可能会危及数据安全的操作。
已知如何打开一个完全与外界隔绝通信的系统中打开受保密的数据,该系统与不保密的应用可能借以偶然地或有意地危及受保密数据的手段无连接。还知道如何以受保密的应用打开受保密的数据,已知这些应用没有偶然地或有意地危及受保密数据的危险。这些解决方案防止把公开的软件应用用于打开受保密的数据,或者防止使用一个没有切断与外界通信联系的计算机,因而这些解决方案在其有用性方面是有限的。
所公开的这个实施例禁止某些过程使用它们运行的计算机的端口资源。这些可以是受保密的过程,例如已经打开受保密数据的过程。在本发明的一个最佳实施例中,通过确认一个过程存在于受保密过程清单上,来确定该过程的状态是受保密状态。
如图17中所示,在一个最佳实施例中,在计算机1600中一控制应用1610在内核(环0)级1620上运行,而应用1630在较高级别1640上运行。当应用请求访问端口1650时,控制应用1610监视并处置这些访问请求。
如图18中所示,在某些计算机系统中,例如微软WindowsNT和Windows2000操作系统中,端口监视能阻断所有与端口有关的调用。当发起一个端口请求时(1700),控制应用(图17中的1610)阻断那个请求,并确定过程id(标识)(1710)。在一个最佳实施例中,该控制应用(图17中的1610)访问一个不允许打开一端口的过程的清单。过程id用于确定该过程是否是一个受保密(不允许打开一端口)的过程(1720)。如果它是受保密的,则在1730封锁该请求。如果它不是受保密的,则把该请求送到该端口(1750)。
如图19(a)中所示,在某些计算机系统中,例如微软Windows95和98操作系统中,端口监视只能阻断打开和关闭调用。为了保证对一端口有访问的过程在其后不会变成受保密的过程,必须对要变为受保密过程的任何过程进行检验。当发起一个打开端口请求时(1800),控制应用(图17中的1610)阻断该请求并确定过程id(1810)。在一个最佳实施例中该控制应用(图17中的1610)访问一个不允许打开一端口的过程的清单。过程id用于确定该过程是否是一个受保密(不允许打开一端口)的过程(1820)。如果它是受保密的,则在1830封锁该请求。如果它不是受保密的,则把该请求送到该端口,并对过程ID和端口操纵柄进行追踪(1850)。
如图19(b)中所示,当发起一个关闭端口请求时(1860),控制应用(图17中的1610)阻断那个请求并完成该调用(1862)。然后过程ID和端口操纵柄从受追踪的打开端口数据库中去掉(1864)。
除了对打开端口和关闭端口请求的这些操作外,如图19(c)中所示,当一过程受到安全检查以确定它是否将是受保密的过程时(1870),对照受追踪的打开端口数据库检验该过程的id(1872)。如果该过程有打开的端口,则该过程可以不被做成受保密的,于是安全检查失败(1874),于是安全检查完成(1876)。如果该过程没有打开的端口,它将通过安全检查,而且该过程id将加到受保密过程清单中(1878)。
本发明的又一个实施示例是针对一个根据这里提供的方法实现的端口封锁系统,这里某些过程被限制不能使用一端口。进一步公开的是一个受保密的数据传输系统,它有一个根据这里提供的方法实现的端口封锁部件以禁止某些过程使用一端口。再进一步公开的是根据这里提供的方法进行编程以封锁端口使用的计算机可读介质。再进一步公开的是一个计算机,它被配置成包括一个端口封锁系统,它根据这里提供的方法封锁某些过程使之不能使用端口。
与端口封锁类似的另一种保护机制是网络/TDI封锁。
所公开的实施例禁止某些过程利用它们在其上运行的计算机的网络资源。它们可以是受保密的过程,例如已打开受保密数据的过程。在本发明的一个最佳实施例中,通过确定一个过程存在于受保密过程清单上,来确定该过程的状态是受保密状态。
如图20中所示,在一个最佳实施例中,在计算机1900中有一控制应用1910在内核(环0)级1920上运行,而应用1930在较高级别1940上运行。当应用请求访问网络/TDI接口1950时,控制应用1910监视和处置这些访问请求。
如图21中所示,通过不允许为受保密的应用处理发送请求,来实现网络封锁。当发起一个发送请求时(2000),控制应用(图20中的1910)阻断那个请求并确定过程id(标识)(2010)。在一个最佳实施例中,该控制应用(力20中的1910)访问一个不允许访问该网络的过程的清单。过程id用于确定该过程是否是一个受保密(不允许访问该网络)的过程(2020)。如果它是受保密的,则在2030封锁该请求。如果它不是受保密的,则把该请求送到网络上(2050)。
本发明的又一个实施示例是针对一个网络封锁系统,它是根据这里提供的方法实现的,其中某些过程被限制不能访问一网络。进一步公开的是一个受保密的数据传输系统,它有一个根据这里提供的方法实现的网络封锁部件以禁止某些过程访问网络。再进一步公开的是根据这里提供的方法编程的计算机可读介质。再进一步公开的是一个计算机,它被配置成包括一个网络封锁系统,它根据这里提供的方法封锁某些过程使之不能访问网络。
另一种保护机制与隐藏(hiding)或伪装(cloaking)文件有关。图22是一个系统实施例的方框图,该系统通过监视文件系统调用来隐藏或伪装文件。如图所示,该系统包括操作系统(OS)层2210和应用层2112。在一个实施例中,操作系统层2100是Windows95,尽管Windows98、NT、2000、基于Unix的系统或者允许有入口点进入文件系统控制的任何操作系统的确也可以利用本发明各种实施例的相同原理。操作系统2100包括一个文件系统2114(例如一个可安装的文件系统,IFS),它处置来自应用层2112中的应用的调用。一般地说,在操作系统2110中装置驱动器成为装置,而在应用层2112中的应用通过一个定义的应用程序接口(API)使用这些装置完成任务。根据本发明的原理,高级别伪装器应用2116与一个伪装器驱动器2118相关联。例如,伪装器应用2116和伪装器驱动器2118可以是由一个软件供应商供给的部件并能联合完成功能,如下文描述的隐藏或伪装文件功能。
伪装器驱动器2118监视穿过文件系统2114的调用并对其作出反应。除了伪装器应用2116外,在应用层2112中能存在其他高级别应用2119,它们能通过文件系统2114发送调用。这些调用可以发源于例如文字处理或其他应用,或者来自Windows文件管理器环境内部。这里感兴趣的文件系统调用是与“打开”(open)、“找出第一个”(find first)、“找出下一个”(find next)、“删出”(delete)和“重命名”(rename)这些命令相关联的调用。为便于描述,这些命令有时也简单地称作调用。一般而言,感兴趣的操作包括打开文件、找出剩余文件和删除文件的任何基本操作。这样,对于本发明的实施例,作为举例,但不是作为限定,“读”、 “写”和“得到属性”调用被归类于“打开”调用之中,因为与这些调用中的每一个一起,都将产生“打开”调用。类似地,为了演示但不是作为限定,“目录”调用被归类于“找出第一个”和“找出下一个”调用。每个介质装置2120(例如硬盘驱动器、ZIP驱动器、软盘驱动器、带驱动器、可写CD-ROM驱动器或其他固定的或可卸的存储介质)一般有低级别驱动器2122与之关联,这低级别驱动器2122处置与介质装置2120的接口。
在操作中,伪装器或监视驱动器2118得到并分析每个穿过文件系统2114的调用。伪装器驱动器2118能得到对文件系统调用的访问,例如可作为装置驱动器插入文件系统2114而不实际地与一特定装置相关联。使用这一访问,伪装驱动器2118能评定该调用是否是源于伪装应用2116或其他应用2119以及该调用是否是感兴趣的调用,如“打开”、“找出第一个”、“找出下一个”、“删除”或“重命名”。伪装器驱动器2118还能决定是否把该调用传送到与介质装置2120关联的驱动器2122,或者拒绝或放弃该调用,或者改变返回变量或产生一个返回变量而不把该调用下传到其后各层。利用这些操作,伪装器驱动器2118能以如下方式对用户隐藏文件它们将是不可见的,而且将不能被任何应用或Windows系统命令发现。
实现伪装器应用2116来允许用户伪装或隐藏文件。运行伪装器应用允许用户选择希望伪装的文件,然后对这些文件使用伪装操作,其作法是把选定的文件名传送到伪装器驱动器2118,从而把它们添加到伪装器驱动器2118内的一个查寻表或数据库中。最好是要求用户在启动伪装过程前先选择一个口令,而且只有使用这个口令才能允许该用户解除对先前被伪装的文件所做的伪装。该口令又最好与Windows用户口令不同。这样,两个或更多个用户能使用同一计算机硬件,但即使知道存在所存储的文件却只能访问所存储文件的不同子集。用户1能把文件隐藏在该系统上而对用户2保密,反之亦然。不仅文件内容被隐藏,而且文件存在本身也被隐藏,因为在本发明的一个实施例中,被伪装的文件将不会出现在任何目录清单中,而且它们也不能以任何方式被操作系统访问,直至它们被用户解除伪装为止,而用户在解除这些文件的伪装时必须首先输入适当的口令。
作为一种附加的预防措施,在把要伪装的文件名添加到伪装器驱动器的查寻表或数据库之后(或之前)可对被伪装的文件自动加密。在打入正确口令之后,当文件打开时被加密的文件便被解密,而当文件关闭时又重被加密。被伪装的文件当关闭时将保持为被加密的,直至不再希望伪装时为止。当被授权的用户使用伪装器应用2116去掉伪装时(这是通过从伪装器驱动器查寻表或数据库中去掉文件名来实现的),该文件将被自动解密。伪装器应用和伪装器驱动器可以使用许多方式影响加密和解密过程,上面的描述只是一种实施方式。加密的基本有用性源于某些人从软盘引导该系统,从而在不同的操作系统上运行该系统,这意味着伪装器驱动器程序会不被执行。这样,对文件加密使在软盘引导的场合难以(如果不是不可能的话)破译这些文件的内容,从而防止对这些文件的未授权访问。
图23是根据本发明的一种方法实施例的流程图,该方法用于监视对一操作系统的文件系统结构的文件系统调用,和用于控制原始调用或返回的变量。图23的方法是由虚拟伪装器软件驱动器2118实现的,其目的是隐藏或伪装可能存储在介质装置2220上的文件。在一个实施例中,图23的方法能用在Windows95的可安装文件系统(IFS)内执行的一个销售商提供的驱动器(VSD)来实现。
如图23中所示,在步骤2210中,一个文件系统调用被阻断。通常,该文件系统调用是要对存储在介质装置2220上的数据实现某种功能,但在能完成那个功能之前被阻断了。在图23的步骤2212中,确定被阻断的调用的类型是否是应被处理的一种。通常,感兴趣的调用应是调用任何能找到或识别出由该用户或先前的用户伪装过的文件的调用。通过伪装,一个文件不论从用户的角度还是从操作系统的角度都是不可见的,而且不能被访问、改变、修改、删除、列出或者甚至不能被操作系统发现。这样,一旦一个文件被伪装,感兴趣的调用便包括“打开”、“找出第一个”、 “找出下一个”、 “删除”和“重命名”。通常,如果一个文件被伪装,则试图根据被伪装文件采取某些行动的调用或该调用返回的变量便受到控制,以便隐藏或伪装该文件。这种控制可以包括产生一个诸如错误代码之类的返回变量或者如下文中结合图26A-26G解释的其他行动。如果在步骤2212中没有识别出这种调用,则在步骤2214中原始调用被通过该文件系统被传送。如果该调用应被处理,即它是一个感兴趣的调用,则在步骤2216进行对该调用的某种处理,以保证不让该用户知道这个被伪装的文件。具体的处理类型取决于调用的类型,这将结合图26A-26G更充分地解释。
根据本发明,步骤2216的调用处理能对用户和对发出调用的系统应用都透明地实现。在调用处理之后,在步骤2218该调用返回到发出调用的系统应用,例如图22中的应用2119。
图24是Windows95可安装文件系统(IFS)2114的文件系统逻辑分层图。如图3中所示,可安装文件系统被做成多达32个逻辑层,每层含有一个或多个虚拟装置,通过它们传送块装置(block-device)请求。对于典型的硬件,大多数逻辑层是空的。例如,对于硬盘驱动器,一个文件系统请求(或调用)在到达硬件装置的路上通常只经过约5个虚拟装置。
图25是在Windows95操作系统的文件系统逻辑层内的一个典型的文件系统请求链或路径图。如图25中所示,一个典型的路径在IFS管理器2422处开始,并移动到文件系统驱动器2424。然后,该请求移动到一个指定类型的驱动器2426以及在这种情况中的销售商提供的伪装器驱动器2118。在销售商提供的伪装器驱动器2118之后,该请求落在端口驱动器2122和介质驱动器2120(例如硬驱动器或其他存储装置)。该请求在物理级别上完成之后,该请求沿该链向上返回到发出调用的系统应用。
在图24中,左侧的数字代表抽象层,以最小的数字代表较高的抽象层。最顶层是该文件系统的入口点。较高的数字较接近硬件,而最高的数字(低层)代表直接访问硬件的虚拟装置。一个输入/输出(I/O)管理器(IOS)管理那些通过该文件系统层次结构的请求。在这链条上的每个虚拟装置能根据请求所指向的逻辑或物理装置来选择请求。在一个请求沿此链条向上返回应用时,这些装置还能看到请求的结果。再有,在此链条上的虚拟装置驱动器(VxD)能自己对请求提供服务而不把它们传送到较低级别,或者它们本身能产生请求。
过程能在可安装的文件系统的每一级别上发生,但大多数块装置并不需要在此链条的每一级别上有入口。在这逻辑层结构的顶部,IFS管理器层管理来自应用的高级别I/O请求。它采取一个指向特定逻辑驱动器的调用,并沿着正确的向下调用链把该调用传送到适当的卷追踪器(volume tracker)、文件系统驱动器(FSD)等等。卷追踪器对具有相同可卸性规则的装置组进行工作。例如,CD-ROM卷追踪器保证,在其上带有文件系统的CD在该驱动器允许任何请求传到较低层之前处在该驱动器中。文件系统驱动器(FSD)对一种特定类型的所有装置进行工作,例如硬盘或CD-ROM装置。它们取得由IFS管理器产生的输入逻辑请求并把它们翻译成物理请求传送到较低级别。此外,FSD能启动对装置(如盘片)的逻辑错误恢复。
针对类型的驱动器(TSD)对一个特定类型的所有装置进行工作。它们取得由FSD产生的逻辑请求并把它翻译成物理扇区请求。它们通常与相应的FSD驻留在同一层中,但在链条中处于较低的位置。SCSI驱动器(SCSI-izer)是该链条中的下一个,使用SCSI驱动器的原因是SCSI装置需要比其他装置,例如更流行的IDE/ESDI装置,更复杂的请求包。SCSI驱动器取得一个一般的物理请求并创建一个SCSI请求块(SRB),它含有关于该请求的详细的针对SCSI的信息,如逻辑单元号(LUN)和目标(SCSI目标能有多达7个LUN挂断它们)。
销售商提供的驱动器(VSD)为Windows95下的第三方开发商提供一个特殊一层。结果,VSD层的功能由VSD作者确定。传统的用途包括块装置驱动器、低级别第二盘高速缓存(例如在闪烁存储器中的高速缓存)、数据加密以及RAID盘管理。
SCSI端口驱动器取得输入的请求并确定哪个SCSI小型端口驱动器应容纳它们。多种SCSI类型可加载到同一系统上,它们每一个可以要求一个定制的SCSI小型端口驱动器。SCSI端口驱动器还负责初始化小型端口驱动器。SCSI小型端口驱动器(MPD)是SCSI装置的硬件驱动器。它们管理中断以及在I/O端口级与按上文实现请求的装置的交互。它们还能实现针对适配器的错误恢复。
端口驱动器(PDR)(对于非SCSI硬件)实现类似于SCSI端口驱动器和小型端口驱动器的功能。它们提供直接与硬件交互作用的32位盘访问以实现I/O。在Windows95不能提供端口驱动器的某些场合,使用实模式映射器(RMM)。通过提供即插即用BIDS和包括许多针对硬件的端口驱动器,Windows95通常能提供用于大多数盘硬件的32位访问。然而,Windows95可能会在一个带有秘传硬件的老个人计算机上运行,所以它必须允许用于它不能提供端口驱动器以在保护模式下处置盘I/O的场合。一个系统还可能使用实模式盘驱动器软件,它提供Windows95保护模式的对应物中不能提供的功能。对于这些场合,在保护模式虚拟驱动器的链条上的最后一个入口是RMM而不是端口驱动器。RMM向下调用实模式驱动器以实现硬件I/O并沿文件系统链条向上返回结果。实模式驱动器是一个特定的系统的硬件或软件配置所要求的硬件驱动器。然而,不鼓励使用实模式驱动器(10)因为性能会受损(由于从保护模式到实模式过渡所需的开销以及在实模式下较慢的执行速度),但仍允许它们,以具有灵活性和向后兼容性。
通常,文件系统结构的较上层由微软公司写成,作为Windows95的一部分,而较低层由盘驱动器制造商提供。于是,通常为第三方开发商开发使用的层是虚拟供给驱动器(VSD)层。如前面提到的那样,根据本发明,VSD能阻断文件系统调用和进行调用处理,从而保证任何受伪装的文件能对用户隐藏。
在本发明的一个实施例中,一个25销售商提供的驱动器用于阻断文件系统“打开”、“找出第一个”、“找出下一个”、“删除”和“重命名”调用,从而对用户隐藏受伪装的文件。对这些调用的阻断发生在图23的步骤2210。然后在步骤2212识别这些调用,供每次执行步骤2216时进行调用处理。
图26A-26G是进行调用阻断和处理的一个实施例的流程图,该实施例可适用于处理“打开”、“找出第一个”、“找出下一个”、“删除”和“重命名”等调用和返回。系统文件调用阻断在步骤2510中完成。在调用阻断之后,该调用被评估看其类型是否是感兴趣的调用类型。这一评估在步骤2512至2520进行。在步骤2512中,伪装器驱动器确定该调用是否是“打开”调用;在步骤2514中确定该调用是否是“找出第一个”调用;在步骤2516中确定该调用是否是“找出下一个”调用;在步骤2518中确定该调用是否是“删除”调用;以及在步骤2520中确定该调用是否是“重命名”调用。任何“否”的决定沿流程图2512-2520向下走。如果调用不是任何一个感兴趣的调用,则在步骤2522A将调用传送到下一层,这样,该调用得以通过而未被伪装器驱动器2118修改。
如果在步骤2512中确定该调用是“打开”调用,则检验文件名以确定该文件是否是被伪装的。伪装器驱动器18查寻在查寻表或数据库中的文件名,看该文件是否先前已被伪装。如果该文件未被伪装,则伪装器驱动器18在步骤2522A把该调用发送到下一层。如果该文件是被伪装的,则在步骤2532由伪装器驱动器2118产生返回变量,该返回变量传向文件系统管理器并最终向用户表明未找到该文件或已发生某种错误。例如,伪装器驱动器2118可把错误代码设为值2,表明一个“文件未找到”消息,和把返回变量设为“-1”,表明该调用执行失败。作为附加的保护,伪装器驱动器2118把文件句柄设为“NULL(空)”,它向IFS管理器表明该句柄不存在。步骤2532的纯结果不只是防止该文件被打开,而且向用户表明该文件本身在系统中不存在。这样,假定用户对系统中存在的某个文件(例如“SECRET.doc”)有怀疑,则使用“打开”命令访问该文件的任何尝试都被每次在步骤2532返回空句柄和错误消息所击败。
步骤2514检验“找出第一个”调用。如果发现了这个调用,则它被沿着系统各层下传,而在返回时在步骤2542检验所检索到的文件名,看该请求是否已命中了一个被伪装的文件。如果该文件未被伪装,该驱动器进入步骤2522B并把该调用直接沿该链条向上传送到IFS管理器。如果在步骤2542中确定该文件是一个被伪装的文件,则伪装器驱动器2118进到步骤2544并执行“找出下一个”功能。一旦在步骤2546返回,返回变量被检查,再次看所命中的文件是否是被伪装的。如果它不是被伪装的,该程序进到步骤2522B,如前面描述的那样。如果被命中的文件是被伪装的,则程序循环回到步骤2544,再次执行“找出下一个”功能。以这种方式,被伪装文件的名字甚至它的存在都对用户隐藏了,只有第一个找到的未被伪装的文件将显示给用户。
对于“找出下一个”调用,进行与上述类似的步骤。这样,如果在步骤2516中识别出“找出下一个”调用,则在步骤2550该调用沿该链条向下传送并返回该文件名,如果在步骤2552检验的文件名对应于一个被伪装的文件,则在步骤2554沿该链条向下传送另一个“找出下一个”调用而不允许向IFS管理器返回第一个文件名。在步骤2556对这一个“找出下一个”功能的返回结果进行检验,如果它不是指向一个被伪装的文件,则程序进到步骤2522B并把返回结果送到IFS管理器。如果在步骤2556中返回结果标识一个被伪装的文件,则程序又循环到步骤2554,再产生另一个“找出下一个”功能。以这种方式,“找出下一个”功能从不向OS识别出一个被伪装的文件的标识。
“找出第一个”和“找出下一个”调用通常用于列出目录,这样,在流程图中概括的步骤防止被伪装的文件显示在目录清单上,从而有效地隐藏任何被伪装的文件。
步骤2518检验“删除”调用。如果发现了这个调用,则在步骤2560确定所命中的文件是否是被伪装的。如果该文件不是被伪装的,则进行步骤2522A以把该调用向下传到下一层。如果所命中的文件是被伪装的,则通过把错误代码置为2使得显示一个错误消息”文件未找到”,通过把返回代码置为“-1”表明一个失败,并把控制返回给文件系统管理器。以这种方式,用户不能删除所命中的文件,而且的确该系统表现为犹如该文件并不存在——这恰是对伪装文件所希望的结果。
在步骤2520中检验“重命名”调用。如果发现了这个调用,则伪装器驱动器2118进入步骤2570以确定该命中的文件是否是被伪装的。如果该文件不是被伪装的,则在步骤2522A该调用向下传到下一层。如果该文件是被伪装的,则在步骤M产生一个返回变量以把错误代码设为2并返回-1,如在步骤2562中做的那样。
应该理解,伪装器操作是实时进行的,每当用户启动一个过程,而该过程能造成产生“打开”、“找出第一个”、“找出下一个”、“删除”和“重命名”调用之一时,便进行伪装器操作。
如上文指出的对文件调用及返回结果的监视,是由伪装器驱动器2118进行的。通常,这个文件及返回结果是“IFS请求包”的一部分,该请求从IFS管理器向下行进到较低级别的驱动器,而返回结果或返回变量被插入该包并从较低级别驱动器沿链条向上发送到IFS管理器。
对于“打开”、“删除”和“重命名”调用,将图26A-26G中所示的原理扩展到WindowsNT环境是直接了当的。然而,对于“找出第一个”和“找出下一个”,则需要更多的处理去管理索引缓存器,所返回的索引缓存器用于描述目录中的文件清单。NTFS文件系统以事务处理数据库方式运作,并对其文件编排索引以用于快速查寻和显示。这种索引是预制的。这样,为了伪装文件,一旦索引运行被返回到伪装器驱动器,这些文件必须从存储器段中去掉。
图26A-26G所示本发明实施例基本上防止了操作系统用户知道任何被伪装文件本身的存在。然而,在某些应用中,可能希望允许用户列出目录中的被伪装文件,但却不能访问这些文件。该文件被称作禁止访问的。实质上,用户被拒绝有效地访问该文件,即用户只能通过观看目录清单中的名字得知该文件的存在。在这一实施例中,目录列表不是由口令保护的,但除了查看以外对该文件的访问是由口令保护的,从而只允许具有访问权限的人才能访问这些文件。在这一实施例中,被伪装的文件最好加密,以保证该文件的内容是不可得到的。这样的实施例可应用于允许任何人计算机或存储装置搜索敏感文件而不必害怕这些敏感文件可被掩护操作者访问。
本发明上述实施例的实现仅需要在步骤2514和2516中分别去掉“找出打开”和“找出下一个”调用。以这种方式,目录列表将是可能的,但打开、删除和重命名过程将是不允许的。
本发明的又一实施例利用可以应用于给定过程或应用的许可或限制,以及可应用于该应用内选定过程的许可或限制。该文件称作限制使用的。例如,人们可利用本发明的这一实施例去允许文字处理程序读出一个文件以及编辑和复制一个文件,但不能删除一个文件。
在这个实施例中,图26A-26G的监视系统将被修改成除了步骤2518、2560、2522A和2562中的删除调用监视外去掉所有其他调用监视。增加的一个逻辑查询将要确定所监视的调用或请求包是否含有一个指定的文字处理应用,例如Word。如果伪装器驱动器确定这发请求的应用是Word,而且从文件系统管理器发出了删除命令,则序列将分支到对删除的监视步骤2518、2560、2522A和2562。以这种方式,本发明的这个实施例不去伪装一个文件,相反,将对该文件的使用限制于至少是在给定应用中通常可用的一个特性。
伪装器应用2118允许用户选择(取消选择)哪些文件要存储到伪装器驱动器2118的数据库或查寻表中(从数据库或查寻表中去掉)。伪装器应用2116还提供一个用户界面供插入用户口令、加密选项以及可用于伪装的、禁止访问的和限制使用的操作方式的其他类型许可。伪装器应用在开始时列出选定目录中的所有文件并允许用户突显(highlight)那些希望被伪装的文件。这突显作用有效地选择要被伪装的文件。通过送入“选择”(按回车键或在对话框中的“o.k.”指令),用户使选定的文件存入伪装器驱动器数据库或查寻表。最好要求用户输入口令,从而使用户以后能去掉对文件的伪装或添加新的要被伪装的文件。口令可在开始时送入,也可在文件选择之后送入,但无论如何要在用于监视来自文件系统管理器的调用的程序执行之前送入。为了去掉对文件的伪装,用户再送入他的口令,该口令由伪装器应用认出,然后该应用提取出列在伪装器驱动器数据库(或查寻表)中的文件名,从而使它们最好可在通常的目录列表命令过程中显示出来。在文件清单中使用突显或其他手段使被伪装的文件区别出来,使得用户知道哪些文件要取消选择,从而从数据库或查寻表中去掉它们,从而取消对它们的伪装。与此同时,还可以选择其他文件以便进行伪装、禁止访问和/或限制使用。
对于每个文件,可以使用来自伪装器应用的GUI的对话框或其他输入,选择伪装、禁止访问和限制使用等方式。程序流在每个文件的基础上执行每种方式。这样,文件A和B可能是被伪装的,文件可能是被禁止访问的,而文件D和E可能是限制使用的。方式/文件组合的初始选择是使用应用程序在文件/方式选择过程期间由用户做出的。在另一种操作方式中,要被隐藏的文件不需要由操作系统的用户来选择,而是可以由销售某一应用供在操作系统上安装的第三方销售商来预先选择。第三方销售商可能希望保持某些数据或。exe文件不被操作系统用户意外删除,而同时又让这些文件可被该应用程序访问。例如应用X可能含有文件Y和Z,销售商想使它们被伪装,即使其对于操作系统而言是不可见的,除非应用X想访问。在这种情况中,应用X含有一个伪装器驱动器,它相对于操作系统伪装文件Y和Z,但对应用X不伪装它们。这一操作基本上是对文件Y和Z的限制使用。如果应用X试图访问文件Y和Z,则操作系统能通过文件管理器提供完全的访问和使用许可。如果用户试图在应用X之外得到任何类型的访问,则这些行为被拒绝,操作系统的行动就如这两个文件并不存在(即它们不能被找到)。除防止一个文件被用户意外删除之外的一个应用是禁止一个文件被用户复制。这一应用对于许多应用是重要的,例如在因特网上分发音频和视频内容文件的那些应用。在这种情况中,应用A能“播放”被伪装的文件,因为应用A有使用许可。然而,该用户却不能通过操作系统的文件系统管理器去管理文件(移动、复制、重命名、删除、目录列表)。
当然,可以利用伪装器驱动器给用户某些使用许可而不是通过应用A,例如目录列表和删除命令,但禁止其他命令,以防止该文件在因特网上复制或再传送。
本发明各种实施例的伪装器驱动器可通过因特网下载给用户或者通过CD提供给用户。在下载的情况中,该程序存储在一个服务器存储器中并沿着通常的电子商务路径下载。
如前文解释的,伪装或隐藏文件防止文件被列出在目录清单上,或者是防止计算装置的操作系统访问该文件。这样,文件可以不被打开、删除、重命名或被计算机操作系统的文件系统访问。伪装器驱动器识别来自文件管理器的调用或到文件管理器的返回。这里调用和返回至少与指定的文件标识数据相关联,例如与文件名关联。这种关联可以是对调用或返回包中的文件名的直接对照,或者是对指针的间接对照,这些指针又去标识文件名或标识数据,从而唯一地标识该文件。以这种方式,要被拒绝的操作(打开、找出第一个、找出下一个、删除和重命名)可以唯一地与指定文件关联,该文件的标识可针对伪装器驱动器或查寻表来检验,从而只把拒绝加到选定为被伪装、禁止访问或限制使用的那些文件上。
下面说明根据本发明的一个打包器(packager)的最佳实施例。如前文指出的那样,打包器12最好与一个客户机或接收器14一起操作。
当前技术的一个已知问题是电子消息的作者不能对该消息经网络传送之后它所发生的情况保持控制。例如,接收者可能把该消息再传给其他用户,打印该消息,存储该消息供以后查看,或者把该消息复制到剪切板上。作者可能不想让一个敏感的电子邮件或消息传到第三方,或者把消息的副本存储或打印供将来参考。然而,当前技术不能完全解决这一需要。
某些电子邮件程序允许作者把一消息指定为“私人的”。这一设置限制接收者修改原始消息并将作者传送的消息以修改过的外貌转发给第三方的能力。然而,这一设置并不限制接收者以该消息的原始形式转发、复制到剪切板、存储或打印该消息的能力。
在电子和数字通信领域需要有一种方法和装置,它允许作者设置通信许可,该许可限制接收者使用所传信息的能力。再有,还需要一种方法和装置,它允许作者保证只有预期的接收者能收到该消息。本发明解决这一需要,即提供一种方法和装置用于产生一个加密的数据包,它包含数据文件、一个唯一的标识、以及一个或多个控制该文件使用的许可。该包还可以含有接收者的唯一标识以及在一收到该包之后要安装在接收者计算机系统上的客户机软件包。
本发明的另一种方法对上述方法添加如下步骤在有操作系统的客户机计算机系统上接收计算机可执行文件并在客户机计算机系统上执行该计算机可执行文件。执行该文件包含的步骤有确定该操作系统是否是一个可兼容的操作系统,如果是,则在客户机计算机系统上执行一客户机软件。该客户机软件的执行创建一个客户机许可数据库和在客户机计算机系统上的一个存储库(vault)。在执行该客户机软件之后,该方法进一步包含确定被加密包是否有效的步骤,如果是的话,把该包全局唯一标识(global unique identifier)记录在客户机许可数据库中,从数据包中提取数据文件和一个或多个许可,把数据文件存入存储库并把这一个或多个许可存入客户机许可数据库。如果该包不是有效的,则该方法在这计算机可执行文件中设置一个状态,指明该包被安装了。
现在参考图27,图中显示根据本发明的一个最佳实施例传送信息包的系统的方框图。打包器2612产生一个计算机可执行程序,例如“package.exe”2614,用于在网络2616上向客户机计算机系统2617传输供客户机访问。该计算机可执行文件2614包含一个由打包器2612收集的信息包。
根据本发明的一个实施例,信息包包括数据文件2618和许可数据库2620。在本发明的另一实施例中,信息包进一步包括加密软件2622和可选的但不是必须的客户机软件2624。最好是,该客户机软件有一个版本指定。打包器2612为每个信息包产生一个包全局唯一标识(PGUID)并把它包括在信息包中。在一个最佳实施例中,该信息包,包括PGUID在内,被加密软件2622加密。PGUID可以是例如一个字母数字符号字符串。
根据本发明的一种方法,打包器2612接收数据文件2618和许可数据库2620。许可数据库2620有一个或多个可由作者配置的许可,它们与数据文件2618关联,用于控制数据文件2618的使用。这些许可的一个功能是限制数据文件2618的共享。可由作者配置的许可的示例包括访问计数、访问时间、期满日期、授权日期、剪切板许可、打印许可、无限访问许可、应用许可、以及系统事件许可。
访问计数许可指定可允许用户访问数据文件2618的次数。在一个实施例中,一个访问计数定义为允许该客户机计算机系统2617上的一个过程在该过程的生命期访问数据文件2618。访问时间许可指定客户机可访问一个文件的时间总量。一旦客户机计算机系统2617上的一个过程打开数据文件2618,该访问时间便被减量,直至该过程终止,或者,如果在该过程终止之前访问时间已完全用完,则该过程自动被终止。
期满日期许可指定该数据文件将不再能被访问的日期。在期满日期发生之前,客户机将有对该文件进行无限访问,但以数据文件2618上的任何其他许可为条件。如果在客户计算机系统2617上的任何过程在期满日期让数据文件2618打开,则该过程自动被终止。在期满日期,该文件的内容被覆盖并被删除。最好是这个期满日期许可也从许可数据库中去掉。
授权日期许可指定一个日期,在那一天该数据文件2618将变为可访问的。以对数据文件2618的其他许可为条件,一个用户在该日期过去之前将不能访问数据文件2618。所有这些访问许可以被独立地或组合地配置和生效。
剪切板许可指定客户机能否把数据文件2618或者该文件的一部分复制到例如Windows剪切板上。剪切板许可还可被配置成防止客户机把该数据文件转发到另一计算机系统。打印许可指定该客户机能否打印数据文件2618。无限访问许可保证客户机对数据文件2618进行无限访问。数据文件2618最好是只读的,它允许具有无限访问许可的客户机以无限时间量查看数据文件2618。然而,该客户机将不被允许进行任何更多的事情,除非有其他许可伴随该数据文件2618,例如打印许可和剪切板许可。
应用许可确定一个应用清单上的一个或多个应用是否正在客户计算机系统2617上运行,如果这些应用之一正在运行,则使其不能访问该数据文件。另一种作法是,如果这些应用之一没有在运行,则应用许可可以使该数据文件不能被访问。系统事件许可分析客户计算机系统2617以确定已发生了哪些系统事件并根据已发生的系统事件确定是否允许访问数据文件2618。
在一个最佳实施例中,打包器2612能规定一个口令以限制对该包的访问。在客户向客户机计算机系统2617送入适当的口令之前,该信息包将不能被访问。在另一实施例中,打包器2612可以接收一个接收者的全局唯一标识(RGUID)并把它包括在信息包中。RGUID标识的客户是作者希望向其传送数据文件2618的客户,RGUID可以由作者手工送入该包或者从存储在打包器2612中的客户清单中选择。
该信息包被链接在计算机可执行文件2614中供在网络2616上传送给客户计算机系统2617。
现在参考图28A-28B,图中显示根据本发明的一个实施例在产生计算机可执行文件2714之后传送信息包的方法。根据这一方法,包含实现本方法的代码的计算机可执行文件2714在客户机计算机系统2717上执行,步骤2730。在信息包受口令保护的实施例中,客户被提示送入口令。在步骤2732中,客户机计算机系统2717确定该操作系统是否是一个可兼容的操作系统。如果该操作系统不是可兼容的,则该包被删除和覆盖,步骤2734。可兼容的操作系统包括但不限于Windows95、98、NT和2000。可选地,如图28的步骤2736中所示,客户机计算机系统2717确定是否第二个信息包已被加载到客户机计算机系统2717上,如果是,则在步骤2738终止这第二包。在步骤2740,系统2717确定是否安装了客户机软件2724。如果未安装客户机软件,则从该包中提取出客户机软件2724并安装到客户机计算机系统2717上,步骤2742。如果已安装了客户机软件,则系统2717将包中客户机软件的版本与所安装软件的版本进行比较,步骤2744。如果在该包中的客户机软件版本迟于系统2417上已安装的版本,则通过从该包中提取较新的版本并将它安装在系统2717上来更新已安装的客户机软件,步骤2742。在另一实施例中,可从该包中提取客户机软件2724并进行安装,而不检验所安装的版本。
在步骤2748中,执行客户机软件2724,从而在客户机计算机系统上建立一个客户机许可数据库和一个存储库。该存储库是与操作系统充分集成的虚拟盘环境,但又与操作系统隔绝,从而能实现新的操作规则并能在其中检验数据文件,而不会危及整个系统。在图28所示实施例中,客户机软件2724包含一个或多个装置驱动器和一个或多个Win 32模块,它们是在执行该软件时安装到客户计算机系统2717上的,步骤2750。装置驱动器或Win 32模块中至少有一个创建客户机许可数据库和存储库,步骤2752。在一个最佳实施例中,Win 32模块装置驱动器是修改的Win 32可执行驱动器。装置驱动器和Win 32模块还实现软件2724的其他功能,例如确认许可结构是否已被改变。一旦加载了所有装置驱动器和Win 32模块,它们被伪装,部分地是为了防止黑客进入存储库,步骤2754。在安装客户机软件之后,操作系统被修改,以便当系统2717被加电时修改的Win 32可执行驱动器能被自动地初始化。
至少一个装置驱动器与计算机可执行文件2714通信。在一个实施例中,Win 32模块之一接收一个查询该信息包的请求,步骤2756。然后该Win 32模块确定该信息包是否是受口令保护的,步骤2758,如果是,则向该客户询问口令,步骤2760。如果该包不是受口令保护的,或者它是受口令保护的且在步骤2762送入了正确的口令,则该Win 32模块确定该包是否有效,步骤2764。如果该包是有效的,则把数据文件吸收到存储库中,把一个或多个许可存储到客户机许可数据库中,并且用PGUID更新该客户机许可数据库,步骤2766。
最好是,通过读取该包中的PGUID并对此PGUID检验客户机许可数据库来确定一个包的有效性。如果在客户机许可数据库中存在这个PGUID,说明该包已在另一个时候被接收到存储库中,因此该包是无效的。如果发生这一情况,则设置计算机可读文件2714中的一个状态,以指出该包已经被安装。设置这一状态可以是例如改变一个数据位或设置一个标志。如果该PGUID不在客户许可数据库中,则该包对于存储库是新的,因而是有效的。
在有一个RGUID在信息包中的实施例中,一个包的有效性通过检验客户机许可数据库查找RGUID来确定。如果在客户机许可数据库中存在这个RGUID,则该包是预期给予接收该包的客户机的,因此该包是有效的。如果这个RGUID不在客户机许可数据库中,则表明该包不是预期给予该客户机的,于是计算机可执行文件2714被删除并被覆盖,步骤2868。
在数据文件被吸收到存储库中之后,客户机软件2724最好通过装置驱动器之一来删除和覆盖计算机可执行文件2714。
在一个实施例中,在该包被确定为有效之后,但在把数据文件吸收到存储库中之前,装置驱动器询问客户机以建立与存储库中数据文件的关联。该关联优选一个文件,最好是一个“标志”文件,它实质上是一个零字节长的文件。客户机能以传统的方式给该文件命名。对客户机而言,该文件看起来是代表存储库中的实际数据文件,但它不是。如果该客户机访问该标志文件的属性,则一个对话框显示出与该数据文件关联的一个或多个许可。
一旦已选定一个文件名,而且客户机已破译该数据并将其传送到存储库中,该数据便可通过打开数据文件进行访问。这可由任何用户指定的过程完成。如果该用户双击该文件,与那个文件类型相关联的应用便自动启动并试图通过一个调用过程打开该文件。客户机软件2724阻断这个调用过程并对该调用过程进行安全检查。安全检查确认该调用过程未在数据文件内建立数据空洞(hole)来“泄漏”数据。“泄漏数据”的意思是把数据传送到希望对数据保密的系统之外。对于数据安全性重要的应用,需要限制数据泄露。
如果调用过程通过安全检查,则向客户显示一个对话框以确认该客户对该数据字段的请求。显示出含有一个或多个许可的许可集,并向客户展现任何警告以求认可。警告包括例如一旦该数据字段被访问,所有未保存的数据将会丢失。一旦客户同意,如图27所示,客户计算机系统2617的环境便强烈地改变。在系统2617上运行的任何过程都将不能修改系统2617上的任何东西。在访问该数据文件的过程退出或被例如过期许可终止之前,这些限制将保持在那里。
另一种保护机制是针对骗术的,这里将对此进行描述。
数据安全是计算机用户和知识产权所有者严重关切的问题。越来越普遍地使用诸如加密等措施来对保护数据文件,以防止数据丢失或未授权的行动。
已知受保密的文件,例如加密的文件,是和未保密的文件并排存储在同一文件系统中的。加密的文件象任何其他文件一样出现在文件目录中,并带有相关的文件属性,如名字和大小。然而,在解密之前文件中包含的数据对用户应用是难懂的。再有,加密过程可能使文件的大小变得大于或小于原始的未加密文件。在这种情况中,要文件系统确定该文件大小的请求不会可靠地返回该原始数据的真实大小。从用户的角度看,这类数据安全性缺乏所希望的透明性特点。
还知道可把受保密的文件存储到与普通文件系统分开的特殊物理的或虚拟的位置。这种位置可以包括远程连网装置,加密的或受口令保护的文件系统,或其他虚拟的受保密的文件系统。这类数据安全性防止用户在单一文件目录中将受保密的和不受保密的文件自由地相互混杂,即使这些文件可能在逻辑上是相互关联的。虽然用户可以在未受保密的目录中设置与另一位置中的受保密文件的符号链接或快捷方式,但对被授权的人员而言,这种作法给方便地访问受保密数据的过程平添了一层不希望的困惑和努力。
还应该理解,这里所用的术语“装置驱动器”或“驱动器”包括直接或间接访问或控制硬件装置的任何一组计算机可实施指令,包括但不限于装置驱动器、虚拟装置驱动器(VxD)、使用NT内核方式体系结构的指令组、使用Win 32驱动器模式(WDM)的指令组、以及其他指令组,它们可以以任何计算机语言针对任何计算机、计算机体系结构、网络或操作系统写成。
这里所用的术语“信息”和“数据”每个都要包括另一个的最广义定义,而且每个包括文本、音频和视频数据。进一步的例子是,术语“信息”可指原始数据、处理后的数据、或原始数据与处理后数据的组合。
虽然图中所示实施例包含一个为演示目的而描述的装置驱动器,称作“文件系统监视器”,但这里所用的术语“文件系统监视器”通常是指使用本发明的文件骗术的任何类型装置驱动器。本发明范围内的装置驱动器可以实现一个装置驱动器可实现的任何种有用的功能,包括但不限于通用目的的监视、许可监视、过滤、加密、解密、病毒检测、数据镜象、指向任何装置的I/O功能以及其他功能,而且不限于监视或者与文件系统有关的功能。任何实现文件骗术的装置驱动器都正好落在本发明的范围之内。
本发明的一个实施例可以在Windows9X操作系统上实现。现在参考图29,Windows9X操作系统的组成部件在用户方式代码2800和内核方式代码2830之间分割,它们提供不同级别的系统保护。对于一个实施例,用户方式代码2800包括一个能运行16位和32位软件应用2821-2822的系统虚拟机2820和多个MS-DOS虚拟机2825。在这个实施例中,内核方式代码2830包含低级别的操作系统服务和虚拟装置驱动器,如虚拟机管理器2840,本发明的文件系统监视器2850以及可安装文件系统管理器2860。
在可安装文件系统管理器2860的下面是用于如FAT和NTFS文件系统的多个文件系统驱动器2870-2872。在文件系统驱动器2870-2872下面的是块I/O子系统2880。块I/O子系统2880包括一个I/O监督器2881,它管理那些通过文件系统分层结构传送的请求,还包括一个用于端口I/O的单片式驱动器2882,以及分层的多个装置驱动器2883-2884。
在这个实施例中,在来自用户方式代码2810的以及来自以用户方式2810运行的应用2821-2822的I/O请求被送到可安装的文件系统管理器2860之前,第一装置驱动器2850阻断所有这些I/O请求。第一装置驱动器2850能监视和过滤(如果希望过滤的话)在可安装文件系统管理器2860、文件系统驱动器2870-2872以及块I/O子系统2880中发生的所有文件系统活动。借助系统初始化过程中对IFSMGR InstallFileSystemApiHook的调用,在操作系统启动或重启动时,第一装置驱动器2850被钩连到这类调用中,在此时它在功能上被插入到所有文件系统请求堆栈的最上层位置。从可安装的文件系统管理器2860向下穿过多个分层驱动器2883-2884中的每个驱动器,一个I/O请求从最高级别传送到最低级别,而当一请求的结果沿这堆栈向上传回到该I/O请求的源头时,这些装置还能看到这个请求结果。在该堆栈上的每个装置驱动器可以自己服务于一个I/O请求而不把它传送到较低级别,或者如果希望的话它本身产生一个新的I/O请求。这种装置驱动器可以实现那些需要等待的功能,如等待一个中断或等待一个装置变为可用的。在这种等待过程中,装置驱动器只是简单地返回到它的调用者,允许发出调用的应用或装置驱动器与此I/O请求平行地进行其他工作。另一种作法是,发出调用的应用或装置驱动器可以简单地等待(“锁住”)直至I/O请求完成。
在另一实施例中,参考图30所示,本发明可以在WindowsNT操作系统上实现。如本技术领域所熟知,在WindowsNT下以用户方式运行的应用2900可以向操作系统服务2910发送I/O请求。I/O管理器2920接收I/O请求,并在各驱动器之间协调I/O请求包的传送。在另一种作法中,各驱动器可以彼此直接通信,无需使用I/O管理器2920或其他装置来协调各驱动器之间的信息传送。
如WindowsNT这类操作系统的传统输入/输出系统包含多个装置驱动器2930-2932用于处理I/O请求。这种装置驱动器由例如文件系统驱动器2930和分层的多个装置驱动器2931-2932来加以说明。I/O管理器2920通常向负责管理I/O请求目标的文件系统驱动器2930发送I/O请求包。然而,如本技术领域所知,文件系统监视器2850能以面向对象的方式附加在其他装置驱动器2930-2932上。于是,I/O管理器2920把对目标装置驱动器2930-2932的I/O请求包引导到已附着在目标装置驱动器2930-2932上的文件系统监视器2950。在所示实施例中,文件系统监视器2950附着在这多个文件系统驱动器对象2930的每一个上。
图31是在文件系统监视器2950中使用文件骗术以提供数据安全性的一种方法的实施例流程图。
如图31中所示,每次检测到文件系统请求时,本发明的文件骗术过程在步骤3000中启动。在步骤3010,该过程确定该文件系统请求是否涉及采取了骗术的文件。步骤3010中的确定是对指定一被命名文件作为请求对象的任何文件系统请求完成的。这种文件系统请求包括打开文件用的FILE_OPEN、删除文件用的FILE_DELETE以及对文件重命名用的FILN_RENAME。在WindowsNT操作系统中,这种文件系统请求还包括查询文件信息用的FILE_QUERY_INFORMATION以及设置文件信息用的FILE_SET_INFORMATION。这些调用每个都要求指定一个文件名。在步骤3010的确定中,检验指定的文件名以确定它是否是一个被实施骗术的文件。
被实施骗术的文件是这样一个文件,通过把数据放在一个受保密的位置已使该文件受到保密,在那里这种数据不能真正被用户访问,例如,作为举例但不限于,放在一个受保密或被加密的虚拟文件系统中,而同时在该文件系统的用户可访问部分中维持一个标志文件作为占位者。为节省盘空间,标记文件的长度可以是零字节。在一个实施例中,从用户的角度看,标志文件透明地表现为含有受保密的数据,而文件施加骗术过程将使任何文件系统请求到达受保密的文件位置。
为确定一个文件是否是被施加骗术的文件,该过程针对所有被施加骗术的文件的数据库来检验文件名,而且如果该文件是一个被施加骗术的文件,则该过程确定与该标志文件关联的受保密的文件。在另一个实施例中,该过程可以依靠标志文件中存储的数据。
如果步骤3010的确定是该文件请求涉及一个被施加骗术的文件,该过程在步骤3011继续,并完成该文件系统请求。在一个实施例中,该过程调用下一个较低的驱动器来完成对那个标志文件的文件系统请求。在另一个实施例中,该过程重写文件系统请求,使得指向受保密的文件而不是标志文件,并调用下一个较低的驱动器来完成对那个受保密文件的文件系统请求。
过程在步骤3012继续,在步骤3012修改文件系统调用所返回的信息。诸如文件大小等文件属性是由文件系统请求返回的信息的组成部分。过程从返回信息中去掉关于标志文件的选定文件属性,代之以相应的受保密的文件的文件属性。例如,那里标志文件的文件大小为零,而用户将代之以看到相应的受保密的文件的文件大小。
然后过程在步骤3040结束。
回到步骤3010,如果步骤3010确定的是该文件请求不涉及被施加骗术的文件,则过程在步骤3020继续并确定该文件系统调用是否涉及一个可能会返回被施加骗术的文件的目录调用。在Windows9X中这类文件系统请求包括找出第一个匹配文件用的FIND_OPEN和FIND_FIRST,以及找出下一个匹配文件用的FIND_NEXT。在WindowsNT操作系统中, 这类文件系统请求包括DIRECTORY_CONTROL,它提供一个匹配文件名缓存区。
如果步骤3020确定的是该文件系统请求涉及一个可能会返回被施加骗术的文件的目录调用,则过程在步骤3021继续并完成该文件系统调用。在一个实施例中,该过程调用下一个较低的驱动器来完成对标志文件的文件系统请求。在另一个实施例中,该过程重写文件系统请求,使得指向受保密的文件而不是标志文件,并调用下一个较低的驱动器来完成对那个受保密文件的文件系统请求。
过程在步骤3022继续,在步骤3022确定由文件系统调用返回的信息是否指向任何被施加骗术的文件。找出第一个匹配文件或下一个匹配文件的请求每个将返回单一文件。向WindowsNT文件系统对目录控制的请求则返回一个文件名缓存区,其中每个文件都必须考虑。如果没有返回被施加骗术的文件,则过程在步骤3040结束。
如果返回了任何被施加骗术的文件,则过程在步骤3025继续,在那里修改文件系统请求所返回的信息。诸如文件大小等文件属性是由文件系统请求返回的信息的组成部分。过程从返回信息中去掉标志文件的选定文件属性,代之以相应的受保密的文件的文件属性。例如,那里标志文件的文件大小为零,而用户将代之以看到相应的受保密的文件的文件大小。然后过程在步骤3040结束。
回到步骤3020,如果步骤3020确定的是该文件系统请求不涉及可能返回被施加骗术的文件的目录调用,则过程在步骤3030继续并完成该文件系统请求,并在步骤3040结束。
所以,应该理解,本发明可以受到许多不同的变化和组合,不限于本申请中所示特定实施例。此外,还应该理解,在各实施例中公开的每一段都不需要在单一实施例中提供,相反,能以所希望的若干段的任何所希望的组合来提供。还应该理解,根据本发明的系统可由专用硬件或由传统的通用计算机硬件或由它们的任何组合来整体构成或部分地构成,其中的任何部分可由适当的程序控制。任何程序可以整体地或部分地以传统方式构成一个系统的组成部分或存储在一个系统中,或者保持整体或部分地通过网络或其他以传统方式传送信息的机制提供到该系统中。因此,应该理解,上面对本发明的描述可以受到本领域技术人员的相当大的修改、变化和修正,而这类修改、变化和修正应该认为是在所附权利要求中提出的本发明范围之内。描述过本发明之后,本领域的技术人员将会清楚,本发明可以以许多方式改变而不离开本发明的精神和范围。任何的和所有的这些修改都被认为是包括在下述权利要求的范围内。
权利要求
1.保持数据安全性的一种方法,包含创建一个包,其中包含数据和一个或多个限定数据使用的许可;以及提供一个接收器用于处理该包和把该数据存储在一个存储库(vault)中。
2.根据权利要求1的方法,这里处理包的步骤进一步包含打开该包并确认处理该包的接收器。
3.根据权利要求2的方法,进一步包含查找至少一个用于读该包的驱动器。
4.根据权利要求1的方法,进一步包含检测所述一个或多个许可的违犯情况(violation)。
5.根据权利要求4的方法,其中提供接收器的步骤进一步包含提供内部安全性。
6.根据权利要求5的方法,其中该内部安全性包含建立一个与数据对应的标志文件并把针对该数据的标志文件映射到一个虚拟表中,该虚拟表包括数据的实际文件名和标志文件的相应标志名,其中虚拟表和数据存储在存储库中。
7.根据权利要求5的方法,其中提供内部安全性的步骤包含为至少一个存储库标识出一个对应于原始位置的锚定地址,标识出一个用于读该包的驱动器和一个存储这些许可的数据库,把这些地址组合到一起以提供一个限定系统操作的键(key)并标识出何时该键将不再操作。
8.根据权利要求5的方法,其中建立包的步骤进一步包含一个可执行程序,用于该包被打开时核实接收器的操作。
9.根据权利要求5的方法,其中内部安全性包含对注册表(registry)的监视,包含向发出调用的过程请求注册表键操纵柄;请求该操纵柄的注册表键值;以及得到安全性权限(clearance)以完成这些请求。
10.权利要求9的方法,在向发出调用的过程请求注册表键操纵柄之后,进一步包含确定一个过程ID和注册表键;通过检验受保密过程清单,确定该过程是否是受保密的;如果该过程是受保密的,则确定该注册表键是否在一个拒绝清单上;如果该注册表键是在该拒绝清单上,则拒绝该过程对注册表键的访问;以及如果该过程不在受保密清单上或者如果该注册表键名不在该拒绝清单上,则完成该请求。
11.权利要求9的方法,在请求操纵柄的注册表键值之后,进一步包含确定一个过程ID和注册表键值;通过检验受保密过程清单,确定该过程是否是受保密的;如果该过程是受保密的,则确定该注册表键是否在拒绝清单上;如果该注册表键是在该拒绝清单上,则拒绝该过程对注册表键值的访问;如果该过程不在受保密清单上,则完成该请求;如果注册表键不在拒绝清单上而该过程在受保密过程清单上,则处理该值请求并确定该值是否在拒绝清单上;如果该值不在拒绝清单上,则允许完成该请求;以及如果该值在拒绝清单上,则拒绝对注册表键值的访问。
12.权利要求9的方法,在修改和删除操纵柄及值之后,进一步包含确定一个过程ID;通过检验该过程是否在受保密过程清单上来确定该过程是否是受保密的;如果该过程不在受保密过程清单上,则完成该请求;以及如果该过程在受保密过程清单上,则不允许完成该请求。
13.根据权利要求5的方法,其中提供内部安全性的步骤包含监视共享存储器的方法,包含提供一个调用,用于为发出请求的过程预约一存储器页面;根据该页面能否被共享来过滤这一预约调用;提供一个调用,用于为发出请求的过程或以后发出请求的过程提交该存储器页面;以及根据该页面是否能被共享以及该过程能否是被保密的,过滤这一提交调用。
14.权利要求13的方法,其中过滤预约调用包含根据请求参数确定该页面能否被共享;如果该页面不能被共享,则允许完成该请求;以及如果该页面能被共享,则通过建立记录和把记录送入共享存储器清单来跟踪该预约调用。
15.权利要求14的方法,其中该记录包括过程ID、页面号和共享计数。
16.权利要求13的方法,其中过滤提交调用包含通过访问共享存储器清单,确定该页面是否被另一过程共享;如果该页面是被共享的,则通过访问受保密过程清单确定这两个共享过程中是否有任何一个是受保密的;如果有任何一个过程是受保密的,则不允许页面共享;如果这两个过程都不是受保密的,则建立新的共享存储器记录,更新共享该页面的过程的共享计数,并用这新记录中含有的信息更新共享存储器清单;以及如果该页面不是被共享的,则完成提交请求。
17.权利要求16的方法,其中该记录包括过程ID、页面号和共享计数。
18.权利要求13的方法,进一步包含提供一个调用,以释放所有地址空间的存储器页面;通过检验受保密过程清单,确定该过程是否是受保密的;如果该过程是受保密的,则覆盖写该页面以删除受保密的数据,并删除共享存储器清单中页面号与被覆盖写的页面相同的所有记录;以及如果该过程不是受保密的,则从共享存储器清单中删除其页面号与不受保密过程页面相对应的所有记录。
19.根据权利要求5的方法,其中提供内部安全性的步骤进一步包含存储库提供步骤,即提供一个存储库系统用于隔离存储库数据与其他系统数据;以及文件系统安全驱动器提供步骤,即提供一个文件系统安全驱动器,该驱动器阻断文件系统调用,并对所述被阻断的文件系统调用中的每个特定调用,确定所述被阻断的文件系统调用的所述特定调用是否是来自一个访问所述存储库的过程,如果所述被阻断的文件系统调用的所述特定调用是来自一个访问所述存储库的过程,则允许该文件系统调用只在所述存储库系统内创建或修改数据。
20.权利要求19的方法,其中所述提供文件系统安全驱动器的步骤进一步包含一个文件打开处理步骤,用于所述被阻断的文件系统调用的每个特定调用,该调用是一个文件打开调用,包含如下步骤确定所述文件打开调用是否是对所述存储库数据当中的数据进行的请求;以及如果所述文件打开调用是对所述存储库数据当中数据的请求,则对作出所述请求的该过程进行检验,看所述过程是否已经是一个先前打开了所述存储库数据当中的所述数据的受保密过程,如果是,则允许访问所述存储库数据,并对作出所述请求的过程进行访问检验,然后处理该请求,即如果通过了所述访问检验,则允许访问所述尚不是受保密过程的过程,但如果没有通过所述访问检验,则根本不允许访问;如果所述文件打开调用不是对所述存储库数据当中数据的请求,则对作出所述请求的过程进行检验,看所述过程是否已是一个受保密的过程,如果作出所述请求的过程不是一个受保密的过程,则把该请求传送到操作系统上,如果作出所述请求的过程是一个受保密的过程,则确定所述文件打开调用中所指的文件是否存在,如果存在,则打开该文件供只读,如果它不存在,则在所述存储库数据中创建该文件。
21.权利要求20的方法,其中通过允许访问先前未被允许访问存储库数据的所述过程,对请求进行的处理包含如下步骤询问用户以确定该用户是否想要打开所述存储库数据当中的数据,并且只有当所述用户想要打开所述数据时才打开所述存储库数据当中的所述数据。
22.权利要求21的方法,其中通过允许访问先前未被允许访问存储库数据的所述过程对请求进行的处理包含如下步骤记录所述被允许的访问并监视全部被允许的访问。
23.权利要求20的方法,其中通过允许访问先前未被允许访问存储库数据的所述过程来对请求进行的处理包含如下步骤把作出所述请求先前未被允许访问存储库数据的所述过程记录在被允许访问所述存储库数据的过程清单中。
24.权利要求20的方法,其中在所述存储库数据中创建所述文件的所述步骤包含如下步骤向所述受保密过程发送一个代替(stand-in)文件操纵柄;创建一个相应的存储库文件操纵柄;以及存储所述代替文件操纵柄和所述相应的存储库文件操纵柄。
25.权利要求20的方法,其中打开所述文件供只读的所述步骤包含如下步骤修改所述文件打开调用的任何文件请求标志,这些标志指出允许对该文件进行修改;以及把所述修改过的文件打开调用传送到所述操作系统。
26.权利要求19的方法,其中所述文件系统安全驱动器提供步骤进一步包含一个文件读/写请求处理步骤,用于所述被阻断的文件系统调用的每个特定调用,该调用是一个文件读/写调用,包含如下步骤确定所述文件读/写请求是否是对所述存储库数据当中的数据进行的请求;如果所述读/写请求是对所述存储库数据当中数据的请求,如果作出所述请求的过程被允许访问所述存储库数据的话,则允许访问;以及如果所述读/写请求不是对所述存储库数据当中数据的请求,如果作出所述请求的过程不被允许访问所述存储库数据的话,则允许访问;如果所述读/写请求是一个读请求的话,也允许访问。
27.权利要求19的方法,其中所述文件系统安全驱动器提供步骤进一步包含文件信息请求步骤,包含如下步骤确定所述文件信息请求是否是一个关于所述存储库数据当中数据的请求,如果不是,则把所述文件信息请求发送到所述操作系统,如果是,则判定正确的文件大小并返回所述正确的文件大小。
28.权利要求19的方法,其中所述文件系统安全驱动器提供步骤进一步包含文件改变请求步骤,包含如下步骤确定所述文件改变请求是否是一个关于所述存储库数据当中数据的请求,如果是,则对所述存储库数据进行所述文件改变请求,如果不是,则进行检验看发出请求的过程是否是一个受保密的过程,如果不是,则把所述文件改变请求传送到所述操作系统,如果是,则封锁该请求。
29.权利要求19的方法,其中所述文件系统安全驱动器提供步骤进一步包含文件打开处理步骤,用于所述被阻断的文件系统调用中的每个特定调用,该调用是一个文件打开调用,包含如下步骤确定所述文件打开调用是否是对所述存储库数据当中的数据进行的请求;以及如果所述文件打开调用是对所述存储库数据当中数据的请求,则对作出所述请求的该过程进行检验,看所述过程是否已经是一个先前打开了所述存储库数据当中的所述数据的受保密过程,如果是,则允许访问所述存储库数据,并对作出所述请求的过程进行访问检验,然后处理该请求,即如果通过了所述访问检验,则允许访问所述尚不是受保密过程的过程,但如果没有通过所述访问检验,则根本不允许访问;如果所述文件打开调用不是对所述存储率数据当中数据的请求,则对作出所述请求的过程进行检验,看所述过程是否已是一个受保密的过程,如果作出所述请求的所述过程不是一个受保密的过程,则把该请求传送到操作系统上,如果作出所述请求的过程是一个受保密的过程,则确定所述文件打开调用中所指的文件是否存在,如果存在,则打开该文件供只读,如果它不存在,则在所述存储库数据中创建该文件;一个文件读/写请求处理步骤,用于所述被阻断的文件系统调用中的每个特定调用,该调用是一个文件读/写调用,包含如下步骤确定所述文件读/写请求是否是对所述存储库数据当中的数据进行的请求;如果该读/写请求是对所述存储库数据当中数据的请求,如果作出所述请求的过程被允许访问所述存储库数据的话,则允许访问;以及如果该读/写请求不是对所述存储库数据当中数据的请求,如果作出所述请求的过程不被允许访问所述存储库数据的话,则允许访问;如果所述读/写请求是一个读请求的话,也允许访问;一个文件信息请求步骤,包含如下步骤确定所述文件信息请求是否是一个关于所述存储库数据当中数据的请求,如果不是,则把所述文件信息请求发送到所述操作系统,如果是,则判定正确的文件大小并返回所述正确的文件大小;一个文件改变请求步骤,包含如下步骤确定所述文件改变请求是否是一个关于所述存储库数据当中数据的请求,如果是,则对所述存储库数据进行所述文件改变请求,如果不是,则进行检验看发出请求的过程是否是一个受保密的过程,如果不是,则把所述文件改变请求传送到所述操作系统,如果是,则封锁该请求。
30.根据权利要求5的方法,其中提供内部安全性的步骤进一步包含监视计算机的系统时钟以防止对数据的非授权访问,包含如下步骤初始化一个时钟监视器,包含如下步骤从系统时钟读出第一时间值;确定在该计算机系统上是否初始化了一个许可数据库,该数据库有一个或多个与时钟有关的许可字段,每个字段包含一个或多个与时钟有关的许可,以及一个含有存储时间值的存储时间值字段;如果该许可数据库被初始化了,则把第一时间值与存储时间值进行比较,如果第一时间值迟于所存储时间值,则把第一时间值存储在存储时间值字段,如果第一时间值早于所存储时间值,则使一个或多个与时间有关的许可无效,从而通过使与时间有关的许可无效来防止对数据的访问;以及如果许可数据库未被初始化,则把第一时间值存储到存储时间值字段。
31.权利要求30的方法,其中确定许可数据库是否是初始化了的步骤包含如下步骤从许可数据库中的存储时间值字段中读出所存储的时间值,如果所存储的时间值为零,则结论是该许可数据库未被初始化,如果所存储的时间值不为零,则结论是许可数据库已初始化。
32.权利要求30的方法,进一步包含如下步骤追踪一个真系统时间,该时间是存储的时间加上从时钟监视器初始化时开始度量的内部延迟时间;在一预先确定的追踪时间间隔后,从系统时钟读出第二时间值;把第二时间值与真系统时间比较并且根据比较产生一个时间偏差;如果该时间偏差不在可接受的偏差范围内,则使一个或多个与时钟有关的许可无效;如果该时间偏差在可接受的偏差范围内,则使与时钟有关的许可生效;以及存储真系统时间。
33.权利要求32的方法,在如果该时间偏差不在可接受的偏差范围内,则使一个或多个与时钟有关的许可无效这一步骤之后,进一步包含如下步骤从系统时钟读出第三时间值;将第三时间值与内部延迟时间作比较;根据比较结果产生第二时间偏差;以及如果该第二时间偏差在可接受的偏差范围内,重新使与时间有关的许可生效,把真系统时间存储在存储时间值字段中,并把第三时间存储在许可数据库中的最后一个已知的好的系统时间值字段。
34.权利要求32的方法,其中预先确定的追踪时间间隔基本上在零秒至60秒范围内。
35.权利要求32的方法,其中可接受的偏差基本上在零秒和3小时的范围内。
36.权利要求30的方法,进一步包含如下步骤跟踪一个真系统时间,它是存储的时间值加上从时钟监视器初始化时开始度量的一个其系统时间;从系统时钟读出第二时间值;把第二时间值与真系统时间比较并且根据比较产生一个时间偏差;如果该时间偏差在可接受的偏差范围内,则把第二时间值存储在存储时间值字段。
37.权利要求36的方法,进一步包含关掉计算机的步骤。
38.权利要求36的方法,其中可接受的偏差基本上在零秒至3小时的范围内。
39.权利要求30的方法,其中与时钟有关的许可包含与日期有关的许可。
40.根据权利要求5的方法,用于在操作上可安装在计算机操作系统中的第一装置驱动器中提供数据安全性,该计算机操作系统有分层的多个装置驱动器用于访问数据存储装置中的数据,该方法包含如下步骤检测一个对所述第一装置驱动器的I/O请求;确定所述第一装置驱动器是否在功能上处于分层的多个装置驱动器中的最顶层;如果所述第一装置驱动器是在功能上处于分层的多个装置驱动器中的最顶层,则在所述第一装置驱动器中进行该I/O请求;以及如果所述第一装置驱动器不是在功能上处于分层的多个装置驱动器中的最顶层,则拒绝在所述第一装置驱动器中的这个I/O请求,并允许由分层多个装置驱动器中的下一个较低级别装置驱动器来进行该I/O请求。
41.权利要求40的方法,其中所述第一装置驱动器是文件系统监视器。
42.权利要求40的方法,其中数据存储在受保密的虚拟文件系统中,而且进行I/O请求的步骤进一步包含实现数据安全措施的步骤。
43.权利要求40的方法,其中数据以加密形式存储,而且进行I/O请求的步骤进一步包含对数据解密的步骤。
44.权利要求40的方法,其中进行I/O请求的步骤进一步包含检验数据病毒的步骤。
45.权利要求40的方法,其中确定所述第一装置驱动器在功能上是否处于分层的多个装置驱动器中的最顶层的步骤进一步包含如下步骤确定所述第一装置驱动器先前是否已被调用过;如果所述第一装置驱动器先前未曾被调用,则检测初始调用模块地址,存储所述初始调用模块地址,并得出结论所述第一装置驱动器在功能上处于这分层的多个装置驱动器中的最顶层;如果所述第一装置驱动器先前曾被调用过,则检测第二调用模块地址,把所述第二调用模块地址与初始调用模块地址比较,并只有当初始调用模块地址与第二调用模块地址匹配才能得出结论所述第一装置驱动器在功能上处于这分层的多个装置驱动器中的最顶层。
46.权利要求40的方法,其中在受保密的第一装置驱动器中拒绝I/O请求的步骤进一步包含如下步骤设置第一装置驱动器关闭标志;以及初始化一个再钩连过程。
47.权利要求40的方法,在检测对所述第一装置驱动器的I/O请求步骤之后,进一步包含如下步骤检验是否设置了第一装置驱动器关闭标志;以及如果设置了所述第一装置驱动器关闭标志,则略去所述第一装置驱动器中的进一步的步骤,并允许由这分层的多个装置驱动器中的下一个较低级别的装置驱动器来进行该I/O请求。
48.权利要求47的方法,其中初始化一个再钩连过程的步骤进一步包含如下步骤对该再钩连过程已被初始化的次数进行计数;检验该次数是否已达到了预先确定的最大阈值;如果该次数已达到了预先确定的最大阈值,则初始化可编程安全响应;如果该次数尚未达到预先确定的最大阈值,则对功能上处于分层的多个装置驱动器中最顶层的所述第一装置驱动器初始化其再连接;如果所述第一装置驱动器已再连接为功能上处于这分层的多个装置驱动器中的最顶层,则复位所述第一装置驱动器标志;以及结束该再钩连过程。
49.权利要求48的方法,其中可编程的安全响应包含破坏数据的步骤。
50.权利要求48的方法,其中数据存储在受保密的虚拟文件系统中,而且破坏数据的步骤进一步包含破坏这受保密的虚拟文件系统的步骤。
51.权利要求48的方法,其中可编程安全响应包含终止打开应用的步骤。
52.权利要求48的方法,其中可编程安全响应包含破坏数据存储装置上的所述第一装置驱动器的步骤。
53.权利要求48的方法,其中可编程安全响应包含停止计算机的操作的步骤。
54.权利要求48的方法,其中可编程安全响应包含使计算机进入需重新引导状态的步骤。
55.根据权利要求1的方法,进一步包含端口请求检测步骤,该步骤检测由一过程发出的使用一端口的端口请求;过程识别步骤,该步骤确定所述发出请求过程的标识;过程检验步骤,该步骤确定是否应允许所述过程访问所述端口;以及允许/拒绝步骤,在该步骤中,如果所述过程应被允许访问所述端口,则允许完成所述端口请求,而如果所述过程不应被允许访问所述端口,则拒绝所述端口请求。
56.权利要求55的方法,其中所述过程检验步骤包含受保密过程清单检验步骤,该步骤确定所述过程是否出现在受保密过程清单上。
57.权利要求55的方法,进一步包含追踪所述端口请求的追踪步骤。
58.根据权利要求5的方法,其中提供内部安全性的步骤进一步包含端口请求检测步骤,该步骤检测由一过程发出的使用一端口的端口请求;打开端口过程识别步骤,在该步骤中,如果所述端口请求是一个打开端口请求,则确定所述发出请求过程的标识;打开端口过程检验步骤,在该步骤中,如果所述端口请求是一个打开端口请求,则确定是否应允许所述过程打开所述端口;打开端口允许/拒绝步骤,在该步骤中,如果所述端口请求是一个打开端口请求,则如果所述过程应被允许打开所述端口则允许完成所述打开端口请求并跟踪所述打开端口请求,如果所述过程不应被允许打开所述端口则拒绝所述端口请求;关闭端口过程完成步骤,如果所述端口请求是一个关闭端口请求,则完成所述端口请求;以及关闭端口记录日志步骤,该步骤记录所述端口的关闭。
59.根据权利要求58的方法,其中所述打开端口过程检验步骤包含受保密过程清单检验步骤,该步骤确定所述过程是否出现在受保密过程的清单上。
60.根据权利要求58的方法,其中对所述打开端口请求的所述追踪包含保持一个日志,记录所述打开端口请求的过程ID和返回的端口操纵柄,而追踪所述端口关闭情况的所述关闭端口日志步骤包含从所述日志中去掉那个端口关闭请求的过程ID和返回的端口操纵柄的记录。
61.根据权利要求60的方法,进一步包含安全检查步骤,包含的步骤有检验一过程是否已打开端口,对具有打开端口的过程拒绝安全检查放行,对不具有打开端口的过程允许安全检查放行。
62.根据权利要求61的方法,其中所述打开端口过程检验步骤包含确定所述过程标识是否出现在一受保密过程清单上,其中所述对不具有打开端口的过程允许安全检查放行的步骤包含把所述过程放到受保密过程清单上的步骤。
63.根据权利要求5的方法,其中提供内部安全性的步骤进一步包含网络请求检测步骤,该步骤检测由一过程发出的使用网络的网络请求;过程识别步骤,该步骤确定所述发出请求过程的标识;过程检验步骤,该步骤确定是否应允许所述过程访问所述网络;以及允许/拒绝步骤,在该步骤中,如果所述过程应被允许访问所述网络,则允许完成所述网络请求,如果所述过程不应被允许访问所述网络,则拒绝所述网络请求。
64.根据权利要求63的方法,其中所述过程检验步骤包含受保密过程清单检验步骤,该步骤确定所述过程是否出现在受保密过程的清单上。
65.根据权利要求64的方法,其中所述网络请求接口是传输数据接口(Transport Data Interface)。
66.根据权利要求1的方法,其中创建包的步骤包含接收一个数据文件供打包;接收一个许可数据库,该数据库有一个或多个与该数据文件关联的许可,这一个或多个许可控制客户机对该文件的使用;产生一个包全局唯一标识;产生一个数据包,含有该文件、一个或多个许可以及该全局唯一标识;对该包加密;以及产生一个含有该加密包的计算机可执行文件。
67.权利要求66的方法,其中一个或多个许可选自一组许可,包含访问计数许可、访问时间许可、期满日期许可、授权日期许可、剪切板许可、打印许可、无限访问许可、应用许可以及系统事件许可。
68.权利要求67的方法,进一步包含为访问该计算机可读文件设置口令的步骤。
69.权利要求68的方法,其中该数据包进一步包含一个接收者全局唯一标识,还进一步包含接收接收者全局唯一标识的步骤,该步骤在产生包全局唯一标识的步骤之后。
70.权利要求69的方法,其中该数据包进一步包含一个客户机软件。
71.根据权利要求1的方法,进一步包含接收一个数据文件供打包;接收一个包许可数据库,该数据库有一个或多个与该数据文件关联的许可,这一个或多个许可控制客户机对该文件的使用;产生一个包全局唯一标识;产生一个数据包,含有该数据文件、一个或多个许可、全面唯一标识及客户机软件;对该包加密;产生一个含有该加密包的计算机可执行文件;在具有一操作系统的客户计算机系统上接收该计算机可执行文件;在该客户计算机系统上执行该计算机可执行文件含有如下步骤确定该操作系统是否是一个可兼容的操作系统,如果是,则在该客户计算机系统上执行一客户机软件,该客户机软件的执行在该客户计算机系统上创建一个客户许可数据库和一个存储库;以及确定该加密包是否有效,如果是,则把该包全局唯一标识记录在客户许可数据库中,从该数据包中提取该数据文件和一个或多个许可,把该数据文件存储在存储库中,把一个或多个许可存储在客户许可数据库中,如果不是,则在该计算机可执行文件中设置一个状态,指出该包已被安装。
72.权利要求71的方法,进一步包含一个步骤确定是否有第二包加载到该计算机系统上,如果是,则在该客户计算机系统上执行客户机软件的步骤之前终止这第二包。
73.权利要求72的方法,其中确定该包是否有效的步骤包含如下步骤查寻客户许可数据库以得到该包全局唯一标识,如果该包全局唯一标识不在该客户许可数据库中则认为该包有效,如果该包全局唯一标识不在该客户许可数据库中则认为该包无效。
74.权利要求73的方法,其中该包进一步包含带有版本指示的客户机软件,并在执行该客户机软件之前,确定是否在该客户计算机系统上安装了该客户机软件的第二个版本,如果不是,则从包中提取出该客户机软件并把该客户机软件安装到该客户计算机系统上。
75.权利要求74的方法,其中如果在该客户计算机系统上安装了该客户机软件的第二个版本,则确定在该客户计算机系统上安装的客户机软件的版本指示是否早于这第二个版本,如果是,则从该包中提取该客户机软件并把该客户机软件安装到该客户计算机系统上。
76.权利要求74的方法,其中该客户机软件包含一个或多个装置驱动器,而客户许可数据库及存储库是由这一个或多个装置驱动器中的至少一个产生的。
77.权利要求71的方法,其中该客户机软件包含一个或多个装置驱动器,而客户许可数据库及存储库是由这一个或多个装置驱动器中的至少一个产生的。
78.权利要求71的方法,其中该包进一步包含一个接收机全局唯一标识,并且其中确定加密包是否有效的步骤包含如下步骤查寻该客户许可数据库以得到第二个接收机全局唯一标识,如果没有找到,则认为该包是无效的,如果找到了,则将接收机全局唯一标识与这第二个接收机全局唯一标识比较,以确定它们是否匹配,如果是,则认为该包是有效的,如果不是,则认为该包是无效的。
79.权利要求71的方法,其中一个或多个许可选自一组许可,包含访问计数许可、访问时间许可、期满日期许可、授权日期许可、剪切板许可、打印许可、无限访问许可、应用许可以及系统事件许可。
80.权利要求71的方法,其中该计算机可执行程序是受口令保护的。
81.根据权利要求5的方法,其中提供内部安全性的步骤包含检测一个文件系统请求;完成所述文件系统请求;接收来自所述文件系统请求的返回信息;确定所述文件系统请求是否是针对一个与受保密的文件相关联的标志文件;以及如果是,则修改所述返回信息以反映该受保密的文件的文件属性。
82.权利要求81的方法,其中所述文件属性是文件的大小。
83.权利要求81的方法,其中该确定步骤进一步包含如下步骤确定所述返回信息是否标识与多个受保密文件关联的多个标志文件;以及如果是,则修改所述返回信息以反映该多个受保密的文件的文件属性。
84.权利要求81的方法,其中该受保密的文件是以加密形式存储的。
85.权利要求81的方法,其中该受保密的文件存储在一个受保密的虚拟文件系统中。
86.权利要求81的方法,其中受保密的文件存储在远程连网装置上。
87.权利要求81的方法,其中该文件系统请求是打开一个文件。
88.权利要求81的方法,其中该文件系统请求是删除一个文件。
89.权利要求81的方法,其中该文件系统请求是重命名一个文件。
90.权利要求81的方法,其中该文件系统请求是查询文件信息。
91.权利要求83的方法,其中该文件系统请求是设置文件信息。
92.权利要求83的方法,其中该文件系统请求是找出第一个匹配文件。
93.权利要求83的方法,其中该文件系统请求是找出下一个匹配文件。
94.权利要求83的方法,其中该文件系统请求是目录控制。
95.一个用于保持数据安全性的系统,包含一个接收器,用于接收一个包,其中包含数据和一个或多个规定数据使用的许可;以及一个存储库,用于存储该数据。
96.根据权利要求95的系统,进一步包含内部安全性以保护存储在存储库中的数据。
97.根据权利要求96的系统,其中该内部安全性进一步检测对所述一个或多个许可的违犯情况。
98.根据权利要求97的系统,其中该内部安全性包含一个与该数据对应的标志文件,和一个通过使用该数据的实际文件名和标志文件的标志名针对该数据来映射标志文件的虚拟表,其中该虚拟表和数据存储在存储库中。
99.根据权利要求97的系统,其中该内部安全性包含用于至少一个存储库的与一原始位置对应的锚定地址、用于读该包的驱动器和存储这些许可的数据库,把这些地址组合到一起以提供一个限定系统操作的键(key)并标识出何时该键将不再操作。
100.根据权利要求97的系统,其中该内部安全性进一步包含一个注册表监视系统,包含针对调用过程的注册表键操纵柄;该操纵柄的注册表键值;过程ID和注册表键;安全性权限(clearance),以完成该请求;其中通过检验受保密过程清单确定该过程是否是受保密的;如果该过程是受保密的,则确定该注册表键是否在一个拒绝清单上;如果该注册表键是在该拒绝清单上,则拒绝该过程对该注册表键的访问;以及如果该过程不在受保密清单上或者如果该注册表键名不在该拒绝清单上,则完成该请求。
101.根据权利要求97的系统,其中该内部安全性包含一个共享存储器系统,包含一个调用,用于为发出请求的过程预约一存储器页面;根据该页面能否被共享使该预约调用被过滤;一个调用,用于为发出请求的过程或以后发出请求的过程提交该存储器页面;根据该页面能否被共享以及该过程能否是被保密的,来使该提交调用被过滤。
102.根据权利要求97的系统,其中该内部安全性进一步包含一个存储库系统,用于把存储库数据与其他系统数据隔离;以及一个文件系统安全驱动器,它阻断文件系统调用,并对所述被阻断的文件系统调用中的每个特定调用,确定所述被阻断的文件系统调中的所述特定调用是否是来自一个访问所述存储库数据的过程,如果所述被阻断的文件系统调用中的所述特定调用是来自一个访问所述存储库数据的过程,则允许该文件系统调用只在所述存储库系统内创建或修改数据。
103.根据权利要求97的系统,其中该内部安全性进一步包含一个监视计算机系统时钟的系统,以防止对数据的非授权访问,包含从系统时钟读出第一时间值;确定在该计算机系统上是否初始化了一个许可数据库,该数据库有一个或多个与时钟有关的许可字段,每个字段包含一个或多个与时钟有关的许可,以及一个存储时间值字段,其中含有存储的时间值;如果该许可数据库被初始化了,则把第一时间值与存储时间值进行比较,如果第一时间值迟于所存储时间值,则把第一时间值存储在存储时间值字段,如果第一时间值早于所存储时间值,则使一个或多个与时间有关的许可无效,从而通过使与时间有关的许可无效来防止对数据的访问;以及如果许可数据库未被初始化,则把第一时间值存储到存储时间值字段。
104.根据权利要求97的系统,其中该内部安全性包含检测一个对所述第一装置驱动器的I/O请求;确定所述第一装置驱动器是否在功能上处于分层的多个装置驱动器中的最顶层;如果所述第一装置驱动器是在功能上处于分层的多个装置驱动器中的最顶层,则在所述第一装置驱动器中进行该I/O请求;以及如果所述第一装置驱动器不是在功能上处于分层的多个装置驱动器中的最顶层,则拒绝在所述第一装置驱动器中的这个I/O请求,并允许由分层多个装置驱动器中的下一个较低级别装置驱动器来进行该I/O请求。
105.根据权利要求97的系统,其中该内部安全性包含端口请求检测步骤,该步骤检测由一过程发出的使用一端口的端口请求;过程识别步骤,该步骤确定所述发出请求过程的标识;过程检验步骤,该步骤确定是否应允许所述过程访问所述端口;以及允许/拒绝步骤,在该步骤中,如果所述过程应被允许访问所述端口,则允许完成所述端口请求,而如果所述过程不应被允许访问所述端口,则拒绝所述端口请求。
106.根据权利要求97的系统,其中内部安全性包含端口请求检测步骤,该步骤检测由一过程发出的使用一端口的端口请求;打开端口过程识别步骤,在该步骤中,如果所述端口请求是一个打开端口请求,则确定所述请求过程的标识;打开端口过程检验步骤,在该步骤中,如果所述端口请求是一个打开端口请求,则确定是否应允许所述过程打开所述端口;打开端口允许/拒绝步骤,在该步骤中,如果所述端口请求是一个打开端口请求,则如果所述过程应被允许打开所述端口则允许完成所述打开端口请求并跟踪所述打开端口请求,如果所述过程不应被允许打开所述端口则拒绝所述端口请求;关闭端口过程完成步骤,在该步骤中,如果所述端口请求是一个关闭端口请求,则完成所述端口请求;以及关闭端口记录日志步骤,该步骤记录所述端口的关闭。
107.根据权利要求97的系统,其中内部安全性包含网络请求检测步骤,该步骤检测由一过程发出的使用网络的网络请求;过程识别步骤,该步骤确定所述发出请求过程的标识;过程检验步骤,该步骤确定是否应允许所述过程访问该网络;以及允许/拒绝步骤,在该步骤中,如果所述过程应被允许访问该网络,则允许完成所述网络请求,如果所述过程不应被允许访问该网络,则拒绝所述网络请求。
108.根据权利要求96的系统,包含一个机器可读介质,它有信息打包软件,用于产生包含信息包的计算机可执行文件,该信息包包含一个数据文件;一个许可数据库,该数据库有一个或多个与该数据文件关联的许可;一个加密软件;一个与该机器可读介质通信的网络;一个与该网络通信的客户计算机系统,该计算机系统适于接收该信息包并执行该计算机可执行文件,该计算机系统有一个客户许可数据库和一个适于接收信息包的存储库。
109.权利要求108的系统,其中该信息包进一步包含一个包全局唯一标识,该客户计算机系统进一步包含一个计算机代码模块,该模块适于读出该包全局唯一标识,查寻客户许可数据库以得到该包全局唯一标识,如果在客户许可数据库中找到了该包全局唯一标识,则拒绝该包。
110.权利要求109的方法,其中该信息包进一步包含一个接收者全局唯一标识,并且该客户计算机系统进一步包含一个计算机代码模块,该模块适于读出该接收者全局唯一标识,查寻客户许可数据库以得到该接收者全局唯一标识,如果在客户许可数据库中没有找到该接收者的全局唯一标识,则拒绝该包。
111.权利要求110的方法,其中该一个或多个许可选自一组,该组包含访问计数许可、访问时间许可、期满日期许可、授权日期许可、剪切板许可、打印许可、无限访问许可、应用许可以及系统事件许可。
112.根据权利要求97的系统,其中该系统包含一个装置驱动器用于访问数据,该装置驱动器可操作地安装在电子计算机上的操作系统中,其中所述装置驱动器检测一个文件系统请求;完成所述文件系统请求;接收来自所述文件系统请求的返回信息;确定所述文件系统请求是否是针对一个与受保密的文件相关联的标志文件;以及如果是,则修改所述返回信息以反映该受保密文件的文件属性。
113.权利要求112的系统,其中所述文件属性是文件的大小。
114.权利要求113的系统,其中所述装置驱动器进一步确定所述返回信息是否标识与多个受保密文件关联的多个标志文件;如果是,则修改所述返回信息以反映这多个受保密文件的文件属性。
115.权利要求114的系统,其中所述第一装置驱动器是一个文件系统监视器。
116.权利要求114的系统,其中该受保密文件以加密形式存储。
117.权利要求114的系统,其中该受保密文件存储在一个保密的虚拟文件系统中。
118.权利要求114的系统,其中该受保密文件存储在远程连网装置上。
119.权利要求114的系统,其中该文件系统请求是打开一个文件。
120.权利要求114的系统,其中该文件系统请求是删除一个文件。
121.权利要求114的系统,其中该文件系统请求是重命名一个文件。
122.权利要求114的系统,其中该文件系统请求是查询文件信息。
123.权利要求114的系统,其中该文件系统请求是设置文件信息。
124.权利要求123的系统,其中该文件系统请求是找出第一个匹配文件。
125.权利要求123的系统,其中该文件系统请求是找出下一个匹配文件。
126.权利要求123的系统,其中该文件系统请求是目录控制。
127.根据权利要求97的系统,进一步包含一个端口封锁系统,其中所述端口封锁系统进行操作以检测由一过程发出的使用端口的端口请求;确定所述发出请求过程的标识;确定是否应允许所述过程访问所述端口;以及如果所述过程应被允许访问所述端口则允许完成所述端口请求,如果所述过程不应被允许访问所述端口则拒绝所述端口请求。
128.根据权利要求97的系统,进一步包含一个网络封锁系统,其中所述网络封锁系统进行操作以确定所述发出请求过程的标识;确定是否应允许所述过程访问所述网络;以及如果所述过程应被允许访问所述网络则允许完成所述网络请求,如果所述过程不应被允许访问所述网络则拒绝所述网络请求。
129.用于监视数据安全性的一种计算机可读介质,包含至少一个模块用于创建一个包,该包中包含数据和用于限定数据使用的一个或多个许可,以及一个模块用于打开该包并把数据存储在一个存储库中供有限制地访问该数据。
130.根据权利要求129的计算机可读介质,进一步包含一个模块用于检测对所述一个或多个许可的违犯情况。
131.根据权利要求130的计算机可读介质,进一步包含一个模块用于创建一个与存储库中数据对应的标志表并把针对该数据的标志文件映射到一个虚拟表中,该虚拟表存储在该存储库中,表中包括该数据的实际文件名及相应的标志文件的标志名。
132.根据权利要求130的计算机可读介质,进一步包含一个模块用于提供内部安全性,包括为至少一个存储库标识一个与原始位置对应的锚定地址,一个用于读出该包的驱动器以及存储这些许可的数据库,把这些地址组合在一起以提供一个键(key)用于限定系统操作和标识何时该键将不再操作。
133.根据权利要求130的计算机可读介质,进一步包含一个模块用于监视一个注册表,包括向发出调用的过程请求注册表键(key)操纵柄的模块;请求该操纵柄的注册表键值的模块;以及得到安全性权限以完成这些请求的模块。
134.根据权利要求130的计算机可读介质,进一步包含一个模块用于监视共享存储器,包含用于提供一个调用的模块,来为发出请求的过程预约一存储器页面;根据该页面能否被共享来过滤这一预约调用的模块;用于提供一个调用的模块,来为发出请求的过程或以后发出请求的过程提交该存储器页面;以及根据是该页面是否能被共享以及该过程能否是被保密的过滤这一提交调用的模块。
135.根据权利要求130的计算机可读介质,进一步包含提供一个存储库系统用于使存储库数据与其他系统数据隔离的模块;以及提供文件系统安全驱动器的模块,该驱动器阻断文件系统调用,并对所述被阻断的文件系统调用中的每个特定调用,确定所述被阻断的文件系统调用中的所述特定调用是否是来自一个访问所述存储库的过程,如果所述被阻断的文件系统调用中的所述特定调用是来自一个访问所述存储库的过程,则允许该文件系统调用只在所述存储库系统内创建或修改数据。
136.根据权利要求130的计算机可读介质,进一步包含一个模块用于监视计算机的系统时钟以防止对数据的非授权访问,包含如下步骤一个模块,用于初始化一个时钟监视器,包含从系统时钟读出第一时间值;确定在该计算机系统上是否初始化了一个许可数据库,该数据库有一个或多个与时钟有关的许可字段,每个字段包含一个或多个与时钟有关的许可,以及一个含有存储时间值的存储时间值字段;如果该许可数据库被初始化了,则把第一时间值与存储时间值进行比较,如果第一时间值迟于所存储时间值,则把第一时间值存储在存储时间值字段,如果第一时间值早于所存储时间值,则使一个或多个与时间有关的许可无效,从而通过使与时间有关的许可无效来防止对数据的访问;以及如果许可数据库未被初始化,则把第一时间值存储到存储时间值字段。
137.根据权利要求130的计算机可读介质,进一步包含检测对所述第一装置驱动器的I/O请求的模块;确定所述第一装置驱动器是否在功能上处于分层的多个装置驱动器中的最顶层的模块;如果所述第一装置驱动器是在功能上处于分层的多个装置驱动器中的最顶层,则在所述第一装置驱动器中进行该I/O请求的模块;以及如果所述第一装置驱动器不是在功能上处于分层的多个装置驱动器中的最顶层,则拒绝在所述第一装置驱动器中的这个I/O请求,并允许由分层多个装置驱动器中的下一个较低级别装置驱动器来进行该I/O请求的模块。
138.根据权利要求129的计算机可读介质,进一步包含端口请求检测步骤,该步骤检测由一过程发出的使用一端口的端口请求;过程识别步骤,该步骤确定所述发出请求过程的标识;过程检验步骤,该步骤确定是否应允许所述过程访问所述端口;以及允许/拒绝步骤,在该步骤中,如果所述过程应被允许访问所述端口,则允许完成所述端口请求,而如果所述过程不应被允许访问所述端口,则拒绝所述端口请求。
139.根据权利要求130的计算机可读介质,进一步包含端口请求检测步骤,该步骤检测由一过程发出的使用一端口的端口请求;打开端口过程识别步骤,在该步骤中,如果所述端口请求是一个打开端口请求,则确定所述请求过程的标识;打开端口过程检验步骤,在该步骤中,如果所述端口请求是一个打开端口请求,则确定是否应允许所述过程打开所述端口;打开端口允许/拒绝步骤,在该步骤中,如果所述端口请求是一个打开端口的请求,则如果所述过程应被允许打开所述端口则允许完成所述打开端口请求并跟踪所述打开端口请求,如果所述过程不应被允许打开所述端口则拒绝所述端口请求;关闭端口过程完成步骤,在该步骤中,如果所述端口请求是一个关闭端口请求,则完成所述端口请求;以及关闭端口记录日志步骤,该步骤记录所述端口的关闭。
140.根据权利要求130的计算机可读介质,进一步包含网络请求检测步骤,该步骤检测由一过程发出的使用网络的网络请求;过程识别步骤,该步骤确定所述发出请求过程的标识;过程检验步骤,该步骤确定是否应允许所述过程访问所述网络;以及允许/拒绝步骤,在该步骤中,如果所述过程应被允许访问所述网络,则允许完成所述网络请求,如果所述过程不应被允许访问所述网络,则拒绝所述网络请求。
141.根据权利要求130的机器可读介质,包含一个信息包,其中包含一个数据文件;一个许可数据库,该数据库有一个或多个与该数据文件关联的许可,这一个或多个许可控制客户机对该文件的使用;一个包全局唯一标识;以及一个接收器全局唯一标识。
142.根据权利要求141的机器可读介质,其中该一个或多个许可选自一组许可,该组包含访问计数许可、访问时间许可、期满日期许可、授权日期许可、剪切板许可、打印许可、无限访问许可、应用许可、以及系统事件许可。
143.权利要求142的机器可读介质,进一步包含一个客户机软件。
144.根据权利要求130的机器可读介质,进一步包含一个用于访问数据的装置驱动器程序,所述装置驱动器程序包含用于检测文件系统请求的一组由计算机实现的指令;用于完成所述文件系统请求的一组由计算机实现的指令;用于接收从所述文件系统请求返回的信息的一组由计算机实现的指令;用于确定所述文件系统请求是否是针对与一受保密文件关联的标志文件的一组由计算机实现的指令;以及一组由计算机实现的指令,如果所述返回信息标识的是与多个受保密文件关联的多个标志文件的话,用于修改所述返回信息以反映多个受保密文件的文件属性。
145.根据权利要求144的计算机可读介质,其中该装置驱动器程序进一步包括用于确定所述返回信息是否标识与多个受保密的文件相关联的多个标志文件的一组由计算机实现的指令;以及一组由计算机实现的指令,如果所述返回信息标识的是与多个受保密文件关联的多个标志文件,用于修改所述返回信息以反映多个受保密文件的文件属性。
146.根据权利要求130的计算机可读介质,被编程为通过实现端口封锁系统来保护受保密的数据,该端口封锁系统进行操作以检测由一过程发出的使用端口的端口请求;确定所述发出请求过程的标识;确定是否应允许所述过程访问所述端口;以及如果所述过程应被允许访问该端口则允许完成所述端口请求,如果所述过程不应被允许访问该端口则拒绝所述端口请求。
147.根据权利要求130的计算机可读介质,被编程为通过实现网络封锁系统来保护受保密的数据,该网络封锁系统进行操作以确定所述发出请求过程的标识;确定是否应允许所述过程访问该网络;以及如果所述过程应被允许访问该网络则允许完成所述网络访问,如果所述过程不应被允许访问该网络则拒绝所述网络访问。
148.一个在至少两个计算机之间传送数据期间保持安全性的系统,包含第一计算机,具有一系统用于创建一包,该包包含数据和一个或多个许可,这些许可选自一个可用许可清单,用于限定对数据的使用;以及第二计算机,具有一系统用于从第一计算机接收该包,在确认后打开该包并把该包存储在一个存储库中。
149.根据权利要求148的系统,进一步包含内部安全机制,其中该内部安全机制包含如下多个检测对所述一个或多个许可的违犯情况;创建一个与数据对应的标志文件,并把针对该数据的标志文件映射到一个虚拟表中,该虚拟表包括数据的真实文件名和对应的标志文件的标志名,其中虚拟表和数据存储在存储库中;标识一个用于至少一个存储库的与一原始位置对应的锚定地址、用于读该包的驱动器和存储这些许可的数据库,把这些地址组合到一起以提供一个限定系统操作的键(key)并标识出何时该键将不再操作;监视一个注册表,包含请求一个针对调用过程的注册表键操纵柄;请求该操纵柄的注册表键值;以及得到安全性权限,以完成该请求;监视共享存储器,包含提供一个调用,为发出请求的过程预约一个存储器页面;根据该页面能否被共享来过滤该预约调用;提供一个调用,为发出请求的过程或以后发出请求的过程提交该存储器页面;以及根据该页面能否被共享以及该过程能否是被保密的,来过滤该提交调用;提供一个存储库系统,用于把存储库数据与其他系统数据隔离;提供一个文件系统安全驱动器,它阻断文件系统调用,并对所述被阻断的文件系统调用中的每个特定调用,确定所述被阻断的文件系统调用中的所述特定调用是否是来自一个访问所述存储库数据的过程,如果所述被阻断的文件系统调用中的所述特定调用是来自一个访问所述存储库数据的过程,则允许该文件系统调用只在所述存储库系统内创建或修改数据;监视计算机系统时钟,以防止对数据的非授权访问,包含初始化一个时钟监视器,包含如下步骤从系统时钟读出第一时间值;确定在该计算机系统上是否初始化了一个许可数据库,该数据库有一个或多个与时钟有关的许可字段,每个字段包含一个或多个与时钟有关的许可,以及一个含有存储的时间值的存储时间值字段;如果该许可数据库被初始化了,则把第一时间值与存储时间值进行比较,如果第一时间值迟于所存储时间值,则把第一时间值存储在存储时间值字段,如果第一时间值早于所存储时间值,则使一个或多个与时间有关的许可无效,从而通过使与时间有关的许可无效来防止对数据的访问;以及如果许可数据库未被初始化,则把第一时间值存储到存储时间值字段;检测一个对所述第一装置驱动器的I/O请求;确定所述第一装置驱动器是否在功能上处于分层的多个装置驱动器中的最顶层;如果所述第一装置驱动器是在功能上处于分层的多个装置驱动器中的最顶层,则在所述第一装置驱动器中进行I/O请求;以及如果所述第一装置驱动器不是在功能上处于分层的多个装置驱动器中的最顶层,则拒绝在所述第一装置驱动器中的这个I/O请求,并允许由分层多个装置驱动器中的下一个较低级别装置驱动器来进行该I/O请求;检测由一过程发出的使用一端口的端口请求;确定所述发出请求过程的标识;确定是否应允许所述过程访问所述端口;如果所述过程应被允许访问所述端口则允许完成所述端口请求,而如果所述过程不应被允许访问所述端口则拒绝所述端口请求;检测由一过程发出的使用一端口的端口请求;如果所述端口请求是一个打开端口请求,则确定所述发出请求过程的标识;如果所述端口请求是一个打开端口请求,则确定是否应允许所述过程打开所述端口;如果所述端口请求是一个打开端口请求,则如果所述过程应被允许打开所述端口则允许完成所述打开端口请求并跟踪所述打开端口请求,如果所述过程不应被允许打开所述端口则拒绝所述端口请求;如果所述端口请求是一个关闭端口请求,则完成所述端口请求;记录所述端口的关闭;检测由一过程发出的使用网络的网络请求;确定所述发出请求过程的标识;确定是否应允许所述过程访问该网络;以及如果所述过程应被允许访问该网络,则允许完成所述网络请求,如果所述过程不应被允许访问该网络,则拒绝所述网络请求;检测一个文件系统请求;完成所述文件系统请求;接收来自所述文件系统请求的返回信息;确定所述文件系统请求是否是针对一个与受保密的文件相关联的标志文件;以及如果是,则修改所述返回信息以反映该受保密文件的文件属性。
全文摘要
一种系统和方法保护数据的安全性。该数据与一个或多个许可打包在一起,该许可指定允许针对该数据可采取哪些行动。当同意打开该包时该包能被打开,并保持所允许的许可。该数据存储在一个存储库(vault)内,有若干可用的安全措施防止对数据的非授权访问。
文档编号G06F1/00GK1345497SQ00802532
公开日2002年4月17日 申请日期2000年9月29日 优先权日1999年10月1日
发明者乔治·弗里德曼, 罗伯特·菲利普·斯塔雷克, 卡洛斯·穆尔多克 申请人:因弗拉沃克斯公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1