OsmocomBB SMS Sniffer

綠盟科技 · 2016/01/07 11:09php

Author:綠盟科技博客css

0x00 簡介


p1

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

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

0x01 原理分析


關於加密

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

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

工做流程

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

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

關於GSM網絡相關知識

p2

0x02 所需硬件


支持的手機web

  • 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模塊,固然其餘模塊也能夠,好比CP210二、CP2303等模塊,不過使用前要先調比如特率。FT232模塊,我買的是¥35的,第一個嘛,爲了求穩定。後面作多個手機聯合嗅探的時候能夠嘗試買一些便宜的。安全

p4

C118數據線

這個數據線就是2.5mm耳機頭轉杜邦線,注意一頭是2.5mm耳機孔的,另外一邊是杜邦線鏈接串口模塊。手邊有2.5mm耳機插頭的能夠本身作一個。固然網上如今也有現成的了,不過成本稍微高一點。¥15左右一條

p5

MiniUSB連接線

這個線應該都有,之前的mp三、手機啥的都是這個線,馬雲家賣¥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:

www.rtl-sdr.com/rtl-sdr-tut…

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,公共控制信道。是一種「一點對多點」的雙向控制信道,其用途是在呼叫接續階段,傳輸鏈路鏈接所須要的控制信令與信息。

參考文獻

相關文章
相關標籤/搜索