UPF 攻击(断网、会话劫持)
记录一下最近做 UPF 攻击的心得体会。
环境配置
UERANSIM:https://github.com/aligungr/UERANSIM/wiki/Installation
free5gc:https://github.com/free5gc/free5gc/wiki/Installation
gtp5g:https://github.com/free5gc/gtp5g(运行 UPF 网元所需,可在 free5gc 的文件夹里配置)
UERANSIM + free5gc:https://www.free5gc.org/installations/stage-3-sim-install/
官方教程大都很详细了,下面列出一些配置过程中需要注意的地方。
git
ubuntu 中配置环境很多时候都要用到 git clone
命令,这时可以考虑使用 github 镜像:
1 | git config --global url."https://kgithub.com/".insteadOf "https://github.com/" |
执行该条命令后访问 https://github.com/
开头的资源都会被替换为国内 https://kgithub.com/
的镜像。
go
free5gc 运行过程中涉及到很多 go 包的下载,可以通过以下命令设置为国内代理。
1 | go env -w GOPROXY=https://goproxy.cn |
free5gc
shell
在 UERANSIM + free5gc 的教程中核心网主机需要执行以下四条命令,主要功能是对来自 UERANSIM 的数据包进行转发封装,使得自己成为 UERANSIM 与外网间的一个中继:
1 | sudo sysctl -w net.ipv4.ip_forward=1 |
在第二条命令中,需要将 enp0s3 替换为系统的默认网卡,如 ubuntu 20.04 中即为 ens33 。
clone UPF
进行断网和劫持攻击需要克隆一台新的虚拟机来运行 UPF 网元,本机的环回地址无法执行以上攻击。
另外,克隆主机需要将 upfcfg 文件中的一些参数改为本机 ip 。
config
free5gc 主要需要对 amfcfg、smfcfg、upfcfg 这三个文件进行设置,
在旧版本中,UPF 网元的配置文件目录为 free5gc/NFs/upf/build/config/upfcfg.yaml,二进制文件目录为 free5gc/NFs/upf/build/bin/free5gc-upfd,启动命令为 sudo -E ./bin/free5gc-upfd
;
在新版本中,UPF 网元的配置与二进制文件与其他网元一样,分别在 free5gc/bin 和 free5gc/config 这两个目录下。
以下只列出配置文件中的更改项。
AMF
1 | ngapIpList: # the IP list of N2 interfaces on this AMF |
SMF
1 | pfcp: |
UPF
1 | pfcp: |
UPF 攻击
根据 UERANSIM 注册过程中抓到的 PFCP 包可进行以下两种攻击。
断网攻击
步骤
向 UPF 所在主机发送 Sx Session Deletion Request
包。
1 | from scapy.all import * |
注意事项
SEID 字段的值需为 1,0 用于 Establishment ,旧版本中 2 及以上会报段错误。
效果
UPF 删除已有会话,UERANSIM 侧无法上网。
会话劫持
步骤
向 UPF 所在主机发送 Sx Session Modification Request
包。
将包中 Outer Header Creation
字段改为中间人 IP 。
代码
1 | from scapy.all import * |
效果
原本 UPF -> UERANSIM 的包都会发给中间人。
UPF 攻击(断网、会话劫持)