链路层安全扩展——L2TP协议
PPP协议
协议概念
说到数据链路层的安全协议,我们不得不先提一下PPP协议,背面的PAP、CHAP与L2TP协议都是围绕它睁开的。(PPP不是本文重点,很多细节没有提到,到时间会专开一篇文章讲PPP)
PPP(Point-to-point Protocol,点到点协议)协议是为同等单位之间传输数据包设计的,主要是用来通过拨号或专线方式建立点对点毗连发送数据,使其成为各种主机、网桥和路由器之间简单毗连到一种共同的解决方案。
点对点网络中,一个数据帧的吸取者就是固定的对等端。
PPP规定了以下内容:
- 帧格式以及成帧方法
- 用于建立、设置和测试PPP链路的链路控制协议(Link Control Protocol, LCP),以及通信双方可通过LCP包协商一些选项。
- 一组用于建立和设置网络层协议的网络控制协议(Network Control Protocol,NCP)。在PPP链路上可以传输不同网络协议的数据,NCP用于对这些网络协议相关的参数进行设置。但NCP只是一个统称,如果传输的是IP数据,则“NCP”是指IP控制协议(IPCP)。不同类型的NCP充实说明确PPP具有良好的通用性。鉴于IP的通用性,随后都以IPCP为例进行说明。
协议封装格式
PPP协议的封装格式如下:
- 协议字段分为三种:如果是0xC021,则数据部分是PPP的链路控制数据;如果为0x0021,数据部分就是IP数据报;如果是0x8021,则表现这是网络控制数据。
协议流程
PPP协议流程如下:
- 在建立PPP链路前,发送方和回应方必须建立一条物理毗连。
- 双方首先使用LCP建立PPP链路。
- 用PAP或CHAP验证身份。
- 用IPCP设置IP层参数。
- 通信完成后,使用LCP断开PPP链路。
- 断开物理毗连。
整个过程包括5个阶段:
- 链路不可用阶段:链路状态的起始点和停止点。
- 链路建立阶段:双方用LCP建立链路。
- 认证阶段:回应方发起家份验证。
- 网络层协议阶段:回应方给发起方分配IP地点(毕竟是对等方式毗连的)。
- 链路停止阶段:PPP链路停止。
PAP和CHAP认证协议
PPP协议有两种认证协议,分别是PAP协议和CHAP协议。
PAP协议
PAP(Password Authentication Protocol)是基于口令认证的方法,被认证方发送Authenticate-Request报文(类型1),此中包罗了身份(通常是账号或者说用户名)和口令信息。
若认证通过,认证方返回Authenticate-Ack(类型2),否则返回Authenticate-Nak(类型3)。
PAP协议以明文方式传输身份和口令给网络接入服务器(Network Access Server,NAS)。因此安全性较差,轻易被第三方盗取用户名和口令。
别的,PAP在PPP身份认证过程中,由被认证方发起认证,而且仅在建立链路阶段使用,在数据传输过程中不能用。
下面是PAP两次握手的具体过程:
CHAP协议
**基于挑衅认证的协议(Challenge-Handshake Authentication Protocol)**通过三次握手完成身份认证,我们记认证方为S,其用户名为SU,被认证方为U其用户名为UU,随机数为R,口令为PW,则认证成功的工作过程如下(部分字段没有体现在下文中,详细请参考包格式):
S → U : 0 x 0001 , I D , R , S U U → S : 0 x 0002 , I D , H a s h ( P W ∣ ∣ R ) , U U S → U : 0 x 0003 , I D , M e s s a g e S\to U:0x0001,ID,R,SU \\ U\to S: 0x0002,ID,Hash(PW || R),UU \\ S\to U: 0x0003,ID,Message S→U:0x0001,ID,R,SUU→S:0x0002,ID,Hash(PW∣∣R),UUS→U:0x0003,ID,Message
数据包格式如下图所示:
- Challenge和Response报文的类型编号分别为1和2,Success和Failure报文类型分别为3和4
- 随机数和散列值长度可变,内容在值字段体现。
- 名字字段形貌发送方身份信息。
- 消息字段包罗形貌信息,比如认证失败的原因。
CHAP协议相比PAP协议较安全,它由认证方发起挑衅,使用Hash函数来避免毗连时传输明文,随机数可避免重放攻击,而且不定时重复呼唤用户提供口令来避免第三方冒充。
但CHAP也有很多安全隐患:
- 服务器明文存放口令
- 单向认证,不能判断服务器是否假冒
- 重复呼唤周期过长轻易被攻击,周期过短计算量增长影响性能
L2TP协议
相识以上情况后,终于该本文主角登场了!
概念
**第二层隧道协议(Layer 2 Tunnel Protocol, L2TP)**是PPTP协议与Cisco L2F协议联合版本,有一部分采用PPTP,但可以在多种网络传输,突破了PPTP只能在IP网络上的局限性。
我们来看下L2TP相关术语:
- LAC:L2TP接入控制器。作为L2TP隧道端点,位于一个LNS和一个长途体系之间,并在两者之间发数据包。从LAC发往LNS的数据包需要用L2TP协议进行隧道传输,从LAC到长途体系之间的毗连或是本地的或是一个PPP毗连。
- LNS:L2TP网络服务器。一次PPP会话的逻辑端结点,能处理PPP协议和L2TP协议分组。
- AVP:属性值对。用于构造PPTP的控制消息。
- 控制毗连:一个控制毗连是LAC和LNS之间的一条毗连,用以建立、维护和关闭L2TP会话和控制毗连本身
- 隧道:隧道存在于一个<LAC,LNS>对之间。隧道包括一个控制毗连和零个或多个L2TP会话。隧道在LAC和LNS之间传输被封装的PPP数据包和控制消息。一条隧道对应一个控制毗连,并可承载多个会话。LAC和LNS通过协商建立控制毗连后,意味着隧道建立成功,随后即可承载会话。LAC每收到一个来自长途体系的呼唤,就为该呼唤建立一个会话。
实现模式
L2TP有两种实现模式,分别是逼迫模式和自愿模式。
逼迫模式
逼迫模式如上图中的1用户所示。
- 提供L2TP服务的网络访问服务器作为LAC。
- 对用户透明,只需向LAC拨号建立PPP毗连,由LAC建立一条通向目标LNS的隧道。
- 长途体系只需加载TCP/IP协议及平凡的长途拨号软件即可。
- 可同时建立多条隧道,与多个公司同时通信。
- 缺点是隧道的建立依赖于支持L2TP协议的服务者
逼迫模式下,考虑长途用户对公司总部内联网进行访问的情况,其建立L2TP会话的过程主要包括建立控制毗连和建立会话:
- 长途用户通过PSTN/ISDN网,向LAC发起PPP哀求。LAC接受此毗连,建立长途用户到LAC的PPP毗连。在建立PPP毗连的过程中,长途用户与LAC之间互换了LCP设置信息,并大概实现了如CHAP身份认证信息的互换。认证信息互换的过程是LAC向长途用户进行CHAP呼唤,长途用户对此呼唤进行应答。
- ISP的LAC根据CHAP中的应答信息,确定此用户实现直接的Internet访问控制还是捏造的拨号访问服务。如果需要进行捏造拨号访问,则确定用户访问的目标地,即目标LNS
- 如果LAC与该LNS之间没有建立隧道,则由LAC向LNS发起建立隧道的哀求,并为该隧道分配隧道号。
- LAC与LNS之间的隧道建立完成后,在隧道中为该用户的呼唤分配ID。之后LAC向LNS发出入站呼唤哀求。该哀求中大概包括LAC对长途用户收集的认证信息以及其他设置信息。
- 如果LNS接受此入站呼唤,则LNS为此呼唤产生一个捏造接口,该捏造接口就是L2TP隧道的终点,同样,在LAC上也有一个捏造接口。此时,LAC和LNS之间的会话已经建立。
- 长途用户发来的PPP分组成帧到达LAC后,LAC上的L2TP捏造接口剥去帧的同步序列位等,将余下的数据部分用L2TP进行封装,发送至LNS后,L2TP头被剥去,剩余分组将和本地分组一样被送到相应的接口进行处理。
- 当用户想断开链接时,可以向LNS发送停止哀求分组,哀求断开PPP毗连。该分组同其他分组一样,封装在L2TP隧道中传输给LNS。LNS在收到该分组后,发送停止确认分组以停止链路。LNS知道用户已经停止了本次会话后,发送L2TP呼唤关闭分组给LAC,释放会话毗连。
自愿模式
自愿模式如上图的2用户所示,要求机器上必须具备LAC客户端。
- 由毗连到Internet的主机(LAC客户)本身建立、控制、管理VPN。
- 客户只需在其主机上安装LAC客户软件即可与LNS建立毗连。
- 适合长途办公用户与本身公司相连的情况,隧道的建立不依赖服务提供者。
- 隧道不能分用/复用,LNS需要大量隧道来满足毗连哀求,而且每个用户同时只能开通一条隧道。
协议消息
- L2TP使用两种消息类型:控制消息,数据消息。均由首部(头)和主体两部分组成。
- 控制消息用于建立、维护、清除隧道和呼唤,主体部分形貌了控制报文类型,以及与报文类型相关的信息,这些信息都以属性值对(AVP)的情势出现。
- 数据消息用于封装在隧道上传输的PPP帧,主体是PPP帧。
L2TP分组报文首部格式如下:
- T(ype)比特:类型标识,“0”表现数据消息,“1”表现控制消息。
- L(ength)比特:长度字段标识,“1”表现首部包罗“长度”字段。对控制字段必须为1.
- 长度:消息总长度,包括L2TP头、PPP分组等
- 隧道ID:此次会话所属隧道号
- 会话ID:表现一个隧道内一次会话的标识符
- Ns和Nr:在数据消息中是可选项,在控制消息中必须出现。分别代表当前分组序列号和希望吸取的下一个分组序列号。
- 偏移量:在数据消息中可选,在控制消息中不出现。最高位置1时,表现紧接L2TP头后(从该字段开始)应跳过多少字节才是用户数据偏移填充:为0,为了使L2TP头与填充字节的总长度到达一定长度的整数倍,使协议的处理更高效。
- Ver:L2TP的版本,目前取值为2
对于L2TP控制消息格式如下:
L2TP控制消息=L2TP头+AVP(1|n)
IETF界说的所有AVP,从功能上可分为6大类:
- 实用于所有控制消息的AVP
- 用于陈诉结果和错误代码的AVP
- 用于控制毗连管理的AVP
- 用于呼唤管理的AVP
- 用于认证的AVP
- 用于显示呼唤状态的AVP
AVP格式如下图所示:
- M:逼迫位,说明吸取方在收到无法辨认的AVP时应怎样处理。M取1会话将被停止,取0则忽略。
- H:隐蔽位。表现AVP中的属性值是否被想隐写为密文。此功能可在AVP中传输口令等敏感数据。
- 长度:字段长为10位,表现AVP所包罗的字节数。
- 厂商ID:字段长为16位,不同软/硬件厂家被分配的一个SMI(structure of management information,管理信息布局)即为厂商ID。
- 属性类型:2个字节,表现AVP类型。
- 属性值:对应属性的取值,长度随不同属性类型而不同。
L2TP对属性值做加密处理之前首先天生隐蔽AVP子格式(Hidden AVP Subformat, HAS),此中包罗2B的“原属性值长度”以及恣意长度的“原属性值”和“填充”字段。
加密处理时首先将HAS划分为16B的分组,依次为(p1,p2,….,pi)
随后加密过程如下:
此中,AV是2B的属性类型;S是通信双方的共享机密,这个机密和双方实验CHAP时所使用的共享机密相同;RV是随机向量。最终的属性值字段是c1|c2|….|ci。
由于加密属性值需使用RV,所有每个包罗隐蔽AVP的L2TP报文中都应该包罗“随机向量AVP”,且在所有隐蔽AVP之前出现。多个隐蔽AVP可共用同一RV,每个隐蔽AVP都使用其前面最近的RV。
控制毗连
毗连建立
- L2TP封装分组在IP网络中是通过UDP报文方式传送的,所以不需建立TCP毗连。
- LAC和LNS都可发起控制毗连,各自分配唯一的隧道ID。
- 同一LAC-LNS对可建立多条隧道,以区分不同的服务质量。
- 通过在SCCRQ或SCCRP消息中包罗Challenge AVP,要求对方提供身份认证信息;对方复兴时必须包罗相应的Challenge Response AVP。
- 隧道认证用共享密钥完成。
隧道维护
- 隧道没有收到任何消息,则可以小于1分钟/次的频率发送Hello消息
- 探测隧道是否存活。
- 吸取方收到Hello消息后应立刻进行确认。
- 若发送方在一定时间内没有收到吸取方简直认,可在一定时间后重发。
- 重发一定次数后仍没有收到确认,则关闭隧道毗连。
隧道关闭
- 关闭原因:体系堕落、资源不敷、认证失败、用户挂断等。
- 一方将关闭隧道时给对方发送一个StopCCN(Stop-Control-Connection-Notification)消息。
- 收到StopCCN的一方应发送零长度消息(zero-length-body,ZLB),以确认吸取,之后将等候一个重发周期的时间,防止ZLB消息丢失而重发StopCCN的情况。
L2TP呼唤
呼唤建立
- 控制毗连建立后就可以进行会话建立的协商、维护和管理。
- 会话建立有方向性,分为出站呼唤和入站呼唤。
- 总部主机希望同长途用户通信,LNS向用户所在LAC发起出站呼唤。
- 长途用户向总部主机发起访问时,用户所在LAC向LNS发起入站呼唤。
- 出站呼唤和入站呼唤都是三次握手的过程。
会话维护
- 两个消息控制用于会话维护:
- LAC向LNS发送WEN(WAN-Error-Notify)消息,陈诉本地会话处理中出现错误的统计情况。
- LNS向LAC发送SLI(Set-Link-Information)消息关照LAC修改异步控制字符映射ACCM。
会话关闭
LAC与LNS都可以作为会话关闭的发起方。
举例来讲,当用户希望停止会话时,他使用PPP Terminate-Request消息关照LAC。LAC并不理解该消息,像其他分组一样封装后发送给LNS。LNS发送Call-Disconnect-Notify 关照LAC,并清除本地与该会话有关的状态量
LAC收到CDN后,也清除相应的状态量,会话停止。
安全性分析
- L2TP不提供对PPP数据的机密性和完整性保护,若使用CHAP,则可体现端点身份认证的功能。
- CHAP依赖共享机密,但L2TP并未讨论机密的天生和更新方法;
- 由于不提供对每个报文的认证功能,所以无法抵抗插入攻击和地点欺骗。
- 攻击者大概会伪造一些假冒的控制信息,使得隧道和底层链路断开,造成拒绝服务攻击。
- L2TP应被看成一个隧道协议。
- 从安全的角度考虑,L2TP应与IP或传输层的安全协议结合使用。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |