首页 > 其他分享 >【流量分析】轻量级内网穿透工具natpass加密流量分析

【流量分析】轻量级内网穿透工具natpass加密流量分析

时间:2024-12-25 12:19:38浏览次数:8  
标签:受控 TLS 流量 natpass 字段 服务端 心跳 长度 轻量级

一、概述

natpass是一款轻量级内网穿透工具,支持shell管理、VNC远程桌面等功能,支持使用TCP、TLS等多种协议进行通信,同时可以自定义预共享密钥确保两端通信安全,并且还支持多种操作系统,可以进行跨平台操作。

【图1】控制端Web页面

二、部署方式

根据部署的位置不同,分为服务端、控制端和受控端。其中服务端用于提供服务,通常部署于公网环境,控制端用于发出控制请求,受控端用于出网,控制端和受控端使用同一个可执行程序,只是使用的配置文件不一样,前者主要是多了Web端功能,会在控制端本地监听一个本地端口用于启动Web端。部署时,首先启动服务端,再启动控制端和受控端进行上线。

【图2】部署方式网络拓扑

三、流量分析

Natpass默认使用TCP协议进行通信,在配置文件中进行简单配置后可以支持TLS协议加密通信,在TLS流量分析部分会对TLS相关配置做进一步说明。

3.1 TCP上线包分析

服务端启动并默认监听6154端口,运行受控端可执行程序进行上线,上线过程首先会发送一个“握手包”到服务端(需要注意的是该“握手包”是工具自定义的,跟TCP建立连接时产生的握手包不是同一个概念),握手包发送的载荷如下图所示:

【图3】TCP上线握手包载荷

【图4】Protobuf编码文件

上图中的载荷经过了Protobuf编码,解析如下:

0056:message的总长度,从0x0801处开始的握手信息长度86个字节;

f2d5023f:随机字节;

0801: 0x08表示_type字段,数据类型为VARINT,0x01表示握手请求;

120672656d6f7465: 0x12表示from字段,数据类型为string(高5位比特标识字段意义,低3位比特标识数据类型),0x06是长度指示,指示后续受控端id的长度,72656d6f7465为字符串”remote”,是受控端的自定义id,表示请求来自受控端;

2206736572766572: 0x22表示to字段,数据类型为string,0x06是长度指示,736572766572为字符串”server”,硬编码在源码中,表示此请求发往服务端;

5242: 0x52为payload字段,数据类型为string,0x42为长度指示;

0a40至载荷末尾: payload字段的值,根据上面的长度指示确定是66个字节, 其中后64字节是通过自定义Hash函数计算得到的哈希值。

自定义Hash函数

自定义Hash函数会生成一段长度为64字节的哈希值赋值给payload,具体算法是获取当前时间戳并转为分钟数,这个分钟数会和预共享密钥一起参与HMAC哈希函数的计算,算法为sha512,通过计算得出一个长度为64字节的哈希值,最后再赋值给payload。

也就是说在payload生成的过程中,预共享密钥和当前时间的分钟数时间戳都会对最终的哈希值产生影响,如果请求的时间不在同一个时间段内或者预共享密钥是错误的都无法产生正确的payload,服务端在接收到请求后,也会进行相同的操作,与受控端发来的payload进行比对,如果不一致,则不会建立握手,通过这样的方式完成验证过程。

服务端默认使用端口6154进行监听,默认情况下监听的端口是固定的,不会随机产生,在配置文件中可以对服务端默认端口号进行更改,支持自定义监听的端口号。

【图5】配置文件中可以自定义服务端监听端口号

3.2 TCP心跳包分析

受控端完成上线之后,每10秒会产生1次心跳,由服务端向受控端先发起,受控端收到心跳请求后会进行响应,最后服务端发送ACK进行最后的确认。

【图6】服务端发起心跳包

分析心跳包相关的代码实现,可以看到心跳包的核心逻辑,心跳包发送间隔10秒是硬编码到代码中的,工具本身也并未提供在配置文件中修改心跳间隔时间的选项。

【图7】服务端心跳包实现代码

分析心跳包发送的载荷,序列化后的载荷如下图所示:

【图8】服务端发起的心跳包

根据上面的Protobuf编码文件进行解析:

0012:message总长度,长度从0x0802处开始计算,总长度是18个字节;

6653ece6:服务端发起心跳包时为6653ece6,如果是受控端发起的心跳包为507dea79,通过跨平台的不同环境抓包,这4个字节始终是固定的;

0802: 0x08表示_type字段,数据类型为VARINT,0x02表示请求类型为keepalive;

1206736572766572:0x12表示From字段,数据类型为string,0x06是长度指示,736572766572是服务端的id,硬编码为字符串”server” ;

220672656d6f7465:0x22表示To字段,类型为string,0x06是长度指示,72656d6f7465是字符串”remote”,为受控端默认自定义ID,可以在受控端配置文件remote.yaml中进行修改。

受控端在接收到服务端发来的请求后会返回心跳包进行响应,载荷跟服务端发出的心跳包大同小异,不再赘述。

【图9】受控端发出的心跳包载荷

3.3 TCP终端连接包分析

通常在上线之后,攻击者会在第一时间进入终端执行命令以确认目标是否可以顺利进行通信。

【图10】受控端终端连接成功

上线完成后通过控制端的Web页面进入终端,进入终端时控制端首先会向服务端发起请求,服务接收到请求后,会生成一个请求发往受控端,请求载荷如下所示:

【图11】服务端发往受控端的终端连接载荷

对序列化数据进行解析:

003c:从0x0803开始的message总长度;

20766014:随机字节码;

0803:0x08表示_type字段,数据类型为VARINT,0x03表示请求类型为connect_req;

12056c6f63616c:0x12表示 from字段,数据类型为string,0x05是长度指示,6c6f63616c是字符串”local”,表示控制端的id;

220672656d6f7465:0x22表示to字段, string类型,0x06是长度指示,72656d6f7465是字符串”remote”,表示受控端的id;

3210613933…13132313933: 0x32表示link_id字段, string类型,0x10是长度指示,613933343…13132313933转为ASCII为“a9341a4b40a12193”,每一个终端都有这样一个单独的link_id,终端通信的请求和响应都会带上这个link_id,用于标记同一终端;

5a170a0573…d3d787465726d: 0x5a表示connect_request字段,string类型,0x17是长度指示,之后的字节为固定字符串,表示创建网页终端时声明的环境变量

受控端在接收到服务端发来的建立终端连接的请求之后,会返回2个响应包,第1个响应包仅带上link_id,用于标记唯一会话,第2个响应包会返回一些终端明文信息,这是终端连接时较为明显的特征,如下图所示:

【图12】受控端的2次响应

【图13】响应包中包含了终端信息

3.4 TLS上线包分析

natpass未提供默认证书,如果要通过TLS协议进行通信,需要自行生成证书和私钥,并在服务端和受控端分别部署证书和相关设置,即可通过TLS协议进行通信。

【图14】服务端TLS配置

【图15】受控端TLS配置

natpass支持自签名证书,只需要在配置文件中将insecure字段修改为true就可以在通信时忽略证书校验。

TLS协议的通信过程构建于TCP协议之上,通过在数据传输的最外层增添了一层加密机制,从而确保通信的保密性、完整性以及身份验证的可靠性。虽然外层包裹了一层加密,不过基于TLS协议的上线包仍然具有TCP通信时的相同行为特点。

受控端在上线时首先会发送一条“握手包”,逻辑跟TCP通信时一致,流量行为上看,受控端会发起一个请求,产生一个上行加密载荷,长度为109字节,通过前面对TCP上线包的分析可以得知,它的长度变化仅取决于有没有自定义ID。序列化后的payload部分虽然也受到自定义ID的影响,但是由于哈希算法的特点,始终会产生固定长度的哈希值,不会对加密载荷长度产生影响。如果受控端采用默认ID上线,在同一环境下总是会产生相同长度、相同个数的上线包,即使更换了默认ID,包长度会有变化,由于一般不会设置超长的ID,以致需要分包传输,上行包数通常也不会产生变化。

【图16】TLS上线包

3.5 TLS心跳包分析

上线握手完成之后,开始发送心跳包,心跳包长度固定为41,心跳包每隔10秒进行1次,并且每次心跳只会产生一次交互,每次交互只有1个上行和下行包,值得注意的是该工具不支持通过配置文件修改默认的心跳包间隔,只能通过修改源码进行工具定制开发才能使该特征产生变化。

【图17】TLS心跳间隔

虽然TLS心跳包完全被加密,不过根据之前对TCP心跳包传输的载荷内容的分析,该心跳包长度取决于服务端和受控端自定义id的长度,但是一旦定义好了id,通信过程中id不会改变,则同一次通信过程中心跳包长度始终不变。

【图18】TLS心跳包长度

四、产品检测

观成瞰云(ENS)-加密威胁智能检测系统能够对natpass工具产生的通信流量进行检测。

【图19】natpass告警详情

五、总结

通过对natpass工具的研究发现,该工具不仅支持shell远控,还支持VNC远程桌面等功能,可以方便的作为黑客工具进行远控管理,虽然该类工具设计的初衷可能只是作为个人研究和学习,从作者的声明也可以看出这一点,不过还是存在可能性会被黑客所利用当作远控工具。通过利用这类非主流的远控工具,一方面可以绕过各类流量检测设备的检测,另一方面也可以使用工具本身提供的丰富强大的功能进行网络攻击。观成科技安全研究团队将持续跟踪这类工具的动态,并积极研究更新检测手段,防范此类网络攻击。

原创 北京观成科技

标签:受控,TLS,流量,natpass,字段,服务端,心跳,长度,轻量级
From: https://www.cnblogs.com/o-O-oO/p/18630115

相关文章

  • 实体门店与线上联动:解锁商业流量转化新密码
    摘要:本文聚焦实体门店与线上平台的协同运营策略,深入剖析以某时尚运动品牌和某知名家居品牌为典型的线下体验、引流及促销联动线上的实战案例,揭示其如何通过创新手段打破渠道壁垒,实现线下线上流量的高效转化与融合,全方位提升品牌销售业绩与市场竞争力,为企业在数字化商业时代的......
  • 开源链动 2+1 模式下智能商业工具在流量运营中的创新与实践与未来展望
    摘要:本文聚焦于开源链动2+1模式、AI智能名片与S2B2C商城小程序在流量运营中的应用,深入剖析其作用机制、应用成效及协同价值,揭示其在数字化商业环境中的关键地位。同时展望未来技术发展趋势下,企业面临的机遇与挑战及应对策略,为企业实现数字化转型与可持续发展提供指引。......
  • 基于模拟数据与逻辑回归的交通流量预测模型:设计与实现全解析
    一、项目概述本项目旨在通过模拟生成的交通相关数据,构建一个逻辑回归模型来预测交通流量。通过对时间、天气、是否为周末等因素的分析,实现对交通流量的分类预测(流量高或低),并评估模型的准确性。二、功能模块设计数据生成模块功能描述:生成包含时间、天气、是否为周末以及相应交......
  • webshell-decryptor:一款使用python tkinter进行GUI开发的Webshell自动解密流量分析工
    免责声明该公众号分享的安全工具和项目均来源于网络,仅供安全研究与学习之用,如用于其他用途,由使用者承担全部法律及连带责任,与工具作者和本公众号无关。工具介绍webshell-decryptor是一款使用pythontkinter进行GUI开发的Webshell自动解密流量分析工具,可通过获取到的webshell......
  • 多普勒超声波流量计在河道灌区流量监测系统中的应用
    在水资源管理和农业灌溉中,准确监测河道灌区的流量至关重要。多普勒超声波流量计以其独特的优势,在河道灌区流量监测系统中得到了较多的应用,通过前端设备监测,可实现灌区信息化改造,下面为您详细介绍多普勒流量计在灌区中的应用。一、多普勒超声波流量计的工作原理多普勒超声波......
  • 4G无线太阳能监控视频24小时流量回传需要多少G的流量?
    在信息化快速发展的今天,无线监控系统的需求日益增长,尤其是在偏远地区或无电无网的环境中。4G无线太阳能监控视频系统以其独特的优势在远程监控领域脱颖而出,它结合了太阳能供电的环保特性和4G无线传输的便捷性,为各种环境尤其是无电或电网不稳定的地区提供了一种高效、可靠的视频监......
  • 流量分析基础篇
    1.流量分析是什么?网络流量分析是指捕捉网络中流动的数据包,并通过查看包内部数据以及进行相关的协议、流量分析、统计等来发现网络运行过程中出现的问题。2.常见的流量包协议TCP; UDP ; HTTP; HTTPS ; FTP; SMB等TCP/UDP传输机制TCP协议传输先向你发送三次握手建......
  • 开源轻量级IM框架MobileIMSDK的鸿蒙NEXT客户端库已发布
    一、基本介绍MobileIMSDK-鸿蒙端是一套基于鸿蒙Next(纯血鸿蒙)系统的IM即时通讯客户端库:1)超轻量级(编译后库文件仅50KB)、无任何第3方库依赖(开箱即用);2)纯ArkTS编写、无Native代码、高度提炼、简单易用;3)基于鸿蒙Next标准WebSocket API,简洁优雅;4)可运行于任何支持鸿蒙Next的平台......
  • AI车流量统计摄像机
    AI车流量统计摄像机是一种基于人工智能技术的先进设备,可以实时监测和分析道路上的车流量情况。这种摄像机利用深度学习算法,能够识别车辆类型、速度和密度等信息,从而帮助交通部门更好地管理道路交通流量。通过AI车流量统计摄像机,交通部门可以实时了解道路上车辆的实际情况,及时调整......
  • KubeHound:开源流量攻击图生成工具
    在云计算时代,Kubernetes已成为容器编排的事实标准。然而,随着其普及,Kubernetes集群的安全性问题也日益凸显。为了应对这一挑战,DataDog推出了KubeHound,一个创新的开源工具,旨在通过生成攻击图来增强Kubernetes集群的安全性。项目地址见文末。项目理念KubeHound是一个专为......