SSH加密隧道流量攻击与检测技术——这玩意和思科加密流量检测没有本质区别啊,可借鉴CNN图像
隧道类型:
SSH隧道 4 0 0% 通过SSH协议实现的隧道
HTTP(S)隧道 7 0 0% 通过HTTP/HTTPS协议实现的隧道
DNS隧道 17 1 5.9% 通过DNS协议实现的隧道
唯一检出的一项由于内部调用了sh执行了命令
ICMP隧道 7 0 0% 通过ICMP协议实现的隧道
NTP隧道 2 0 0% 通过NTP协议实现的隧道
TCP隧道 9 1 12.5% 通过TCP协议实现的隧道
KCP隧道 2 0 0% 通过KCP协议实现的隧道
UDP隧道 3 0 0% 通过UDP协议实现的隧道
这玩意看起来要专门做一个检测啊。
【技术向】SSH加密隧道流量攻击与检测技术
一. 总体概述
1.1网络隐蔽通道技术
隐蔽通道是指系统的一个用户用违反系统安全策略的方式传送信息给另外一个用户的机制。
隐蔽通道分为如下两种类型:
1.存储隐蔽通道:一个进程对某客体进行写操作,而另一个进程可以观察到写的结果。
2.时间隐蔽通道:一个进程对系统性能产生的影响可以被另外一个进程观察到并且可以利用一个时间基准进行测量。
以上这两种类型的隐蔽通道的产生,都必须符合一个条件:即发送进程和接收进程之间无法以符合系统安全机制的方式进行通信,否则他们之间就可以利用正常的通道通信了。
网络隐蔽通道的构建主要利用网络协议漏洞或者报文的时间特性来建立,其常见方式如下:
1.利用未用或保留字段建立隐蔽通道:
由于网络检测系统一般不会对保留字段和未用字段进行检查,因此网络攻击者可将要传递的信息隐蔽在报文中的未用字段或者保留字段中,例如:IP报头的TOS字段和DF字段均可用于隐蔽信息的传输。
2.利用扩展和填充字段建立隐蔽通道:
由于大部分网络协议都支持对报文的扩展,以满足网络通信中的特殊需求,而扩展方式却很少有明确的定义。因此,网络攻击者可以对某协议报文进行自行扩展,将信息作为填充内容隐蔽到填充字段中,从而建立网络隐蔽通道。
3.在协议规范允许下,对报文相关字段或者负载大小进行调制来隐蔽信息的传输,以此来建立网络隐蔽通道。
4.利用报文的收发时间特性,通过调整正常数据包的发送接收时间来隐蔽信息,从而建立网络隐蔽通道。
5.其它方式建立隐蔽通道:
例如,利用网络冲突检测机制或无线局域网的Traceback机制将信息隐蔽其中,这也是建立网络隐蔽通道的方式。
1.2 SSH协议简介
由于部分重要网络协议在通信过程中使用明文传输,往往会造成一定程度的信息泄露与被攻击劫持的风险,在此背景下,由IETF 的网络工作小组(Network Working Group)设计了一种双向加密的保证非安全网络环境中上进行安全远程通信等通信服务的协议,即SSH(Secure Shell) 。SSH协议属于应用层协议,应用于TCP传输层的基础上。SSH通信过程包含5个阶段的通信协商,以保证其两端认证机制的不可欺骗性。此外SSH经过相关设计,在加密的过程中,还对传输的数据进行压缩,以提高传输的速度。
1.3 SSH隧道简介
SSH 的功能多样,不仅对远程登陆、文件传输进行安全加密,此外SSH还能够将其他TCP端口的网络数据通过SSH连接来转发,并且自动提供了相应的加密及解密服务,即加密隧道。SSH隧道的实现主要使用SSH的参数配置进行端口转发,即将所需传输的数据内容通过加密的SSH隧道进行转发。
SSH 端口转发能够提供以下两大功能:
1.加密SSH Client端至SSHServer端之间的通讯数据。
2.突破防火墙的限制完成一些之前无法建立的 TCP 连接。由于SSH的安全性,在数据跨越公网时其他人无法得知数据内容。SSH端口转发有本地转发、远程转发和动态端口转发三种。"远程转发"也称为"SSH反向隧道"。
二. 攻击设计方案
2.1 攻击方案背景
假设有主机A与主机B,主机A上安装有mysql客户端,主机B上安装有mysql服务端,主机A中的mysql客户端需要与主机B中的mysql服务端进行通讯,则需要从mysql的客户端连接到mysql服务端。
由于mysql在传输数据时使用明文传输,暴露在公网的mysql通讯是不安全的,因此为了提高访问mysql服务时的安全性,可以利用SSH搭建"通道",然后将mysql的客户端与服务端通过这条"SSH通道"连接起来,如下图所示:
mysql的客户端与服务端的连接方式从原来直连的方式变成了如上图所示的连接方式,它们之间并不直接进行通讯,而是借助SSH隧道将通讯数据转发,虽然仍然跨越了公网,但是由于SSH本身的安全特性,所以别人无法看到明文传输的数据,数据依靠SSH隧道实现了加密的效果,达到了保护数据安全的作用,提升了mysql的客户端与服务端通讯的安全性。
2.2 攻击方案设计
本方案主要使用openSSH工具利用SSH协议的三种端口转发方式,搭建隧道。
实验环境如下:
角色 |
系统版本 |
ip |
服务 |
Server A |
kali |
192.168.43.38 |
Mysql 客户端 |
Server B |
ubuntu |
192.168.43.25 |
Mysql 服务端 |
2.3 本地转发
在ServerA中执行如下命令,即可在ServerA与ServerB之间建立一条SSH隧道:
ssh -L 9906:192.168.43.25:3306 jiang@192.168.43.25
上述命令表示从本机(ServerA)建立一个到ServerB(192.168.43.25)的SSH隧道,使用本地端口转发模式,监听ServerA本地的9906端口,访问本机的9906端口时,通讯数据将会被转发到ServerB(192.168.43.25)的3306端口。
在Server A上通过SSH本地转发连接Server B上的数据库:
2.4 远程转发
假设Server B在内网,Server B可以访问外网,Server A在外网,ServerA有自己的公网IP。这种情况下,在Server A上是不能通过SSH本地转发连接Server B的,但是Server B可以SSH连接ServerA。因此,我们可以在Server B中主动连接到Server A,即在Server B中执行创建隧道的命令,连接到Server A。隧道创建后,转发端口需要监听在Server A中,以便利用Serve rA访问到内网的Server B。
使用SSH的"-R选项",可以创建一个"远程转发"模式的SSH隧道,我们在ServerB中,执行如下命令即可:
ssh -R9906:192.168.43.25:3306 jiang@192.168.43.38
上述命令在Server B中执行,执行后,即可在ServerA与Server B之间建立SSH隧道,此时,Server B是SSH客户端,ServerA是SSH服务端,隧道建立后,Server A中的9906端口会被监听。
在Server A中访问本地回环地址的9906端口,即可访问到内网ServerB中的mysql服务,如下图所示:
2.5 动态转发
本地转发和远程转发都要求有一个固定的应用服务端的端口号,例如前面例子中的mysql服务端的3306端口,但是某些应用没有这个端口号,例如用浏览器进行Web浏览。当我们在一个不安全的网络环境下上网,用SSH动态转发来保护我们的网页浏览是十分必要的。
SSH动态转发的命令格式:
ssh -D <local port> <SSH Server>
我们在Server B上开启SSH动态转发:
我们可以直接使用localhost:8000作为正常的SOCKS代理来使用,直接在浏览器上设置代理即可:
需要注意的是,此时 SSH 所包护的范围只包括从浏览器端(SSH Client端)到SSH Server端的连接,并不包含从SSH Server端到目标网站的连接。如果后半截连接的安全不能得到充分的保证的话,该方案仍不合适。
2.6 autossh
在实际的使用过程中,如果使用远程转发穿透到内网,SSH隧道将会非常不稳定,特别是在没有固定IP的网络内,autossh工具是一个很好的解决方法。autossh是一个用来监控SSH连接,并自动进行重连的工具。autossh的参数与SSH的参数是一致的,但是不同的是,在隧道断开的时候,autossh会自动重新连接而SSH不会。
安装方法:
apt installautossh
在内网主机Server B上,利用autossh 建立一条SSH反向隧道:
autossh -M 4010 -R 9906:192.168.43.25:3306 jiang@192.168.43.38
“-M”参数的意思是使用内网主机Server B的4010端口监视SSH连接状态,连接出问题了会自动重连。
三. 检测方案设计
本检测方案主要是基于会话行为的模式识别检测。
3.1 基于会话的行为的识别检测
由于其加密性,对于加密流量的识别往往无法使用基于载荷的识别检测方式对其载荷内容进行识别。但是隧道与SSH其他功能在握手、交互方式设计的不同,数据包到达时间、分组大小等统计特征也会因此不同。
传统方案是使用机器学习技术、利用DPI技术提取数据会话流,并按时间序列提取包数与每包的载荷,捕捉流内数据包的包间隔时间,总包长度等统计数据(最大值,最小值,平均值,标准差等),按上下行方向形成按会话划分提取特征值,构建特征工程,利用机器学习有监督分类模型,挖掘特定协议的独特模式,进行分类。
此外,随着计算机科学的发展与技术进步,深度学习模型的不断发展与应用,目前也有较多的深度学习模型被应用于流量识别上,相比于传统的机器学习方法,深度学习模型的学习能力更高,可以学习更复杂的模式。
深度学习对流量识别上主要有基于CNN网络与基于RNN网络两类。
基于RNN网络的主要是将每种不同的流量数据流视作不同的语言模型,将数值序列看作映射到数值空间的语句,然后生成学习不同设备语言语义和句法语法的模型。
基于CNN的主要是通过流量每个字节与图片的灰度数据进行转化,将流量识别分类问题转化为图像分类问题,利用成熟的CNN网络进行分类识别。
本文针对SSH隐蔽隧道的深度学习模型,使用2维卷积神经网络搭建深度学习模型,构建SSH隧道与非隧道流量二分类识别模型,未来还会针对SSH隧道内所使用应用流量进行多分类模型搭建。
3.2 检测流程
3.3 模型设计
使用深度学习算法搭建多层2维卷积神经网络,并在卷积层后添加dropout层,减少神经元之间的共适应关系,消除部分过拟合对模型结果的影响,具体模型设计如下图:
3.4 实验结果
在本地网路中,搭建SSH客户端与服务端,通过第二部分方案进行SSH隧道构建,同时使用其他设备进行正常SSH服务通信,并利用wireshark抓包,使用自研深度包解析工具按会话进行提取。最终经数据预处理、特征工程生成模型输入数据,其模型准确率与损失曲线如下图:
五. 参考链接
[1]Alshammari R , Zincirheywood A N . A flow based approach for SSH traffic detection[J]. 2007.
[2]Dusi M , Crotti M , Gringoli F , et al. Tunnel Hunter: Detecting application-layer tunnels with statistical fingerprinting[J]. Computer Networks, 2009, 53(1):81-97.
[3]谭小兵. SSH隧道流量检测与识别技术研究[D]. 中国科学院研究生院(西安光学精密机械研究所), 2012.
[4] http://www.zsythink.net/archives/2450
[5] https://www.freebuf.com/articles/network/207850.html
[6] https://blog.csdn.net/sunansheng/article/details/50927687
[7]Lopez-Martin M , Carro B , Sanchez-Esguevillas A , et al. Network Traffic Classifier With Convolutional and Recurrent Neural Networks for Internet of Things[J]. IEEE Access, 2017, PP(99):1-1.