freeBuf
主站

分类

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

特色

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

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

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

FreeBuf+小程序

FreeBuf+小程序

SCAT:信令收集和分析工具
2019-01-12 15:00:19

SCAT是一个由python编写的信令收集和分析工具,它会通过USB解析Qualcomm和Samsung基带的诊断信息,并生成包含蜂窝控制平面消息的GSMTAP数据包流。

安装要求

PC

目前仅在Linux上测试过,且多数为Ubuntu的各种衍生版本。Python版本不得低于python 3,另外还需要安装以下外部模块:

pyUSB

pySerial

要正确解码SCAT生成的GSMTAP数据包,需要Wireshark 2.6.0或更高版本。对于老版本的Wireshark,我们提供了一个Wireshark Lua插件来帮助其扩展GSMTAP解码功能。SCAT使用的GSMTAP定义基于libosmocore 0.11.0。

智能手机

蜂窝设备必须通过USB暴露诊断端口。这主要取决于所使用的设备,我们无法为所有设备提供一个通用的解决方案。使用关键字(你的设备名称)qpst在网上搜索获取,基于Qualcomm的智能手机暴露诊断端口的方法。

三星:在拨号器中输入*#0808#,选择包含DM的任意USB模式条目;

韩版:在拨号器中输入3197123580,密码为9964127764320821。

2018年以后的某些版本的固件,将会阻止使用上述代码访问隐藏菜单。目前并无解决方案。

LG:在拨号器中输入277634#*#(TODO:USB测试菜单的确切位置)

在某些LG设备上,即使启用USB测试模式诊断端口也不会在Linux中暴露。这是由于使用了多个USB设备配置导致的;建议在此类设备中更改当前USB配置的udev规则。

索尼:需要root。获取一个有root权限的adb shell,并输入命令setprop persist.usb.eng 1。

Nexus:需要root。获取一个有root权限的adb shell,并输入命令setprop sys.usb.config diag,adb。

不适用于Pixel设备!

Sailfish OS:( TODO:如何修改usb-moded设置)

使用

虽然我们建议大家直接使用USB来访问诊断端口,但如果你的智能手机的诊断端口可以通过串行端口访问,那也是个不错的选择。所有基于Qualcomm的智能手机的qcserial内核模块并没有包含有关诊断端口的信息,而基于三星的智能手机也没有这样的模块。

通过USB访问基带诊断:

$ scat.py -t qc -u -a 001:010 -i 2

-t qc 定义我们正在解析Qualcomm基带。对于Samsung基带需要将qc替换为sec,且需要我们手动提供型号,如下所示:

$ scat.py -t sec -m e333 -u -a 001:006 -i 2

可用型号类型如下:

-m cmc221s:CMC221S,用于早期的三星LTE调制解调器/智能手机;

-m e303:调制解调器芯片Exynos Modem 303;

-m e333:调制解调器芯片Exynos Modem 333

较新的Exynos调制解调器可与-m e333选项一起使用,YMMV。

-u 指定我们通过USB访问的诊断设备

虽然有启发式算法可以确定连接的设备,但还是建议大家能明确指定诊断节点的USB设备地址和接口编号。-a 001:010 指定地址,该地址遵循lsusb命令中可见的相同语法。-i 2 指定诊断节点的接口编号,该编号也是特定于设备的。

通过串口访问基带诊断:

$ scat.py -t qc -s /dev/ttyUSB0

将/dev/ttyUSB0替换为你的诊断设备。

默认情况下,scat将包发送到127.0.0.1,控制平面包作为gsmtap发送到udp端口4729,用户平面包作为ip发送到udp端口47290。

使用Ctrl+C退出应用程序。

高级选项

可以使用-H 127.0.0.2开关更改发送GSMTAP数据包的目的地。例如,以下命令将所有数据包发送到127.0.0.2:

$ scat.py -t sec -m e333 -u -a 001:006 -i 2 -H 127.0.0.2

使用以下命令,以便能够使用Wireshark轻松对其进行排序:

ifconfig ethUSB 127.0.0.2 netmask 255.255.255.0 up
sudo route add -net 127.0.0.0 netmask 255.255.255.0 gw 127.0.0.1

可以使用其他命令的输出自动确定USB总线地址。以下示例适用于三星Galaxy S5 Mini:

val=$(lsusb | awk '/Samsung/ {print substr($4, 1, length($4)-1)}')
    sudo ./scat.py -t sec -m e303 -u -a 001:$val -i 4 -H 127.0.0.2

已测试过的设备

以下设备已由作者和贡献者进行测试:

设备名称/型号处理器基带必要参数是/否需要root 
Nokia 8110 4G (TA-1048)Snapdragon 205 MSM8905X5-t qcYes 
Google Nexus 5 (LG-D821)Snapdragon 800 MSM8974MDM9x25-t qcYes 
Google Nexus 5X (LG-H791)Snapdragon 808 MSM8992X10-t qcYes 
Google Pixel 2 (G011A)Snapdragon 835 MSM8998X16-t qcYes还需修改系统分区
LG G Flex 2 (LG-H955)Snapdragon 810 MSM8994X10-t qcNo 
Sierra Wireless EM7455-X7 (MDM9635)-t qc- 
Sony Xperia X (F5122)Snapdragon 650 MSM8956X8-t qcYes 
Samsung Galaxy S III LTE (SHW-M210K)Exynos 4412CMC221S-t sec -m cmc221sNo 
Samsung Galaxy S4 LTE (GT-I9505)Snapdragon APQ8064TQualcomm MDM9215-t qcNo 
Samsung Galaxy S5 Mini (SM-G800F)Exynos 3470Exynos Modem 303-t sec -m e303No 
Samsung Galaxy S6 (SM-G920F)Exynos 7420Exynos Modem 333-t sec -m e333No/Yes 
Samsung Galaxy S6 Edge+ (SM-G928F)Exynos 7420Exynos Modem 333-t sec -m e333No/Yes 
Samsung Galaxy S8 (SM-G950F)Exynos 8895Exynos Modem 355-t sec -m e333No/Yes 

注:以上列表并未列出所有基于Qualcomm的设备。

已知错误

在某些Qualcomm设备上,退出并多次启动应用程序后初始化最终会挂起,并且不会显示任何消息。根本原因仍在调查中。解决方案:重启智能手机;

在某些三星设备上,缺少EARFCN等元数据信息或没有出现控制平面消息。如果遇到此类情况,请告知你的环境以获取解决方案。

参考文献

Byeongdo Hong,Shinjo Park,Hongil Kim,Dongkwan Kim,Hyunwook Hong,Hyunwoo Choi,Jean-Pierre Seifert,Sung-Ju Lee,Yongdae Kim。

窥视蜂窝围墙花园 - 一种封闭式网络诊断方法 - IEEE Transactions on Mobile Computing(2018.2)

*参考来源:GitHub,FB小编secist编译,转载请注明来自FreeBuf.COM

# USB # SCAT # 信令收集和分析
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者