介紹
本次實驗介紹電話信號的篡改:一種旨在通信會話中插入、修改和刪除VoIP包的中間人攻擊。最常見的VoIP電話基礎設施是基于兩種協議:RTP和SIP。
VoIP(Voice over Internet Protocol)簡而言之就是將模擬信號(Voice)數字化,以數據封包(Data Packet)的形式在IP網絡(IP Network)上做實時傳遞。
RTP(實時傳輸協議)是一個網絡協議編碼,通過IP網絡提供音頻和視頻信號;它提供了端到端的網絡傳輸功能, 適合應用程序傳輸實時數據,比如電話和視頻會議。
會話初始化協議(SIP)是一種通信協議,用于企業和供應商環境,發送信號和控制多媒體通信會話 :可以建立、修改和終止與一個或多個參與者的會話,如網絡電話通話。其操作非常類似于HTTP協議 ,但卻是一個點對點,有兩種類型的消息 : 請求,從客戶機向服務器發送的信息; 響應 ,從服務器到客戶端發送的消息。
請求消息提供了以下主要方法:
l INVIT:啟動一個對話;
l ACK:承認從一個邀請消息;
l BYE:一個會話終止兩個用戶之間的呼叫;
l REGISTER:用于從一個SIP用戶注冊一個位置;
l OPTIONS:允許UA查詢另一個代理或代理服務器作為其功能;
l CANCEL:取消等待INVITE請求使用;
SIP響應消息是三位數代碼,比如HTTP:
l 1xx 信息
l 2xx 成功
l 3xx 重定向
l 4xx 請求失敗
l 5xx 服務器失敗
l 6xx 全局失敗
SIP體系結構有五個邏輯核心組件:
l 用戶代理(UA),啟動和終止SIP的一個客戶端應用程序或設備連接。
l 代理服務器,它接收來自各種用戶代理和SIP請求路由到適當的下一跳。
l 重定向服務器,對接收到的請求生成重定向的響應。
l 注冊服務器,處理注冊請求,將SIP URI映射到自己的當前位置。
l 位置服務器,被重定向服務器或代理服務器定位呼叫者的可能位置。
實驗室基礎設施
在這個實驗室中,我們將說明和演示VoIP電話修改攻擊,我們使用如下的虛擬機構建局域網場景。
Kali Linux:攻擊者,ip地址192.168.178.62/24
Windows Server 2012 R2:用戶代理A,ip地址192.168.178.81/24
Windows 7: 用戶代理B,ip地址192.168.178.63/24
TrixBox: VoIP服務器,ip地址192.168.178.85/24
實驗室需要的軟件如下:
Linephone,簡單的開源VoIP客戶端。
Ettercap,中間人攻擊套件。
Wireshark,網絡嗅探工具。
Rtpinsertsound,在指定的音頻流里面插入音頻。
Rtpmixsound,在指定的音頻流里面混入預錄制的音頻。
Sox,一個命令行實用程序,可以將不同格式的音頻文件轉換成其他格式。
步驟0:設置VoIP
我們訪問http://192.168.178.85/maint/通過Web頁面來設置VoIP,Trixbox 的Web接口的默認憑據是main:password。
進入PBX頁面,切換到PBX setting選項卡,添加用戶代理A、B。
然后切換到Extension , 選擇Generic SIP Device.
最后我們進入User Extension,設置Display Name和Secret。
用戶代理A的User Extension是1000,用戶代理B的User Extension是1001。
練習1:竊聽攻擊
網絡電話竊聽是一種網絡攻擊,旨在以未經授權的方式竊聽他人的通信會話。攻擊者可以使用這種惡意活動來捕獲和閱讀包含敏感和機密信息的內容。
步驟1:ARP投毒
通過中間人攻擊,攻擊者可以讀取、插入、修改交際雙方之間的信息,沒有任何一方會知道通信通道已經被第三方控制。在局域網場景中,這種攻擊可通過ARP緩存投毒實現。
我們使用Etterpcap來演示ARP投毒:
“`
$ ettercap –T –M arp:remote –i eth0 /192.168.178.63// /192.168.178.85//
// -T = textual version
// -M = type of man in the middle attack
// -i = interface
// /192.168.178.63// = User agent victim
// /192.168.178.85// = VoIP server
“`
步驟2:啟動VoIP呼叫
我們需要啟動VoIP呼叫以方便下一步的分析。打開VoIP客戶端,通過用戶代理A呼叫用戶代理B。按下圖設置向VoIP服務器注冊我們的帳戶。
然后開始呼叫用戶代理B。
最終我們需要在用戶代理B上接受這個呼叫。
步驟3:嗅探
ARP緩存投毒之后,啟動Wireshark,選擇eth0接口點擊捕獲按鈕開始嗅探數據包,幾秒鐘后我們可以看到SIP和RTP的數據包。
步驟4:可視化分析
為了在離線模式下分析數據包,我們必須停止包捕獲。對VoIP的數據包進行分析來查看和理解整個溝通的過程。我們需要打開的Wireshark的Telephony,選擇VoIP call 選項卡,然后單擊Flow功能。
步驟5:監聽會話
使用wireshark,我們可以分析RTP數據包以及會話通信,實際上這個工具可以壓縮數據包解碼和再現通信流來收聽整個會話。要收聽會話,點擊Telephony中的VoIP Calls,選擇一個會話然后點擊Player按鈕序列化數據包,現在我們可以通過Decode和Play來播放會話。
步驟6:保存會話
這一步我們繼續恢復會話,以便將來的進一步利用。使用wireshark保存會話為音頻格式,我們需要進行如下操作:telephony -> RTP ->Show ALL Streams,選中一個流并保存 analyze ->
Save Payload,另存為.au格式。
步驟7:將會話轉換成音頻格式
音頻文件被保存為au文件,但大多數播放器無法直接播放。所以我們需要轉換成wav格式。我們通過“Swiss army Knife”中的sox來執行這個操作。這個工具已經加入Debian的源,我們可以直接通過命令安裝:apt-get install sox
安裝完成之后,開始進行轉換。
“`
$ sox -r 8000 -V payload.au sample.wav
// -r To change the sample rate into 8000
// -V Verbose
// payload.au is the audio input, that represents conversation saved
// sample.wav is the audio output in the wav format
“`
練習2:RTP包篡改
一旦成功執行了中間人攻擊來竊聽會話,我們可以通過插入或替換RTP包來改變會話。通過合適的攻擊方式,修改會話中的某些部分為預錄的音頻。攻擊成功因為RTP協議是容易受到多媒體篡改的,特別是如果沒有加密和使用UDP傳輸協議。
兩個VoIP端點之間的通信會話是由SSRC(同步源標識符),序列號和時間戳進行控制。攻擊者可以捕獲RTP數據包,復制出有同樣的SSRC更大的序列號和時間戳的數據包,迫使目標端點丟棄那些合法的報文,捕獲攻擊者的報文,因為他們有一個更高的序列號。
步驟8:插入音頻
這個場景中我們會使用Rtpinsertsound 工具,該工具可以向通信流注入預先錄制好的音頻sample.wav,插入和復制目標音頻流中的RTP數據包。
“`
$ rtpinsertsound –v –i eth0 –a 192.168.178.85 –A 11198 –b 192.168.178.63 –B 7078 –f 1 –j 50 sample.wav
// -v Verbose output
// -i Network interface
// -a Source IP address
// -A Source UDP port
// -b Destination IP address
// -f Spoof factor
// -j Jitter factor, determining when to transmit a packet as a percentage of the target audio stream’s transmission interval
“`
這樣在整個過程中,VoIP的撥入方收到的都是替換后的音頻,而真正的音頻被靜默了。
步驟9:插入混合音頻
它是一個類似的工具,叫做Rtpmixsound,它允許預先錄制好的音頻與實時音頻混合。我們可以通過運行以下命令使用這個工具:
“`
$ rtpmixsound –i eth0 –a 192.168.178.85 –A 14312 –b 192.168.178.63 –B 7078 sample_mix.wav// -i Network interface// -a Source IP address// -A Source UDP port// -b Destination IP address
“`
跟上一個工具不同的是,撥入方在接收真正的音頻之后,會繼續接收到預先錄制的音頻。
結論
為了防范這種攻擊,我們建議使用SVoIP(安全VoIP),旨在保護VoIP通話的機密性、完整性、有效性,雖然這可能會導致性能下降。此外還可使用防火墻或面向VoIP的IPS/IDS,監控RTP數據包,檢測和阻斷其中可能隱藏的威脅。
引用
Hacking Exposed VoIP, Voice Over IP Security Secret & Solutions
RFC 3261 SIP: Session Initiation Protocol
RFC 3550 RTP: A Transport Protocol for Real-Time Applications