在内网渗透的过程中,基于内网环境的复杂性,安全测试人员常常需要在其中建立多个代理隧道,以便访问到核心的资产。而建立隧道的工具也层出不穷,除了reGeorg、Frp、stotwawy这些工具外,像Softether这样的正常用途的工具也渐渐被国外的安全团队使用在内网渗透中。
得益于Softether的用户基础,在杀软检测方面几乎不会被查杀,可以做到一定的免杀效果,但是在流量检测方面,多数安全设备都能对其传输的流量进行识别。而本文主要研究能否利用一些正常用途的工具,在官方提供的功能基础上完成对内网渗透的测试。从而能够让网络安全从业者更顺畅的完成测试工作。
本文只研究相关功能的可行性,禁止将该技术用于未经授权的渗透测试行为。
Tailscale是一种基于Wireguard的多地组网的软件,他能够实现将多地主机,都聚合在一个虚拟的局域网中,让这些设备之间能够相互访问。所有的节点都直接使用p2p连接,在一些情况下,速度也很可观。而从目前程序本身来讲,他原本的作用就是进行多地组网,所以杀软也不会对其进行查杀,在流量方面也能起到很好的规避作用。而通过对官方文档的研究,发现利用官方提供的一些功能,可以构造出具有一定安全性与稳定性的隧道。
首先进入官网(https://tailscale.com/),通过点击`Use Tailscale for free`进行注册,其中提供了三种登录方式,这里随便使用一种即可。
当登录后,会出现下图的页面。其中Machines中可以查看当前虚拟局域网中存在的主机。
接下来点击Download下载对应的程序,这里以Windows为例
下载完毕后对其进行安装。
安装完成后程序会出现在C:\Program Files\Tailscale
文件夹中。
通过点击tailscale-ipn.exe
即可打开程序。当运行程序后,会以小图标的方式显示在状态栏下方。
这里点击Log in 会调用浏览器打开登录窗口。之后进行登录。
登录完毕后,当前主机被接入虚拟局域网。右边的ip是当前主机在虚拟局域网的地址:
回到主页可以看到这里已经增加了一台设备:
接下来我们接入第二台设备,第二台设备使用Kali进行接入。用来模拟linux环境下的接入过程。Linux的安装相对简单,利用下面的一行命令即可完成对Tailscale的安装:
curl -fsSL https://tailscale.com/install.sh | sh
安装完毕后使用命令tailscale up
启动,之后会弹出一个地址,在浏览器中打开地址,输入账户进行登录:
登录完毕后可以在首页看到该设备,之后可以利用IP栏中的IP进行访问
利用windows测试Kali的连通性
利用kali测试windows的连通性
自此两台设备成功进行了组网。当拥有一台虚拟局域网中的主机时,默认可以双向访问
虚拟局域网中的其他所有主机。
通过上面的使用介绍,可以发现如果要在渗透测试中使用该程序会出现下面的三个问题:
• 隐蔽性问题
• 登录问题
• 权限控制
• 目标主机网段
隐蔽性问题,就是在程序的启动过程中,会在右下角状态栏显示出图标,同时一个正常的登录是通过在图标中右键点击log in
来进行登录。这在渗透过程中很难进行操作。另外就是当接入虚拟局域网后,其中的主机可以双向访问,而在渗透测试的过程中,我们仅希望能由安全测试人员,访问到目标主机,而不允许目标直接访问测试人员。最后还存在一个主机网段访问的问题,目前接入虚拟局域网的设备,仅能直接访问其中的设备,不能访问设备中所存在的上层网络。
接下来先介绍一下Tailscale所提供的功能,Tailscale的所有功能都显示在官方的说明文档中,接下来只介绍,能够解决上面问题的功能。
首先来关注隐蔽性的问题,通过观察安装目录,发现该程序仅由四个文件组成。Tailscale-ipn为主程序。如果了解过softether的使用,可以发现在其中是通过将核心的几个文件保存下来,之后利用命令行的方式进行启动。而规避了使用图形化进行操作。
这里发现存在一个tailscale.exe 的文件,而文件名是程序的本身的名字,猜测tailscale-ipn通过调用tailscale.exe来实现对应的功能。通过直接启动该程序发现,其中支持使用命令行进行操作。
当我们使用命令行进行启动后会提示相关的服务没启动。
通过查看计算机中的服务发现,该服务是通过tailscaled.exe文件进行启动的。因为该程序后面没有接参数,我们也直接启动。
之后出现下面的错误提示,发现是权限问题,需要用管理员权限来启动
服务成功被启动。
接下来继续启动tailscale.exe 使用up命令启动,发现没有出现报错。tailscaled也在其中产生了一些连接的日志。
同时右下角没有出现小图标。隐蔽性的问题初步解决了。当利用命令行启动的时候会出现一个问题,此时的账户是没有登录的,也就是没有接入到虚拟局域网中,而正常的登录又需要打开浏览器登录,这也是下面要解决的问题。
通过阅读官网提供的文档,发现官方提供了Auth keys的功能,通过使用生成的Auth keys可以直接将目标主机接入到该虚拟局域网中。这样就避免了利用浏览器登录的问题。而可以直接使用命令进行登录。
进入Settings标签,点击Generate auth key
进入生成Auth Key 页面,其中有一些内容可以进行设置
标识
内容
Reusable
Key是否允许重复使用
Expiration
Key过期的时间
Ephemeral
临时的设备,即设备如果离线,则从这个虚拟局域网中删除该设备
Tags
标签用作标识一般配合ACL 策略表使用
sudo tailscale up --authkey [authkey]
设备成功上线,因为我这里的authkey设置了Ephemeral选项,所以下面可以看到会存在一个Ephemeral的标签。
到这里登录的问题就被解决了。
由于Taliscale用于多地组网,所以他们之间的关系是相互的,当他与一个设备进行连接的时候,他们之间可以进行相互通信。所以需要让他们仅能由网络测试人员发起请求,被攻击的机器不能向发起请求。
通过查看文档,发现官方为这个问题提供了ACL策略表,通过这个表,我们可以为每台设备制定不同的访问策略。
这里我们简单进行一下设置,如果需要建立更复杂的ACL策略可以参考官方文档。
建立策略:允许kali(100.127.21.76)访问windows(100.91.46.163),但是不允许从windows访问kali主机。
点击Access controls 标签,acls列表中的意思是允许所有用户访问所有主机的所有端口。
这里我们设置一条策略,允许所有用户访问Windows的ip以及它的所有端口,当点击保存时,这个策略会实时生效。
之后我们利用Windows访问kali的主机,可以发现已经不能访问了,因为上面的策略,只允许访问Windows的主机
到这里就解决了双向连接的问题。
现在还存在最后一个问题,现在仅允许对目标主机进行访问,但是无法访问某主机中某个网段的其他主机。
这里接入了另一台主机,这台主机中运行着一台虚拟机,其中的网络模式为nat,作为演示。
在虚拟机中通过python起了一个http服务,用来进行下面的演示
针对这种问题,官网允许将主机设置为Subnet routes(子网路由)。通过对其进行配置允许访问子网路由中的网段
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也可以设置为子网路由,只是相比较与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 等文件。
在tailscale管理面板中生成Auth keys
启动tailscaled.exe
启动tailscale.exe 程序 这里需要注意的是要在后面加上--unattended
不然程序会自动退出
tailscale.exe up --authkey [authkey] --unattended
成功上线。
之后配置ACL禁止对方访问测试人员的机器
之后就是判断是否有其他的网段,然后建立子网路由对目标主机的内网进行近一步的渗透。
https://pentera.io/blog/pentera-labs-breaking-the-barriers-of-segmentation/
https://tailscale.com/kb/
https://github.com/tailscale/tailscale/issues/6610