|
|
本帖最后由 robur 于 2010-11-11 11:15 编辑
我處擁有自己的VOIP系統,採用SIP和SCCP的混合架構,覆蓋六個分支節點。
同時採用了軟件PBX進行落地呼叫。(硬件PSTN落地正在籌劃中,所以暫時不提這個。)
落地使用的服務商,我們原來使用tocall,它的特點是提供隧道接入,不會被封。但是服務不太穩定,有時候就連續好幾個小時(甚至一天)無法註冊。
前兩天,我們弄了一條ET263的線路。這個服務商穩定性、延遲都很可觀,自己的客戶端軟件支持加密,但是是私有協議,不兼容第三方PBX。
所以,對ET263,我們只能通過標準的SIP協議進行註冊。
後來在使用中發現,呼叫可以正常接通,但是聽對方的話音有非常大的爆音和背噪。這與我們之前遇過的情況基本相符,就是ISP干擾了VOIP。
我們先不談ISP為什麼這麼做,還是從技術角度來分析一下。在PBX上裝科來,開始抓包。
分析思路:
首先來說呼叫建立和呼叫拆除。這兩個步驟在IP電話上操作是沒有任何問題的,因此我們可以推測,ISP並沒有封掉SIP協議,也沒有干擾SIP信令的操作。
但是我們還是要抓包確認一下。
從上圖我們可以看出,呼叫的建立和拆除信令完整且沒有受到干擾,工作正常。這也證實了我們上面的推論。
其次,如果ISP丟棄RTP包的話,那麼在IP電話中應該聽不到聲音,而不是聽到強大的背景噪聲或者爆破音。
這也就說明,ISP並沒有丟棄正常的RTP流,只是向其中增加了額外的RTP包。
因為VOIP屬於實時應用,對數據的要求是快速傳遞,所以不會採用高級的確認和防偽造機制。
從廣義上來講,這也是屬於一種會話劫持攻擊。
我們以前經常提到,對於判定會話劫持攻擊,有兩個顯而易見的關鍵點:
1、TTL;2、IPID。
對於一個路由穩定的網絡,“進程間通信”一方連續發送的IP報文中,這兩個參數的值是有規律可循的。
我們只要簡單地對比這兩個項目的值,就能很輕易地發現外來的“不速之客”。
從上面的截圖中我們可以看到,服務器回送的RTP包,IPID是有序遞增的。但是,中間突然多出一些很奇怪,而且相同的IPID。
再檢查一下這些異常RTP包的的TTL,也能發現這與真正服務器回送的RTP包的TTL不符。(這裡沒有截圖)
很明顯,這就是ISP插入的,用來干擾VOIP通信的RTP包了。
我們知道,RTP包不一定會按照發送的順序抵達目的地,因此它帶有一個序列號的,用於在目的地進行重新排列。
前面我們也說過,VOIP屬於實時應用,不會重傳數據包。因此,在一個RTP流中,短時間(幾秒鐘)內如果出現兩個序列號相同的RTP包,那麼一定是存在網絡故障或者惡意攻擊。
上圖很明顯地可以看出,有兩個RTP包發生了“重傳”現象。其中紅圈中的兩個,是ISP偽造的。
這樣一來我們更可以清楚地了解到,ISP並沒有丟棄一個SIP會話中的任何數據,只是向客戶端的RTP流施加了干擾。
這樣,我們在網絡邊界設備上,按照這些干擾數據包的特徵進行過濾即可。
鑑於手頭沒有太像樣的防火牆設備,故借用原來寫過的一個NDIS過濾驅動,在PBX上直接過濾掉這些異常RTP包。
再建立落地呼叫,收聽對方的語音就很平滑,偶有正常的丟包產生的斷續,再沒有任何的爆音和背噪了。
同時,通過科來再進行抓包分析,也未見異常的RTP包。 |
评分
-
3
查看全部评分
-
|