跳转至

信息安全原理

Project 1. L2TP 协议实验与设计

1. 实验内容

1.1 实验题目

基于 C++设计并实现并实现一个简单系统,实现:

(1)基于 windows 或 linux 抓取 l2tp 协议流量;

(2)针对每一个目标用户,实时监控其 l2tp 请求,并分析、还原、呈现其连接和业务载荷;

(3)支持对特定目标的静载荷替换。

构建一个 demo:用笔记本电脑实现对手机上网对象的以上功能。

1.2 实验方案与结果概述

(1)基于 windows 或 linux 抓取 l2tp 协议流量

我们基于 windows10 系统和阿里云服务器(CentOS),搭建了能够抓取 l2tp 协议流量的服务端和电脑环境。在服务端,使用 l2tp over IpSec 协议,开放 1701 端口和 4500 端口,在 windows 系统,通过修改注册表和管理策略,禁用 IpSec 功能,使得协议流量均为未加密的 l2tp 协议流量,便于后续实验分析。编写 C++程序,并配置使用 WinPcap4.1.3,抓取协议流量。

同时,通过观察对比实验,验证了第一问的正确性。

(2)针对每一个目标用户,实时监控其 l2tp 请求,并分析、还原、呈现其连接和业务载荷

首先,我们实时监控了手机的 l2tp 请求。由于手机无法禁用 IpSec 功能,因此通过 l2tp over IpSec 协议与服务端进行数据交换,通过抓取其数据包,使用的端口为 4500,证明了其为加密过的报文。

为了进一步拆解 l2tp 请求数据,我们使用另一台电脑模拟手机环境,在该电脑同样禁用 IpSec,这两台电脑通过热点相互连接,并使用 l2tp vpn,使得能够对目标用户的 l2tp 请求拆解,分析、还原并呈现其连接和业务载荷,包括类型、长度在位标志、顺序字段在位标志、偏移值在位标志、优先级、版本号、消息总长度、隧道标识符、会话标识符、当前消息顺序号、下一消息顺序号、偏移量等信息。

我们也拆解并分析了更高层次的以太网协议、Ipv4 协议和 UDP 协议,详细呈现了其连接和业务载荷。

同时,通过 wireshark 抓取数据包的对比,验证了第二问的正确性。

(3)支持对特定目标的静载荷替换

我们通过对 l2tp 报文封装结构的分析,找到数据包的静载荷部分,并将特定数据包的静载荷替换为自己的 data 数据,替换完成后,再按照 l2tp 报文结构进行封装,产生一个新的数据包。

同时,使用第 2 问的拆解算法,对新的数据包重新拆解,得到了我们替换的新静载荷。