本申请所包含的主题与跟本申请同日提交的专利申请《用于执行网络防火墙的基于多层的方法》(代理人标签号:221039)、《用于结合多项网络策略的方法和构架》(代理人标签号:221041)和《用于管理基于网络过滤器的策略的方法》(代理人标签号:221037)的主题有关,这些专利申请的揭示说明被特别包括于此,用作参考。
发明的详细说明
揭示了一种防火墙结构,该防火墙结构允许多层处理(在这里被称作“层”)处的过滤。该结构包括用户模式处理和在操作系统中执行的核心模式处理。作为选择,在操作系统以外的一个或多个程序模块中或在单一操作系统模式以内执行该防火墙结构。
该核心模式处理包括多个层,这多个层包括协议堆栈、核心防火墙引擎以及一个或多个呼出。协议堆栈包括应用层、传输层、网络层和链路层。按需要增加或从该结构中删除额外的层。这些层每个都构成请求层,请求层能够从前一个层或处理那里接收网络信息包和对应的信息包上下文数据。然后,请求层经由层API,将分类请求发给核心防火墙引擎。分类请求包括由请求层接收的信息包、该信息包上下文和与请求层关联的一组层参数。核心防火墙引擎处理该请求,并返回动作。举例来讲,该动作指示该请求层如何处置该信息包(例如,允许或阻断)。如果该动作是允许,则该请求层根据层协议来处理该信息包,将该信息包上下文修改成包括这些层参数,并将信息包和信息包上下文传递到下一个层。如果该动作是阻断,则请求层丢弃信息包,并且不将信息包传递到这下一个层。作为阻断动作的结果,请求层可能会执行额外的功能(例如,在丢弃TCP信息包的情况下,拆毁TCP连接)。
核心防火墙引擎包括层API、一组被安装的过滤器和呼出API。这个被安装的过滤器组中的每个过滤器包括一组过滤器条件和一个关联的动作。核心防火墙引擎通过识别一个或多个匹配过滤器,来处理从该请求层那里被发送的分类请求。这些匹配过滤器具有跟这些层参数和信息包上下文相匹配的过滤器条件。一旦识别这些匹配过滤器,就按过滤器优先级的顺序来应用它们。如果正在被应用的过滤器的这个动作是允许或阻断,则将这个动作返回到请求层。如果该动作是呼出,则将该请求层所发出的该分类请求连同匹配过滤器标识一起传递到这些呼出模块中的一个呼出模块。该呼出模块执行其被编程的功能,并将动作返回到核心防火墙引擎。
核心防火墙引擎按优先级顺序将匹配过滤器应用于信息包,直到至少指定终止动作为止。一旦指定该终止动作,就将它返回到请求层,并且不应用额外的匹配过滤器。如果没有为信息包识别匹配过滤器,则向该请求层通知:不曾发现匹配过滤器;然后,请求层决定如何处置信息包。通常,在没有识别匹配过滤器的情况下,请求层处置信息包,好象返回允许动作一样。
示范用户模式处理包括用户模式防火墙引擎以及一个或多个策略供应器。这些策略供应器从任何合适的来源(例如,易失或非易失存储器)获得策略,或者通过图形用户界面或类似的工具而被用户输入。该策略是用于呈现新的过滤器的信息源,包括过滤器条件和关联动作的集合。
该用户模式也包括该用户防火墙引擎内的核心防火墙引擎的实例,从而允许创建用户模式层。然后,用户模式层使用核心防火墙引擎的用户模式实例来安装过滤器,并且识别与一组参数相匹配的过滤器,这组参数允许在该用户模式以内应用过滤。
在本发明的实施例中,从防火墙引擎到一组呼出模块的呼出接口实质上允许这些防火墙性能的无限扩展。举例来讲,HTTP上下文呼出通过识别可接受的和不能接受的URL地址,来提供双亲控制特点。IPSec呼出验证:应该使用IPSec的信息包已经适当地经历IPSec处理。记录呼出记入符合所建立的标准的信息包,从而促进以后对信息包的检查。侵入检测呼出根据已知的算法来识别可疑的信息包。
参考这些附图(其中,相似的参考数字提及相似的元件),本发明被展示为在合适的计算环境中加以执行。虽然未作要求,但是,将在正由个人计算机执行的计算机可执行指令(例如,程序模块)的一般上下文中描述本发明。通常,程序模块包括执行特殊任务或实施特殊的抽象数据类型的例行程序、程序、对象、部件、数据结构等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于本地记忆存储设备和远程记忆存储设备中。
图1展示了可以在其上执行本发明的合适的计算系统环境100的例子。计算系统环境100只是合适的计算环境的一个例子,它并不意在对本发明的使用或功能性的范围提出任何限制。也不应该将计算环境100解释为具有涉及示范操作环境100中所展示的任何一个部件或部件组合的任何依赖性或要求。
本发明可用于众多其他的通用或专用计算系统环境或配置。可能适用于本发明的众所周知的计算系统、环境和/或配置的例子包括(但不局限于)个人计算机、服务器计算机、手持设备或便携式设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境,以及类似物。
可以在正由计算机执行的计算机可执行指令(例如,程序模块)的一般上下文中描述本发明。通常,程序模块包括执行特殊任务或实施特殊的抽象数据类型的例行程序、程序、对象、部件、数据结构等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括记忆存储设备的本地计算机存储介质和远程计算机存储介质中。
参照图1,用于执行本发明的示范系统包括采取计算机110的形式的通用计算设备。计算机110的部件可以包括(但不局限于)处理单元120、系统存储器130和系统总线121,系统总线121将包括系统存储器的各种系统部件耦合到处理单元120。系统总线121可以是几种类型的总线结构(包括存储总线或存储控制器、外围总线和使用各种总线构造中的任何总线构造的局域总线)中的任何总线结构。举例来讲(不作限制),这类结构包括“工业标准结构”(ISA)总线、“微通道结构”(MCA)总线、“增强的ISA”(EISA)总线、“视频电子标准协会”(VESA)局域总线和也被称作“中层楼(Mezzanine)总线”的“外围部件互连”(PCI)总线。
计算机110通常包括各种计算机可读介质。计算机可读介质可以是可由计算机110存取的任何可用介质,它包括易失和非易失介质、可移动和不可移动的介质。举例来讲(不作限制),计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括易失和非易失的可移动和不可移动的介质,这些介质用关于信息(例如,计算机可读指令、数据结构、程序模块或其他数据)存储的任何方法或技术来加以执行。计算机存储介质包括(但不局限于)RAM、ROM、EEPROM、快闪存储器或其他存储技术、CD-ROM、数字通用光盘(DVD)或其他光盘存储器、盒式磁带、磁带、磁盘存储器或其他磁性存储设备、或可以被用来存储所需信息并可以由计算机110来进行存取的其他任何介质。通信介质通常具体表现为在调制数据信号(例如,载波或其他传送机制)中的计算机可读指令、数据结构、程序模块或其他数据,它包括任何信息传递介质。术语“调制数据信号”意味着一种信号,该信号的一个或多个特征按这样的方式来加以设置或更改,以便为该信号中的信息编码。举例来讲(不作限制),通信介质包括有线介质(例如,有线网络或直线连接)和无线介质(例如,声音、RF、红外线和其他无线介质)。以上任何内容的组合也应该被包括在计算机可读介质的范围以内。
系统存储器130包括采取易失和/或非易失存储器(例如,只读存储器(ROM)131和随机存取存储器(RAM)132)的形式的计算机存储介质。基本输入/输出系统133(BIOS)通常被存储在ROM 131中,该基本输入/输出系统包含有助于在计算机110内的各个元件之间传送信息(例如,在启动期间)的这些基本例行程序。RAM 132通常包含可立即由处理单元120存取并且/或者目前正由处理单元120进行操作的数据和/或程序模块。举例来讲(不作限制),图1展示了操作系统134、应用程序135、其他程序模块136和程序数据137。
计算机110也可以包括其他可移动/不可移动的易失/非易失计算机存储介质。只举例来讲,图1展示了从不可移动的非易失磁性介质读取或对其写入的硬盘驱动器141、从可移动的非易失磁盘152读取或对其写入的磁盘驱动器151,以及从可移动的非易失光盘156(例如,CD ROM或其他光学介质)读取或对其写入的光盘驱动器155。可以被用于该示范操作环境中的其他可移动/不可移动的易失/非易失计算机存储介质包括(但不局限于)卡型盒式磁带机、快闪存储卡、数字通用光盘、数字录像带、固态RAM、固态ROM和类似的存储介质。硬盘驱动器141通常通过不可移动的存储接口(例如,接口140)而被连接到系统总线121,磁盘驱动器151和光盘驱动器155通常由可移动的存储接口(例如,接口150)连接到系统总线121。
以上所讨论的和图1中所展示的这些驱动器及其关联的计算机存储介质为计算机110提供计算机可读指令、数据结构、程序模块和其他数据的存储。在图1中,例如,硬盘驱动器141被展示为存储操作系统144、应用程序145、其他程序模块146和程序数据147。注意,这些部件可以等同于或不同于操作系统134、应用程序135、其他程序模块136和程序数据137。这里为操作系统144、应用程序145、其他程序模块146和程序数据147提供不同的号码,以展示:它们至少是不同的副本。用户可以通过输入设备(例如,键盘162)和定点设备161(通常被称作“鼠标”、“跟踪球”或“触垫”),来将命令和信息输入计算机110。其他输入设备(未示出)可以包括话筒、操纵杆、游戏垫、圆盘式卫星电视天线、扫描仪或类似的输入设备。这些和其他的输入设备经常通过被耦合到该系统总线的用户输入接口160而被连接到处理单元120,但也可以由其他接口和总线结构(例如,并行端口、游戏端口或通用串行总线(USB))来加以连接。监视器191或其他类型的显示设备也经由接口(例如,视频接口190)而被连接到系统总线121。除该监视器以外,计算机也可以包括其他外围输出设备(例如,扬声器197和打印机196),这些外围输出设备可以通过输出外围接口195来加以连接。
计算机110可以在使用与一台或多台远程计算机(例如,远程计算机180)的逻辑连接的联网环境中进行操作。远程计算机180可以是另一台个人计算机、服务器、路由器、网络PC、对等设备或其他共同的网络节点,它通常包括以上相对于计算机110而描述的许多或所有这些元件,尽管图1中只展示了记忆存储设备181。图1中所描绘的这些逻辑连接包括局域网(LAN)171和广域网(WAN)173,但也可以包括其他网络。这类联网环境在办公室、企业范围的计算机网络、内联网和因特网中很普遍。
当被用于LAN联网环境中时,计算机110通过网络接口或适配器170而被连接到LAN 171。当被用于WAN联网环境中时,计算机110通常包括调制解调器172或用于在WAN 173(例如,因特网)上建立通信的其他装置。调制解调器172(可能是内置的,也可能是外置的)可以经由用户输入接口160或其他合适的机制而被连接到系统总线121。在联网环境中,相对于个人计算机110或其各个部分而描绘的程序模块可以被存储在该远程记忆存储设备中。举例来讲(不作限制),图1将远程应用程序185展示为驻留在存储设备181上。将会理解:所示的这些网络连接起示范的作用,可以使用在各台计算机之间建立通信链路的其他装置。
在下文中,除非另有指示,将参照动作和一台或多台计算机所执行的操作的符号表示来描述本发明。照此,将会理解:这类动作和操作(有时被称作“是计算机执行的”)包括用结构化形式来表现数据的电信号的计算机的处理单元所执行的操作。这项操作变换该数据或将其保存在计算机的存储系统中的各个位置,这样,可按精通该技术领域的人所熟悉的方式来重新配置或改变计算机的这个操作。那里保存有数据的这些数据结构是存储器的物理位置,存储器具有由该数据的格式定义的特定属性。但是,尽管前述上下文中描述本发明,但这并不意在起限制的作用,如精通该技术领域的人将会理解的,也可以在硬件中执行下文中所描述的这各种动作和操作。
现在,将参照图2来描述其中使用本发明的防火墙结构的一种网络环境。该网络本质上起示范的作用,因为可在被耦合到任何网络配置的任何网络设备中执行本发明的防火墙结构。该网络环境包括专用网200和公用网202。专用网200和公用网202属于任何合适的类型(例如,局域网(LANs)、广域网(WANs)、内联网、因特网或其任何组合)。
该网络环境包括多个网络设备204、206、208、210和212。网络设备204、206被耦合到专用网200。网络设备210、212被耦合到公用网202。网络设备208被耦合到专用网200和公用网202,并在这两个网络之间提供接口。这些网络设备被耦合到使用任何合适的技术(例如,以太网、1394或802.11(b))的公用网和专用网。这些网络设备被进一步加以执行,作为任何合适的计算设备(例如,个人计算机、服务器、手持设备、打印机、交换器、路由器、桥接器、转发器或类似的设备)。
网络设备208包括防火墙214以及一个或多个过滤器216。防火墙214是根据本发明的结构来加以执行的一个程序模块或一组程序模块,这些程序模块检查在被耦合到专用网200的网络设备204、206、208与被耦合到公用网202的网络设备210、212之间被交换的网络信息包。在本发明的实施例中,防火墙214也检查从专用网200内的网络设备那里被发送的以本地为目的地的网络信息包以及去往那些网络设备的网络信息包。
防火墙214在网络设备208中被加以执行,以保护并控制在专用网200与公用网202之间被交换的网络信息流通量,这被称作“边缘防火墙”。作为选择,防火墙214在如网络设备210中所展示的单一网络设备中被加以执行,并保护该单一网络设备,这被称作“主机防火墙”。该防火墙也能够按同步方式、作为主机和/或边缘防火墙的中央管理集来加以执行,这被称作“分布式防火墙”。较佳地选择执行防火墙214的这个或这些网络设备的布置,以便防火墙214检查它应该保护的、以这些网络设备为目的地的所有网络信息流通量。
过滤器216作为防火墙214的一部分来加以执行。作为选择,过滤器216作为防火墙214可以使用的单独的数据结构的一部分来加以执行。防火墙214和过滤器216执行一种防火墙策略,该防火墙策略被设计成保护网络设备204、206、208避免遭遇来源于被耦合到该公用网的网络设备210、212的恶意攻击。防火墙214也提供增加的功能性(例如,促进双亲控制、侵入检测、记录网络信息包和其他基于增加的过滤器的功能性)。
每个过滤器216包括一组过滤器条件以及一个或多个关联的动作。这些过滤器条件包括参数和信息,这些参数和信息可以从网络信息包(例如,接口号、硬件地址、网络地址、协议类型、端口号和有效载荷数据)中被加以分析或从网络信息包中获得。这一个或多个关联的动作定义执行该防火墙的该网络设备应该如何处置与这些过滤器条件相匹配的信息包。典型的动作包括允许(即,允许该信息包继续网络遍历)和阻断(即,通过丢弃信息包,来排除进一步的网络遍历)。
防火墙214检查当在网络设备208处被接收时穿过网络的网络信息包;并且,通过将这些信息包参数与这些过滤器条件进行比较,防火墙214识别一个或多个匹配过滤器。当这些过滤器条件与这些信息包参数相匹配时,产生匹配过滤器。和过滤器条件一样,这些信息包参数包括从信息包中被加以分析或获得的信息。当防火墙识别匹配过滤器时,执行与这些过滤器条件关联的一个或多个动作。
图3表现了本发明的防火墙结构的实施例的总体视图。该结构提供了一种能力——在网络堆栈的所有层处,使信息包经历过滤器。防火墙提供了中央管理性能,这些中央管理性能允许增加和删除过滤器,并用于识别和解决的过滤器冲突。防火墙结构是可扩展的,这体现在:过滤器层可按需要来被增加和删除,并可以扩大,以包括允许和阻断动作以外的专用功能性。虽然具体参照防火墙和防火墙过滤器来描述本发明,但是,也使用本发明来促进和管理其他的过滤器和策略。作为特殊的例子,本发明适合用来促进和管理被用于“服务质量”(QOS)、“网际协议安全性”(IPSec)套组以及其他的加密协议、鉴定协议和密钥管理协议的过滤器。
防火墙结构包括用户模式处理250和核心模式处理252。用户模式处理250和核心模式处理252作为网络设备中的操作系统的一部分来加以执行。精通该技术领域的人将会理解:操作系统的用户模式处理250和核心模式处理252包括额外的部件,为简单起见,没有示出这些额外的部件。作为选择,在操作系统以外作为一个或多个程序模块或应用程序或在单一操作系统处理以内整体或部分地执行防火墙结构。
核心模式处理252包括网络堆栈254、在这里被称作“核心防火墙引擎256”的第一个防火墙引擎,以及任选的呼出258。总的来说,核心模式处理252通过为网络信息包识别匹配过滤器、根据已知的协议来处理信息包并对如匹配过滤器所指定的信息包执行其他动作,来实施被建立的防火墙策略。
网络堆栈254包括多个层处理,它们在这里被称作“层”,包括数据流层268、传输层270、网络层272和链路层274。本发明的防火墙结构是可扩展的,并且,可按需要来动态地增加和删除额外的层。增加的层的例子包括文件存取层276,该文件存取层根据“服务器主块”(SMB)协议来加以执行。这些层可以与其他程序模块(例如,“超文本传输协议”(HTTP)分析程序模块278)协同运作。
网络堆栈254中的这些层处理入站网络信息包和出站网络信息包。出站网络信息包是正从执行防火墙结构的网络设备那里被传送到网络上的信息包。入站信息包是在执行防火墙结构的网络设备处被接收到的信息包。如图3中所示的相互箭头所指出的,入站信息包从下到上地穿过网络堆栈254,出站信息包从上到下地穿过网络堆栈254。
网络信息包序贯地穿过这些网络层,并由这些网络层序贯地加以处理。根据已知的技术,网络堆栈254中的每个层能够从前一个层或处理那里接收信息包,能够根据规范或协议来处理该信息包,并能够将这个处理过的信息包发送到下一个层或处理。根据本发明,网络堆栈254中的每个层也保持信息包上下文,将该信息包上下文传递到下一个层,将分类请求发给核心防火墙引擎256,并根据防火墙策略来对该信息包采取行动。
信息包上下文是从一个层到另一个层地跟随信息包的数据结构。每个层通过将该层被设计成要加以处理的一组参数(例如,该层被设计成从入站信息包中加以分析的、加入出站信息包的或从信息包的内容中导出的信息)加入该上下文数据结构,来保持该上下文。参照图5来描述被用于信息包上下文的示范数据结构。
由网络堆栈254的各个层执行的这些操作中的一项操作是:通过发出分类请求,来调用核心防火墙引擎。该分类请求是网络堆栈254中的层所执行的调用,请求:识别与信息包相匹配的任何过滤器,并将任何关联的动作(例如,允许或阻断)返回到该层。发出该分类请求的这个层在这里被称作“请求层”。每个层也对由核心防火墙引擎256返回的信息包采取行动。
核心防火墙引擎256包括层API 280、一组被安装的过滤器282和呼出API284。核心防火墙引擎256执行各种功能,包括:(1)保持定义防火墙策略的被安装的过滤器组282;(2)从网络堆栈254中的这些层接收分类请求;(3)根据该分类请求,来识别一个或多个匹配过滤器;以及(4)根据这些匹配过滤器,来向该请求层指示要对信息包采取的任何动作。
这个被安装的过滤器组中的每个过滤器包括一组过滤器条件以及一个或多个关联的动作。如参照图2的描述,这些过滤器条件识别经历这个关联的过滤器动作的这些网络信息包。被安装的过滤器组282中所规定的这些动作包括允许和阻断。经由任选的呼出258来增加额外的功能性。参照图4来描述这些过滤器的示范形式。
层API 280在网络堆栈254中的各个层与核心防火墙引擎256之间提供接口。通过层API 280,请求层将分类请求发给核心防火墙引擎256。分类请求包括如请求层所接收的信息包、如请求层所接收的信息包上下文,以及层参数。这些层参数是由请求层处理(例如,增加或分析)的信息包参数。作为特殊的例子,源网际协议(IP)地址和目的网际协议(IP)地址是当执行该IP协议时由网络层272发送的层参数。层参数也可以包括被加入信息包或从信息包中被加以分析的这些信息包参数以外的信息。作为特殊的例子,这些层参数包括局部地址类型。该局部地址类型由IP层来确定,并作为该分类请求的一部分来加以发送。局部地址类型包括单播、广播、多播、任意点传送(anycast)和类似的类型。参照图6来描述层API 280的特殊实施。
随意地,可使用呼出258来执行允许和阻断过滤器动作以外的增加的功能性。当核心防火墙引擎256为该信息包识别匹配过滤器(包括作为关联的动作的对这些呼出模块之一的呼出)时,执行呼出。核心防火墙引擎将如请求层所发出的分类请求(即完全信息包、层参数和信息包上下文)连同匹配过滤器的标识一起经由呼出API 284发送到呼出模块。在本发明的实施例中,防火墙结构包括呼出基本组258。和层一样,按需要将额外的呼出加入可扩展的防火墙结构。参照图6来描述呼出API 284的特殊实施。
用户模式处理250包括被称作“用户防火墙引擎260”的第二个防火墙引擎,以及被识别为“PP1”、“PP2”和“PP3”的一个或多个策略供应器262。策略供应器262是将防火墙策略(即被安装的过滤器282)加入防火墙结构的处理。可以使用任何处理来完成这项任务。一个例子是传统(legacy)IPSec策略服务(LIPS)。传统IPSec策略服务增加对应该使用IPSec协议(例如,“封装安全协议”(ESP)和“鉴定头部协议”(AH))的网络信息流通量进行定义的过滤器。作为特殊的例子,传统IPSec策略增加防火墙策略,该防火墙策略指出:必须根据ESP协议,来为所有未经请求的明文的入站信息包加密。该策略进一步规定:应该阻断任何未经请求的入站信息包(即未加密的信息包)。策略供应器262从任何合适的来源(例如,易失或非易失存储器中的数据,或允许网络管理员或系统用户直接输入策略的“图形用户界面”(GUI))获得该策略。用户防火墙引擎260将该策略转换成新的过滤器,即,按照过滤器条件来定义该策略,并将这个新的过滤器加入被安装的过滤器组282。
用户防火墙引擎260也执行过滤器判优和冲突解决功能。当策略供应器262为用户模式防火墙引擎260提供新策略时,用户防火墙引擎确定:起因于这项新策略的这个新的过滤器是否与被安装的过滤器282中的任何过滤器有冲突。标题为《用于管理基于网络过滤器的策略的方法》的美国专利申请(代理人标签号:221037)中描述了一种适合在本发明的构架中使用的、用于识别和解决冲突的方法的例子。
该结构进一步包括过滤器引擎API 266,过滤器引擎API 266构成用户模式防火墙引擎260与核心防火墙引擎256之间的接口。过滤器引擎API 266提供用于用户防火墙引擎260的机制,以将新的过滤器加入被安装的过滤器组282或从被安装的过滤器组282中除去现存的过滤器,并用于检查被安装的过滤器282,以便可以检测和解决过滤器冲突。可由策略供应器262获得的管理API 290也提供一种机制,以增加过滤器并从该结构中除去过滤器。
用户模式防火墙引擎260也包括过滤器模块294。过滤器模块294是用户模式250中的核心防火墙引擎256的实例。用户模式防火墙引擎260中的过滤器模块294的这个实例允许用户防火墙引擎260为在这里被称作“用户模式层282”的一个或多个用户模式层处理复制核心防火墙引擎256的各项服务。用与创建核心模式层相同的方法来增加用户模式层282。由于过滤器模块294是核心防火墙引擎256的用户模式实例,因此,将会理解:这里为核心防火墙引擎256而描述的任何功能性也可应用于过滤器模块294。
密码模块API 288在用户策略引擎260与密码模块296之间提供接口。使用密码模块API 288来用信号通知该密码模块:需要建立SA。
该防火墙结构包括引导时间策略286和故障保险策略264。执行引导时间策略286和故障保险策略264,以提供被安装的过滤器基本组282,同时,该系统处于过渡状态,例如当该网络设备被初始化(例如,被开启、重置或被重新启动)时。在此过渡状态期间,存在潜伏期,在此潜伏期间,不建立用户模式250,并且,不可能经由策略供应器262和用户防火墙引擎260来安装过滤器。结果,该网络设备容易受到来自(例如)未经请求的入站信息包的恶意攻击。引导时间策略286驻留在核心模式252中,并在建立用户模式250时间之前被载入核心防火墙引擎256。引导时间策略296提供可配置的被安装的基本过滤器282,以提供任何合适的过滤器条件和关联的动作,用于在此过渡状态期间保护系统。引导时间策略286的例子是:阻断所有入站网络信息包和出站网络信息包。
一旦建立用户模式250,该过渡状态就继续保持,同时,策略供应器262正在识别策略并尝试将被安装的过滤器282加入核心防火墙引擎256。当建立用户模式250时,用户防火墙引擎260在策略供应器262接受任何策略之前,首先将故障保险策略264载入核心防火墙引擎256。然后,禁止引导时间策略286。和引导时间策略286一样,故障保险策略264是基础过滤器,它被设计成:当这些策略供应器和用户防火墙引擎仍然处于安装过滤器的过程中时,用于在过渡状态期间保护该系统避免遭遇攻击。一旦策略供应器262将其各自的过滤器成功地安装到网络设备中,就禁止故障保险策略264。
参考图4,现在将描述被安装的过滤器组282。被安装的过滤器组282中的每个过滤器310具有多个字段,这些字段包括过滤器Id 312、加权314、一个或多个动作316、策略上下文328和一组过滤器条件318。过滤器Id 312为过滤器提供唯一标识。例如,过滤器Id 312被用作供核心防火墙引擎256将匹配过滤器信息返回到用户防火墙引擎260和呼出258的一种工具。在本发明的实施例中,过滤器被分配给网络堆栈254中的各个层中的一个层。过滤器Id312被核心防火墙引擎256用来跟踪将哪个过滤器分配给哪个层。
加权字段314包括识别过滤器310的优先级的值。加权字段314中的这个值越大,该过滤器的优先级就越高。过滤器优先级确定核心防火墙引擎256将匹配过滤器应用于该信息包的顺序。
在本发明的实施例中,首先应用具有最高优先级(即最大的加权值)的那个过滤器,然后应用优先级位于其次的过滤器,等等,直到遇到具有终止动作的匹配过滤器为止。以下更加详细地描述了终止动作。一旦应用具有终止动作的匹配过滤器,核心防火墙引擎256就停止应用匹配过滤器。这样,在应用该终止动作之后,不对信息包采取由较低优先级匹配过滤器规定的动作316。作为选择,防火墙引擎256识别单一匹配过滤器,并返回来自该单一匹配过滤器的一组动作。
过滤器条件集318确定信息包是否与过滤器310相匹配。每个过滤器条件318包括类型320、数据322和层Id:字段Id 324。类型320定义对应的数据322中所包括的变量的长度和数目。该结构规定预定义的已知变量类型(例如,“字节”、“短”、“长”、“8个字节”、“字符串”、“网际协议版本4(IPv4)地址”、“网际协议版本6(IPv6)地址”、“IPv4地址加上掩码”、“IPv6地址加上掩码”和“地址范围”)。
数据字段322包括与类型相匹配的数据。例如,如果类型是“IPv4地址”,则关于数据字段322的可接受的值是如有点的十进制记数法中所表达的00.00.00.00~255.255.255.255的范围内的32位数字。在一些实例中,类型320规定数据字段322中的多个值。“地址范围”、“IPv4地址加上掩码”和“IPv6地址加上掩码”这些类型允许采用两个IP地址值,从而定义IP地址的始、末范围。为了最大的灵活性,该结构也允许采用用户定义的类型。作为选择,将额外的类型手动加入该系统结构。
使用层Id:字段Id 324来分别识别起源层和来自该起源层的参数。该起源层和来自该起源层的这个参数定义信息包参数,即当识别匹配过滤器时与数据322进行比较的层参数和信息包上下文。起源层识别网络堆栈中的一个层。来自起源层的参数识别与该起源层关联的特殊参数。过滤器条件326展示了特殊的例子。类型是IPv4,从而指出:数据322是32位IP地址。层Id是“IP”,表示:32位数字是IP(即网络)层参数。字段Id是“Src IP Addr”,它在该例中代表源IP地址。数据字段322中所提供的IP地址是“123.3.2.1”,指出:具有那个源IP地址的任何信息包都符合该过滤器条件,从而与该过滤器相匹配。过滤器310可以包括多个过滤器条件318,在这种情况下,只有当符合所有的过滤器条件时,信息包才与过滤器310相匹配。
过滤器310中的动作316是允许、阻断或呼出。如果过滤器310中的动作324是允许或阻断,并且该信息包与过滤器310相匹配,那么,该允许或阻断动作被核心防火墙引擎256返回到请求层。如果动作316是呼出,则核心防火墙引擎256将其自己的分类请求发给指定的呼出模块258,分类请求包括该完全信息包、层参数、上下文和匹配过滤器的标识。呼出模块258对该信息包执行其被编程的功能(例如,侵入检测)。该呼出可以将动作(允许或阻断)返回到该核心防火墙引擎,这又将该动作转达给该请求层。该呼出也能够保持信息包上下文,该信息包上下文同样经由核心防火墙引擎256而被返回到请求层。该动作也可能是值(例如空值,从而指出:不存在防火墙策略)。
动作被指定为终止或非终止。如果该动作是终止,那么,一旦为信息包识别那个动作,该动作就被返回到该请求层,并且没有额外的过滤器被应用于该信息包。如果该动作是非终止,则额外的过滤器查找继续进行,直到识别关于该信息包的终止动作为止。默认的情况是,“允许”和“阻断”被指定为终止动作。
使用策略上下文328来存储除防火墙策略以外的策略(例如,安全性策略或QOS策略)。该策略上下文是任何合适的数据结构。例如,该策略上下文是由加入过该策略上下文的处理来解释的64位数字。该策略上下文和/或动作可能是空值。
图5展示了被用于信息包上下文的数据结构330的例子,信息包上下文由网络堆栈254和呼出模块258中的各个层来保持,并被传递到这些层。当这个入站或出站网络信息包穿过这些层并包括被标注为336-340的一个或多个项目时,信息包上下文330跟随网络信息包。每个项目包括层Id:字段Id 332和对应的值334。
层Id:字段Id 332的含义等同于作为过滤器310中的过滤器条件318的一部分而加以提供的层Id:字段Id 324的含义(图4)。也就是说,层Id:字段Id322为值字段334中的数据识别起源层和来自起源层的层参数。值字段334包括特殊的层参数。
作为特殊的例子,项目336包括层Id:字段Id 332“NDIS:Src.MAC Addr.”。“NDIS”表示链路层274的“网络驱动器接口规范”实施(图1)。“Src MAC addr.”表示源MAC地址。这样,层:字段Id 332指出:值字段334中的数据是曾由NDIS(链路)层处理的源MAC地址。值字段334包括这个实际的源MAC地址,在该例中,该源MAC地址是如十六进制记数法中所表达的“00.08.74.4F.22.E5”。
作为第二个例子,项目338具有“NDIS:IF No”的层Id:字段Id 332。这再次将该层识别为NDIS,但在此情况下,将该参数识别为把接口号表示为该特殊NDIS参数的“IF No”。值字段334包括这个实际的接口号,该接口号在此情况下是2。
作为第三个例子,项目340具有“IP:Dst IP Addr”的层Id:字段Id 332。“IP”表示使用IP协议的网络层,并且,“Dst IP Addr”将目的IP地址表示为IP层参数。值字段334包括“123.3.2.1”的这个实际的目的IP地址。
已描述了本发明的基础防火墙结构,现在来注意使用这里所描述的该基础防火墙结构来加以执行的系统和示范方法的这些功能接口。这些功能接口作为多个应用编程接口(APIs)来加以执行。这些APIs包括如图6和图7所示的层API 280、呼出API 284、过滤器引擎API 266和密码模块API 288。
层API 280促进网络堆栈254内的各个层中的每个层与核心防火墙引擎256之间的数据交换。如所示,层API 280包括“分类”方法402、“增加层”方法404和“删除层”方法406。层API 280也可以在过滤器模块294内执行,以促进这些用户模式层与过滤器模块294之间的通信。
请求层使用“分类”方法402,将层参数、如请求层所接收的信息包以及信息包上下文发送到核心防火墙引擎256。核心防火墙引擎256将(1)来自请求层的这些层参数和(2)信息包上下文项目跟被分配给请求层的每个过滤器310中的过滤器条件318进行比较,以识别匹配过滤器。以下是该“分类”方法的示范实施。将会理解:以下这些方法被描述成接收或返回数据值。根据已知的编程技术,这些方法可以使用指向数据值的指针,而不是实际的数据值。
NTSTATUS
WFPClassify
(
IN ULONG LayerId,
IN WFP_INCOMING_VALUES* pInFixedValues,
IN WFP_INCOMING_CONTEXT_VALUE* pInContext,
PVOID pPacket,
OUT WFP_ACTION_TYPE* pActionType,
OUT UINT64* pOutContext
);
其中,以下内容表现了这些所列举的参数的特征。
LayerId识别发出分类请求的网络层,即请求层。参考图3,该“层”Id将该层识别为数据流层268、传输层270、网络层272或链路层274。如果被加入该系统,则其他层有效。例如,如果加入SMB层276,则SMB层具有其自己的唯一标识。本发明的防火墙结构进一步允许在网络堆栈254中的层处的多项协议实施。例如,该堆栈具有两个传输层270——第一传输层使用TCP协议,第二传输层使用UDP协议。也可以加入用户模式层282,从而形成有效层。
pInFixedValues包括由请求层处理的这些层参数的子集。将该pInFixedValues连同这些信息包上下文项目与这些过滤器条件进行比较,以确定信息包是否与过滤器相匹配。以下的表格A中识别用于每个层的pInFixedValues中所包括的默认层参数的例子。将会理解:以下这些值只是起示范的作用,因为该结构的优点是:它允许这些层使用那个层可以获得的任何值。
表格A
层 |
默认层参数 |
链路层 |
源MAC地址和目的MAC地址;接口号 |
网络层 |
源IP地址和目的IP地址;协议类型;局部地址类型 |
传输层 |
源端口号和目的端口号; |
应用程序 |
被解密的应用层协议有效载荷 |
pInContext包括如请求层所接收的上下文数据结构330(图5)。核心防火墙引擎256使用信息包上下文并结合这些层参数来识别匹配信息包。
pPacket包括如请求层所接收的整个信息包。pPacket没有被核心防火墙引擎256用来识别匹配过滤器。如前所述,核心防火墙引擎256使用pInFixedValues和pInContext来识别匹配过滤器。pPacket被包括在“分类”方法中,以便核心防火墙引擎256可以将它发送到被识别为匹配过滤器中的动作316的一个或多个呼出模块258。
pActionType包括被返回到请求层的动作316。所返回的动作316是如在匹配过滤器中所识别的允许或阻断、或由匹配过滤器执行的呼出模块。
pOutContext包括策略上下文数据。如前所述,使用该策略上下文来推动跟IPSec、QOS和任何其他基于非防火墙过滤器的策略有关联的网络策略。
“增加层”404和“删除层”406方法被分别用来增加层和从该防火墙结构中除去层。以下是“增加层”404方法的示范形式。
NTSTATUS
AddExtensionLayer(OUT PULONG pLayerId);
其中,以下内容表现了这些所列举的参数的特征。
pLayerId是被返回到正在添加的那个层(即执行“增加层”方法的那个层)的唯一层标识值。
以下是“删除层”406方法的示范形式。
NTSTATUS
RemoveExtensionLayer(ULONG LayerId);
其中,以下内容表现了这些所列举的参数的特征。
LayerId识别正在被除去的那个层,即执行“删除层”方法的那个层。
呼出API 284促进核心防火墙引擎256与呼出258之间的数据交换。“呼出”API 284包括“分类”方法410、“通知”方法412、“登记呼出”方法414和“撤消登记呼出”方法416。“呼出”API 284的“分类”方法410类似于“层”API 280的“分类”方法402,除“它还包括匹配过滤器数据”这一点以外。以下是被用来执行呼出的“分类”法410的示范形式。
typedef NTSTATUS(*WFP_CALLOUT_CLASSIFY_FN)
(
IN const WFP_INCOMING_VALUES* fixedValues,
IN WFP_INCOMING_CONTEXT_VALUE*w fpContext,
IN VOID* packet,
IN WFP_FILTER* matchedFilter,
OUT WFP_ACTION_TYPE* action,
OUT UINT64* outContext
);
其中,以下内容表现了这些所列举的参数的特征。
fixedValues包括从请求层那里被发送的这些层参数。fixedValues是pInFixedValues数据中的请求层所提供的相同的数据,pInFixedValues数据作为层API 280中的“分类”方法402的一部分来加以发送。
wfpContext包括上下文数据结构330(图5)。该数据等同于如pInContext中的请求层所发送的数据,pInContext作为层API 280中的“分类”方法402的一部分来加以发送。
packet包括如请求层所接收的整个信息包。该数据等同于如pPackett中的请求层所发送的数据,pPacket作为层API 280中的“分类”方法402的一部分来加以发送。
matchedFilter识别请求呼出的过滤器。通常,该匹配过滤器由启动呼出API 284的“分类”方法410的匹配过滤器310的过滤器Id 312来加以识别。
pActionType包括从呼出258被返回到核心防火墙引擎256的那个动作。如果pActionType是允许或阻断,则将它返回到请求层,作为由“层”API 280返回的pActionType。该呼出也可以返回继续动作,该继续动作指示核心防火墙引擎256继续将匹配过滤器应用于信息包。
pOutContext包括策略上下文数据(例如,安全性或QOS策略数据)。
当过滤器310被加入被安装的过滤器组282(将呼出模块258识别为其动作316之一)或被删除时,使用“通知”方法412来通知呼出。该通知为该呼出提供了一种机会——采取任何所要求的动作(例如,当核心防火墙引擎256执行该动作时,分配或解除分配将由呼出258使用的缓冲器)。以下是“通知”方法的示范形式。
typedef NTSTATUS(*WFP_CALLOUT_NOTIFY_FN)
(
IN WFP_NOTIFY_ENUM notify,
IN WFP_FILTER* filter
);
其中,以下内容表现了这些所列举的参数的特征。
notify包括一个数值,该数值指出是正在增加还是正在删除过滤器。例如,1的值指出正在增加过滤器,2的值指出正在删除过滤器。
filter识别正在被唯一值增加或删除的过滤器。通过提供作为过滤器310的一部分而被包括在内的过滤器Id 312,可以实现这一点。
分别使用呼出“登记”方法414和呼出“解除登记”416方法来增加和除去呼出模块。登记方法414的示范形式如下所述:
NTSTATUS WfpRegisterCallout
(
IN const GUID* calloutId,
IN const WFP_CALLOUT* callout,
IN const SECURITY_DESCRIPTOR* sd
);
其中,以下内容表现了这些所列举的参数的特征。
callout Id提供关于登记呼出模块的唯一标识。
callout提供任何呼出特定信息(例如,驱动器服务名称、设备名称,以及指向这些呼出分类和通知函数的指针)。
sd提供关于呼出的安全描述符。该安全描述符提供存取控制清单(ACL),该存取控制清单规定哪些处理可以修改和删除呼出。
呼出解除登记方法416的示范形式如下所述:
NTSTATUS WfpDeregisterCallout
(
IN const GUID* calloutld
);
其中,以下内容表现了这些所列举的参数的特征。
callout Id是将要被除去的呼出的唯一Id。
过滤器引擎API 266促进用户模式防火墙引擎260与核心模式防火墙引擎256之间的数据交换。如所示,管理API 266包括“增加过滤器”方法418、“删除过滤器”方法420和“列举层”方法422。也提供了过滤器引擎API 266的这些方法,作为管理API 290的一部分。
分别使用“增加过滤器”418和“删除过滤器”418方法,来将新的过滤器加入被安装的过滤器组282,并从被安装的过滤器组282中删除现存的过滤器。以下是“增加过滤器”法418的示范形式。
NTSTATUS
AddFilterToLayer
(
ULONG Layerld,
WFP_FILTER* pFilter
);
其中,以下内容表现了这些所列举的参数的特征。
LayerId识别为其分配过滤器的那个层。
pFilter是正在被加入被安装的过滤器组282的过滤器310。
以下是“删除过滤器”法420的示范形式。
NTSTATUS
DeleteFilterFromLayer
(
ULONG LayerId,
ULONG FilterId
);
其中,以下内容表现了这些所列举的参数的特征。
LayerId识别为其分配过滤器的那个层。
pFilter是正从这个被安装的过滤器组中被删除的过滤器。
“列举层”方法422为用户防火墙引擎260提供一种机制,以识别与一套标准相匹配的所有过滤器。这样,可允许过滤器引擎API识别发生冲突的过滤器,用于过滤器判优和冲突解决。以下是“列举层”方法422的示范形式。
LayerStartEnum
(
PWFP_ENUM_TEMPLATE pEnumTemplate,
OUT PULONG pMatchCount,
OUT PWFP_ENUM_HANDLE pEnumHandle
)
其中,以下内容表现了这些所列举的参数的特征。
pEnumTemplate包括定义应该被返回的这些过滤器的一种数据结构。例如,它包括这些过滤器条件必须与要被返回的过滤器匹配的参数。
pMatchCount包括基于这个规定的pEnumTemplate的过滤器匹配数目。
pEnumHanlde包括对这些匹配的过滤器项目的引用。
密码模块API 288在密码模块与用户防火墙引擎260之间提供接口。密码模块API 288包括“IPSec SA获取”方法430、“期满通知”方法432、“IPSecSA获取完成”方法434、“密码模块登记”方法436、“密码模块解除登记”方法438、“IPSec入站获得SPI”方法440、“增加入站SA”方法444、“增加出站SA”方法446、“入站SA期满”448方法和“密码模块启动”方法350。密码模块API 288也可以包括先前为层API而描述的各种方法(例如,“分类”方法402、“增加层”方法404和“删除层”方法406)。
使用密码模块API来促进已知安全协议(例如,由IPSec定义,由启动计算机和响应计算机使用)的运用。IPSec包括诸如AH和ESP等协议。ESP协议是鉴定和加密协议,该协议使用密码机制来提供完整性、来源鉴定和数据机密性。AH协议是鉴定协议,该协议使用信息包头部中的散列签名来证实信息包数据的完整性和发送者的可靠性。
IKE协议提供一种关于启动计算机和响应计算机的方法,以商议用于AH协议和ESP协议的安全设置。所商议的这些安全设置构成被称作“安全关联”(SA)的数据结构。SA定义被ESP或AH用来保护IP信息包的内容的参数(例如,鉴定算法、加密算法、密钥和密钥的使用期限)。由于ESP和AH需要被建立的SA,因此,在启动和响应计算机使用ESP或AH协议之前,执行IKE商议。由被称作“安全参数索引”(SPI)的值来识别给定的SA。
启动计算机和响应计算机中的每种计算机包括IPSec驱动器,该IPSec驱动器根据IPSec策略来确定在该启动计算机与响应计算机之间被发送的数据是要求加密还是要求鉴定。该IPSec策略是一组过滤器,它定义该网络设备如何使用IPSec,并包括过滤器清单、鉴定方法和其他信息。在本发明的实施例中,由核心防火墙引擎或过滤器模块294内的被安装的过滤器组中所包括的过滤器来定义IPSec策略。通过调用使用“分类”方法来识别匹配过滤器的密码模块层,来识别应用于信息包的策略。
用户防火墙引擎260(经由客户代理)调用“IPSec SA获取”方法430,来将驱动器获取或外部启动请求传递到作为密码模块层来加以执行的用户模式层282。密码模块层返回这个调用,并异步地执行商议。一旦密码模块层已完成商议,密码模块层就调用“IPSec SA获取完成”方法343,以通知用户策略引擎260:商议完成。以下是“IPSec SA获取”方法的示范形式。
typedef WIN32_ERR(*PROCESS_IPSEC_SA_ACQUIRE0)
(
IN FWP_IPSEC_ACQUIRE_CONTEXT0 ipsecContext,
IN const FWP_IPSEC_SA_ACQUIRE0* acquire,
IN FWP_IPSEC_SPI inboundSAspi
);
其中,以下内容表现了这些所列举的参数的特征。
ipsecContext是将获取与正在被加入的SA连接起来的句柄。
acquire包括用于根据已知协议(例如,IKE)来商议SA的必要信息。
inboundSAspi包括被用于入站SA的SPI。
调用“期满通知”方法432,以便将期满通知传递到增加过入站SA的那个密码模块层。以下是“期满通知”方法的示范形式。
typedef VOID(*PROCESS_IPSEC_SA_EXPIRE0)
(
IN const FWP_IPSEC_SA_EXPIRE_NOTIFY0*expireNotify
);
其中,以下内容表现了这些所列举的参数的特征。
expireNotify包含识别期满SA的信息。例如,在出站SA的情况下,提供SPI。
密码模块层调用“IPSec SA获取完成”434方法,以便在它已结束商议并增加所有这些SA之后,或在它已碰到错误之后,关闭用户防火墙引擎的上下文。在执行该方法之后,密码模块层没有再使用这个ipsecContext用于其他任何API方法。以下是“IPSec SA获取完成”方法的示范形式。
WIN32_ERR
FwpIPSecSAAcquireComplete0
(
IN FWPM_ENGINE_HANDLE engineHandle,
IN FWP_IPSEC_ACQUIRE_CONTEXT0 ipsecContext,
IN const FWP_IPSEC_NEGOTIATION_STATUS0* status
);
其中,以下内容表现了这些所列举的参数的特征。
engineHandle提供用户防火墙引擎260的句柄。
ipsecContext是由利用“IPSec获取”方法的用户防火墙引擎传递的上下文。
status提供SA商议的状态和其他细节。如果经由FwpKeyingModuleInitiate0在外部启动获取,则用户防火墙引擎260返回该状态。
由密码模块层来调用“密码模块登记”方法436,以便向用户防火墙引擎260登记,并传递其功能指针。以下是“密码模块登记”方法的示范形式。
WIN32_ERR
FwpKeyingModuleRegister0
(
IN FWPM_ENGINE_HANDLE engineHandle,
IN const GUID* keyingModuleID,
IN const FWP_KEYING_MODULE_INFO0* keymodInfo
);
其中,以下内容表现了这些所列举的参数的特征。
engineHandle提供用户防火墙引擎260的句柄。
keyingModuleID是关于密码模块层的唯一ID。
keymodInfo包括关于密码模块层的登记信息(例如,用于处理“IPSec SA获取”和“IPSec SA期满”函数的指针)。
由密码模块层来调用“密码模块解除登记”方法438,以便从用户防火墙引擎260中解除登记密码模块。以下是“密码模块解除登记”方法的示范形式。
WIN32_ERR
FwpKeyingModuleDeregister0
(
IN FWPM_ENGINE_HANDLE engineHandle,
IN const GUID* keyingModulelD
);
其中,以下内容表现了这些所列举的参数的特征。
engineHandle是用户防火墙引擎260的句柄。
keyingModuleID是密码模块层的唯一ID。
由密码模块层来调用“IPSec入站获得SPI”方法440,以获得关于新的入站SA的SPI。当密码模块层在响应的网络设备中执行时,通常使用“IPSec入站获得SPI”方法440。以下是该“IPSec入站获得SPI”方法的示范形式。
WIN32_ERR
FwpIPSecSAInboundGetSpi0
(
IN FWPM_ENGINE_HANDLE engineHandle,
IN const FWP_IPSEC_TRAFFIC0* ipsecTrafficDescription,
IN const FWP_IPSEC_UDP_ENCAP0* udpEncapInfo,
OUT FWP_IPSEC_SPI* inboundSpi
);
其中,以下内容表现了这些所列举的参数的特征。
engineHandle是用户防火墙引擎260的句柄。
ipsecTrafficDescription是用于创建入站幼体(larval)SA的5元组说明。该5元组包括源IP地址与目的IP地址、源端口与目的端口,以及传输层协议类型。
udpEncapInfo是用于创建幼体SA的UDP封装数据。UDP封装是将根据安全协议而加以格式化的信息包嵌入未加密的UDP信息包的一种已知的方法。
inboudSpi是关于入站SA的SPI。
由密码模块层来调用“增加入站SA”方法444,以增加入站SA(即,更新幼体SA)。用户防火墙引擎260使用SA中的SPI来将此调用映射到其内部状态,并将SA ioctl(输入输出控制)down到IPSec驱动器中。以下是“增加入站SA”方法的示范形式。
WIN32_ERR
FwpIPSecSAInboundAdd0
(
IN FWPM_ENGINE_HANDLE engineHandle,
IN const FWP_IPSEC_SA_STRUCT0 *inboundSA
);
其中,以下内容表现了这些所列举的参数的特征。
engineHandle是用户防火墙引擎260的句柄。
inboundSA包括入站SA。
由密码模块层来调用“增加出站SA”446方法,以增加出站SA。用户防火墙引擎使用入站SPI参数来将此调用映射到其内部状态,并将该SA ioctl(输入输出控制)到IPSec驱动器中。以下是“曾加出站SA”方法的示范形式。
WIN32_ERR
FwplPSecSAOutboundAdd0
(
IN FWPM_ENGINE_HANDLE engineHandle,
IN FWP_IPSEC_SPI inboundSpi,
IN const FWP_IPSEC_SA_STRUCT0* outboundSA
);
其中,以下内容表现了这些所列举的参数的特征。
engineHandle是用户防火墙引擎260的句柄。
inboundSpi是关于入站SA的SPI,入站SA与出站SA配对。
outboundSA包括出站SA。
由密码模块层来调用“入站SA期满”方法448,以截止先前增加的入站SA。以下是“入站SA期满”方法448的示范形式。
WIN32_ERR
FwpIPSecSAInboundExpire0
(
IN FWPM_ENGINE_HANDLE engineHandle,
IN const FWP_IPSEC_SA_EXPIRE0* expire
);
其中,以下内容表现了这些所列举的参数的特征。
engineHandle是用户防火墙引擎260的该句柄。
expire包括关于要期满的SA的数据。
由已知的外部应用程序(比如RAS、Winsock API和类似物)来调用“密码模块启动”方法450,以便在应用程序开始发送其网络信息流通量之前,启动密码模块层并设置SA。用户防火墙引擎260异步地挂起该RPC调用,从IPSec驱动器那里获得SPI,并将该获取传递到合适的密码模块。一旦密码模块层调用FwpIPSecSAAcquireComplete0,用户防火墙引擎就完成具有商议状态的异步RPC。以下是“密码模块启动”法的示范形式。
WIN32_ERR
FwpKeyingModuleInitiate0
(
IN FWPM_ENGINE_HANDLE engineHandle,
IN const FWP_IPSEC_SA_ACQUIRE0* acquire,
IN HANDLE waitEvent,
OUT FWP_IPSEC_NEGOTIATION_STATUS0* negotiationStatus
);
其中,以下内容表现了这些所列举的参数的特征。
engineHandle是用户防火墙引擎260的句柄。
acquire包括商议SA所必要的数据。
waitEvent是给当商议状态可用时被触发的事件的句柄。如果客户(即,进行调用的外部应用程序)没有兴趣等待该商议完成,则它可以将这个参数设置为NULL。在内部,该客户代理随意地将这个事件传递到RPC,并且,一旦该异步RPC调用完成,就请求它设置这个事件。
negotiationStatus包括商议的结果。如果waitEvent是NULL,则negotiationStatus是NULL。否则,negotiationStatus保持有效,直到waitEvent被触发为止。
图8展示了根据本发明的、由网络堆栈254中的这些层使用的各种方法。图8中所展示的方法也可以由一个或多个用户模式层282跟过滤器模块294和用户防火墙引擎260协力来加以使用。
每个层能够执行多项功能,包括:处理网络信息包;将分类请求发给核心防火墙引擎256;以及,管理信息包上下文。在本发明的实施例中,在网络堆栈254中所安装的薄垫片460、462、464、466内的各个层中的每个层处执行这些功能。作为选择,该功能性被直接置入这些单独的层,而不需要这些薄垫片。
网络堆栈254包括数据流层268、传输层270、网络层272和链路层274。出于展示本发明的目的,链路层274作为NDIS驱动器来加以执行,网络层272作为IP层来加以执行,传输层270作为TCP层来加以执行,数据流层268作为HTTP层来加以执行。将会理解:可以根据任何协议来执行层。例如,传输层也配合“用户数据报协议”(UDP)。应用层支持“文件传输协议”(FTP)、“远程过程调用”(RPC)、“简单邮件传输协议”(SMTP)、“服务器主块”(SMB)等。如前所述,可以将额外的层加入该结构,并可以删除层。例如,使用参照图6来加以描述的该“增加层”方法和“删除层”方法,来增加和删除层。
被标注为468(a)-(d)的网络信息包在它穿过网络堆栈254中的各个层并由这些层来处理时,展示了网络信息包。如果信息包468(a)-(d)是入站信息包,则它从下到上穿过网络堆栈。如果信息包468(a)-(d)是出站信息包,则它从上到下穿过网络堆栈。这类处理众所周知,但出于展示本发明的目的,对其进行简要的描述。
假设在网络设备(例如,web浏览器)中执行的应用程序启动关于位于另一个网络设备上的网页的内容的请求,则该应用程序将该请求发给数据流层268。在该例中,数据流264根据HTTP协议来对该请求进行格式化,并将该请求发送到信息包468(a)中的传输层。传输层270接收信息包468(a)。传输层270(执行TCP协议)将该数据放置在一个或多个信息包中,并且,为每个信息包提供TCP头部。该TCP头部包括诸如源端口与目的端口、协议类型(即TCP、序号、标志和检验和)等信息。然后,传输层将被标注为468(b)的信息包发送到该网络层。
网络层执行IP协议,并将该数据装入IP头部,IP头部包括源IP地址与目的IP地址、标志、检验和以及其他已知信息。IP头部也指出是否将信息包分段。当IP信息包的尺寸超过关于被用来传送信息包的网络技术的“最大传输单位”(MTU)尺寸时,将信息包分段。例如,以太网技术规定:该MTU是1500个字节。如果IP信息包长度超过MTU,则将它分成两个或多个IP信息包——每个IP信息包具有其自己的IP头部,与MTU相比,它们都具有相等的或较短的长度。
在本发明的实施例中,网络层被分成第一层和第二层。这第一层(被称作“片段层”)处理IP信息包片段。例如,在为出站IP信息包分段之前,以及在将入站IP信息包重新装配成单一IP信息包之后,第二层(被称作“完全装配层”)处理完全的IP信息包。在网络层处理和可能的分段之后,信息包468(c)被发送到链路层274。链路层274通过提供具有源MAC地址和目的MAC地址以及其他信息的MAC头部,来进一步对数据实行分组(packetizes)。然后,将该信息包发送到网络接口卡(NIC),在那里,该信息包在物理上被传送到网络上。
用相反方式来处理入站信息包。信息包468(d)由NIC来接收,并被发送到链路层274。如果必要的话,则除去MAC头部,并将信息包468(c)发送到网络层,在那里,如果需要重新装配这些IP信息包片段;并且,分析IP头部。然后,网络层将信息包468(b)发送到传输层,在那里,除去TCP头部;并且,如果在多个TCP信息包中发送过数据流,则重新装配数据流。最后,将数据流468(a)发送到数据流层268,在那里,该数据由应用协议(在这种情况下是HTTP协议)来进行解密。
对于每个出站信息包,网络堆栈的各个层保持信息包上下文470(a)-(c)。对于每个入站信息包,网络堆栈的各个层保持信息包上下文472(a)-(c)。当每个信息包穿过这些网络层时,信息包上下文跟随它。信息包上下文也被传递到呼出258,并可以由这些呼出来加以修改(图1)。
当在每个层处处理这些信息包时,更新信息包上下文。每个层将其层参数加入信息包上下文,从而将该信息提供给随后的各个层或处理。如所示,链路层274加入如上下文472(a)所展示的源MAC地址和目的MAC地址以及关于入站信息包的接口号。那个上下文由网络层272来接收,网络层272加入如上下文472(b)所展示的源IP地址和目的IP地址。传输层266接收该上下文,并加入如上下文472(a)所展示的这些端口号。
对于和出站信息包关联的上下文470(a)-(c)而言,会发生类似的处理。数据流层268加入诸如来自如上下文470(a)所展示的信息包有效载荷的URL地址等信息,传输层270进一步加入如上下文470(b)所展示的源端口号和目的端口号,网络层加入如上下文470(c)所展示的源IP地址和目的IP地址。
将会理解:每个层可以将可用的任何上下文信息加入那个层。通常,这包括该层被设计成要加以处理(即,增加信息包或分析信息包或从信息包中导出)的任何信息。
当在每个层处接收信息包及其对应的上下文时,通过识别这些层参数并发送被标注为474的分类请求,该层可用作请求层。分类请求474包括层参数476、从该先前层接收的信息包上下文478和完全信息包480。被用来发出分类请求的示范方法是参照层API 280来加以描述的“分类”方法402(图7)。
响应于每个分类请求,核心模式防火墙引擎256将层参数476和信息包上下文478跟被分配给请求层的这些过滤器的过滤器条件318(图4)进行比较。核心防火墙引擎256将被标注为482的响应(具有来自拥有最高加权314的匹配过滤器310的动作484)发送到请求层。核心防火墙引擎256也返回策略上下文482。如果核心防火墙引擎256没有识别匹配过滤器,则该核心防火墙引擎通知该请求层:不存在匹配过滤器。核心防火墙引擎256继续识别匹配过滤器,直到匹配过滤器指定终止动作(即允许或阻断)为止,或者直到检验被分配给该请求层的所有过滤器(不管首先检验哪个过滤器)为止。作为选择,核心防火墙引擎256识别所有匹配,并在单一响应中将这些动作返回到该请求层。
如一般所展示的,层参数的识别作为由网络堆栈254的各个层执行的标准层处理的一部分。不要求额外的信息包分析,从而将对系统性能的影响减到最小。而且,由于这些层在保持信息包上下文的过程中进行合作,因此,防火墙引擎256有可能将过滤器条件与通常无法使用那些信息包参数的各个层处的信息包参数进行比较。例如,网络层268从包括源MAC地址和目的MAC地址的链路层274那里接收关于入站信息包的上下文。由于网络层272发出具有网络层参数(例如,源IP地址和目的IP地址以及该信息包上下文)的分类请求,因此,即使这些MAC地址通常不可用,核心防火墙引擎256也可以在网络层272处的IP地址和MAC地址上进行过滤。
参考图9,现在将描述与本发明的防火墙结构一同包括在内的示范的呼出模块组258。呼出模块258包括HTTP上下文呼出500、侵入检测呼出502、IPSec呼出504和记录呼出506。呼出API 284构成核心防火墙引擎256与呼出258之间的接口。
HTTP上下文呼出500保持可接受的或(作为选择)不能接受的URL地址的高速缓存508。HTTP上下文呼出508定期访问与公用网连接的服务器510,公用网保持URL地址并将它们分类成“可接受的”或“不能接受的”。当核心防火墙引擎256执行HTTP上下文呼出时,该呼出检查信息包,对URL地址进行解密(如果必要的话),并根据高速缓存508中的信息确定:它是否是可接受的。然后,如果URL地址是可接受的,则HTTP呼出返回允许,作为动作316;如果URL地址对于核心模式防火墙引擎256而言是不能接受的,则返回阻断;这又经由层API 280将动作316返回到请求层。HTTP上下文呼出在执行双亲控制功能的过程中可发挥作用。
侵入检测呼出502使用可用的算法和技术来检查信息包,以识别病毒或可疑信息包的征候。如果检测到可疑信息包,则返回阻断动作316。可疑信息包的例子是这样一种信息包——其中,IP头部和TCP头部中的所有标志被设置为值1。信息包是可疑的,这是因为它永远不会有效,并且会指出攻击签名。作为选择,侵入检测呼出502修改信息包上下文,以便标记信息包的可疑性质,从而推迟了关于是否阻断这个信息包到网络堆栈中的随后各层的决定。
IPSec呼出504被设计成确定是否曾将适当的安全协议应用于信息包。IPSec呼出504与IPSec处理进行通信,并根据IPSec策略来确定信息包是否曾被期望经历IPSec处理。如果是,则IPSec呼出504根据信息包上下文来验证:信息包实际上是否经历过IPSec处理。如果信息包曾被期望根据IPSec来加以处理,但却不是如此(例如,信息包在明文中),则返回阻断动作。如果信息包经历过IPSec处理,则IPSec呼出验证:应用过适当的“安全关联”(SA)。如果没有应用过该适当的SA,则呼出返回阻断动作316,否则,返回允许动作316。作为选择,IPSec呼出修改信息包上下文,从而推迟了关于是阻断还是允许对随后的层的许可的决定。
使用记录呼出506来保存关于信息包(例如,供以后使用的完全信息包)的信息。例如,这类以后的使用可能是例如关于某个网络信息流通量(该网络信息流通量出乎意料地没有穿过网络,因为它正受到阻断)或用于跟踪该系统上的恶意攻击的诊断程序。
这里所引用的所有这些参考资料被包括于此,用作整体参考。
鉴于可以应用本发明的这些原理的这许多可能的实施例,应该认识到:这里根据这些附图而描述的实施例意在只起说明的作用,而不应该被视作限制本发明的范围。例如,精通该技术领域的人将会认识到:可以在硬件中执行软件中所示的该说明性实施例的这些元件,反之亦然;或者,在不脱离本发明的精神的前提下,可以在配置和细节方面修改说明性实施例。所以,如这里所描述的本发明计划预期将所有这类实施例纳入以下的如权利要求书及其相等物的范围以内。