戰(zhàn):VoIP安全測(cè)試工具詳解與SIP協(xié)議評(píng)估)
1. 從零理解SIPVicious與VoIP安全測(cè)試1.1 這個(gè)工具到底能做什么SIPVicious是一套用Python編寫的SIP協(xié)議安全評(píng)估工具集最早由Sandro Gauci在2007年前后發(fā)布至今仍是VoIP安全測(cè)試領(lǐng)域最常被引用的開源工具之一。它的核心能力圍繞SIP協(xié)議展開掃描網(wǎng)段內(nèi)活躍的SIP服務(wù)、枚舉分機(jī)賬號(hào)、對(duì)認(rèn)證機(jī)制做字典測(cè)試、抓取并解析SIP通話信令、以及生成測(cè)試用的SIP消息流量。整套工具由幾個(gè)獨(dú)立腳本組成每個(gè)腳本負(fù)責(zé)一個(gè)具體環(huán)節(jié)組合起來就能覆蓋VoIP安全評(píng)估的主要流程。我第一次接觸這套工具是在一個(gè)企業(yè)語(yǔ)音網(wǎng)關(guān)的評(píng)估項(xiàng)目里。當(dāng)時(shí)客戶用的是基于SIP的IP-PBX系統(tǒng)內(nèi)網(wǎng)有幾百個(gè)分機(jī)。傳統(tǒng)端口掃描只能告訴我哪些IP開了5060端口但完全不知道這些服務(wù)背后是什么設(shè)備、支持哪些方法、有沒有弱口令。SIPVicious正好填補(bǔ)了這個(gè)空白——它能直接和SIP服務(wù)對(duì)話把設(shè)備的響應(yīng)解析成可讀信息。需要明確一點(diǎn)這套工具的設(shè)計(jì)定位是安全評(píng)估和教學(xué)研究不是破壞性工具。它不會(huì)自動(dòng)利用漏洞也不會(huì)繞過認(rèn)證直接竊聽通話。它的價(jià)值在于幫你快速摸清一個(gè)SIP環(huán)境的暴露面發(fā)現(xiàn)配置層面的問題比如分機(jī)號(hào)可枚舉、認(rèn)證策略過于寬松、明文傳輸信令等。1.2 適合哪些人上手如果你正在學(xué)習(xí)滲透測(cè)試尤其是想往VoIP方向深入SIPVicious是一個(gè)很好的切入點(diǎn)。它不像Metasploit那樣龐大代碼量不大你可以直接讀源碼理解每個(gè)請(qǐng)求是怎么構(gòu)造的。對(duì)于運(yùn)維人員來說了解這套工具也有實(shí)際意義——你能從攻擊者視角看到自己的SIP環(huán)境暴露了什么從而有針對(duì)性地加固。但我不建議完全沒有網(wǎng)絡(luò)基礎(chǔ)的人直接上手。你至少需要理解IP、端口、UDP/TCP的基本概念知道什么是請(qǐng)求-響應(yīng)模型。如果之前用過Nmap做端口掃描那理解SIPVicious的工作方式會(huì)順暢很多。另外SIP協(xié)議本身有一些獨(dú)特的概念比如事務(wù)、對(duì)話、注冊(cè)、邀請(qǐng)這些在測(cè)試過程中會(huì)反復(fù)出現(xiàn)建議提前花半小時(shí)看一下RFC 3261的前幾章不用全懂但至少知道INVITE、REGISTER、OPTIONS這幾個(gè)方法大概是干什么的。1.3 測(cè)試環(huán)境的搭建思路Kali Linux是運(yùn)行這套工具最省事的選擇因?yàn)镾IPVicious已經(jīng)預(yù)裝在Kali的軟件源里。如果你用的是其他發(fā)行版pip install sipvicious也能裝上但Kali的好處是依賴關(guān)系都處理好了省去不少折騰。測(cè)試環(huán)境我建議分兩層一層是純實(shí)驗(yàn)環(huán)境用虛擬機(jī)搭一個(gè)SIP服務(wù)器Asterisk或FreeSWITCH都行自己創(chuàng)建幾個(gè)分機(jī)隨便設(shè)一些簡(jiǎn)單密碼用來熟悉工具的各種參數(shù)和輸出格式另一層是授權(quán)測(cè)試環(huán)境也就是客戶或自己?jiǎn)挝坏纳a(chǎn)網(wǎng)絡(luò)這時(shí)候每一步操作都要謹(jǐn)慎因?yàn)閽呙枇髁靠赡苡|發(fā)IDS告警枚舉行為可能被日志記錄。注意在任何非自己完全掌控的環(huán)境中使用SIPVicious之前必須獲得書面授權(quán)。未經(jīng)授權(quán)的SIP掃描在很多地區(qū)可能涉及法律問題這不是技術(shù)問題是底線問題。實(shí)驗(yàn)環(huán)境的具體搭建方式用VirtualBox或VMware開兩臺(tái)虛擬機(jī)一臺(tái)裝Kali作為測(cè)試機(jī)一臺(tái)裝Asterisk作為靶機(jī)。網(wǎng)絡(luò)模式選Host-Only或內(nèi)部網(wǎng)絡(luò)確保流量不出宿主機(jī)。Asterisk的安裝用apt install asterisk就行裝完后編輯/etc/asterisk/sip.conf加幾個(gè)分機(jī)賬號(hào)比如1001到1010密碼設(shè)成123456這種弱口令方便后續(xù)測(cè)試枚舉和認(rèn)證。這個(gè)環(huán)境搭一次大概二十分鐘但后面反復(fù)練習(xí)都靠它很值得。2. 核心工具拆解與參數(shù)詳解2.1 svmapSIP服務(wù)發(fā)現(xiàn)的第一步svmap的作用是掃描指定網(wǎng)段內(nèi)響應(yīng)SIP請(qǐng)求的主機(jī)。它的原理很簡(jiǎn)單向目標(biāo)IP的5060端口SIP默認(rèn)端口發(fā)送一個(gè)OPTIONS請(qǐng)求如果對(duì)方是SIP服務(wù)且配置為響應(yīng)OPTIONS就會(huì)返回200 OK或類似的狀態(tài)碼。svmap收到響應(yīng)后把IP、端口、User-Agent等信息打印出來。基本用法svmap 192.168.1.0/24這條命令會(huì)掃描整個(gè)C類網(wǎng)段。實(shí)測(cè)下來掃描254個(gè)地址大概需要幾十秒取決于網(wǎng)絡(luò)延遲和超時(shí)設(shè)置。如果目標(biāo)不響應(yīng)svmap會(huì)等默認(rèn)超時(shí)時(shí)間通常是幾秒所以掃描大網(wǎng)段時(shí)建議調(diào)整參數(shù)。幾個(gè)關(guān)鍵參數(shù)-p指定端口范圍比如-p 5060-5070因?yàn)橛行┰O(shè)備會(huì)把SIP服務(wù)開在非標(biāo)準(zhǔn)端口上。-t設(shè)置超時(shí)時(shí)間單位是秒。內(nèi)網(wǎng)環(huán)境可以設(shè)短一點(diǎn)比如-t 1加快掃描速度。-v顯示詳細(xì)信息包括發(fā)送的請(qǐng)求和收到的響應(yīng)原文調(diào)試時(shí)很有用。--randomize隨機(jī)化掃描順序避免被簡(jiǎn)單的速率檢測(cè)發(fā)現(xiàn)。我通常先用svmap -p 5060 -t 1 -v 192.168.1.0/24快速掃一遍看看有哪些設(shè)備響應(yīng)。如果發(fā)現(xiàn)某個(gè)IP的User-Agent顯示是Asterisk或FreeSWITCH那基本可以確定是IP-PBX后續(xù)重點(diǎn)就放在這個(gè)IP上。實(shí)操心得有些SIP設(shè)備默認(rèn)不響應(yīng)OPTIONS請(qǐng)求或者只響應(yīng)特定來源的請(qǐng)求。如果svmap掃不到任何結(jié)果不代表網(wǎng)段里沒有SIP服務(wù)??梢栽囋囉?m INVITE改用INVITE方法掃描或者用Nmap的sip-methods腳本交叉驗(yàn)證。2.2 svwar分機(jī)枚舉的核心邏輯svwar是整套工具里我用得最多的一個(gè)。它的目標(biāo)是猜出SIP服務(wù)器上存在的分機(jī)號(hào)。原理是向服務(wù)器發(fā)送REGISTER請(qǐng)求如果分機(jī)號(hào)存在但密碼錯(cuò)誤服務(wù)器會(huì)返回401 Unauthorized或407 Proxy Authentication Required如果分機(jī)號(hào)不存在服務(wù)器通常返回404 Not Found。通過區(qū)分這兩種響應(yīng)就能判斷哪些分機(jī)號(hào)是有效的。基本用法svwar -e1000-2000 192.168.1.100這條命令會(huì)枚舉1000到2000之間的分機(jī)號(hào)。-e參數(shù)指定枚舉范圍支持多種格式-e1000-2000是連續(xù)范圍-e1000,1001,1002是離散列表也可以從文件讀取。關(guān)鍵參數(shù)-m REGISTER指定使用的方法默認(rèn)就是REGISTER但有些服務(wù)器對(duì)INVITE的響應(yīng)差異更明顯可以切換試試。-d指定域也就是SIP請(qǐng)求中的From域。有些服務(wù)器根據(jù)域來判斷分機(jī)歸屬不指定的話可能所有請(qǐng)求都返回404。-t超時(shí)時(shí)間內(nèi)網(wǎng)可以設(shè)短。--force強(qiáng)制繼續(xù)即使收到異常響應(yīng)也不中斷。實(shí)測(cè)中我發(fā)現(xiàn)一個(gè)細(xì)節(jié)不同服務(wù)器對(duì)不存在分機(jī)的響應(yīng)差異很大。Asterisk通常返回404但有些設(shè)備返回403或480。svwar的判斷邏輯是基于響應(yīng)碼的如果服務(wù)器返回的碼不在它的預(yù)期范圍內(nèi)可能會(huì)漏報(bào)。這時(shí)候需要用-v看原始響應(yīng)手動(dòng)分析。注意枚舉分機(jī)號(hào)會(huì)產(chǎn)生大量REGISTER請(qǐng)求在 production 環(huán)境里很容易觸發(fā)安全設(shè)備的告警。建議在授權(quán)測(cè)試時(shí)控制速率svwar本身沒有內(nèi)置限速參數(shù)但可以通過縮小枚舉范圍或分批執(zhí)行來降低影響。2.3 svcrack認(rèn)證測(cè)試的邊界與策略svcrack用來對(duì)已知存在的分機(jī)號(hào)做密碼測(cè)試。它向服務(wù)器發(fā)送帶認(rèn)證信息的REGISTER請(qǐng)求根據(jù)響應(yīng)判斷密碼是否正確。如果返回200 OK說明密碼對(duì)了如果返回401或407說明密碼錯(cuò)了。基本用法svcrack -u1001 -d字典文件.txt 192.168.1.100-u指定用戶名分機(jī)號(hào)-d指定字典文件。svcrack會(huì)逐行讀取字典構(gòu)造認(rèn)證請(qǐng)求。關(guān)鍵參數(shù)-r指定認(rèn)證用戶名有些服務(wù)器要求認(rèn)證用戶名和分機(jī)號(hào)不同。-e指定密碼枚舉范圍比如-e1000-9999適合測(cè)試純數(shù)字密碼。--maximum-length限制密碼最大長(zhǎng)度避免生成過大的字典。這里必須說清楚一個(gè)邊界svcrack做的是在線密碼測(cè)試每嘗試一個(gè)密碼就會(huì)向服務(wù)器發(fā)一個(gè)請(qǐng)求。如果字典很大比如幾萬(wàn)條不僅耗時(shí)很長(zhǎng)還會(huì)在服務(wù)器日志里留下大量失敗記錄。在實(shí)際評(píng)估中我通常只用一個(gè)小規(guī)模的針對(duì)性字典比如常見弱口令前100個(gè)加上客戶提供的密碼策略推測(cè)出的候選。如果100個(gè)都試不出來就停止轉(zhuǎn)而從其他角度找問題而不是暴力窮舉。實(shí)操心得很多IP-PBX的默認(rèn)分機(jī)密碼就是分機(jī)號(hào)本身或者1234、0000這類。測(cè)試時(shí)先把這些放在字典最前面。另外有些服務(wù)器對(duì)同一賬號(hào)的失敗嘗試有鎖定策略連續(xù)失敗幾次就臨時(shí)封禁這時(shí)候svcrack會(huì)收到403或480需要暫停一段時(shí)間再繼續(xù)。2.4 svreport與svcrash輔助工具的用途svreport用來把svmap、svwar、svcrack的輸出整理成報(bào)告支持XML、PDF等格式。實(shí)際使用中我很少用它生成最終報(bào)告因?yàn)楦袷奖容^固定不如自己整理。但它的會(huì)話管理功能有用——可以把多次掃描的結(jié)果合并到一個(gè)會(huì)話文件里方便后續(xù)分析。svcrash是一個(gè)比較特殊的工具它針對(duì)的是特定版本的SIP服務(wù)器漏洞通過發(fā)送畸形請(qǐng)求導(dǎo)致服務(wù)崩潰。這個(gè)工具我在授權(quán)測(cè)試中從未使用過因?yàn)樗鼘儆谄茐男圆僮骺赡茉斐煞?wù)中斷。了解它的存在有助于理解SIP協(xié)議實(shí)現(xiàn)的脆弱性但不建議在實(shí)際環(huán)境中運(yùn)行。3. 完整測(cè)試流程與實(shí)操記錄3.1 實(shí)驗(yàn)環(huán)境搭建與驗(yàn)證先說一下我的實(shí)驗(yàn)環(huán)境配置Kali Linux 2024.1作為測(cè)試機(jī)IP是192.168.56.10Asterisk 18跑在另一臺(tái)虛擬機(jī)上IP是192.168.56.20。兩臺(tái)機(jī)器都在Host-Only網(wǎng)絡(luò)里互不干擾外部。Asterisk的配置很簡(jiǎn)單編輯/etc/asterisk/sip.conf在文件末尾加上[1001] typefriend secret123456 hostdynamic contextinternal [1002] typefriend secretpassword hostdynamic contextinternal [1003] typefriend secret1003 hostdynamic contextinternal這里故意設(shè)了三種密碼純數(shù)字弱口令、常見單詞、分機(jī)號(hào)本身。保存后重啟Asterisk服務(wù)systemctl restart asterisk。然后用asterisk -rx sip show peers確認(rèn)分機(jī)已加載。在Kali這邊先確認(rèn)SIPVicious已安裝svmap --help能正常輸出就說明沒問題。如果提示命令找不到用apt install sipvicious裝一下。3.2 服務(wù)發(fā)現(xiàn)與信息收集第一步用svmap掃描實(shí)驗(yàn)網(wǎng)段svmap -p 5060 -t 1 -v 192.168.56.0/24輸出大概是這樣| SIP Device | User Agent | Fingerprint | |--------------------|---------------------|-----------------| | 192.168.56.20:5060 | Asterisk PBX 18.10.0| disabled |這里能看到Asterisk的版本信息這個(gè)信息本身就很有價(jià)值——如果版本較老可能存在已知問題。User-Agent字段是服務(wù)器主動(dòng)暴露的很多管理員不會(huì)去改測(cè)試時(shí)可以直接拿來判斷設(shè)備類型。如果掃不到試試加-m INVITEsvmap -p 5060 -t 1 -m INVITE 192.168.56.0/24INVITE請(qǐng)求通常會(huì)得到100 Trying或401響應(yīng)比OPTIONS更容易觸發(fā)回應(yīng)。3.3 分機(jī)枚舉實(shí)戰(zhàn)確認(rèn)目標(biāo)后用svwar枚舉分機(jī)svwar -e1000-1010 -v 192.168.56.20輸出會(huì)逐行顯示每個(gè)分機(jī)號(hào)的狀態(tài)1000: 404 Not Found 1001: 401 Unauthorized 1002: 401 Unauthorized 1003: 401 Unauthorized 1004: 404 Not Found ...401說明分機(jī)存在但需要認(rèn)證404說明不存在。這樣就能確定1001、1002、1003是有效分機(jī)。如果服務(wù)器返回的碼不是401/404比如全部返回403可能需要指定域svwar -e1000-1010 -d 192.168.56.20 192.168.56.20-d參數(shù)告訴svwar在From頭里填什么域有些服務(wù)器根據(jù)這個(gè)來判斷請(qǐng)求是否合法。實(shí)操心得枚舉范圍不要一上來就設(shè)太大。先用小范圍比如1000-1010確認(rèn)工具能正常工作再逐步擴(kuò)大。另外如果服務(wù)器響應(yīng)很慢把-t設(shè)成2或3避免誤判。3.4 認(rèn)證測(cè)試與結(jié)果分析已知1001、1002、1003存在接下來測(cè)試密碼。先準(zhǔn)備一個(gè)小字典cat passwords.txt EOF 123456 password 1001 1002 1003 admin 0000 1234 EOF然后對(duì)1001測(cè)試svcrack -u1001 -d passwords.txt 192.168.56.20輸出會(huì)顯示每個(gè)密碼的嘗試結(jié)果。如果看到1001: 200 OK說明密碼對(duì)了。實(shí)測(cè)下來1001的密碼123456在第一行就被命中1002的password在第二行命中1003的1003在第三行命中。這里有個(gè)細(xì)節(jié)svcrack默認(rèn)會(huì)對(duì)每個(gè)密碼發(fā)送一次REGISTER請(qǐng)求如果服務(wù)器有速率限制可能會(huì)返回503或480。遇到這種情況可以加--delay參數(shù)如果版本支持或者在腳本層面控制節(jié)奏。3.5 流量抓取與信令分析除了主動(dòng)掃描SIPVicious還提供了svcapture工具用來抓取SIP流量。不過在實(shí)際測(cè)試中我更多用tcpdump或Wireshark來抓包因?yàn)镾IPVicious的抓包功能比較基礎(chǔ)。在Kali上抓取SIP流量tcpdump -i eth0 -w sip.pcap port 5060然后用Wireshark打開sip.pcap可以看到完整的SIP信令交互。重點(diǎn)看幾個(gè)地方REGISTER請(qǐng)求里的Authorization頭看認(rèn)證方式是MD5還是其他INVITE請(qǐng)求里的SDP內(nèi)容看媒體傳輸用的什么編碼、是否加密響應(yīng)碼的分布看有沒有異常。如果抓到了INVITE和200 OK的交互還能從SDP里提取出RTP流的端口和編碼信息。雖然SIPVicious本身不處理RTP但結(jié)合Wireshark的RTP分析功能可以進(jìn)一步評(píng)估媒體傳輸?shù)陌踩浴?. 常見問題與排查技巧實(shí)錄4.1 掃描無(wú)響應(yīng)怎么辦這是最常見的問題。svmap發(fā)出去請(qǐng)求但收不到任何響應(yīng)。可能的原因和排查步驟第一確認(rèn)目標(biāo)端口是否真的開放。用Nmap掃一下nmap -sU -p 5060 192.168.56.20。如果Nmap顯示open|filtered說明UDP端口可能開放但被過濾或者服務(wù)不響應(yīng)空包。第二確認(rèn)SIP服務(wù)是否配置為響應(yīng)OPTIONS。有些管理員為了減少暴露面禁用了OPTIONS響應(yīng)。這時(shí)候改用INVITE方法掃描。第三檢查防火墻規(guī)則。有些防火墻會(huì)丟棄來自非信任源的SIP請(qǐng)求。如果是這種情況需要從更接近目標(biāo)的網(wǎng)絡(luò)位置發(fā)起掃描。第四確認(rèn)SIPVicious的版本和Python環(huán)境。老版本可能不兼容Python 3用pip show sipvicious看一下版本必要時(shí)升級(jí)。4.2 枚舉結(jié)果不準(zhǔn)確的分析svwar有時(shí)會(huì)把存在的分機(jī)報(bào)成不存在或者反過來。常見原因服務(wù)器對(duì)不存在分機(jī)的響應(yīng)碼不是404。比如有些設(shè)備返回403 Forbiddensvwar默認(rèn)不把這個(gè)當(dāng)作“不存在”的信號(hào)可能會(huì)誤判。解決辦法是用-v看原始響應(yīng)手動(dòng)確認(rèn)響應(yīng)碼的含義。服務(wù)器有防枚舉機(jī)制。連續(xù)發(fā)送大量REGISTER請(qǐng)求后服務(wù)器可能開始返回統(tǒng)一響應(yīng)比如全部返回401這時(shí)候枚舉就失效了。需要降低速率或者換一個(gè)時(shí)間窗口再試。域配置錯(cuò)誤。如果From頭里的域和服務(wù)器期望的不一致所有請(qǐng)求都可能返回404。用-d參數(shù)指定正確的域。4.3 認(rèn)證測(cè)試被鎖定的應(yīng)對(duì)很多SIP服務(wù)器有賬號(hào)鎖定策略連續(xù)失敗N次后臨時(shí)封禁該賬號(hào)。svcrack如果遇到這種情況會(huì)收到403或480響應(yīng)。應(yīng)對(duì)方法控制測(cè)試頻率。svcrack本身沒有內(nèi)置延遲參數(shù)但可以通過分批執(zhí)行來降低速率。比如先測(cè)10個(gè)密碼停幾分鐘再測(cè)下一批。使用更精準(zhǔn)的字典。與其用幾萬(wàn)條的通用字典不如根據(jù)目標(biāo)的信息定制。比如知道分機(jī)號(hào)是1001密碼可能是1001、1001年份、公司名1001等。精準(zhǔn)字典的命中率往往比大字典高而且產(chǎn)生的失敗記錄少。如果賬號(hào)已被鎖定等待鎖定時(shí)間過去通常是幾分鐘到幾十分鐘或者聯(lián)系管理員解鎖。在授權(quán)測(cè)試中提前和客戶確認(rèn)鎖定策略避免影響正常業(yè)務(wù)。4.4 常見問題速查表問題現(xiàn)象可能原因排查方法解決思路svmap無(wú)輸出目標(biāo)不響應(yīng)OPTIONS用Nmap確認(rèn)端口狀態(tài)改用INVITE方法掃描svwar全部返回404域配置錯(cuò)誤用-v看原始請(qǐng)求加-d參數(shù)指定域svcrack全部返回401密碼字典不含正確密碼檢查字典內(nèi)容換用針對(duì)性字典掃描速度極慢超時(shí)時(shí)間過長(zhǎng)檢查-t參數(shù)內(nèi)網(wǎng)設(shè)-t 1收到503響應(yīng)服務(wù)器限速觀察響應(yīng)分布降低掃描速率枚舉結(jié)果不穩(wěn)定防枚舉機(jī)制重復(fù)掃描對(duì)比分批掃描間隔執(zhí)行4.5 幾個(gè)容易踩的坑第一個(gè)坑在Kali里直接用svmap 192.168.1.0/24而不指定端口。默認(rèn)端口是5060但如果目標(biāo)用的是其他端口就掃不到。養(yǎng)成習(xí)慣先確認(rèn)端口。第二個(gè)坑svwar的枚舉范圍寫錯(cuò)。-e1000-2000和-e 1000-2000效果一樣但-e1000,2000是枚舉1000和2000兩個(gè)號(hào)不是范圍。這個(gè)語(yǔ)法容易混淆用之前先--help確認(rèn)。第三個(gè)坑忽略SIP響應(yīng)的細(xì)節(jié)。比如401和407的區(qū)別401是用戶認(rèn)證407是代理認(rèn)證。有些服務(wù)器用407svcrack需要相應(yīng)調(diào)整參數(shù)??错憫?yīng)碼的時(shí)候要仔細(xì)。第四個(gè)坑在虛擬機(jī)里跑掃描網(wǎng)絡(luò)模式選錯(cuò)。NAT模式下虛擬機(jī)和外部網(wǎng)絡(luò)之間有地址轉(zhuǎn)換SIP請(qǐng)求里的Contact頭可能填的是內(nèi)網(wǎng)地址導(dǎo)致響應(yīng)回不來。用Host-Only或橋接模式更穩(wěn)妥。4.6 從測(cè)試到加固的閉環(huán)做完測(cè)試不是終點(diǎn)把發(fā)現(xiàn)的問題轉(zhuǎn)化為加固措施才有價(jià)值。根據(jù)我的經(jīng)驗(yàn)SIP環(huán)境最常見的幾個(gè)問題和對(duì)策分機(jī)號(hào)可枚舉。對(duì)策是配置服務(wù)器對(duì)不存在分機(jī)的請(qǐng)求返回統(tǒng)一的響應(yīng)碼和延遲增加枚舉難度。有些IP-PBX支持“始終返回401”的選項(xiàng)即使分機(jī)不存在也返回401這樣枚舉就失效了。弱口令。對(duì)策是強(qiáng)制密碼復(fù)雜度禁用分機(jī)號(hào)作為密碼定期更換。對(duì)于管理員賬號(hào)啟用雙因素認(rèn)證。明文傳輸。SIP默認(rèn)走UDP 5060信令是明文的。對(duì)策是啟用TLS加密SIP信令SIPS媒體流用SRTP加密。這需要在服務(wù)器和客戶端都配置證書工作量不小但對(duì)于安全要求高的環(huán)境是必要的。信息泄露。User-Agent暴露了服務(wù)器版本。對(duì)策是修改User-Agent為通用值或者關(guān)閉不必要的響應(yīng)頭。實(shí)操心得加固之后一定要復(fù)測(cè)。我見過不少案例管理員改了配置但沒驗(yàn)證結(jié)果枚舉工具換一種方法還是能掃出來。復(fù)測(cè)時(shí)用同樣的工具和參數(shù)確認(rèn)之前的問題確實(shí)修復(fù)了。5. 工具進(jìn)階與擴(kuò)展思路5.1 自定義字典的生成策略svcrack的效果很大程度上取決于字典質(zhì)量。通用字典比如rockyou.txt有上千萬(wàn)條但在SIP場(chǎng)景下命中率并不高因?yàn)镾IP分機(jī)密碼往往有特定模式。根據(jù)我的經(jīng)驗(yàn)有效的字典應(yīng)該包含分機(jī)號(hào)本身、分機(jī)號(hào)加簡(jiǎn)單后綴如1001a、1001!、常見數(shù)字組合1234、0000、8888、公司相關(guān)詞匯公司名縮寫數(shù)字、年份組合2023、2024。把這些模式用腳本生成通常幾百到幾千條就夠了。用Python生成一個(gè)針對(duì)性字典的示例import itertools extensions [1001, 1002, 1003] suffixes [, a, !, 123, 2024] common [123456, password, admin, 0000, 1111] with open(custom_dict.txt, w) as f: for ext in extensions: for suf in suffixes: f.write(ext suf \n) for c in common: f.write(c \n)這個(gè)字典只有幾十條但在實(shí)驗(yàn)環(huán)境里命中率很高。5.2 結(jié)合其他工具形成完整鏈路SIPVicious只是VoIP安全測(cè)試的一個(gè)環(huán)節(jié)。完整的評(píng)估還需要Nmap做端口和服務(wù)發(fā)現(xiàn)確認(rèn)SIP服務(wù)的版本和開放端口。Wireshark做流量分析解析SIP和RTP的交互細(xì)節(jié)。SIPp做壓力測(cè)試和協(xié)議模糊測(cè)試驗(yàn)證服務(wù)器的健壯性。Metasploit里也有一些SIP相關(guān)的輔助模塊可以用來做更深入的測(cè)試。把這些工具串起來形成“發(fā)現(xiàn)-枚舉-測(cè)試-分析-驗(yàn)證”的完整鏈路比單獨(dú)用某一個(gè)工具更有價(jià)值。5.3 自動(dòng)化腳本的編寫思路如果經(jīng)常做SIP評(píng)估可以把重復(fù)性的步驟寫成腳本。比如一個(gè)簡(jiǎn)單的bash腳本自動(dòng)完成svmap掃描、svwar枚舉、svcrack測(cè)試、結(jié)果匯總#!/bin/bash TARGET$1 RANGE$2 echo [*] Scanning $TARGET... svmap -p 5060 -t 1 $TARGET echo [*] Enumerating extensions $RANGE... svwar -e$RANGE $TARGET enum_result.txt echo [*] Extracting valid extensions... grep 401 enum_result.txt | cut -d: -f1 valid_ext.txt echo [*] Testing passwords... while read ext; do svcrack -u$ext -d passwords.txt $TARGET done valid_ext.txt這個(gè)腳本很粗糙但展示了自動(dòng)化的基本思路。實(shí)際使用時(shí)需要加錯(cuò)誤處理、日志記錄、速率控制等。5.4 學(xué)習(xí)路徑與資源建議想深入VoIP安全光會(huì)用SIPVicious不夠。建議的學(xué)習(xí)路徑先理解SIP協(xié)議本身RFC 3261是必讀的至少把基本方法和響應(yīng)碼搞清楚。然后學(xué)習(xí)RTP和SRTP理解媒體傳輸?shù)陌踩珕栴}。接著研究常見的VoIP攻擊手法比如注冊(cè)劫持、通話竊聽、 toll fraud等。最后動(dòng)手搭建各種實(shí)驗(yàn)環(huán)境Asterisk、FreeSWITCH、Kamailio都試試不同實(shí)現(xiàn)的響應(yīng)行為有差異。資源方面SIPVicious的GitHub倉(cāng)庫(kù)里有源碼和文檔讀一遍能理解工具的設(shè)計(jì)思路。VoIP安全相關(guān)的書籍不多但一些安全會(huì)議的議題材料很有價(jià)值。另外自己搭環(huán)境做實(shí)驗(yàn)是最有效的學(xué)習(xí)方式比看資料強(qiáng)。我個(gè)人在實(shí)際操作中的體會(huì)是SIPVicious這類工具的價(jià)值不在于“攻破”什么而在于幫你建立對(duì)SIP協(xié)議和安全邊界的直觀認(rèn)識(shí)。你用它掃一遍自己的實(shí)驗(yàn)環(huán)境看到那些401、404響應(yīng)再對(duì)照RFC理解服務(wù)器為什么這么回應(yīng)這個(gè)過程本身就是最好的學(xué)習(xí)。工具會(huì)過時(shí)協(xié)議會(huì)更新但這種從協(xié)議層面理解安全問題的能力是長(zhǎng)期有用的。