Radius 协议介绍

来源:互联网 发布:手机淘宝联盟登录失效 编辑:程序博客网 时间:2024/06/08 07:32

一.RADIUS协议原理

 

        RADIUS(Remote Authentication Dial In User Service) 用户远程拨入认证服务,它主要针对的远程登录类型有:SLIP、PPP、telnet和rlogin等。RADIUS协议应用范围很广,包括普通电话、上网业务计费,对VPN的支持可以使不同的拨入服务器的用户具有不同权限。

 

RADIUS典型应用环境如下:

 

radius典型应用

 

 

 

 

RADIUS数据包分为5个部分:

(1)       Code:1个字节,用于区分RADIUS包的类型:常用类型有:

接入请求(Access-Request),Code=1;接入允许(Access-Accept),Code=2;接入拒绝(Access-Reject),Code=3;计费请求(Accounting-Request),Code=4等。

(2)Identifier:一个字节,用于请求和应答包的匹配。

(3)Length:两个字节,表示RADIUS数据区(包括Code, Identifier, Length, Authenticator, Attributes)的长度,单位是字节,最小为20,最大为4096。

(4)Authenticator:16个字节,用于验证服务器端的应答,另外还用于用户口令的加密。RADIUS服务器和NAS的共享密钥(Shared Secret)与请求认证码(Request Authenticator)和应答认证码(Response Authenticator),共同支持发、收报文的完整性和认证。另外,用户密码不能在NAS和RADIUS 服务器之间用明文传输,而一般使用共享密钥(Shared Secret)和认证码(Authenticator)通过MD5加密算法进行加密隐藏。

(5)Attributes:不定长度,最小可为0个字节,描述RADIUS协议的属性,如用户名、口令、IP地址等信息都是存放在本数据段。

各个属性的详细编码信息,以及数据格式,限于篇幅,这里不作具体介绍,感兴趣的,可以参看RFC文档,或与我交流。

 

二.RADIUS协议实现

 

目前,开源软件包freeRadius , tinyRadius,可以下载到其实现的源码。freeRadius是目前功能最强大的开源RADIUS 服务器软件,采用C语言实现,采用了多进程,进程池的处理方法,拥有很好的吞吐处理能力,同时,提供了连接各种数据库的应用接口,方便用户根据自己的需要进行适当的扩展。值得一提的是,它采用模块化处理,用户可以定做适合自己的认证计费处理模块。

freeRadius的功能强大,也造成了它模块的庞大,不易维护,对安装环境有一些要求。tinyRadius采用Java开发,短小精悍,能接收各种标准协议中的数据包,可以快速的完成对RADIUS数据包的封装与解包,我们可以自己的需要进行某些处理,具有很大的自由度,唯一的缺陷是单线程,没有数据库接口。

 

三.RADIUS协议对安全的考虑

 

RADIUS采用UDP协议基于以下几点原因:

1.  NAS和RADIUS服务器大多在同一个局域网中,使用UDP更加快捷方便。

2.  简化了服务端的实现。

事实证明,采用UDP协议可行,RADIUS有自己的机制,来解决UDP丢包特点。

如果NAS向某个RADIUS服务器提交请求没有收到返回信息,那么可以要求备份RADIUS服务器重传。由于有多个备份RADIUS服务器,因此NAS进行重传的时候,可以采用轮询的方法。如果备份RADIUS服务器的密钥和以前RADIUS服务器的密钥不同,则需要重新进行认证。

下面重点从RADIUS协议来谈下它在身份认证中如何确保安全认证的。

1.  Authenticator:鉴别码,分为请求鉴别码,回应鉴别码。                         

在“Access-Request”数据包中,Authenticator是一个16字节的随机数,称为“Request Authenticator”。 在机密的整个生存周期中(如RADIUAS服务器和客户端共享的机密),这个值应该是不可预测的,并且是唯一的,因为具有相同密码的重复请求值,使黑客有机会用已截取的响应回复用户。因为同一机密可以被用在不同地理区域中的服务器的验证中,所以请求认证域应该具有全球和临时唯一性。

为防止数据包中数据被截获被篡改,回应鉴别码采用如下方式生成:

ResponseAuth = MD5(Code+ID+Length+RequestAuth+ Attributes+Secret);

回应鉴别码是对整个数据包进行MD5演算产生的16字节索引,防止伪造服务器的回应。

2.加密方式。PAP,CAHP,EAP以及Unix登录认证三种加密认证方式。最常用的是前两种,下面介绍下:

PAP加密,采用此加密方法时,密码存放在User-Password属性中。

User-Password加密方法:

1.在密码的末尾用nulls代替填补形成多个十六个字节的二进制数;

2.把密码按16个字节为一组划分为p1、p2等等;

 b1=MD5(Secret + Authenticator)  c(1) = p1 异或 b1

 b2 = MD5(S + c(1))     c(2) = p2 异或b2

                                .

                                .

                                .

 bi = MD5(S + c(i-1))   c (i) = pi 异或 bi

c(1)+c(2)+...+c (i)

 在接收时,这个过程被反过来,由于采用异或方式贯穿在每16个字节之间,同样的算法再异或一次,然后配合MD5演算,从而生成原始的密码,尽管这种加密方式是可逆的,黑客截获到密文后,能通过一定的手段来破解出密码,但如果共享密钥未知的情况下,很难破解,也就只能采用蛮力破解方法。使用共享密钥应采用合适的长度,来防止破解,不应过短。

 

PAP加密方法使密码以密文的方式在网络中进行传输,使黑客仍有有机可乘的机会,但CHAP加密方法阻止了密码的传输。

CHAP加密,采用此加密方法时,密码存放在Chap-Password属性中。

这种加密方法的原则是不是密码在网络中进行传输,而只是传输一个索引值,从而增加了安全性,但这样做的代价是,RADIUS服务端必须要知道用户的密码,从而再现密码索引值来和发来的认证请求中的密码索引值比对。

Chap-Password加密方法:

Md5(chapId+password+chapChallenge);

chapId :可以是随机产生的一字节码;

chapChallenge  :NAS生成一个随机挑战字(16个字节比较合适)

              该字段有时缺失,读取Authenticator域作为挑战字。

3.共享密钥(Secret):共享密钥在密码加密以及数据包的鉴别码部分都参与了运算,即使RADIUS数据包被截获,但不知道共享密钥,很难破解用户的密码伪造数据。共享密钥应采用合适的长度,不应过短,宽大密码范围能有效提供对穷举搜寻攻击的防卫,随着密钥长度的增加,其破解花费的时间将大大增加。

4.为防止非法用户的重放攻击,造成服务器瘫痪。如果在一个很短的时间片段里,一个请求有相同的客户源IP地址、源UDP端口号和标识符,RADIUS服务器会认为这是上一个重复的请求,将直接丢弃,不做任何处理。

 

 

四.总结

 

Radius协议本身比较易掌握,在应用中,可以结合其自身的密码方式,实现满足企业需要的更高强度的强认证,比如结合各种令牌卡,手机短信等等。对协议进行开发,离不开各种抓包工具,像sniffer,tcpdump,ethereal等抓包工具的使用。

外部用户要访问某局域网络中计算机设备,其访问方式有多种,比如采用VPN拨号,Telnet等等。如用户Telnet登陆时,产生用户名和密码信息,而NAS服务器AAA配置中指定了采用RADIUS作为认证服务器,则将其封装成RADIUS请求数据包发送到RADIUS服务器进行身份认证,RADIUS服务器通过NAS和用户进行交流,以提示用户认证通过与否,以及是否需要Challenge身份认证。

 

其工作原理为:用户接入NAS (Net Access Server),NAS一般为路由器等设备,NAS向RADIUS服务器使用Access-Request数据包提交用户信息,包括用户名、密码等相关信息,其中用户密码是经过MD5加密的,双方使用共享密钥,这个密钥不经过网络传播;RADIUS服务器对用户名和密码的合法性进行检验,必要时可以提出一个Challenge,要求进一步对用户认证,也可以对NAS进行类似的认证;如果合法,给NAS返回Access-Accept数据包,允许用户进行下一步工作,否则返回Access-Reject数据包,拒绝用户访问;如果允许访问,NAS向RADIUS服务器提出计费请求Account-Require,RADIUS服务器响应Account-Accept,对用户的计费开始,同时用户可以进行自己的相关操作。

RADIUS还支持代理和漫游功能。简单地说,代理就是一台服务器,可以作为其他RADIUS服务器的代理,负责转发RADIUS认证和计费数据包。所谓漫游功能,就是代理的一个具体实现,这样可以让用户通过本来和其无关的RADIUS服务器进行认证。

RADIUS能够实现其功能依赖于它自身的数据包结构。RADIUS采用的是UDP传输协议,认证和计费监听端口一般分别为:1812,1813。

以太网上的RADIUS封装后的包结构如下:

 

以太帧头

IP包头

UDP包头

RADIUS数据包

以太网FCS

 

 

在这里我们关心的是红色RADIUS数据包部分。

RADIUS数据包的格式如下:

 

radius数据包格式



1 摘 要:

目前,电信运营商和服务提供商所采用的认证方式主要有本地认证、RADIUS认证和不认证;而计费策略更是丰富多彩,常见的有不计费(包月)、按时长计费、按流量计费、按端口计费等等。目前在所有这些认证计费方式中,以采用RADIUS Server进行集中认证计费应用的最为普及和广泛。

AAA是认证(Authentication)、授权(Authorization)和计费(Accounting)的简称,它是一种对网络安全进行管理的基本框架。而RADIUS (Remote Authentication Dia• -In User Service)即远程认证拨号用户服务,是一种分布式的、客户机/服务器结构的信息交互协议,它能保护网络不受未授权访问的干扰。二者结合可以实现对远程接入用户身份、权限以及流量的严格控制。RADIUS为服务供应商和公司提供了一种灵活通用的协议,用来完成集中式的用户认证、口令加密、服务选择、过滤和帐目核对等工作。当进行PAP/CHAP连接或连接第三方认证服务器时,一个单独的RADIUS数据库服务器可以在多个复杂网络上同时管理多个安全系统,并可用于维护成千上万用户的信息安全。

RADIUS不仅指运行于服务器上的软件,还包括网络访问服务器与RADIUS服务器之间的交互操作协议。

以下即针对RADIUS协议的原理和具体的应用做详细介绍。

2 AAA介绍

2.1 AAA概述

AAA是认证(Authentication)、授权(Authorization)和计费(Accounting)的缩写,它是运行于NAS(网络访问服务器)上的客户端程序。提供了一个用来对认证、授权和计费这三种安全功能进行配置的一致性框架,实际上是对网络安全的一种管理。这里的网络安全主要指访问控制。包括哪些用户可以访问网络服务器;具有访问权的用户可以得到哪些服务;以及如何对正在使用网络资源的用户进行计费。

下面简单介绍一下AAA所提供的三种服务:

1. 认证功能

AAA支持以下认证方式:

• 不认证:对用户非常信任,不对其检查,一般情况下不采用这种方式。

• 本地认证:将用户信息(包括本地用户的用户名、密码和各种属性)配置在接入服务器上。本地认证的优点是速度快,降低运营成本;但存储信息量受设备硬件条件限制。

• 远端认证:支持通过RADIUS协议或HWTACACS协议进行远端认证,由接入服务器作为Client端,与RADIUS服务器或TACACS服务器通信。

2. 授权功能

AAA支持以下授权方式:

• 直接授权:对用户非常信任,直接授权通过。

• 本地授权:根据宽带接入服务器上为本地用户账号配置的相关属性进行授权。

• HWTACACS授权:由TACACS服务器对用户进行授权。

• if-authenticated授权:如果用户通过了认证,并且使用的认证方法不是none,则对用户授权通过。

• RADIUS认证成功后授权:RADIUS协议的认证和授权是绑定在一起的,不能单独使用RADIUS进行授权。

3. 计费功能

AAA支持以下计费方式:

• 不计费

• 远端计费:支持通过RADIUS服务器或TACACS服务器进行远端计费。

2.2 AAA的实现

AAA框架图

• 本地认证——即在NAS端进行认证、授权和计费,

• 远程认证——通过协议进行远程的认证、授权和计费。

AAA的实现可采用RADIUS协议。RADIUS用来管理使用串口和调制解调器的大量分散用户。

网络接入服务器简称NAS。当用户想要通过某个网络(如电话网)与NAS建立连接从而获得访问其他网络的权利时,NAS可以选择在NAS上进行本地认证计费,或把用户信息传递给RADIUS服务器,由RADIUS进行认证计费;RADIUS 协议规定了NAS与RADIUS 服务器之间如何传递用户信息和计费信息,即两者之间的通信规则;RADIUS服务器负责接收用户的连接请求,完成认证,并把用户所需的配置信息返回给NAS。用户获得授权后,在其正常上线、在线和下线过程中,RADIUS服务器还完成对用户账号计费的功能。

3 RADIUS协议概述

3.1 引论

RADIUS远程认证拨入用户服务,是用于NAS和AAA服务器间通信的一种协议。RADIUS对AAA的三个组件都提供支持:认证、授权和计费。

一个网络允许外部用户通过公用网对其进行访问,其用户在地理上的分布会极为分散。用户可以把自己的信息传递给这个网络,也可以从这个网络得到自己想要的信息。由于存在内外的双向数据流动,网络安全就显得尤为重要。这个网络管理的内容包括:哪些用户可以获得访问权;获得访问权的用户可以允许使用哪些服务;如何对使用网络资源的用户进行记费。AAA很好的完成了这三项任务。

RADIUS通过建立一个唯一的用户数据库,存储用户名,用户的密码来进行认证存储传递给用户的服务类型以及相应的配置信息来完成授权。

3.2 RADIUS关键特性

RADIUS协议有如下的关键特性:

• 客户端/服务器模式(Client/Server)

NAS是作为RADIUS的客户端运作的。这个客户端负责将用户信息传递给指定的RADIUS服务器,并负责执行返回的响应。RADIUS服务器负责接收用户的连接请求,鉴别用户,并为客户端返回所有为用户提供服务所必须的配置信息。一个RADIUS服务器可以为其他的RADIUS Server或其他种类认证服务器担当代理。

• 网络安全 (Network Security)

客户端和RADIUS服务器之间的事务是通过使用一种从来不会在网上传输的共享密钥机制进行鉴别的。另外,在客户端和RADIUS服务器之间的任何用户密码都是被加密后传输的,这是为了避免用户密码在不安全的网络上被监听获取的可能性。

• 灵活的认证机制 (Flexible Authentication Mechanisms)

RADIUS服务器能支持多种认证用户的方法。包括点对点的PAP认证(PPP PAP)、点对点的CHAP认证(PPP CHAP)、UNIX的登录操作(UNIX login)、和其他认证机制。

• 扩展协议(Extensible Protoco• )

RADIUS协议具有很好的扩展性。RADIUS包是由包头和一定数目的属性(Attribute)构成的。新的属性可以在不中断已存在协议执行的前提下进行增加。在RADIUS协议的报文结构一节中有详细描述。

3.3 C/S结构

用户, NAS,RADIUS 服务器的关系

RADIUS采用典型的客户端/服务器(Client/Server)结构,它的客户端最初就是NAS,现在任何运行RADIUS客户端软件的计算机都可以成为RADIUS的客户端。NAS上运行的AAA程序对用户来讲为服务器端,对RADIUS服务器来讲是作为客户端。负责传输用户信息到指定的RADIUS服务器,然后根据从服务器返回的信息进行相应处理(如接入/挂断用户)。RADIUS服务器负责接收用户连接请求,认证用户,然后给NAS返回所有需要的信息。

1、RADIUS的客户端通常运行于接入服务器(NAS)上,RADIUS服务器通常运行于一台工作站上,一个RADIUS服务器可以同时支持多个RADIUS客户(NAS)。

2、RADIUS的服务器上存放着大量的信息,接入服务器(NAS)无须保存这些信息,而是通过RADIUS协议对这些信息进行访问。这些信息的集中统一的保存,使得管理更加方便,而且更加安全。

3、RADIUS服务器可以作为一个代理,以客户的身份同其他的RADIUS服务器或者其他类型的认证服务器进行通信。用户的漫游通常就是通过RADIUS代理实现的。简单地说,代理就是一台服务器,可以作为其他RADIUS服务器的代理,负责转发RADIUS认证和计费数据包。所谓漫游功能,就是代理的一个具体实现,这样可以让用户通过本来和其无关的RADIUS服务器进行认证。

3.4 RADIUS在协议栈中的位置

RADIUS是一种流行的AAA协议,采用UDP协议传输,在协议栈中位置如下:

RADIUS在协议栈中的位置

RADIUS为何采用UDP,而不是TCP的原因如下:

1、NAS和RADIUS服务器之间传递的一般是几十至上百个字节长度的数据,用户可以容忍几秒到十几秒的验证等待时间。当处理大量用户时服务器端采用多线程,UDP简化了服务器端的实现过程。

2、TCP是必须成功建立连接后才能进行数据传输的,这种方式在有大量用户使用的情况下实时性不好。

3、当向主用服务器发送请求失败后,还要必须向备用的服务器发送请求。于是RADIUS要有重传机制和备用服务器机制,它所采用的定时机制,TCP不能很好的满足。

RADIUS协议采用的是UDP协议,数据包可能会在网络上丢失,如果客户没有收到响应,那么可以重新发送该请求包。多次发送之后如果仍然收不到响应,RADIUS客户可以向备用的RADIUS服务器发送请求包。

3.5 RADIUS网络安全

RADIUS协议的加密是使用MD5加密算法进行的,在RADIUS的客户端(NAS)和服务器端(RADIUS Server)保存了一个密钥(key),RADIUS协议利用这个密钥使用MD5算法对RADIUS中的数据进行加密处理。密钥不会在网络上传送。

RADIUS的加密主要体现在以下两方面:

2.5.1包加密:

在RADIUS包中,有16字节的验证字(authenticator)用于对包进行签名,收到RADIUS包的一方要查看该签名的正确性。如果包的签名不正确,那么该包将被丢弃,对包进行签名时使用的也是MD5算法(利用密钥),没有密钥的人是不能构造出该签名的。

2.5.2 口令加密:

在认证用户时,用户的口令在NAS和RADIUS Server之间不会以明文方式传送,而是使用了MD5算法对口令进行加密。没有密钥的人是无法正确加密口令的,也无法正确地对加密过的口令进行解密。

2.5.3 口令加密与口令验证过程

当用户上网时,NAS将决定对用户采用何种认证方法。下面对使用RADIUS认证的情况下PPP用户与NAS之间的PAP和CHAP认证过程进行介绍。

RADIUS服务器可使用H3C的iMC服务器,也可以使用CISCO的ACS服务器或其它第三方服务器。

• PAP 验证:

Radius Server PAP认证

用户以明文的形式把用户名和他的密码传递给NAS,NAS把用户名和加密过的密码放到验证请求包的相应属性中传递给RADIUS服务器。RADIUS服务器根据NAS上传的帐号进行验证来决定是否允许用户上网并返回结果。NAS可以在其中包含服务类型属性Attribute Service-Type=Framed-User,和Framed-Protoco• =PPP作为提示来告诉RADIUS服务器PPP是所希望的服务。

Secret password =Password XOR MD5(Challenge + Key)

(Challenge就是RADIUS报文中的Authenticator)

• CHAP 验证:

对于CHAP(挑战握手认证协议),它提供对用户口令进行加密的机制。

RADIUS Server CHAP认证

当用户请求上网时,NAS产生一个16字节的随机码给用户(同时还有一个ID号,本地路由器的Host name)。用户端得到这个包后使用自己独有的设备或软件客户端将CHAP ID、用户密码(口令字)用MD5算法对该随机码进行加密生成一个Secret Password,随同用户名user name一并传给NAS。

NAS把传回来的user name和Secret Password分别作为用户名和密码,并把原来的16字节随机码以及CHAP ID传给RADIUS服务器。RADIUS根据用户名在服务器端查找数据库,得到和用户端进行加密所用的一样的密钥,用MD5算法对CHAP ID,密钥和传来的16字节的随机码进行加密,将其结果与传来的Password作比较,如果相匹配,服务器送回一个接入允许数据包,否则送回一个接入拒绝数据包。

4 RADIUS体系结构

当用户PC通过某个网络(如电话网)与 NAS建立连接从而获得访问其他网络的权利时,NAS可以选择在NAS上进行本地认证计费,或把用户信息传递给RADIUS服务器,由RADIUS进行认证计费;RADIUS 协议规定了NAS与RADIUS 服务器之间如何传递用户信息和计费信息;RADIUS服务器负责接收用户的连接请求,完成认证,并把传递服务给用户所需的配置信息返回给NAS。

通常对RADIUS协议的认证服务端口号是1645(早期实现)或1812,计费服务端口号是1646(早期实现)或1813。当我们进行NAS设备和RADIUS服务器对接的时候,由于生产厂家可能不同,所对应的服务器端口号不同,那么就需要调整服务器端口号,例如与其他厂家radius协议默认端口号是1645和1646,需要与他们协商,调整到相同的端口号,这样才能对接成功。

4.1 RADIUS报文的交互流程

RADIUS服务器对用户的认证过程通常需要利用NAS等设备的代理认证功能,RADIUS客户端和RADIUS服务器之间通过共享密钥认证相互间交互的消息,用户密码采用密文方式在网络上传输,增强了安全性。RADIUS协议合并了认证和授权过程,即响应报文中携带了授权信息。操作流程图和步骤如下所示:

RADIUS的典型实现流程

在一个客户端被设置使用RADIUS协议后,任何使用这个终端的用户都需要向这个客户端提供认证信息。该信息或者以一种定制化的提示信息出现,用户需要输入他们的用户名和密码;或者也可以选择比如像点对点的传输协议(Point-to-Point Protoco• ),通过认证包来传递这种认证信息。

基本交互过程如下:

1) 用户输入用户名和口令;

2) RADIUS客户端根据获取的用户名和口令,向RADIUS服务器发送认证请求包(Access-Request)。

3) RADIUS服务器将该用户信息与Users数据库信息进行对比分析,如果认证成功,则将用户的权限信息以认证响应包(Access-Accept)发送给RADIUS客户端;如果认证失败,则返回Access-Reject响应包。

4) RADIUS客户端根据接收到的认证结果接入/拒绝用户。如果可以接入用户,则RADIUS客户端向RADIUS服务器发送计费开始请求包(Accounting-Request),Status-Type取值为start;

5) RADIUS服务器返回计费开始响应包(Accounting-Response);

6) RADIUS客户端向RADIUS服务器发送计费停止请求包(Accounting-Request),Status-Type取值为stop;

7) RADIUS服务器返回计费结束响应包(Accounting-Response)。

4.2 RADIUS协议的报文结构

RADIUS采用UDP传输消息,通过定时器管理机制、重传机制、备用服务器机制,确保RADIUS服务器和客户端之间交互消息正确收发。标准RADIUS协议报文结构如下:

0 7 8 15 16 31

RADIUS报文格式

0 0
原创粉丝点击