<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            原文地址:http://drops.wooyun.org/tips/11955

            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 所需硬件


            支持的手機

            我們選擇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三種,這里只列出嗅探相關的功能:

            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
            

            一些名詞解釋

            參考文獻

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线