长亭百川云 - 文章详情

Tailscale在内网渗透中利用的研究

7bits安全团队

66

2024-07-13

前言

在内网渗透的过程中,基于内网环境的复杂性,安全测试人员常常需要在其中建立多个代理隧道,以便访问到核心的资产。而建立隧道的工具也层出不穷,除了reGeorg、Frp、stotwawy这些工具外,像Softether这样的正常用途的工具也渐渐被国外的安全团队使用在内网渗透中。

得益于Softether的用户基础,在杀软检测方面几乎不会被查杀,可以做到一定的免杀效果,但是在流量检测方面,多数安全设备都能对其传输的流量进行识别。而本文主要研究能否利用一些正常用途的工具,在官方提供的功能基础上完成对内网渗透的测试。从而能够让网络安全从业者更顺畅的完成测试工作。

本文只研究相关功能的可行性,禁止将该技术用于未经授权的渗透测试行为。

Tailscale介绍

Tailscale是一种基于Wireguard的多地组网的软件,他能够实现将多地主机,都聚合在一个虚拟的局域网中,让这些设备之间能够相互访问。所有的节点都直接使用p2p连接,在一些情况下,速度也很可观。而从目前程序本身来讲,他原本的作用就是进行多地组网,所以杀软也不会对其进行查杀,在流量方面也能起到很好的规避作用。而通过对官方文档的研究,发现利用官方提供的一些功能,可以构造出具有一定安全性与稳定性的隧道。

Tailscale基础使用

账户注册

首先进入官网(https://tailscale.com/),通过点击`Use Tailscale for free`进行注册,其中提供了三种登录方式,这里随便使用一种即可。

当登录后,会出现下图的页面。其中Machines中可以查看当前虚拟局域网中存在的主机。

接下来点击Download下载对应的程序,这里以Windows为例

程序安装

下载完毕后对其进行安装。

安装完成后程序会出现在C:\Program Files\Tailscale文件夹中。

通过点击tailscale-ipn.exe即可打开程序。当运行程序后,会以小图标的方式显示在状态栏下方。

设备接入

Windosw设备接入

这里点击Log in 会调用浏览器打开登录窗口。之后进行登录。

登录完毕后,当前主机被接入虚拟局域网。右边的ip是当前主机在虚拟局域网的地址:

回到主页可以看到这里已经增加了一台设备:

Linux设备接入

接下来我们接入第二台设备,第二台设备使用Kali进行接入。用来模拟linux环境下的接入过程。Linux的安装相对简单,利用下面的一行命令即可完成对Tailscale的安装:

curl -fsSL https://tailscale.com/install.sh | sh

安装完毕后使用命令tailscale up启动,之后会弹出一个地址,在浏览器中打开地址,输入账户进行登录:

登录完毕后可以在首页看到该设备,之后可以利用IP栏中的IP进行访问

利用windows测试Kali的连通性

利用kali测试windows的连通性

自此两台设备成功进行了组网。当拥有一台虚拟局域网中的主机时,默认可以双向访问虚拟局域网中的其他所有主机。

Tailscale内网渗透测试利用研究

需要解决的问题

通过上面的使用介绍,可以发现如果要在渗透测试中使用该程序会出现下面的三个问题:

  • • 隐蔽性问题

  • • 登录问题

  • • 权限控制

  • • 目标主机网段

隐蔽性问题,就是在程序的启动过程中,会在右下角状态栏显示出图标,同时一个正常的登录是通过在图标中右键点击log in来进行登录。这在渗透过程中很难进行操作。另外就是当接入虚拟局域网后,其中的主机可以双向访问,而在渗透测试的过程中,我们仅希望能由安全测试人员,访问到目标主机,而不允许目标直接访问测试人员。最后还存在一个主机网段访问的问题,目前接入虚拟局域网的设备,仅能直接访问其中的设备,不能访问设备中所存在的上层网络。

功能介绍

接下来先介绍一下Tailscale所提供的功能,Tailscale的所有功能都显示在官方的说明文档中,接下来只介绍,能够解决上面问题的功能。

隐蔽性问题的解决

首先来关注隐蔽性的问题,通过观察安装目录,发现该程序仅由四个文件组成。Tailscale-ipn为主程序。如果了解过softether的使用,可以发现在其中是通过将核心的几个文件保存下来,之后利用命令行的方式进行启动。而规避了使用图形化进行操作。

这里发现存在一个tailscale.exe 的文件,而文件名是程序的本身的名字,猜测tailscale-ipn通过调用tailscale.exe来实现对应的功能。通过直接启动该程序发现,其中支持使用命令行进行操作。

当我们使用命令行进行启动后会提示相关的服务没启动。

通过查看计算机中的服务发现,该服务是通过tailscaled.exe文件进行启动的。因为该程序后面没有接参数,我们也直接启动。

之后出现下面的错误提示,发现是权限问题,需要用管理员权限来启动

服务成功被启动。

接下来继续启动tailscale.exe 使用up命令启动,发现没有出现报错。tailscaled也在其中产生了一些连接的日志。

同时右下角没有出现小图标。隐蔽性的问题初步解决了。当利用命令行启动的时候会出现一个问题,此时的账户是没有登录的,也就是没有接入到虚拟局域网中,而正常的登录又需要打开浏览器登录,这也是下面要解决的问题。

登录问题的解决

通过阅读官网提供的文档,发现官方提供了Auth keys的功能,通过使用生成的Auth keys可以直接将目标主机接入到该虚拟局域网中。这样就避免了利用浏览器登录的问题。而可以直接使用命令进行登录。

生成Auth keys

进入Settings标签,点击Generate auth key

进入生成Auth Key 页面,其中有一些内容可以进行设置

标识

内容

Reusable

Key是否允许重复使用

Expiration

Key过期的时间

Ephemeral

临时的设备,即设备如果离线,则从这个虚拟局域网中删除该设备

Tags

标签用作标识一般配合ACL 策略表使用

利用Auth key注册机器

sudo tailscale up --authkey [authkey]

设备成功上线,因为我这里的authkey设置了Ephemeral选项,所以下面可以看到会存在一个Ephemeral的标签。

到这里登录的问题就被解决了。

权限控制问题的解决

由于Taliscale用于多地组网,所以他们之间的关系是相互的,当他与一个设备进行连接的时候,他们之间可以进行相互通信。所以需要让他们仅能由网络测试人员发起请求,被攻击的机器不能向发起请求。

通过查看文档,发现官方为这个问题提供了ACL策略表,通过这个表,我们可以为每台设备制定不同的访问策略。

这里我们简单进行一下设置,如果需要建立更复杂的ACL策略可以参考官方文档。

建立策略:允许kali(100.127.21.76)访问windows(100.91.46.163),但是不允许从windows访问kali主机。

ACLS设置

点击Access controls 标签,acls列表中的意思是允许所有用户访问所有主机的所有端口。

这里我们设置一条策略,允许所有用户访问Windows的ip以及它的所有端口,当点击保存时,这个策略会实时生效。

之后我们利用Windows访问kali的主机,可以发现已经不能访问了,因为上面的策略,只允许访问Windows的主机

到这里就解决了双向连接的问题。

主机网段问题的解决

现在还存在最后一个问题,现在仅允许对目标主机进行访问,但是无法访问某主机中某个网段的其他主机。

这里接入了另一台主机,这台主机中运行着一台虚拟机,其中的网络模式为nat,作为演示。

在虚拟机中通过python起了一个http服务,用来进行下面的演示

针对这种问题,官网允许将主机设置为Subnet routes(子网路由)。通过对其进行配置允许访问子网路由中的网段

配置子网路由

windows

tailscale up --advertise-routes=10.0.0.0/24,10.0.1.0/24 将desktop-5vaj2mu设置为子网路由,并设置可以访问它的网段为10.0.0.0段

点击edit route settings,勾选上10.0.0.0/24段

子网路由设置完毕后虚拟局域网中的其他主机就可以直接访问desktop-5vaj2mu机器中10.0.0.0网段的所有主机,这里使用penetration机器来访问10.0.0.10的虚拟机,已经能成功访问。

Linux

Linux也可以设置为子网路由,只是相比较与windows需要多设置一个端口转发

设置端口转发

`echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf   echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf   sudo sysctl -p /etc/sysctl.d/99-tailscale.conf`
`echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf   echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.conf   sudo sysctl -p /etc/sysctl.conf`

设置允许的子网范围

`sudo tailscale up --advertise-routes=10.0.0.0/24,10.0.1.0/24`

攻击过程模拟

文件上传

接下来模拟,渗透测试人员在获取到shell后,通过上传Tailscale相关文件,之后利用命令行建立隧道。测试人员获取到shell后,上传tailscale.exe 、 tailscaled.exe 、wintun.dll 等文件。

生成auth keys

在tailscale管理面板中生成Auth keys

程序执行

启动tailscaled.exe

启动tailscale.exe 程序 这里需要注意的是要在后面加上--unattended 不然程序会自动退出

tailscale.exe up --authkey [authkey] --unattended

成功上线。

ACL策略表配置

之后配置ACL禁止对方访问测试人员的机器

之后就是判断是否有其他的网段,然后建立子网路由对目标主机的内网进行近一步的渗透。

参考

https://pentera.io/blog/pentera-labs-breaking-the-barriers-of-segmentation/
https://tailscale.com/kb/
https://github.com/tailscale/tailscale/issues/6610

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2