安全可信网络系统的标准与实现
摘要:本文对可洁计算机网络系统进行讨论,给出了在当前流行的Linux系统中对网络协议栈的修改方法,并提出一种主机确认协议保证了网络传输的高效,以完善整个网络的安全机制
关键词 安全网络 自主访问控制 强制访问控制 宙计安全策略
COMPUTER NETWORK SYSTEM'S STANDARD AND IMPLEMENTATION
Ouyang Yi Zhou Lifeng Zhang Shaolian Huang Hao
rk,....n-u of Cwr purer S-s and Ted-loo, Na4uw u-uy, NwOW210093
Abstract This paper discusses the Tmsted Computer Network System's standard, proposes.二二thod to amend MP/ TP pmt-l staek of Lm-
kernel and gives a simple and efficient protocol of confirmation between hosts. The amendment makes the operating system mare secure to sati均the
standard and eomplement the security mechanism of whole network system.
Keywords Secvm network Discretionary二.,contrd Mandatory access control Audit Security policy
1引言
网 络系统是一些可以提供特定功能的硬件,固件和软件的集合.安全可信的网络安全系统负责执行安全策略,创建基本的保护环境,提供额外的用户服务并满足可信计 算机系统的要求.对于一个给定的网络系统的产品的定级,可以从三个方面来确定:所使用的安全策略;对于策略执行的记录;系统结构使安全策略得以正确实施的 保障.以下将对安全可信网络系统的标准进行详细的阐述并修改Unux操作系统以实现其要求,达到安全网络的标准.
2安全可信网络系统
B 级安全网络主要目标是强制性保护,必须保证敏感标签的完整性,并且使用它们来实现强制访问控制的规则集的最终实施.B级的网络系统必须在系统的主要数据结 构中保存敏感标签川.安全策略包含的两个最主要的组件:自主访问控制和强制访问控制.自主访问控制主要保护针对那些根据个体(包括用户,组等)的授权即可 访问的信息.该访问控制策略可以防止和检测非授权用户对敏感信息的读写和错误.强制访问控制则必须定义它所支持的不同的敏感级别.对于BI级及以上的安全 级别中的安全策略必须基于和敏感信息相联系的反映其敏感级别的安全标签或反映对一个用户可以访问敏感信息的授权.非授权的用户包括那些不允许使用网络的用 户和不被授权使用被保护信息的网络的合法使用者.
2.1自主访问控制
安全策略定义和控制用户和对象之间的访问.自主访间控制使用 户可以自己定义和控制对象被其它用户或用户组的共享,也必须提供限制访问权利的扩散的控制.自主访问控制必须以单个的用户为粒度.访同的权限赋予的原则不 再是该用户是否已经占有此权限,而是该用户是否是被授权的用户.自主访问控制机制可以分布在安全网络系统中各个部分.网络环境下的用户标识可以通过很多方 法获得,比如主机或网关的网络地址可以用来标识单个用户或一组用户.网络环境下的自主访问控制如:远程用户的一个代理进程在本地访问对象,系统必须保存远 程用户的标识,使用该用户的授权来约束这个代理进程对本地对象的访问如同该远程用户是一个本地用户一样.访问控制既可以在本地机中实现,也可以在网络上有 一个全局的访问控制处理机.系统还必须维护一个数据库存储关于用户的授权状态
2.2强制访问控制
B级以上的安全系统必须对所有的 主体和客体使用强制访问控制策略.主体和客体使用的敏感标签由两部分组成,有层次结构的分层级别和无层次结构的种类中,敏感级别是强制访问控制的决策的基 础.安全策略至少支持两种以上的敏感级别,主客体之间的访问必须满足以下条件:只有当主体的种类包含客体的种类并且主体的分层级别高于客体的分层级别主体 才可以读取客体.只有当主体的种类被客体的种类所包含并且主体的分层级别低于客体的分层级别,主体才可以写或修改客体.认证和授权的数据被安全策略机制用 来认证用户的级别,以确认在安全系统之外的由用户创建的代表用户的行为的主体的敏感级别和授权可以被用户支配授权或清除授权在网络环境下,两个构件之间的 通讯的概念诸如会话,连接,虚拟回环等,可以被认为是两个端点,每一个端点表现为一个本地的客体,通讯被看作一种从一个端点的客体通过一个通讯路径把信息 拷贝到另一个端点的客体的操作.安全策略机制可以只处理在它的构件范围之内的主客体之间的访问,如果一个主体需要访问在不同的组成部分的另一个客体,则该 主体可以创建自己的代理来进行访问.
2.3客体重用
对于在一个存储型的对象中的信息必须在再次初始化之前撤回及释放,才可以再次 被授权给另一个主体使用.不能出现有任何信息包括加密过的信息,由前一个主体使用过以后,归还给系统后再次分配给另一个主体,而另一个主体可以得到原来的 信息的情形.网络环境下,客体的表现形式一般为报文的缓冲区.
2.4标签
每一个主体和在其控制下的存储客体都有相关的敏感标签,这些敏感标签由安全策略机制维护,被用作强制访问控制的条件.安全策略机制必须向已授权的用户请求和接收相应数据的敏感级别并审计.标签可以包含保密性和完整性组成成分.这些保密性和完整性和整个网络的安全策略一致.
当 敏感标签由安全策略机制导出时,敏感标签必须精确的,无二义性的表示导出的信息及主体或客体的安全级别.安全策略机制内部的各个组成部分之间的信息传输属 于内部的标签传输,内部和外部的敏感标签的表现形式也许不同,但它们的意思是相同的,安全策略机制必须确保敏感标签经过网络传输之后,他们的含义不变.比 如说,加密前的明文和加密后的密文都应该有各自的敏感级别,密文的敏感标签的级别应该比明文的敏感级别低,但是密文必须保存有明文的敏感标签,一旦密文通 过解密还原为明文,那么必须将明文的敏感标签还原
2.5审计
IYTCB必须可以创建,维护和保护由它记录对象的存取记录不被修改 和非授权的访问.只有那些被授权访问审计信息的用户才可以读取.他必须记录下以下事件:认证和鉴别机制的使用,把对象引人用户的地址空间,对象的删除,系 统管理员和系统安全员所执行的动作及其它安全相关的事件.每一条记录必须包括事件发生的时间,用户,事件的类型,事件成功或失败.在鉴别和认证事件中,请 求的发起者也必须记录在内.在引人对象到用户的地址空间中的事件或对象的删除的事件中必须记录对象的名字及对象的敏感级别。网络系统的一个组件可以不自己 存储审计数据而是把审计数据传送给一个系统提供的能够提供审计功能的集中点,网络系统必须预防由于资源的缺乏而出现的审计数据的丢失.用户的地址空间扩展 到不仅包
括本地主体的地址空间也包括了一个远程用户的地址空间.对于远程用户来说,可以通过使用网络标识符来表示一组用户及该机器上的所有用户,这样可以消除维护许多个远程用户的鉴别信息的工作.
3系统实现
根据上述标准要求,为使整个TCP/1P协议栈达到Bl级安全要求需要对原有的SOCKET接口,TCP/UDP及B'的源代码进行修改,修改后的协议栈结构如
图1所示.
RYRm.Rt
一二.口一
图1修改后的I.IIVUX网络协议找
3.1 UDP协议
3.1.1 增加的数据结构在INET套接字结构中(stiuct sock)增加pq个数据项be _ sec _ lev. loc _ sec _ cat, rem _ sec _ lev, rem_二_cat分别用于记录本地,远地SOCKET的敏感标签包括安全级别,分类.相应的操作:根据创建套接字的进程的敏感标签为套接字记录其相应的 敏感标签,在函数met _ create()中增加:
(1)通过MET套接字指向BSD套接字的指针读取存放在BSD套接字指向的索引结点中的创建该套接字进程的uid
(2)调用A数get_usp( ),根据进程aid读取进程的敏感标签将get usp( )返回的security_ level, security category分别赋于1NFT套接字中的Ice sec lev,loc_,,_cat,
(3) man_ sec_ lev,rem_ see_ cat用于记录远程进程的敏感标签,用于上层可信服务.在udp_ queue rev skb(sk,skb)中的可信服务的判断之后进行修改,
如果是就填写这两项.
3.1.2自主访问拉制设计
根 据由主体设定的访问控制列表对通讯双方的安全标签进行比较,如果符合列表的要求,则允许该通讯继续.由于B级安全系统强调使用强制访问控制,所以自主访问 控制必须受到强制访问控制的约束.自主访问控制列表包括两项:允许与其通讯的主体标识和所要采取的动作.该过程在udp _ queue _ my _ skh(sk,skb)中进行.
3.13强制访问拉制设计
根据采用的安全策略,只有接收方的敏感标签可以支配发送方时才可以接收数据.接 收方和发送方分别完成下列工作.接收方:在udp _ queue _ rev_ skb(sk, skb)中修改,该函数为UDP层收到数据后向上传递数据的函数.它负责向二k的等待队列里填加获得的数据包,队列已满就丢弃.修改的方法是在此函数做任 何工作之前加人可信服务的控制和强制访问控制,完成获取标记和强制访问控制检查功能.
(1)首先查看sk的性质,看是否是可信服务,如果不是,就进行下面的强制访问控制检查(即第二步,调Hl f数udp _ mac _ contorl(sk, skb),如果是就设置,-
mote sec level和remote sec cat,然后继续原来的程序.
(2)强制访问控制:调用udp_二_control ( sk,skb) f数,根据他的返回值判断是否继续执行下面的程序,如果成功,则继续,如果失败,则丢弃skb.无论
成功或失败均调用audit_ u即_add()函数记录日志.udp一mac_ control(sk,skb)f1数的流程:
①先取得.kb中敏感标签的安全类别和级别,取
收到的skb中的option中的类别和级别,存放在局部变量里,以便比较.
②与本地的sk的类别和级别进行比较,如果符
合强制访问控制(远地级别比本地级别低,远地类别包含在本地类别之中,才可以让远地的数据向上传送)的要求,则返回0,如果不符合,则返回一to
③ 返回之前调用audit _ transport _ record函数记录日志..42发送方:在ip _ build _ xmit()中修改,在此函数中还有分支ip_build xmit_slow( ) ,所以在ip _ build _ xmit _ slow( )中也要进行修改.在这两个函数中将参数sock中的安全标记(安全类别和级别)取出,并填人option的相应字段(即在ip_ build_ xmit和ip_ build xinit _ slow中组装ip包的相应位置加人对中option的操作).
3.1.4审计
3.1.4.1审计信息连接双方的IP地址,端口,安全标记,本地进程的Um, GIDo
3.1.4.2与审计有关的修改
添 加函数audit _ transport _ record( ),将类型,结果写人审计结构的头部,进程的uid,pid写人审计结构的主体部分.将本地IP地址,端口,标记信息,远地1P地址,端口,标记信息写人 审计结构的客体部分.发送udp报文的审计:在u即_sendms以)中修改(此函数是传输层UDP部分负责发送报文的函数,被inet层的inet sendmsg函数调用),在函数中调用int audit _ transport _ record()记录发送一个u即报文的日志.对接收udp报文进行强制访问控制检查的审计:此审计在udp_二_control)中进行,强制访问控制 结束之后,返回之前根据强制访问控制的结果调用audit _ transport _ record()记录控制结果日志.
3.2 UP协议
在Ip层完成的功能主要是可信主机间的相互确认及标准所要求的访问控制和审计,由于网络环境的特殊性,在同一个网络中可能包括多种操作系统,故而需确认通讯双方是否是本安全系统内的主机,所以我们使用图2所示的主机之间相互确认的简单协议.
图2主机确认协议示意图
协议使用的主机访问表和链接待发包的链表的数据结构:
stntct link_ node
{ unsigned intip叼dr;
unsigned packet _ mm让ier;
atract packet _ node x packet _ link;
sttuct link _ node x next;
sttuct link- node x ptev;
stnrct machine nod
struct tune
stmct machine
m.igned im it
unsigned int h
1川ask;
node + p.v;
node * next;
addr;
trine;
struet packet_ node
sttuct bud " a kb;
struct packet _ node * next;
void(* xnit) (struct stk _ bud + skb);
}
rnachine_ node结构是确认主机为安全主机的双向链表的一个节点的数据结构,ip _ addr记录一个主机的ip地址,长32位,last_ ti,表示该节点最后一次
更 新的时间记录,ask表示该主机是否已被确认,ask为1,则已确认,为.,则未确认.link_ node结构是将待发的数据包暂时扣押的链表结构.ip _ addr表示待发包是属于哪一个ip地址,packet - number表示在这个节点上有多少包.packetlink是待发包序列的起始指针.packet node结构是待发包序列的一个节点.skb是待发包的指针,next指向下一个待发的包.xtnit指向发送待发包所需的发送函数.定义了全局变量: stnrct machine_ node machine_ head二}NULL,NUIL,0,0,0f;struct link_ nod: head二}0,0, NULL, NULL, NULL I;这两个变量是两条链表的头节点,在接收端和发送端都通过存取这两个节点来记录目前的状态.
3.2.1接收端
修 改int ip_rev ( st uct sk~buff * skb, sttuct device,dev, struct packet_type'pt)函数.过程如下:在接收的开始,判断iph是否为空,若为空,则对接收过程不进行干预,否则开始判断iph一 protocol,以确定来包的协议类型.如果为自定义的Oxff,则此包为一个对方主机发来的询问帧,则组装一个响应帧发送给对方,并将收到的询问帧丢 弃,释放内存.组装响应帧的过程如下:申请存放发包所需的路由结构的内存.根据接收包的源地址和目标地址及其他参数得到发包所需的路由(调用函数ip _ route _ output),申请存放响应帧的内存,初始化各个部分,主要包括ip头和一些发包所需的指针变量.调用ip的发送函数ip _ output()将包发出.如果为自定义的Oxfe,则此包为对方主机发来的响应帧.根据响应帧的源地址查找确认主机表(,chine_ head),查到相应的项修改,将时间改为当前的时间,将ask置1,并根据该ip地址到包链表中去查找到相应的link一node,将其后续的包用节点 所被赋值的发送函数发送出去,发送完后将该link_ node清零.如果查找不到相应的项,则不做处理.
3.22发送端
在每个 发送函数开始处将传进来的option的值进行改造,没有option的加上option,有option的在现有option的后面加上新的 option.新option的类型为IPOPT_ SC,在iph中定义.新的option的长度为12,一位类型,一位长度,四位安全类别,四位安全级别,两位Oxffff(预留).在每个发送函数的末 尾处作发包前的处理.过程如下:
先在确认主机表里查找所要发送包的目标地址的相应项,当未查到,则组装询问帧,发送给目标主机,并将数据包链 人link_ node的相应节点:可能要申请新link_ node的节点,再申请新的报文节点packet _ node,将相应的发送函数赋到报文节点的xnut,将packetnode赋到相应的link_ node上,正确退出该函数,数据报等到接收端收到响应帧才发送.查到该主机节点,则检查ask项,如果为0,则未收到响应帧,重新组装询问帧发送.其后 处理同上.如果为1,则再检查last_ time,取当前时间和它比较,如果未超过三分钟,则将该报文按照正常路径发送.否则重新发询问帧,其后处理如上.实验结果
4.1 UDP的强制访问控制和审计
测 试使用UDP通讯程序,包括服务器端和客户端.由客户端向服务器端指定的端口发送一段字符,服务器端将其显示在终端上,再重新将字符串发回给客户端.两台 机器分别运行服务器端和客户端,均运行相同版本的安全操作系统和网络部分.分别在两台机器上将程序设置到不同用户可运行的状态.通过操作系统提供的设置用 户级别和类别的应用程序在两台机器上设置用户的级别和类别.
如:A机器用户名:abc,级别:2,类别:2.---…客户
B机器用户名:asd,级别:4,类别:2.---…服务
先 在B上asd运行服务器端,再在A上abc,运行客户端,在B上显示出客户端发来的字符串,在A上没有显示.说明abc,发出的数据asd可以收到,相反 则不可以.asd的级别比abc高.控制有效.4.2询问帧和响应帧的发送,链表的建立系统启动完毕后,第一次F17〕监听到询问帧和响应帧,在三分钟之 内作其他网络动作,如PING, TEL-NEC都没有再发送询问和响应帧,过三分钟之后再PIN(;和FI7》又监听到询问和响应帧,说明主机确认表正确.在传输数据过程中,效率没有降 低,协议实现有效.审计,客体重用及标签,然后以Lnux系统上修改协议栈为实例说明了如何完善现有的系统以达到安全网络
的目标,并使用一种新的可信主机确认协议,在提高网络安全性的同时保证了系统的高效.
参考文献
5结论
本文首先讨论了安全网络系统所需要的必要条件及其相应的标准,包括自主访问控制,强制访问控制,
Final Evaluation Report Silicon Graphics Computer Syeteni, Inc. Tmsted
hix/B National Cmiputer Seurity Center Fort Ce;age C. Meade.
Final E-1-ion Report Harris Commuter Syat} CX/SX Release 6.1. t and
LAN/SX Release 6.1.1 National Cornputer Security Center Fort George C.
