主机网络安全及其关键技术研究张亮蒋东兴徐时新(清华大学计算机与信息管理中心100084)摘要主机网络安全是计算机安全领域新兴的边缘技术,它综合考虑网络特性和操作系统特性,对网络环境下的主机进行更为完善的保护。本文提出了主机网络安全体系结构,并对其中的关键技术作了探讨。最后对主机网络安全的访问控制给出了实现方案。关键词主机网络安全主机安全网络安全访问控制系统调用流分类号TP3091前言计算机网络的发展使计算机应用更加广泛和深入,但随之也使安全问题日益突出和复杂。通常情况下,人们从两个方面考虑计算机安全问题:主机安全和网络安全。但是,由于两者考虑问题的立脚点不同,它们各自采用的技术手段难以有机地结合起来,因此对于一些需要两者协同处理才能解决的问题,就不能得到有效的解决[1]。例如,用户希望在内部子网远程登录主机时具有较大权限,但在子网以外远程登录主机时只具有普通权限,就是一个典型的例子。我们提出的主机网络安全技术就是要解决类似的安全问题,它是一种基于主机的主动防御型网络安全技术,它结合网络访问的网络特性和操作系统特性来设置安全策略,可以根据网络访问的访问者及访问发生的时间、地点和行为来决定是否允许访问继续进行,实现对于同一用户在不同的场所拥有不同的权限,从而保证合法用户的权限不被非法侵占。2主机网络安全体系结构主机网络安全是以被保护主机为中心构建的安全体系,它考虑的元素有IP地址、端口号、协议、甚至MAC地址等网络特性和用户、资源权限以及访问时间等操作系统特性,并通过对这些特性的综合考虑,来达到用户网络访问的细粒度控制。另外,考虑到网络传输过程中的安全性,主机网络安全系统还包括与用户和相邻服务器之间的安全传输,以及为防止身份欺骗的认证服务。主机网络安全的体系结构如图1所示。在主机网络安全的体系结构中,主要有如下一些元素:主机:主机是被保护的对象,也是安全体系结构的中心,通常为服务器,提供多种网络服务。资源:资源是主机提供的能被用户使用的各种系统设备与服务,如文件系统、CPU资源、内存资源、网络服务等。客户机:客户机是网络服务的使用者,其行为具有多样性,通常为安全问题产生的源头。其他主机:对一台主机来说,除它本身以外的主机,它们之间可以有一定的安全ClientOtherHostAuthenticationServerResourceHost访问控制入侵检测与包过滤加密传输加密传输图1主机网络安全体系结构图协议。认证服务器:为客户机和服务器以及服务器之间安全传输提供信任机制。为了尽可能地减少入侵行为发生的机会,主机实行严格的访问控制,其安全规则结合了网络特性和操作系统特性,做到不同用户在不同时间地点对资源拥有不同的访问权限。主机还应用入侵检测技术,能及时发现网络攻击和入侵行为并迅速做出响应,如切断用户连接。客户机和其它主机在使用资源时,主机要进行身份认证。传统的口令认证方式只能进行单向认证,而且明文口令传输时易被截获。为此引入认证服务器,它提供实现某一认证机制所需的服务,在主机与客户机、其它主机间建立起安全、高效的身份认证机制。为了保证主机与外界安全地进行数据交换,防止传输的信息被截取或监听,在主机与其它主机、主机与客户机之间利用加密技术建立起安全的数据传输通道。3主机网络安全关键技术主机网络安全体系涉及到诸多技术,这里对它们作一简单介绍。3.1入侵检测入侵检测是主机网络安全的一个重要组成部分。它可以实现复杂的信息系统安全管理,从目标信息系统和网络资源中采集信息,分析来自网络外部和内部的入侵信号,实时地对攻击做出反应。入侵检测系统通常分为基于主机和基于网络两类。基于主机入侵检测的主要特征是使用主机传感器监控本系统的信息。这种技术可以用于分布式、加密、交换的环境中监控,把特定的问题同特定的用户联系起来,但加大了系统的负担。基于网络的入侵检测主要特征是网络监控传感器监控包监听器收集的信息,它不能审查加密数据流的内容,对高速网络不是特别有效。在主机网络安全体系结构中,采用基于主机的入侵检测技术实现对主机的保护。它能够实时监视可疑的连接,检查系统日志,监视非法访问和典型应用。它还可针对不同操作系统的特点判断应用层的入侵事件,对系统属性、文件属性、敏感数据、攻击进程结果进行监控。它能够精确地判断入侵事件,并对入侵事件迅速做出反应,结合主机上的包过滤功能模块切断来自可疑地址的网络连接。3.2访问控制访问控制主要有两种类型:网络访问控制和系统访问控制。网络访问控制限制外部对主机网络服务的访问和系统内部用户对外部的访问,通常由防火墙实现。系统访问控制为不同用户赋予不同的主机资源访问权限,操作系统提供一定的功能实现系统访问控制,如UNIX的文件系统。通常情况下这两种访问控制相互独立,因此我们无法将两者各自的特性结合起来进行控制。例如在利用防火墙实现网络访问控制时无法加入用户属性,在利用UNIX文件系统功能进行文件访问控制时无法加入网络属性。在主机网络安全中,我们将网络访问控制和系统访问控制的特性结合起来,实现严格的、细粒度的访问控制。网络访问控制的属性有:源IP地址、源端口、目的IP地址、目的端口等。系统访问控制(以文件系统为例)的属性有:用户、组、资源(文件)、权限等。通过在主机的操作系统中添加防火墙模块,同时实现对于系统调用的监控以监视用户行为,这样可以将网络属性和操作系统属性结合起来,再加上时间属性(起始、终止时间),制定相应的安全规则,就能够实现强大的访问控制。我们将安全规则分为两类:系统安全规则和用户安全规则。系统安全规则是全局规则,作用范围为整个系统,由系统管理员制定和维护。用户安全规则为局部规则,由每个用户自己制定并维护,它的作用是限制用户自己的行为和与自己有关的资源的使用。引入用户安全规则的目在于在系统大安全环境下由用户定制自己的局部安全环境,减少入侵者冒用自己的帐号、破坏系统资源的机会,也可在一定程度上防止自己的误操作。系统安全规则具有高优先级。在两种规则发生冲突的时候,冲突部分的处理以系统安全规则为准。因此从系统全局的角度来看,用户自己制订的安全规则只会使系统的访问控制更严格。3.3加密传输加密就是为了安全目的对信息进行编码和解码。数据加密的基本过程就是将可读信息(明文)译成密文(或密码)的代码形式。加密的逆过程即为解密。加密传输技术是一种十分有效的网络安全技术,它能够防止重要信息在网络上被拦截和窃取。IPsec(IP安全体系结构)技术在IP层实现加密和认证,实现了数据传输的完整性和机密性,可为IP及其上层协议(TCP和UDP等)提供安全保护。虚拟专用网(VPN)技术能够在公共网络中为两台通信的计算机建立一个逻辑上的安全的通道(tunnel),通过数据的加密和认证使得数据包即使被截获也不容易破译,提供了很好的安全性。IPsec的提出使得VPN有了更好的解决方案。由于IPsec在网络层进行安全服务,所以大大减少了密钥协商的开销,而且需要改动的应用程序也要少得多。3.4身份认证认证(Authentication)是确定某人或某事是否名副其实或有效的过程。认证的基本思想是通过验证称谓者的一个或多个参数的真实性与有效性,以达到认证的目的。认证的主要目的为信源识别与信息完整性验证。安全可行的认证系统常建立在密码学的基础上。用户身份认证可以识别合法用户和非法用户,从而阻止非法用户访问系统。用户身份认证是保护主机系统的一道重要防线,它的失败可能导致整个系统的失败。Kerberos是由MIT提出的基于可信赖的第三方(即Kerberos认证服务器)的认证系统,采用对称密钥体制(私钥制)对信息进行加密。X.509是ITU提出的一个基于非对称密钥体制(公钥制)的认证框架,也是依赖于共同信赖的第三方-CA(CertificateAuthority)来实现认证,实现上更加简单明了。4访问控制实现技术4.1实现网络访问控制的技术--STREAMS机制流(STREAMS)由AT&TBell实验室的DennisM.Ritchie于1984年设计,首次广泛使用是在1986年的SVR3。现在几乎所有的UNIX操作系统都支持流机制。流是一种通用的、灵活的用于开发UNIX系统通信服务的一组工具。它提供了内核各部分,及内核和用户空间通信的标准界面。这种标准界面和机制使得网络协议和网络服务程序很容易实现模块化,可以移植开发和用以集成。流是内核空间中的流驱动程序与用户空间中的进程之间的一种全双工的处理和数据传输通路(如图2所示)。流驱动程序可以是外部的I/O设备驱动程序,也可以是一些软驱动程序(伪驱动程序,例如IP、TCP都存在伪驱动程序接口)。这种驱动程序主要是处理内核空间和用户空间的数据传输。流模块提供在流的数据流程上实施的处理功能。数据以消息的形式在驱动程序和流流首模块(可有可无)驱动程序用户进程逆流顺流外部界面用户空间核心空间图2流结构图首之间以及在模块之间进行传输。TCP/IP协议的各个模块之间都是通过这种方式来传递网络数据包和协议间的控制信息的。通过在UNIX的TCP/IP协议栈中插入自己的流模块,实现防火墙的包过滤功能,从而达到网络访问控制的目的。在网络应用程序建立一个流的时候,会向内核空间的模块提供cret_d数据结构(usercredentialsstructure),其中包含了使用此流的用户信息(uid、gid等)。通过流模块的open例程接口可得到该数据结构的指针,利用它可以在网络访问控制中加入用户属性,如uid、gid等。4.2实现系统访问控制的技术--系统调用捕获和控制系统调用是应用程序和操作系统内核之间的功能接口。其主要目的是使得用户可以使用操作系统提供的有关设备管理、输入/输出系统、文件系统和进程控制、通信以及存储管理等方面的功能,而不必了解系统程序的内部结构和有关硬件细节,从而起到减轻用户负担和保护系统以及提高资源利用率的作用。通过截获和控制系统调用实现系统访问控制的原理为:无论对主机的攻击采用何种手段,最终造成的伤害都是通过某些系统调用来完成的。因此,如果能截获每个进程的系统调用,并进行控制(不执行该系统调用、改变调用参数等),就可以预先避免攻击的发生。为了保证有效的截获和控制系统调用,减少实现的复杂性,有必要在用户空间利用合适的接口来实现。操作系统能提供了相应的接口来实时跟踪运行的进程。与SVR4相容的UNIX操作系统通过“/proc”接口给我们提供了方便和功能强大的系统调用截取和控制方法。“/proc”目录下存放的是系统中所有活动进程的有关信息映像。通过它,可以访问进程的所有内存空间信息,进行对系统调用的细粒度的访问控制,并可以随时终止不符合安全规则的进程。使用这种方法,被检测的进程在使用指定的系统调用之前或之后都可以被中断,从而实现系统访问控制和安全检测的功能。捕获和控制系统调用的过程如图3所示。用户进程P1要使用某系统调用,该系统调用指向C语言函数库libc.a中的一个入口点。内核空间的进程进入部分唤醒监视进程P2,这时它可以监视、分析和修改P1地址空间的内容。在P2进行安全处理后,内核又开始控制正常的系统调用功能。在系统调用完成后,监视进程P2可以检测并修改系统调用的返回值。为了防止监视进程对系统造成破坏,这里P2的ruid应与P1的一致(而不是使用root)。并不是在执行所有的系统调用时都要严格按照上述过程进行。系统调用可以根据安全要求分为三类:总被允许的系统调用。包括close、exit、fork等。操作系统对这类系统调用提供的保护已能够满足通常的需求,因此不需要监视进程对它们进行特殊处理,避免了P1和P2间上下文切换的开销。总被拒绝的系统调用。包括setuid、mount等。无特权的进程在执行这类系统调用时总是失败。P2只需设置P1的PRSABORT标识位并将其唤醒,这使得立即放弃执行系统调用,其返回值指示系统调用失败,并设errno为EINTR。需要根据调用参数才能决定是否允许执行的系统调用。包括open、rename、stat、系统调用系统调用进入点系统调用返回点执行系统调用