OsmocomBB SMS Sniffer

wyzsk發表於2020-08-19
作者: 綠盟科技 · 2016/01/07 11:09

Author:綠盟科技部落格

0x00 簡介


p1

OsmocomBB(Open source mobile communication Baseband)是國外一個開源專案,是GSM協議棧(Protocols stack)的開源實現。其目的是要實現手機端從物理層(layer1)到layer3的三層實現,主要進行2G網簡訊嗅探。本文詳細地介紹了實現方法,以供安全愛好者學習和參考。

目前來看,真正的物理層(physical layer)並沒有真正的開源實現,暫時也沒看到實施計劃。只有物理層控制。因為真正的物理層是執行在baseband processor的DSP core上,涉及到許多訊號處理演算法的實現,而且還要牽扯很多硬體RF的東西。這項技術至少在2010年,技術已經成熟,2011年就有開源實現了。得益於OsmocomBB 的開源專案,使得我們用一臺筆記本和很簡單的硬體就能完成GSM sms嗅探。

0x01 原理分析


關於加密

GSM加密採用A5演算法。A5演算法1989年由法國人開發,是一種序列密碼,它是歐洲GSM標準中規定的加密演算法,專用於數字蜂窩行動電話的加密,用於對從電話到基站連線的加密。A5的特點是效率高,適合硬體上高效實現。

A5發展至今,有A5/1、A5/2、A5/3、A5/4、A5/5、A5/6、A5/7等7個版本,目前GSM終端一般都支援A5/1和A5/3,A5/4以上基本不涉及。值得注意的是,A5/2是被『故意弱化強度』的版本,專用於『出口』給『友邦』,2006年後被強制叫停,終端不允許支援A5/2。

工作流程

手機開機時的位置更新流程:

  1. MS(手機)向系統請求分配信令通道(SDCCH);
  2. MSC收到手機發來的IMSI可及訊息;
  3. MSC將IMSI可及資訊再傳送給VLR,VLR將IMSI不可及標記更新為IMSI可及;
  4. VLR反饋MSC可及資訊訊號;
  5. MSC再將反饋訊號發給手機;
  6. MS傾向訊號強的BTS,使用哪種演算法由基站決定,這也導致了可以用偽基站進行攻擊。

關於GSM網路相關知識

p2

0x02 所需硬體


支援的手機

  • MotorolaC123/C121/C118 (E88) — our primary target
  • MotorolaC140/C139 (E86)
  • MotorolaC155 (E99) — our secondary target
  • MotorolaV171 (E68/E69)
  • SonyEricssonJ100i
  • Pirelli DP-L10
  • Neo 1973 (GTA01)
  • OpenMoko – Neo Freerunner (GTA02)
  • SciphoneDreamG2 (MT6235 based)

我們選擇Moto C118,因為官方支援的最好、硬體成本低,¥35/臺(手機+電池+充電器)

p3

USB轉串列埠模組

推薦帶TX/RX LED的 FT232模組,當然其他模組也可以,比如CP2102、CP2303等模組,不過使用前要先調好位元率。FT232模組,我買的是¥35的,第一個嘛,為了求穩定。後面做多個手機聯合嗅探的時候可以嘗試買一些便宜的。

p4

C118資料線

這個資料線就是2.5mm耳機頭轉杜邦線,注意一頭是2.5mm耳機孔的,另一邊是杜邦線連線串列埠模組。手邊有2.5mm耳機插頭的可以自己做一個。當然網上現在也有現成的了,不過成本稍微高一點。¥15左右一條

p5

MiniUSB連結線

這個線應該都有,以前的mp3、手機啥的都是這個線,馬雲家賣¥10,如果你用了Pl2303那類的USB轉換板,就可以不用這根線了,那個板子上自帶U口。

p6

0x03 編譯OsmocomBB


基礎環境

MacOs 10.10.5 + VMworkstation + Ubuntu 12.04 x64

我的實驗用的是這樣的環境,網上很多教程都說X64的虛擬機器不能正常編譯,但是我確實是成功了。也可以嘗試使用別的環境試試,畢竟我的實驗環境僅供參考。

網路環境要求能夠正常訪問github,實驗環境周圍存在GSM訊號。

C118手機有足夠的電量,支援實驗。

準備所需目錄以及檔案

具體專案目錄結構和所需檔案如下圖:

p7

準備好之後的目錄如下圖:

p8

我是把整個source目錄放在了使用者資料夾下,僅做參考。只需要按照上面文字格式的結構圖準備就好,圖片中未出現部分後面會寫如何出現…

編譯環境準備

編譯前安裝所需的依賴庫檔案:

#!bash
sudo apt-get install build-essential libgmp3-dev libmpfr-dev libx11-6 libx11-dev texinfo flex bison libncurses5 libncurses5-dbg libncurses5-dev libncursesw5 libncursesw5-dbg libncursesw5-dev zlibc zlib1g-dev libmpfr4 libmpc-dev

p9

在arm根目錄執行build.sh檔案進行build操作:

#!bash
chmod +x gnu-arm-build.2.sh ./ gnu-arm-build.2.sh

p10

完成後arm/install/目錄結構如圖所示:

p11

因為編譯需要,把arm/install/bin路徑加入到環境變數中,我這裡是加入到使用者的環境變數中。使用pwd命令獲取絕對路徑:

p12

修改~/.bashrc檔案,最後一行加入:

#!bash
export PATH=$PATH:/home/wooyaa/source/arm/install/bin

執行source命令讓配置檔案即時生效:

#!bash
source ~/.bashrc

在終端中輸入arm然後按tab鍵,如果出現如下圖所示就說明編譯環境搞定了:

p13

編譯OsmocomBB

把osmocom專案gitclone到source目錄下:

#!bash
git clone git://git.osmocom.org/osmocom-bb.git git clone git://git.osmocom.org/libosmocore.git

在libosmocore/目錄中編譯osmocom核心庫檔案

#!bash
cd /home/wooyaa/source/libosmocore/ autoreconf -i ./configure make sudo make install

編譯OsmocomBB:

#!bash
cd /home/wooyaa/source/osmocom-bb/src/ git checkout –track origin/luca/gsmmap //選擇分支 make //交叉編譯

如果沒什麼問題,軟體環境和韌體就都編譯好了。

Ununtu 12.04自帶FT232R驅動,所以直接連線就能使用,不需要再裝驅動。

常見錯誤

常見報錯有可能是autoconf、libtool、libpcsclite-dev等檔案的缺失,只要裝好就行了。具體版本請使用apt-cache search xxx在你自己電腦中的apt-get的list中查詢。

0x04 使用方法


連線硬體

在終端中輸入lsusb,會顯示當前usb連線的資訊:

p14

如果驅動正常,插上MiniUSB線後就能看到usb-serial:

p15

網上的教程大多都誤認為是將firmware刷入手機,實際上這裡只是把韌體載入到手機RAW中執行。

載入Firmware到手機raw中

#!bash
cd /home/wooyaa/source/osmocom-bb/src/host/osmocon/./osmocon -m c123 -p /dev/ttyUSB0 ../../target/firmware/board/compal_e88/layer1.compalram.bin
  1. 其中 –m c123跟c123xor的區別就是是否檢測資料總和
  2. 上面命令需要在關機下執行,然後短按開機鍵

終端上會顯示”starting up”字樣,如下:

p16

手機螢幕顯示Layer 1 osmocom-bb 字樣就表示成功了:

p17

掃描基站

#!bash
cd /home/wooyaa/source/osmocom-bb/src/host/layer23/src/misc/sudo ./cell_log –O

其中cell_log的引數是字母O,具體作用是隻檢查ARFCN是否可用,不進行其它操作,可以用./cell_log –help參看說明。

終端中會輸出日誌資訊,其中會包含能夠收到的基站的相關資訊,格式類似這樣:

#!bash
cell_log.c:248 Cell: ARFCN=40 PWR=-61dB MCC=460 MNC=00 (China,China Mobile)

ARFCN後面的編號可以代表基站通道號,還包含了運營商資訊。

p18

關於嗅探

因為我們買的便宜貨,每個手機只能嗅探一個通道,具體一些的,可以參考下面的圖(我們現在只能抓Downlink的資料包):

p19

因為想要Sniffer Uplink的包,要修改硬體,C118主機板上的RX filters要換掉,換成我們需要的HHM1625&&HHM1623C1濾波器元件,才能抓Uplink的資料包。

有關通道號ARFCN的問題,可以參考下面的圖:

p20

開始嗅探

選擇想要監聽的通道號並開始嗅探廣播資料。

在目錄/home/wooyaa/source/osmocom-bb/src/host/layer23/src/misc/下執行嗅探:

#!bash
./ccch_scan -i 127.0.0.1 -a THE_ATFCN_ID

其中THE_ATFCN_ID就是掃描到的日誌中引數ARFCN的值。

蘋果手機可以執行:3001#12345# 進入工程模式後,選擇GSM Cell Environment->GSM Cell Info->GSM Serving Cell,就可以看到目前手機連線的基站ARFCN值了,應該在第二步中,也能看到這個ID存在。

其他手機的命令

Samsung (Android): *#0011#

p21

使用wireshark抓取監聽資料

因為osmocomBB執行之後預設會在本地開啟4729埠,這時候的GSM協議已經被封裝上了TCP-IP,可以在本地用wireshark抓到,所以我們使用wireshark去監聽4729的埠

#!bash
sudo wireshark -k -i lo -f 'port 4729'

p22

在wireshark中過濾gsm_sms協議資料,過濾之後得到的資料裡面就包含簡訊的明文資訊。 過濾後得到的明文簡訊資訊

p23

SMS text就是簡訊的明文內容,其他git分支還支援把監聽到的資料儲存到cap包,然後透過指令碼來過濾包內容,達到嗅探簡訊明文的目的。後面會有計劃的去嘗試。

配置OsmocomBB

layer23是用/home/wooyaa/source/osmocom-bb/src/host/layer23/src/mobile下的mobile程式實現,所以透過執行mobile檔案可以進行自定義,配置一些關於osmocom-bb的資訊。

#!bash
cd /home/wooyaa/source/osmocom-bb/src/host/layer23/src/mobile
sudo ./mobile -i 127.0.0.1

執行mobile程式之後,會在本地開啟4247埠,使用telnet連線,然後配置執行,隨時使用?來檢視help資訊。

p24

關於嗅探內容

簡單來講,簡訊接受者的號碼、IMEI等資料,只有在”Location Update”時才會在網路中出現,並且是以加密形式傳輸的。當接收簡訊時,基站根據之前位置更新時註冊的資訊,判斷接收者的位置。所以,想要拿到接受者的號碼,需要破解A5/1演算法並還原出”Location Update”時的原文。

只不過需要價格昂貴的USRP2…

另外還看到個RTL-SDR的文章(就是以前傳說中可以跟蹤飛機的電視棒),也支援Airprobe:

http://www.rtl-sdr.com/rtl-sdr-tutor…and-wireshark/

Tips

  1. 記住所有操作在sudo -s root許可權下操作。
  2. 開機鍵不是長按,而是短按,否則就進入原系統了。
  3. 現在2G簡訊越來越少了,多等等會有的。理論上話音一樣能夠被監聽及解碼,只是涉及技術更為複雜。
  4. CP210x的接線,RX和TX有可能需要對調。執行cp210x-program需要先安裝ibusb-dev,如果輸出是“No devices found”或“Unable to send request, 3709 result=-110”,則有問題。

0x05 後期計劃


捕獲上行包

因為想要嗅探Uplink的包,要修改硬體,C118主機板上的RX filters要換掉,換成我們需要的HHM1625&&HHM1623C1濾波器元件,才能抓Uplink的資料包。修改方法如下:

要使手機能夠成為『passive uplink sniffer』,必須動到電烙鐵,替換掉RX filters。

替換前:

p25

摘掉後:

p26

替換後:

p27

使用OsmocomBB RSSI monitor檢視訊號強弱:

#!bash
./osmocom-bb/src/host/osmocon/osmocon -p /dev/ttyUSB0 -m c123xor -c ./osmocom-
bb/src/target/firmware/board/compal_e88/rssi.highram.bin ./osmocom-
bb/src/target/firmware/board/compal_e88/chainload.compalram.bin

由於RSSI太大,不便於像OsmocomBB那樣直接載入,所以要先用-C引數載入一個小的chainloader程式去載入我們真正的RSSI Payload程式:

p28

簡訊內容實時web頁面展示

製作成綿羊牆,線上實時顯示嗅探到的簡訊

多裝置聯合嗅探

嘗試多裝置一起嗅探,增強嗅探範圍和效果

0x06 附錄


DIY Moto C118資料連結線

p29

圖中例子耳機為moto T191的耳機,右圖中標註的顏色為耳機線拆開后里面線芯的顏色。耳機線拆開后里面會包含3根帶有外皮的銅線。

GSM網路相關知識

p30

從協議圖中得知,移動裝置(MS)和基站(BTS)間使用Um介面,最底層就是刷入手機的layer1物理傳輸層,之上分別是layer2資料鏈路層和layer3網路層

p31

位於圖中layer2的LAPDm,是一種保證資料傳輸不會出錯的協議。一個LAPDm幀共有23個位元組(184個位元),提供分片管理控制等功能。

layer3的協議則可以分為RR/MM/CM三種,這裡只列出嗅探相關的功能:

  • RR(Radio Resource Management):channel, cell(控制等資訊,可以忽略)
  • MM(Mobility Management):Location updating(如果需要接收方號碼,需要關注這個動作)
  • CM(Connection Management):Call Control(語音通話時的控制資訊,可以知道何時開始捕獲TCH), SMS(這裡的重點)

p32

參考GSM的文件 TS 04.06 得知 LAPDm 的Address field欄位中,定義了 3.3.3 Service access point identifier (SAPI)。SAPI=3就是我們要的Short message service。 使用tcpdump配合show_gsmtap_sms.py指令碼在console列出簡訊明文。

#!bash
tcpdump -l -ilo -nXs0 udp and port 4729 | python2 -u show_gsmtap_sms.py

一些名詞解釋

  • MS:Mobile Station,移動終端;
  • IMSI:International Mobile Subscriber Identity,國際移動使用者標識號,是TD系統分給使用者的唯一標識號,它儲存在SIM卡、HLR/VLR中,最多由15個數字組成;
  • MCC:Mobile Country Code,是移動使用者的國家號,中國是460;
  • MNC:Mobile Network Code ,是移動使用者的所屬PLMN網號,中國移動為00、02,中國聯通為01;
  • MSIN:Mobile Subscriber Identification Number,是移動使用者標識;
  • NMSI:National Mobile Subscriber Identification,是在某一國家內MS唯一的識別碼;
  • BTS:Base Transceiver Station,基站收發器;
  • BSC:Base Station Controller,基站控制器;
  • MSC:Mobile Switching Center,移動交換中心。行動網路完成呼叫連線、過區切換控制、無線通道管理等功能的裝置,同時也是移動網與公用電話交換網(PSTN)、綜合業務數字網(ISDN)等固定網的介面裝置;
  • HLR:Home location register。儲存使用者的基本資訊,如你的SIM的卡號、手機號碼、簽約資訊等,和動態資訊,如當前的位置、是否已經關機等;
  • VLR:Visiting location register,儲存的是使用者的動態資訊和狀態資訊,以及從HLR下載的使用者的簽約資訊;
  • CCCH:Common Control CHannel,公共控制通道。是一種“一點對多點”的雙向控制通道,其用途是在呼叫接續階段,傳輸鏈路連線所需要的控制信令與資訊。

參考文獻

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!