网络安全之接入控制
身份鉴别
定义:验证主题真实身份与其所声称的身份是否符合的过程,主体可以是用户、进程、主机。同时也可实现防重放,防假冒。
分类:单向鉴别、双向鉴别、三向鉴别。
主题身份标识信息:密钥、用户名和口令、证书和私钥
Internet接入控制过程
一些基本模型
终端访问网络资源
在一个简化的单一线路网络中,终端访问网络资源的过程且必需完成以下操作过程,如图所示:
-
建立终端A与路由器的传输路径。这条线路可能是公共电话网,则需要建立点对点信道;也可能是以太网网络,则需要建立连接到该以太网的信道路径
-
终端A完成网络信息配置过程**。**终端A需要配置IP地址、子网掩码、默认网关地址等
-
路由器路由表建立对应路由项。
终端接入Internet
但访问Internet网络上的资源,不是我们接一根线到路由器上就完成得了的,对Internet上的资源,终端接入Internet的过程如图所示:
也就是说在终端A接入Internet前,必须完成用户注册,只能由注册用户开始终端A接入internet程,接入控制设备在确定启动终端A接入Internet的先决条件是由注册用户情况下,才允许终端A完成接入Internet过程和在接入控制设备中建立路由项,这一过程需要完成身份认证。
这里需要注意接入控制设备和路由器的区别:
-
接入控制设备不仅具有普通路由器的功能还包含其他功能
-
接入控制设备可以鉴别终端A用户身份
-
接入控制设备为终端A动态分配IP地址(有点像DHCP的功能,不知道是不是需要在接入控制设备中配置DHCP协议)
终端接入Internet过程
-
建立终端A到接入控制设备之间的传输路径。
-
接入控制设备完成身份鉴别过程。确定终端A是注册用户。
-
动态配置终端A的网络信息。
-
在接入控制设备路由表中动态配置相应路由项。
PPP与接入控制
简介
PPP(Point to Point Protocol)协议,是我们熟知的用于传递点对点信道数据包的数据链路层协议。但其实PPP协议也可作为接入控制协议。
为什么可以用PPP作为接入控制协议?
在早期用户使用的宽带接入技术中,由于公共电话线路铺设广泛而其高频分段的利用的空白为改造成数据传输路线创造了条件,ADSL(非对称数字用户线技术)占到了大多数。也就是拨号上网,使用的是基于PPPoE协议的ADSL。而接入控制设备在与终端A交换信息(A的用户身份标识、接入控制设备为终端A配置的网络信息)的过程中,由于终端A与接入控制设备之间的传输路径是点对点语音信道,因此需要将这种信息风专场适合点对点传输的帧格式,PPP帧就是适合点对点语音信道传输的PPP帧。
PPP帧中与接入控制相关的协议
口令鉴别协议PAP(Password Authentication Protocol)
其在PPP帧中协议属性值为0xC023
。终端A以明文方式向接入控制设备发送接入Internet需要的用户名和口令。接入控制设备在在收到信息后,检索注册用户信息库,如果用户名存在且密码匹配,则准入终端A到Internet。
挑战握手鉴别协议CHAP(Challenge Handshake Authentication Protocol)
在PPP帧首部的协议属性值为0xC223
。接入控制设备会先向终端A发送一个随机数C,终端A会将接收到的随机数和密码串接,并经过MD5摘要算法运算后,再加上用户名发送到接入控制设备。接入控制设备收到该消息后,在注册用户信息库检索到用户的密码和刚刚发送的随机数选出并经过MD5摘要算法运算后与接收到的消息进行比对。如果相同则准入终端A到Internet。前提:终端A和控制设备之间有共享密钥K。
IP控制协议IPCP(Internet Protocol Control protocol)
其作用是为终端A动态分配IP等网络信息。接入控制设备为终端A分配一个全球IP地址,并且在路由表中添加一项动态路由,该项路由是将终端A的IP地址和语音信道绑定在一起的。
PPP接入控制过程
如图所示
注:LCP也就是Link Control Protocol链路控制协议,用来建立、配置和测试数据链路连接的协议。
EAP
简介
EAP全称为Extensible Authentication Protocol,中文名称拓展鉴别协议。在身份鉴别过程中,需要在链路上传送鉴别信息,但在不同的链路上所需要的数据链路层帧格式不同,比如在点对点信道上使用PPP帧,在以太网上使用MAC帧。由于网络环境日益复杂,在终端到接入控制设备之间可能不单单只有一种通信信道的情况下,为了避免鉴别协议的数据帧与通信信道两两绑定的关系,EAP应运而生。
EAP就是将多种鉴别协议对应的PDU统一封装成拓展鉴别协议EAP报文,然后将EAP报文封装成不同类型传输网络对应的链路层帧格式。
EAP包含鉴别数据PDU,链路层帧格式包含EAP。
这样,鉴别协议也就不再具有必须与数据链路层协议绑定的特殊性,而可以随用户终端或者接入控制设备来进行指定。
EAP报文格式
-
编码:1~4,分别对应请求报文、响应报文、成功报文和失败报文
-
标识符:一组请求/报文过程中,其请求报文和响应报文的标识必需相同,在相邻两个请求报文中,也必须采用不同的标识符
-
长度:EAP报文总的长度
-
类型:1-身份报文;4-CHAP鉴别协议;5-OTP鉴别协议;13-TLS协议
EAP over PPP
简介
PPP协议是点对点网络下的对应的链路层协议,自然也是点对点网络环境下的EAP载体协议,用于实现用户和鉴别者之间的EAP报文传输。这也就是所谓的EAP over PPP。
PPP封装EAP的报文如图所示
也就是在PPP报文的协议字段位置处的值为0xC227
鉴别过程
CHAP鉴别模式下的EAP over PPP报文鉴别过程如图所示
在建立PPP链路的过程中,在鉴别身份之前,会约定采用EAP作为鉴别协议。在服务器向终端A发出的EAP请求报文中其类型值就是身份。注意在终端A会送EAP响应时,会把EAP字段的标识符也纳入到MD5的报文摘要计算之中,用以防止假冒攻击。
EAP over LAN
简介
假如终端用户与接入控制设备之间的传输信道不再是点对点路线,而是处于某一个以太网中,这个时候所采用的链路层帧格式多半是MAC帧。
基于局域网的拓展认证协议(EAP over PPP)给出了将EAP报文封装成LAN对应的帧格式(大都是V2版本的MAC帧)的过程。
其报文格式如下所示
在MAC帧的头部字段值中类型值为0x888E
(0x0800时为IP报文)。
与单纯的MAC帧可以说相同也可以说不同,将版本、报文类型、报文体长度和报文体都当作MAC帧的数据时就跟v2 版本的MAC帧是完全一致的,但是这个数据部分又相比单单的EAP报文多出了几个首部。其中一个首部字段值分类及其意思如上图所示。所以我们可以特地称其为EAPOL报文。
802.1X
802.1X就是一种实现用户身份鉴别,并开通连接进以太网的用户终端接入权限端口的接入控制协议。
目前支持802.1X的局域网主要是以太网和无线局域网。
以下是802.1X的操作模型
与后文的RAIUS协议配合使用,且在鉴别者中的端口分为受控端口和非受控端口。受控端口用于对鉴别者提供正常服务,在完成身份鉴别过程后才会打开;非受控端口一直允许接收EAP报文,直接进行鉴别操作或对EAP报文进行转发。也就是说,在完成用户身份鉴别之前,该端口只能输入输出EAP报文和广播帧,只有在用户身份鉴别成功后,才可使用正常服务。
鉴别过程
鉴别过程如图所示
相比于用户A通过EAP over PPP完成鉴别过程,802.1X是允许双方即鉴别者和用户均可发起鉴别过程的,上图是由用户发起鉴别的过程。
以太网接入控制过程
那么我们在上一模块仅仅讲了PPP信道中的接入控制过程,并未提及到以太网是如何进行从以太网接入Internet的过程,有了以上知识作为铺垫,可以简单叙述一下。
值得一提的是现在的以太网交换机实现的802.1X都是基于MAC地址的,而不是基于端口。因为在一个局域网中,一个端口可能涉及到多台主机,所以禁用端口是不现实的。只有当用户完成用户身份鉴别后,交换机才会将该终端的MAC地址列入接收到EAP报文的端口对应的访问访问控制列表,并将访问控制设置为允许访问。
RADIUS
简介
其实我们可以思考一下在上面所示的接入控制协议中,其鉴别服务器都停留在局域网层面,然而实际上,如果将接入控制设备设置在每一个以太网下面,其成本非常高难以维护,而且是非常不安全的,因为每一个接入控制设备都需要存储所有接入用户的身份标识信息。所以为了实现统一鉴别,我们需要将鉴别服务器放在互联网中的任何位置,至少这个位置是易于维护,且安全的。
远程鉴别拨入用户服务RADIUS(Remote Authentication Dial In User Service)就是这样一种可以实现接入控制设备等鉴别者与服务器之间的双向身份鉴别和身份标识信息鉴别者与鉴别服务器之间安全传输的应用层协议。设置鉴别服务器在互联网的某一个地方,鉴别服务器统一管理用户,完成对用户的身份鉴别、授权和计费操作。设置鉴别者在以太网层面附近。用户和鉴别者之间仍然可以通过链路层传输路径完成EAP报文传输过程,使用的与传输网络相对应的链路层协议,如ADSL的ppp链路,或传送MAC帧。但鉴别者和鉴别服务器之间的传输路径往往是由路由器互连的多段链路层传输路径所组成的,因此,必须用IP以上的协议作为载体协议。
其端口包括1812的认证授权端口和1813的计费端口
RADIUS消息格式
封装格式
因为RADIUS是应用层协议,而且需要在形态各异的网络上进行传输,肯定是需要IP以上的协议的,如图所示,是RADIUS消息的封装格式
RADIUS消息格式
RADIUS消息格式如上图所示
-
编码code字段:表示当前RADIUS消息类型,目前一共有16种报文类型,分为3大类别:认证报文、计费报文和授权报文,这里仅对认证报文作消息介绍。编码值为1时,表示请求接入报文,用于传输用户的身份标识信息如用户名和口令等;编码值为2时,表示允许接入报文,完成对用户的身份鉴别;编码为3时,表示拒绝接入报文,未成功完成用户鉴别,拒绝接入网络;编码为11时,表示挑战接入报文,需要用户提供更多的身份标识信息或者需要用户根据约定的鉴别机制对挑战接入消息中包含的数据进行运算
-
标识符Identifier字段:用于匹配请求接入消息和对应的响应消息。
-
长度Length字段:给出RADIUS消息总长
-
鉴别信息Authenticator字段:用于鉴别发送响应消息的鉴别服务器。首先由网络接入服务器NAS(Network Access Server)发送的RADIUS消息中的鉴别信息是一个16字节的随机数,用于防止防重放攻击,在有效期内,不允许出现相同的随机数。而鉴别服务器所发送的响应消息中,鉴别消息会经过如下计算所得
响应消息中的鉴别消息=MD5(响应消息||对应请求接入消息的鉴别消息(s随机数)||共享密钥K)
共享密钥K可鉴别鉴别服务器的身份,防止黑客假冒
-
属性Attribute字段:属性字段用于给出用户身份标识信息和NAS标识信息,如用户名、口令、NAS标识符、NAS IP地址等。根据NAS标识符确定共享密钥K。属性部分本来是支持各种鉴别协议的如PAP或CHAP,但是新发展的鉴别协议要同时支持EAP和RADIUS略显麻烦。所以为了避免重复劳动,EAP不断增加和新发展的鉴别机制相匹配的数据类型,但在RADIUS中只需要设置用于封装EAP报文的EAP属性。对于敏感属性值,如用户名和口令等,需要进行加密运算,使用共享密钥K进行MD5运算。
RADIUS完整应用
一次鉴别身份,接入控制如图所示