SCAT:信令收集和分析工具
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 MSM8905 | X5 | -t qc | Yes | |
Google Nexus 5 (LG-D821) | Snapdragon 800 MSM8974 | MDM9x25 | -t qc | Yes | |
Google Nexus 5X (LG-H791) | Snapdragon 808 MSM8992 | X10 | -t qc | Yes | |
Google Pixel 2 (G011A) | Snapdragon 835 MSM8998 | X16 | -t qc | Yes | 還需修改系統分區 |
LG G Flex 2 (LG-H955) | Snapdragon 810 MSM8994 | X10 | -t qc | No | |
Sierra Wireless EM7455 | - | X7 (MDM9635) | -t qc | - | |
Sony Xperia X (F5122) | Snapdragon 650 MSM8956 | X8 | -t qc | Yes | |
Samsung Galaxy S III LTE (SHW-M210K) | Exynos 4412 | CMC221S | -t sec -m cmc221s | No | |
Samsung Galaxy S4 LTE (GT-I9505) | Snapdragon APQ8064T | Qualcomm MDM9215 | -t qc | No | |
Samsung Galaxy S5 Mini (SM-G800F) | Exynos 3470 | Exynos Modem 303 | -t sec -m e303 | No | |
Samsung Galaxy S6 (SM-G920F) | Exynos 7420 | Exynos Modem 333 | -t sec -m e333 | No/Yes | |
Samsung Galaxy S6 Edge+ (SM-G928F) | Exynos 7420 | Exynos Modem 333 | -t sec -m e333 | No/Yes | |
Samsung Galaxy S8 (SM-G950F) | Exynos 8895 | Exynos Modem 355 | -t sec -m e333 | No/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
※我的信息搜集之道
※教你如何開發不可檢測的C#、C++反向Shell
TAG:FreeBuf |