具体实施方式
本发明是有关对使用远程文件系统访问协议的数据进行内容过滤的方法与系统。根据本发明的实施例之一,远程文件系统访问协议数据流,如SMB/CIFS数据流,通过用户端与服务器之间的网络网关进行监测。被读取或写入的文件将缓存在一个共享的区域,并接受一项或多项过滤机制进行关于恶意的、危险性的和/或未授权的内容的检测。例如,一个逻辑上置于用户端与服务器之间的网关可以对使用SMB/CIFS协议进行传输的通过该网关的文件和/或其他数据执行内容过滤操作。过滤机制可以包括但不局限于,例如恶意程序扫描、文件名格式匹配屏蔽、机密信息控制等这样的过滤器。在网关处进行内容过滤的优点是,自动化执行的恶意软件不能够传播到未受保护的系统,使通过远程文件系统访问协议进行传输的各种类型的数据更加安全。
根据本发明的实施例,提供一个文件缓冲区管理架构,能够映射不同的文件ID(FID),在远程文件系统访问协议会话过程中创建文件名称,并将该名称与存储在保持缓冲区(Holding Buffer)内的文件对应,加快保持缓冲区的存储并能够触发合适的内容过滤操作。
根据本发明的一个实施例,将提供一种新颖的管理与扫描缓冲数据的方法,能够应对远程文件系统访问协议的复杂性,这样的复杂性体现在任何时间内对共享文件的任何部分允许多个用户操作,甚至可以在操作中出现的多个线程执行动作(读取/写入)。本发明中还包括管理缓冲数据的高效的方法。
本发明的一个实施例提供了一种当保持缓冲区存储满后在不跟踪或查询该保持缓冲区内未更改分区的情况下快速判定数据的方法。
重要的是,本发明所述在网络网关应用的各种内容过滤系统与方法同样可以应用于其他逻辑上置于用户端与服务器之间的其他虚拟或物理网络设备或程序,例如防火墙、网络安全部件、虚拟私有网络(VPN)网关、交换机、桥接部件、路由器或类似的设备部件。
以下将进行细节性的描述以助于更好的理解本发明。但是,对于熟悉本技术领域的技术人员来讲,即使没有这样的细节性说明,本发明实施例的实现也是显而易见的。在其他情况下,所示方框图中均使用公知的结构与设备。
下面将参考附图进行说明,附图中相同的功能元件使用相同的编号。上述附图用于解释本发明,并不作为对本发明的限制,具体实施例和应用与本发明的原理是一致的。所描述的详细的应用是用于本领域的技术人员实践本发明,应该理解,在不脱离本发明的精神和范围内,可以做其他应用以及对各种元件做出结构修改和/或替换。因此,下面的描述并不用于限制本发明。另外,本发明所述的各种实施例可以运行于通用计算机中的软件,专门的硬件或者软件和硬件的组合方式来执行。
本发明的实施例可以提供作为一个计算机产品,包括一存储指令的机读介质,能够被计算机设备所使用执行操作。机读介质可以包括但不局限于一般形式的计算机可读介质包括,如,软盘、软碟、硬盘、磁带或者任何其它磁性介质、CD-ROM、任何其他光学介质、打孔卡片、纸带、任何其它有孔图案的物理介质、RAM、PROM、EPROM、FLASH-EPROM、闪存驱动器、记忆卡、任何其它记忆芯片或者卡带、下文所述的载波,或者任何其它计算机可读的介质。此外,本发明的实施例也可以是下载的计算机程序产品,所述程序可以使从远程计算机通过通信链接(例如调制解调器或网络连接)传输的载波或其他传播介质传输的数据信号到达所要求的计算机。
虽然在此仅详细阐述本发明中针对服务器信息块协议(SMB)/公共网络文件系统(CIFS)的实施例,但本文所述的方法与系统同样适用于其他远程文件系统访问协议,如Samba,网络文件系统(NFS:Network File System),Not QuiteNFS,优化远程文件系统访问(ORFA:Optimized Remote File-system Access),Apple文件协议(AFP:Apple Filing Protocol),网络核心协议(NCP:NetwareCore Protocol),Kerberos,远程文件系统(RFS:Remote File System),OS/400文件服务器文件系统(QFileSvr.400:OS/400 File Server file system)。
以下是本发明所涉及的术语介绍:
“连接”或“连结”以及相关的术语在操作范畴中使用,并不单单局限在直接连接或连结。
“用户端”通常情况下指在用户/服务器范畴中向一个网络中的另外的程序、进程或设备(服务器)请求信息或服务的一项应用、程序、进程或设备。需要说明的是,“用户端”与“服务器”是相对而言的,一项应用程序对于一个应用来讲是作为用户端,但对于另一个应用来讲是服务器。“用户端”也包括在一个请求应用、程序、进程或设备之间向一个可能作为服务器,如FTP用户,发起连接的软件。
“内容过滤”通常是指对在一个用户端与服务器之间传输的文件和/或其他的数据进行监控或扫描,如恶意程序扫描、文件名称模式屏蔽、机密信息控制以及类似的操作。
“在一个实施例中”、“根据本发明的一个实施例”以及类似的表达通常指下文中的特殊的性能、结构或特点包括在本发明的至少一个实施例,以及可能包括在本发明的不止一个实施例中。需要说明的是,这样的表达并不特指同一个实施例。
“网络网关”通常涉及一个网络间的系统,该系统可以将两个网络连接在一起。“网络网关”可以实施作为一项软件或硬件,或是二者的结合。根据实施情况,网络网关可以在从程序协议到底层信令的任何级别的OSI模式下操作。
如果在陈述一个部件或功能中使用了“可能”“可以”“能够”这样的表达,是指这样的部件或功能并不是必须包括或具有。
“代理”通常是指中间设备、程序或代理,处于作为另外的用户端发起或转发请求的一个服务器或用户端。
“远程文件系统访问协议”通常是指使网络文件能够共享的协议。例如,远程文件系统访问协议可以允许用户端程序以连续或不连续的方式访问互联网(Internet)或在特定的内部网络之上的远程文件。远程文件系统访问协议包括但并不局限于(SMB:Sever Message Block)/公共Internet文件系统(CIFS:Common Internet File System),Samba,网络文件系统(NFS:Network FileSystem),Not Quite NFS,优化远程文件系统访问(ORFA:Optimized RemoteFile-system Access),Apple文件协议(AFP:Apple Filing Protocol),网络核心协议(NCP:Netware Core Protocol),Kerberos,远程文件系统(RFS:Remote FileSystem),OS/400文件服务器文件系统(QFileSvr.400:OS/400 File Server filesytem)。
“请求”,除非内容要求改变其用法,通常是指由用户端向服务器发出的一个远程文件系统访问协议请求或命令。根据本发明的SMB作为远程文件系统访问协议的一个实施例,一些命令可以与相同的请求链接起来发布。例如,打开文件与读取文件。这些类型的命令可以作为ANDX命令。
“回应”,除非内容要求改变其用法,通常是指由服务器向用户端发出的一个远程文件系统访问协议回应。“回应”通常是,但是并不是必须是针对用户端的一请求做出的回复。
“响应”包括全部或部分的响应。
“服务器”通常情况下指在用户/服务器范畴中对一个网络中的另外的程序、进程或设备(服务器)请求信息或服务做出回复的一项应用、程序、进程或设备。“服务器”也包括可以指可能能够信息提供或服务的软件。
“共享”在本文用作名词性质时,通常是指例如一个文件系统目录这样的资源,能够通过远程文件系统访问协议进行共享。“共享”典型的指代一个文件目录或一项“共享名称”。共享名称并不需要与实际被共享的客体具有相同的在服务器上命名的真实名称。例如,目录路径“/My_Documents/Clients/Client_#1/”可以是更简短以及更明确的名称“Client_#1_Files”。当通过一远程文件系统访问协议访问该共享资源时,该共享资源的名称可能替换该目录文件真实的名称。例如,如果服务器命名为“server”,但是到共享资源的路径可能被远程文件系统访问协议指定为“\\server\Client_#1_Files”。在一个实施例中,在发起一个远程文件系统访问协议会话时,服务器分配一个成为Tree ID(TID)的特殊标识符以在会话过程中识别共享资源。
“透明代理”是一种特殊形式的代理,其只执行给定协议的一套子集,允许未知或一般的协议指令在不被改动的情况下通过。透明代理的优势在于,用户端使用的完整代理需要针对该代理编辑用户端的配置文件,与之相比较,透明代理不需要执行这样额外的配置。
本发明的一个或多个实施例可以包括以下各种特征的结合:
1.在网络网关内运行一个代理,截取用户端与服务器之间的远程文件系统访问协议请求/回应,并对二者之间交换的数据执行内容处理以做出响应。
2.对与该代理有关的每个文件与会话进行单独共享的缓冲保持,并可以通过远程文件系统访问协议实现用户端与服务器之间数据被多个程序和/或线程读取和/或写入。
3.快速有效地判断一个可能已在非连续的方式下被修改或访问过的保持缓冲区是否已满的机制。
4.在一个保持缓冲区内执行将多个文件ID(FID)映射到相同文件操作并跟踪其他额外的信息的机制。
5.对发现被感染或被其他过滤器检测到受感染的文件的限制访问的机制。
根据本发明的一个实施例,一个新的代理截取向内的SMB/CIFS请求与回应,并扫描在用户端与服务器之间的往来的文件。
根据本发明的一实施例,使用一项缓存机制,通过保留用户端与服务器之间往来的数据拷贝从而对其进行内容过滤。多个用户程序操作或一个用户端的多个用户程序和/或线程可以同时,并可能是在文件的不同区域访问同一个服务器文件。那么,缓冲区中对每项线程和/或操作的内存分配可能导致网关耗尽内存。更进一步来说,每项线程和/或操作对缓冲区的使用可能导致缓冲区在一个特殊的会话中发生局部充满,那么就会延迟或阻止缓冲数据的内容处理。因此,根据本发明的一实施例,一个单独的共享保持缓冲区便完成了执行操作。这种情况下,每项线程和/或操作引用相同的缓冲区并因其对缓冲区的访问而导致缓冲区的部分存储满。本发明提供的共享缓冲保持机制的优势在于节省了内存并允许缓冲区能够更快速的存储满从而增加触发内容处理的可能性。
本发明的一实施例中,对保持缓冲区的内容处理是由对保持缓冲区存储满(或被完全修改)的响应来触发的。根据一实施例,使用率表格与空闲指针(FreePointer)方法可跟踪保持缓冲区存储的程度并更有效地判断缓冲区的可用空间。
根据SMB/CIFS协议,文件名可以使用文件路径与tree(树)标识符(TID)结合的方式作为唯一性的文件标识。根据本发明的一实施例,该名称可以用于一特殊列表中以识别一个已经打开的文件并将其与一个文件标识符(FID)建立联系。应该注意的是,几个操作可能打开的是同一个文件并获得不同的FID。因此,根据本发明的一实施例,提供了一种可以将多个涉及相同的文件FID映射到一个保持缓冲区内的机制,该机制是通过文件映射列表与保持缓冲区数据列表而实现的。
在本发明的一实施例中,提供了一种对受感染的文件限制访问的方法。假设一个远程文件系统访问协议允许进行局部(例如,随机或连续性)文件访问,一旦网关检测到一个文件已受感染,该文件的分区已经分别被用户端或服务器读取或写入。其结果将是服务器或用户端可能含有被病毒感染的部分文件。根据一实施例,一旦网关检测到受感染的文件,在远程文件系统访问协议回应中相应的错误代码将返回到用户端,拒绝用户对文件的访问和/或触发用户端采取适当的动作。
图1所示是根据本发明所使用的一简化网络结构的示意图。如图所示,一个或多个远程用户端115通过公共网络100与一网络网关105,与一本地局域网络(LAN)110进行通信连接;在该连接中,该网络网关执行以下所述的将与远程文件系统访问协议数据流有关的各种创新性的内容过滤方法。本实施例中,该网络网关105也与一邮件服务器105、一网站服务器160以及一域名服务器(DNS)170连接。
图1所示的网络结构中,LAN110中包括一个或多个打印机140、一个或多个服务器130与一个或多个本地用户120。根据一实施例,远程用户端115、本地用户120与服务器130使用一远程文件系统访问协议相互共享资源,如目录文件树。本发明一实施例中,网络网关105包括一透明远程文件访问协议代理,能够截取用户端远程文件系统访问协议请求与服务器远程文件系统访问协议回应。因为代理是透明的,对每个请求与回应均不需要处理器(Handler)来实现。实际上,根据本发明的一实施例,只有很少的请求与回应可以真正触发在部分透明代理中进行的任何实质性的内容过滤。例如,处理器(Handler)对请求/回应能够执行的便是发起会话、打开文件、关闭文件、读取文件、写入文件与关闭文件的操作。所有其它不使用代理的请求与回应将安然通过服务器/用户端。
需要说明的是,在本实施例中远程用户端115与本地用户端120在共享存储的本地文件时可以相互作为服务器。
图2所示是网络网关各功能性模块与用户端210和服务器220之间的相互作用示意图。在本实施例中,只有一个用户端,如用户端210;一个服务器,如服务器220;与网络网关200相互通信作用,如图所示。应该注意的是,可以有很多本地和/或远程用户端与服务器可通过网络网关200相互连接通信,以及相互之间直接进行通信。
根据本实施例,网络网关200,可以是一个虚拟或物理的设备,具有三个相互作用的功能模块,包括SMB/CIFS代理、文件缓冲器240以及内容处理器250。在一实施例中,SMB/CIFS代理230是透明代理,向处理器(Handler)提供与内容过滤活动有关SMB/CIFS请求/回应,并允许与内容过滤活动无关SMB/CIFS请求/回应通过。
根据以下所述的详细信息,该文件缓冲器240将保存一份用户端210与服务器220之间从共享资源221读取与写入的文件数据拷贝,以便能够执行内容过滤操作。
根据本发明的一实施例,内容处理器250对文件缓冲器240中存储的数据执行内容过滤操作。内容处理器250可以预先监控文件缓冲器240,以判断适时执行内容过滤操作,内容过滤操作可以定期发起或作为外部事件(例如,文件缓冲器和/或SMB/CIFS代理230发起的请求)的响应而执行。在本实施例中,内容处理器250包括一个反病毒(AV:antivirus)过滤器251与一个或多个其他过滤器252。该AV过滤器251可以应用当前或未来的病毒检测方法,例如扫描、完整性查看、侦听、启发式扫描以及类似方法,以判断在扫描的数据中是否含有恶意代码。一个或多个其他过滤器252可以执行文件名模式屏蔽、机密信息控制及类似操作。在本发明的一个实施例中,内容过滤器250是一个由Fortinet公司(Sunnyvale,CA)开发的集成FortiASICTM内容处理器芯片。或在另一实施例中,内容处理器250可以是一个专门的协助处理机或软件,协助从主处理机转移内容处理任务。
在当前实施例中,SMB/CIFS代理230、文件缓冲器240与内容处理器250均集成在相同的网络设备中或作为设备的一部分,在其他实施例中,一个或多个SMB/CIFS代理230、文件缓冲器240与内容处理器250可以安置在距离与其他功能设备较远的地点。根据本发明的一实施例,执行SMB/CIFS代理230、文件缓冲器240与内容处理器250功能的硬件装置或软件通常被安置在或被分散在一个或多个网络(Internet)和/或网络设备可访问的LAN中,如一个或多个网络网关、防火墙、网络安全设备、交换机、桥接设备、路由器、数据存储设备、计算机设备以及类似装置设备。在一实施例中,独立的功能设备所提供的功能性可以各种形式结合。例如,文件缓冲器240可以集成在SMB/CIFS代理230中或SMB/CIFS代理230集成在内容处理器250中。
以上说明是为了能够阐述在SMB/CIFS协议序列下应用本发明的各种实施例,这样的说明并不限制本发明的发明范围,而且所述的方法同样适用于远程文件系统访问协议。
图3所示为根据本发明的实施例,所使用的计算机系统。该计算机系统300可以是执行一个或多个SMB/CIFS代理230、文件缓冲器240与内容处理器250功能的网络网关、防火墙、网络安全设备、交换机、桥接设备、路由器、数据存储设备、服务器和/或其他网络设备或这些设备的一部分。根据图3所示,计算机系统300包括一个或多个处理器305,一个或多个通信接口310,主内存315、只读存储320、大容量存储器325,总线330,以及可以动存储介质340。
处理器305可以是英特尔IntelItaniumor Itanium 2处理器,AMDOpteron或Athlon MP处理器或本领域熟悉的其他处理机。
通信接口310可以是物理和/或逻辑接口。例如,通信接口可以是与基于调制解调器的拨号连接的任何RS-232接口、10/100以太网接口、或铜或光纤的千兆接口。通信接口310也可以根据计算机系统300连接的网络如局域网(LAN)或广域网(WAN)进行选择。
通信接口310也可以是以逻辑连接(如传输控制协议(TCP:TransmissionControl Protocol)或用户数据报协议(UDP:Universal Datagram Protocol))结尾命名。例如,通信协议可以是由互联网地址指派机构(IANA:Internet AssignedNumbers Authority)根据特殊用途指派的以下公知的端口之一,如UDP接口137或138,TCP接口139(用于NETBIOS会话服务-(基于TCP/IP的NetBIOS)),TCP接口445 (基于TCP/IP的SMB)与TCP接口80(用于HTTP服务)。
主内存315可以是随机存储内存(RAM:Random Access Memory)或公知的任何其他动态存储设备。
只读存储器320可以是任何静态存储装置例如用于存储静态信息如处理器305的指令的可编程只读存储器(PROM)芯片。
大容量存储器325可以用来存储信息与指令。例如,硬盘如Adaptec系列的SCSI驱动器、光盘、磁盘阵列如RAID,如Adaptec系列的RAID驱动,或任何其他可以使用的大容量存储装置。
总线330是处理器305与其他内存,存储以及通信模块之间的通信连结。总线330可以是根据所使用的存储装置基于PCI/PCI-X或SCSI的系统总线。
移动存储介质340可以是任何种类的外部硬驱动,软盘,IOMEGA压缩驱动,压缩磁盘-只读存储器(CD-ROM),压缩磁盘-可写存储器(CD-RW),数字录像磁盘-只读存储器(DVD-ROM),可重写式DVD以及类似存储介质。
图4所示是根据本发明的实施例,文件缓冲器所使用的各种数据架构的示意图。文件缓冲器,例如文件缓冲器240,包括一个文件映射表410,一个保持缓冲区数据列表420与一个或多个保持缓冲区430、440与450。每个数据结构可以存储在非连续性存储器或连续性存储器(例如,硬盘驱动或内存卡)、共享内存、分配内存或静态内存中。
在一个服务器上,每个文件分布在一个精确的树型结构中,也就是共享资源中。在发起一个远程文件系统访问协议会话时,用户可以从共享资源中选择一个文件。根据SMB/CIFS协议组,该服务器在该会话过程中对该共享资源分配一个能够识别该共享资源的特殊标识符,称为树ID(TID)。注意,虽然是访问的同一个共享资源,每个单独会话的TID可以是不同的。
根据本发明的一实施例,文件映射表410将一共享资源的同一文件的引用(Reference)通过保持缓冲数据列表420中映射到对应该文件的保持缓冲区或多个保持缓冲区中(例如,保持缓冲区430、440和/或450)。在本实施例中,文件映射表410包括在远程文件系统访问协议会话过程中由每台服务器返回的每个FID的一文件映射表条目413。文件映射列表条目413也包括一个与保持缓冲数据列表420中的保持缓冲区数据列表条目423相对应的指针,该保持缓冲区数据列表条目423包含一个引用计数(Reference Count)421与一个对应打开文件的指向保持缓冲区的保持缓冲区指针422。在本实施例中,每个保持缓冲区数据列表条目423对应一个单独的保持缓冲区,亦或者在其他实施例中保持缓冲数据列表条目423可以对应多个保持缓冲。
根据远程文件系统访问协议,在单个会话中,多个程序和/或同一程序中的多个线程可以使用相同的会话连接对相同或不同的文件发出请求。在SMB/CIFS协议组件中,一个文件名称可以是文件路径与TID相结合的唯一性的标识。该信息可以保存在一个特殊列表中,如文件映射表410,以识别一打开的文件并保存该文件对应的FID。一旦文件是打开的,一个程序的多个线程可以使用相同的FID对该文件进行操作。但是,每次开启一个文件,一个新的FID将被返回。根据详细的执行程序,FID可以包括数字、字符串、二进制数字字符串或其他数据类型。
在SIM/CIFS协议组中,每个程序在SMB包头中标识为一个程序ID(ProcessID)(没有示出)。程序中一个线程使用复合ID(Multiplex ID)(没有示出)标识。这样的话,管理许多被访问的文件以及访问文件中多个线程的状态便比较复杂。而且,一多个程序和/或一个程序中的多个线程可以同时访问相同的文件,并可能是在该文件的不同区域。如果对每个线程均分配缓存区,那么网络网关200将快速耗尽内存,且每个缓冲可能只被会话局部占满,那么将无法应用扫描(假设扫描是因为缓冲器存储满而被触发的)。因此,根据本发明的一个实施例,单独保持缓冲区的概念是在一个会话过程中将相同文件的所有引用映射到相同保持缓冲区中。使用基于每个文件与每个会话的单独缓冲的优势在于,每个程序和/或线程将对应同一个缓冲区并在访问过程中占用缓冲区的部份空间。这样不仅节省了内存且使缓冲区能够快速充满缓冲区并进行扫描。在其他实施例中,跨会话的同一文件的引用也可以映射到在一打开文件内或会话外使用的一个常规保持缓冲区或多个缓冲区中。
在图4中,已修改的保持缓冲区430、440与450的分区以阴影部分示出,没有被修改的分区以无阴影表示。在一个实施例中,该保持缓存区与打开文件的大小相对应,保持缓冲区中被修改的分区表示用户从服务器中读取,或写入到服务器中的数据部分。
图5所示是常规的远程文件系统访问协议会话操作简化说明的流程图。在流程505中,用户端程序发起一个到服务器的连接,并发布一个通信协商请求指令。通信协商请求用户指令是用来判断服务器的容量并决定各种设置,如错误代码格式、文件名称路径格式(统一的字符标准,长文件名支持等)以及各种其他选项。根据SMB/CIFS协议组,在两台设备利用SMB开始通信会话之前,需要协商使用的CIFS语言。SMB_COM_NEGOTIATE用户指令是用户端发给服务器的第一个信息。该用户指令包括用户端所支持的SMB语言列表信息。作为对协议请求指令的响应,在流程510中,服务器将有关服务器自身的容量、错误代码格式与文件名称路径格式信息返回到用户端。当连接请求被接受时,服务器的回应表示用户端应该使用的SMB语言。
在流程515中,用户端程序发出一个树连接指令,该命令包括在SMB/CIFS协议的数据中,含有用户端需要访问的共享资源的名称。在流程520中,服务器打开共享资源并且如果文件成功打开后将向用户端在SMB包头中提供一个TID,用户端可以使用TID与有关该共享资源的后续请求进行连接。
在流程525中,用户端程序发布一个打开指令(例如,相对于该TID,包含用户端需要打开文件的名称的SMB_COM_OPEN用户指令)。流程530中,服务器试图打开被请求的文件待成功打开该文件将向用户端返回该文件的大小以及一个FID,用户端在对该文件的进行后续操作时需提供该FID。
在流程535中,用户端程序发布读取和/或写入指令。根据SMB/CIFS协议,SMB_COM_READ用户端指令包括TID、FID、文件偏移值以及读取文件的字节数。同样,SMB_COM_WRITE用户端指令包括TID、FID、文件偏移值、数据块的大小(一些情况下)以及写入的数据。在540中,服务器从被访问的资源文件中返回指定偏移量的文件或将指定偏移量的文件写入被确定的文件中。
在流程545中,用户端程序发布一个关闭指令以关闭TID与FID表示的文件。550的操作流程中,服务器关闭该文件并返回一个关闭成功或错误代码到用户端。最后,在会话结束时,用户断开与TID命名的共享资源的连接(没有示出)。例如,在SMB/CIFS协议传输情况下,断开连接可以表示为用户端发布一个SMB_COM_TREE_DISCONNECT指令。
图6所示,为根据本发明的实施例,逻辑上置于在用户端与服务器之间的SMB/CIFS代理执行的远程文件系统访问协议检测处理的流程图。概念上,透明SMB\CIFS代理可以放置在图5中垂直虚线所示的位置。同样的,该SMB/CIFS代理相对用户端501来讲可以作为一个服务器,相对服务器502来讲可以作为一个用户端。
根据本发明的一个实施例,远程文件系统访问协议代理与网络网关连接,截取用户端远程文件系统访问协议请求与服务器远程文件系统访问协议回应。在一个实施例中,处理器(Handler)只需要执行一套请求与回应的子集,且因为远程文件系统访问协议代理可以使透明代理,只有部分请求与回应涉及内容过滤的操作。例如,在SMB/CIFS协议组中,操作员对有关请求与回应要做的只是发起一个会话(例如,SMB_COM_NEGOTIATE和/或SMB_COM_SESSION_SETUP_ANDX),打开一个文件(例如,SMB_COM_OPEN),读取文件(例如SMB_COM_READ),写入文件(例如SMB_COM_WRITE)与关闭文件(例如SMB_COM_CLOSE)。其他不使用代理的请求/回应将原封通过到达服务器/用户端。
远程文件系统访问协议请求/回应被截取后,在判断流程605中,远程文件系统访问协议根据远程文件系统访问协议命令或接收到的回应的类型做出判断是否执行扫描操作。如果远程文件系统访问协议请求/回应是来自服务器的通信协商回应,那么接着进行到610操作流程。如果请求/回应是从用户端接收的打开回应,那么进行操作流程615。如果请求/回应是从服务器得到的读取回应或从用户端接收到的写入请求,操作将执行流程640。在本发明一个实施例中,对于所有的其他请求与回应执行流程630,在不做任何更改的情况下到达服务器或用户端。
在流程610,被截取的远程文件系统访问协议请求/回应被判断为从服务器发送到用户端的通信协商回应。根据本发明一实施例,协议生成的该错误代码格式并将在该回应中返回到用户端,协商错误代码格式被存储起来以在后续进行的修改回应中使用。操作流程610完成后,继续流程630。
在流程615,被截取的远程文件系统访问协议请求/回应被判断为从服务器发送到用户端的打开回应。如果之前发布到开放回应的请求在服务器上反应是成功的,服务器将对用户端返回一个FID以及该打开文件大小的信息。根据本实施例,一旦接收到打开回应,新的文件映射列表条目413将被插入到文件映射表410与FID411,并同时将数据列表指针412初始化。根据本实施例,将对FID创建一个特殊映射发送到保持缓冲区。需要注意的是,一些操作可以同时打开相同的文件并获得不同的FID,但是根据本发明的各种实施例,这些不同的FID将被映射到同一个保持缓冲区内。
在流程620中,判断保持缓冲区内是否已存在打开的文件。如果不存在,将继续流程625。如果缓存中存在已经打开的文件,操作将继续流程635。
流程625中,创建一个保持缓冲区并初始化对应的保持缓冲区数据表条目423。根据本发明的一实施例,每个保持缓冲区数据列表条目423中包括一个引用计数421与保持缓冲区区指针422,引用计数421初始化到1且保持缓冲区指针422初始化到保持缓冲区的起始地址。流程625执行完毕后,继续流程630。
流程630中,使请求/回应通过并到达服务器/用户端。操作继续到流程605。
在流程635,之前已经对该文件创建了一个保持缓冲区。从而,在一个实施例中,在会话间对于每个打开的文件只使用一个单独的保持缓存,保持缓冲区的保持缓冲区数据列表条目423中的引用计数421与不断增加的保持缓存的容量相对应,以反映存有对文件的其他引用。
在流程640,被截取的远程文件系统访问协议请求/回应被判断为从服务器发送到用户端的读取回应,或是用户端写入服务器的写入请求。根据本实施例,被截取的数据(例如,服务器返回的针对用户端的读取请求的回应,或是用户端写入服务器中的指定文件的数据)将以适当的偏移值被写入到对应的保持缓冲区内(例如,保持缓冲区430、440与450)。根据本实施例,每个保持缓冲区(例如,保持缓存区430、440与450)拥有一个空闲指针(例如空闲指针730)以及使用率列表(例如使用率列表710)以便能够有效地判断保持缓冲区的存储程度。空闲指针与使用率列表对保持缓冲区写入数据的回应更新将在下文进行叙述。
在流程645,判断是否能够发起对保持缓冲区(例如,保持缓冲区430、440与450)进行扫描的一项或多项规则。在一个实施例中,所述规则包括保持缓冲区已经被各种用户端程序访问该文件的读取与写入的请求全部占用。在另一个实施例中,对保持缓冲区中未被修改的分区进行查看以判断该保持缓冲区的存储情况。亦或者,可以执行如图7所示的有效的存储饱和度测试。
根据本发明的一实施例,触发内容检测的其他条件包括表示数据被附加在文件末尾的写入请求。实践证明在文件后附加数据是常见的文件感染型病毒的表象。对现存的文件感染型病毒的各种形式进行的试验显示当文件感染型病毒试图将病毒传播到共享资源时,在多数情况下,先要读取文件的报头并进行一些更改,然后将自己附在该文件末尾。鉴于这样的病毒首先获取报头并进行更改的情况,可在保持缓冲区中获取报头信息以及试图附加的数据进行内容过滤。缓冲区中剩余部分与检测病毒无关。那么,在检测到这样的用户端发布的每个附件写入行为操作时能够对写入附件有关的数据执行内容过滤。
可以使用各种触发内容过滤的条件,例如检测到文件感染型病毒其他常见的表象。在一些实施例中,不管保持缓冲区的存储空间是否已满都会进行定期的扫描。在任何情况下,如果满足一项或多项扫描规则,那么操作将继续进行流程650;否则,继续进行流程630。
在流程650,扫描保持缓冲区。如前文所示,内容扫描或内容过滤可以包括使用一项或多项过滤机制对保持缓冲区进行恶意代码、危险或/和未授权的内容进行检测。内容过滤机制可以包括但不局限于恶意软件的扫描、文件名称模式屏蔽或机密信息的控制等。
在流程655,判断危险或未授权内容是否存在。如果在检测中发现上述内容,将执行流程660中的操作。如果没有检测到任何危险或未授权的内容,将继续到流程630。
流程660中,危险或未授权的内容已从文件中读取或写入文件。因此,对该文件的后续访问将被屏蔽并通过修改服务器的回应返回一个适当的错误代码。操作将进行流程605。
如果检测到一文件被感染,那么部分文件将分别被用户端读取或写入服务器。根据本发明的一实施例,第二个保持缓冲区,例如阴影缓冲区(没有示出)只记录从服务器读取的数据,该数据可以用于说明可能的文件感染情况。阴影缓冲区可以有自己的使用率列表,该缓冲区逻辑上链接到主保持缓冲区。如果一个病毒,例如,读取了一文件的报头,最初的读取数据将被同时存储在保持缓冲区与阴影缓冲区中,在当病毒试图修改报头并将其重新写入到服务器时;只有保持缓冲区包含修改后的报头,阴影缓存中将保持原来的未修改的报头。当病毒将其附在文件后并最终被发现,附加的数据只能被添加到保持缓冲区而不会添加到阴影缓冲区中。那么,在一些实施例中,阴影缓冲区保存的干净版本可以用来恢复服务器中的原文件。假设病毒写手开始对阴影缓存机制采取应对操作,例如,如果病毒先采取读取并写入,之后在重新读取同一文件模块,那么一种解决措施可以为只将第一次从给定文件模块的读取存储在阴影缓存中。
在一个实施例中,通过使用在会话协商过程中获取的有关错误代码格式的信息,可以重新创建一个回应,其中包含了拒绝用户访问文件的错误代码。或者/而且,返回的该错误代码可以触发一些用户端程序中的其他动作,例如关闭文件和/或本地内容扫描操作。同时,服务器可以包含被病毒修改的片断文件,这些文件不可能被打开或执行。但是,该片断文件可能被安装在服务器中的反病毒软件检测到。在接收到对于读取与写入请求进行响应的错误代码后,用户端将选择关闭该文件。需要说明的是,由于指令链的一个或多个先前指令可能会被继承但是后续的指令会失败,因此执行SMB ANDX命令链连接时需要多加注意。指令链的结构应该仍然被保存并对用户端做出回应,以防止兼容性的问题。
在流程665中,被截取的远程文件系统访问协议请求/回应被判断为是用户端发布到服务器的关闭请求。根据所述的实施例,这样的操作将使文件映射列表条目413之一从文件映射表410中删除。
在流程670中,在相应的保存缓冲区数据列表条目423中的引用计数421将逐步递减以对应说明对文件采取的较少的操作。
在判断流程675中,判断对当前的文件没有进行引用。如果保持缓存中的引用是零,那么继续流程680的操作;如果保持缓冲区中还存在引用,将转到流程630。
如果保持缓冲区中的引用为零时,保持缓冲区便可以删除了。但在本实施例中,保持缓冲区在流程680中只被标记为“可以被删除”。一个不同步的清除操作可以删除保持缓存,如果保持缓存在最后关闭之后的很短时间内被再次访问的话,那么保持缓存便有机会重新建立。例如,当一个用户在共享资源中编辑文件时,通常所编辑的整个文件将在用户计算机读取后关闭,紧接着再打开进行写入操作。
需要注意的是,为了明晰并简化本发明实施例的说明,以上叙述忽略了有关SMB特性、指令链的说明。在有关SMB的操作中,一些指令能够在同一个请求中链接起来。例如,打开文件与读取文件这两个指令。这类型的指令称为ANDX指令。本文所述的实施例中有关代理的操作很难使用流程图说明,但是为了能够正确的说明,本实施例中将根据这些指令链执行代理操作并按照指令中的任何数据与信息进行操作。
图7A到图7D是一保持缓冲区与一个对应的空闲指针(Free Pointer)以及用于判断是否保存缓冲区的容量已满的使用率表格的各个状态的示意图。
各种远程文件系统访问协议,如SMB,可能会导致一些操作困难。例如,SMB协议是允许以任何的偏移量读取或写入文件,那么就无法保证在一个固定的时间保持缓冲区内的整个文件是可用于配合内容处理。这样的结果,根据本实施例,需要使用一种能够快速有效的表示保持缓冲区是否已经存储满的跟踪机制。
根据本发明的一实施例,完整的跟踪方法包括使用一个专门的使用率列表710与一个称为空闲指针的指针730。使用率列表710可以是一个较小的缓冲器,例如是正常缓冲区720的八分之一的片断缓冲器,使用率列表710中的每个比特711代表多个比特的数量,例如保持缓冲区720中的一个字节721。实际保持缓冲区720中的一字节被修改后,对应的在使用率列表710中便显示缓冲区中被修改的部分。
在一个实施例中,通过一些指示性的方法(例如,全零)将使用率列表初始化来判断保持缓冲区中对应的数据块是否从服务器读取或写入服务器中。保持缓冲区可以在创建时通过例如全部被初始化为零、一个重复的字符或任意的字符的方式被初始化。根据本实施例,对应的数据模块,如字节,在保持缓冲区中已被修改,在使用率列表中将以已设定的对应几个比特表示,对应没有修改的部分将在使用率列表保持其之前的状态。这样可以保证读取到保持缓冲区中的数据与其初始状态的数据是相同的数据,例如初始为0的保持缓冲区读取到一零数据块;但是,对零数据块的读取将在使用率列表中以设定对应的比特再现。同一个数据块或一数据块的同一部分可能被重复读取或写入,但是由于使用率列表中的这部分数据已被修改,所以并不影响使用率列表的状态。
在图7A到图7D,使用率列表中的比特711设置为零,表示保持缓冲区720中对应的字节721是未被修改的(例如,表示该文件的该字节没有被用户端读取或还没有写入)。保持缓冲区720中未修改的数据以非阴影表示,已经修改的数据用阴影来表示。
图7A所示为使用率列表710、空闲指针730以及保持缓存720处于数据被读取或写入相关的文件之前的初始状态。如图7A所示空闲指针730初始指向在使用率列表710的起始位置。
如图7B所示,保持缓冲区720中的前64字节都已经被修改,当一个字节(使用率列表710中的8个比特代表实际保持缓冲区中的8字节)存储满后,空闲指针730就跳到下一个比特。在保持缓冲区720还没有存储满的时候(如图7A至图7C所示),空闲指针730将总是指向使用率列表710中首个还没有存储满的字节在的位置。
应该注意的是,如图7C所示,保持缓冲区720中除了空闲指针730,同时也可以偏移量保存文件,但是空闲指针730不会移动,直到当前的位置被存储满。在本实施例中,只要保持缓冲区720没有存储满,空闲指针730将始终指向在使用率列表710中最近的未被修改的数据块上。
如图7D所示,如果空闲指针730已经递进至超出使用率列表710(例如设置为零)的末尾,那么整个保持缓冲区720已经在此刻存储满可以对其存储内容进行安全的操作。该跟踪机制,不需要对文件中的每个空闲的区块进行跟踪(和/或搜索)从而降低了操作进行的难度同时增加了运行的效率。
在本发明的其他实施例中,不需要使用空闲指针730,取而代之的是对使用率列表711进行逻辑与以判定保持缓冲区中是否存在任何未修改的分区。一些实施例中,可以使用多个指针跟踪一保持缓冲区中空闲或已经存储满的区域。
根据图7A至图7D所示,使用率列表的要素可以由与保持缓冲区中一个比特对应一个字节组成;使用率列表的要素还可以是包括一个或多个比特、一个或多个字节、以及一个或多个数字或字符串。更进一步,每个使用率列表的要素可以对应保持缓冲区中的一个或多个比特、或一个或多个字节。总而言之,使用率列表中一个比特对应保持缓冲区中n个字节。例如,使用率列表中1比特可以表示一个4字节无符号长整形值(32比特)或一个超长整形值(64比特)或更多。使用率列表中每个比特表示的保持缓冲区中的数据越多,使用率列表就越小;但是,为了优化操作速度,对使用率列表的操作尽可能将数据排列在数据块边界以便能够应用位掩码。最理想的速度应该在32比特处理机中一个使用率列表中1比特对应一个小于或等于保持缓冲区中4字节,或是64比特处理机中一个使用率列表中1比特对应一个小于或等于保持缓冲区中8字节。
虽然本文中提出并描述了一些特殊的实施例。但应该理解的是这些特殊的实施例仅作为示例提出,并不作为对本发明的限制。本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。