ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

SIPVicious实战:SIP协议渗透测试与VoIP安全评估指南

SIPVicious实战:SIP协议渗透测试与VoIP安全评估指南 SIP协议在企业通信里跑了很多年从最早的运营商级软交换到现在的IP话机、视频会议终端底层基本都绕不开它。很多人做Web渗透、内网横向移动很熟练一碰到SIP就有点发怵——不是协议本身多难而是平时接触少抓包看到一堆REGISTER、INVITE、401、407就懵了。SIPVicious这套工具就是专门用来降低这个门槛的它把SIP协议里最常见的几类探测和枚举操作封装成了几条命令在Kali Linux里开箱即用。这篇内容适合两类人一类是刚接触VoIP方向、想搞清楚SIP协议在渗透测试里到底能做什么的新手另一类是有一定内网基础、需要把VoIP资产纳入评估范围的从业者。我会从环境准备讲到具体命令的实战用法把每一步背后的逻辑和踩过的坑都摊开说尽量让你看完能直接上手复现。1. 先把SIP协议和VoIP的关系理清楚1.1 SIP不是传输语音的协议它只负责“打电话的流程”这是新手最容易搞混的一点。SIP全称Session Initiation Protocol会话发起协议它管的是“建立、修改、结束会话”这套信令流程真正承载语音数据的是RTP协议。打个比方SIP像是打电话时拨号、振铃、接听、挂断这一系列动作的规则RTP才是电话接通后你俩说话的声音流。做VoIP渗透测试绝大多数攻击面在SIP信令层因为RTP本身只是单向的数据流除非你要做语音内容还原否则重点都放在SIP上。SIP的工作模式是请求-响应类似HTTP。常见的请求方法有REGISTER注册、INVITE发起呼叫、ACK确认、BYE挂断、CANCEL取消、OPTIONS能力查询。响应码用三位数字表示1xx是临时响应2xx是成功3xx是重定向4xx是客户端错误5xx是服务器错误6xx是全局错误。热词里出现的“sip 480”就是4xx里的一个480 Temporarily Unavailable表示被叫暂时不可用这个在枚举用户是否存在时很有参考价值。1.2 为什么SIP会成为渗透测试的一个独立方向企业里部署VoIP一般有两种形态一种是自建Asterisk、FreeSWITCH这类软交换另一种是托管在运营商或云通信平台上。自建的那部分配置不当的情况非常普遍。我见过太多把SIP服务直接暴露在内网、甚至公网上的案例默认端口5060/UDP开着没有任何访问控制分机号是1001、1002这种连续数字密码是弱口令或者干脆没设。这些配置问题叠加起来就给了SIPVicious这类工具很大的发挥空间。从攻击者视角看SIP渗透能拿到的东西很实在有效分机号列表、分机对应的用户名、甚至分机密码。拿到这些之后可以注册成合法分机打电话、窃听通话、伪造主叫号码严重的还能通过PBX的语音网关打到外部电话网络。从防御者视角看这些正是需要优先排查的风险点。所以不管你是做攻还是做防SIP这一块都值得花时间搞明白。1.3 SIPVicious在工具链里的定位SIPVicious严格来说不是一个单一工具而是一组Python脚本的集合最早由Sandro Gauci开发。它包含几个核心组件svmap负责扫描网络上开放的SIP服务svwar负责枚举有效分机svcrack负责对分机做密码爆破svreport用来整理和转换扫描结果svcrash则是一个针对特定SIP服务的拒绝服务测试工具。在Kali Linux里这套工具默认就装好了不需要额外配置。它的定位很明确快速、轻量、专注SIP信令层的探测和枚举。它不做流量分析不做语音还原也不做复杂的漏洞利用。你要用它就得清楚它能干什么、不能干什么别指望一个工具解决所有问题。2. Kali环境准备与SIPVicious的安装确认2.1 Kali里SIPVicious的默认状态和版本检查Kali Linux的官方镜像里sipvicious是预装的。你打开终端直接敲svmap如果能看到帮助信息说明工具在。但这里有个坑Kali不同版本预装的sipvicious版本可能不一样老版本和新版本在参数上有差异。我建议先确认一下版本svmap --version如果提示命令找不到或者你想用最新版可以用pip装pip3 install sipvicious装完之后svmap、svwar、svcrack这几个命令应该都能在PATH里找到。如果pip装完还是找不到命令检查一下~/.local/bin是不是在PATH里这是pip用户级安装的默认路径。提示Kali里同时存在python2和python3的环境老版本sipvicious是基于python2的新版本已经迁移到python3。如果你在Kali 2023之后的版本上操作基本不用担心这个问题但如果你用的是比较老的Kali建议直接用系统预装的版本别自己乱装容易把依赖搞乱。2.2 网络环境准备别在错误的网段上浪费时间做SIP扫描之前先确认你的Kali和目标VoIP设备在同一个可达的网络里。如果是物理环境把Kali接到和目标PBX同一个交换机上如果是虚拟环境确认虚拟网卡的网络模式是桥接或者和PBX在同一个虚拟网络里。我见过有人拿着Kali在NAT模式下去扫一个桥接网络里的PBX扫了半天一个结果没有最后发现是网络不通。确认网络连通性最简单的方法是用ping或者arp-scan先看看目标IP在不在线arp-scan --localnet这条命令会列出当前网段里所有活跃的主机如果目标PBX的IP出现在列表里说明二层是通的。如果不在先解决网络问题再谈扫描。2.3 目标信息的收集从被动信息到主动探测在正式用svmap扫之前最好先做一些被动信息收集。比如看看目标网络里有没有SIP话机、软电话客户端这些设备的MAC地址前缀往往能暴露厂商信息比如Polycom、Yealink、Cisco。用nmap做一个快速的主机发现和端口扫描看看5060/UDP、5061/TCP这些SIP常用端口有没有开nmap -sU -p 5060 --open 192.168.1.0/24UDP扫描比较慢如果目标网段不大可以接受。如果网段很大建议先用arp-scan缩小范围再对活跃主机做UDP端口扫描。这一步的目的是把扫描目标从一整个网段缩小到几台具体的设备后面svmap扫起来效率会高很多。3. svmap实战把网络里所有SIP服务找出来3.1 svmap的基本用法和参数拆解svmap的核心功能就是向目标网段发送SIP OPTIONS请求然后根据响应判断哪些IP上跑着SIP服务。OPTIONS是SIP协议里用来查询服务能力的方法正常情况下SIP服务会返回200 OK或者405 Method Not Allowed不管哪种都说明这个IP上有SIP服务在监听。最基本的用法svmap 192.168.1.0/24这条命令会扫描整个/24网段。但实际用的时候我建议加上几个参数让输出更清晰svmap -v -p 5060 192.168.1.0/24-v是verbose显示详细过程-p指定端口默认就是5060但显式写出来更清楚。如果你怀疑目标用了非标准端口可以把常见的一些SIP端口都扫一遍svmap -p 5060,5061,5080,8080 192.168.1.0/243.2 扫描结果的解读哪些响应值得关注svmap扫完之后会列出所有响应的IP和对应的User-Agent。这里有几个细节值得注意。第一User-Agent字段能告诉你目标用的是什么软交换或者话机比如Asterisk PBX、FreeSWITCH、Cisco-SIPGateway不同厂商的设备后续的枚举策略可能不一样。第二如果某个IP返回了401 Unauthorized或者407 Proxy Authentication Required说明这个SIP服务需要认证这反而是好事说明它至少做了基本的访问控制。第三如果返回的是200 OK且没有任何认证要求那就要留个心眼了这种配置往往意味着后续的枚举和爆破会非常顺利。我实测下来很多老版本的Asterisk在默认配置下对OPTIONS请求是不要求认证的svmap一扫一个准。而较新的FreeSWITCH默认配置会严格一些但也不是没有突破口。3.3 扫描效率优化并发、超时和重试svmap默认的并发数不算高扫大网段的时候会比较慢。可以用-c参数调整并发数svmap -c 50 -p 5060 10.0.0.0/16但并发数不是越高越好。UDP本身是不可靠的并发太高会导致丢包反而漏掉目标。我的经验是在局域网内并发设在30到50之间比较稳妥如果是跨网段或者网络质量一般降到10到20。另外-t参数可以设置超时时间默认是1秒如果目标响应慢可以适当调大svmap -t 3 -c 30 192.168.1.0/24注意扫描之前最好确认一下你所在网络环境对UDP流量的限制。有些企业网络会对UDP做限速或者丢包处理这种情况下svmap的结果可能不完整需要多扫几遍或者换时间段再扫。4. svwar实战枚举有效分机号4.1 svwar的工作原理利用SIP响应差异判断分机是否存在svwar是SIPVicious里用得最多的一个工具它的核心逻辑是向目标SIP服务发送针对不同分机号的REGISTER请求然后根据返回的响应码判断这个分机号是否存在。存在和不存在响应码通常不一样。比如对一个存在的分机号发REGISTER服务端可能返回401需要认证或者403禁止对一个不存在的分机号可能返回404未找到。这个差异就是枚举的基础。基本用法svwar -e100-999 192.168.1.10-e参数指定分机号范围这里是从100到999。svwar会逐个尝试把有响应的分机号列出来。4.2 分机号范围的选取策略分机号范围怎么定直接决定了枚举效率。盲目的从1扫到9999耗时太长而且很多号段根本不存在。我的做法是分三步走。第一步先扫最常见的号段比如100-200、1000-1100、8000-8100这些是很多PBX默认的分机起始段。第二步根据第一步的结果判断规律如果发现分机号是4位且从1001开始那就重点扫1000-1200。第三步如果目标有多个号段比如销售部用2xxx、技术部用3xxx那就分别扫。svwar支持多种范围写法svwar -e100-200,1000-1100 192.168.1.10也可以从文件里读取分机号列表svwar -f extensions.txt 192.168.1.10如果你已经通过其他途径拿到了一些分机号线索用文件方式更精准。4.3 认证模式的选择-m参数的实际影响svwar有一个关键参数-m用来指定认证模式。默认情况下svwar会尝试不同的认证方式。但实际用的时候我建议根据目标情况显式指定。比如svwar -m REGISTER -e100-200 192.168.1.10-m REGISTER表示用REGISTER方法做枚举。还有-m INVITE用INVITE方法枚举。两者的区别在于有些SIP服务对REGISTER的响应做了统一处理不管分机存不存在都返回401这种情况下REGISTER枚举就失效了得换INVITE试试。INVITE枚举的原理是向目标分机发起呼叫根据返回的响应码判断分机是否存在。但INVITE枚举有个副作用如果分机真的存在且自动接听可能会真的拨通这在实战中要特别注意别不小心打扰到别人。提示在授权测试中用INVITE枚举之前一定要确认测试范围和时间窗口避免在业务高峰期操作。我一般会优先用REGISTER枚举只有在REGISTER枚举无效时才考虑INVITE。4.4 枚举结果的整理和后续利用svwar跑完之后会把有效的分机号列出来。这些分机号就是后续爆破的输入。我习惯把结果保存到文件里svwar -e100-999 192.168.1.10 -o extensions.txt拿到分机号列表后下一步就是用svcrack对这些分机做密码爆破。但在此之前可以先做一件事用svmap确认一下这些分机对应的SIP服务是否允许注册。有些PBX虽然分机存在但限制了注册来源IP这种情况下爆破也没用。5. svcrack实战分机密码爆破的节奏控制5.1 svcrack的基本用法和字典选择svcrack的用法很直接svcrack -u1001 -d passwords.txt 192.168.1.10-u指定用户名分机号-d指定字典文件。svcrack会逐个尝试字典里的密码直到找到正确的或者字典跑完。字典的选择很关键。VoIP分机的密码有个特点很多管理员图省事会用分机号本身作为密码比如1001的分机密码就是1001。还有一些会用简单的数字组合比如1234、0000、8888。所以字典里一定要包含这些常见弱口令。我一般会准备一个基础字典包含分机号本身1234、12345、1234560000、1111、8888password、admin、test公司名称的拼音或缩写5.2 爆破速度的控制-r参数和并发策略svcrack默认的尝试速度不算快可以用-r参数调整每秒尝试次数svcrack -u1001 -d passwords.txt -r 10 192.168.1.10-r 10表示每秒尝试10次。这个参数要根据目标SIP服务的承受能力来定。设得太高一是可能触发目标的安全机制导致IP被封二是可能把目标服务打挂。我实测下来对大多数Asterisk和FreeSWITCH每秒5到10次是比较安全的范围。如果目标有入侵检测或者速率限制可能还要更低。另外svcrack支持同时对多个分机号爆破svcrack -u1001-1010 -d passwords.txt 192.168.1.10但我不建议一上来就大面积并发先拿一两个分机试水确认目标不会封IP再扩大范围。5.3 遇到401和403时的处理思路爆破过程中你会遇到各种响应码。401表示需要认证这是正常的svcrack会自动处理认证流程。403表示禁止可能是分机被锁定也可能是来源IP被限制。如果大量分机都返回403说明目标可能做了IP白名单这时候继续爆破意义不大得先想办法绕过IP限制。还有一种情况是返回480 Temporarily Unavailable这个在热词里也出现了。480通常表示被叫暂时不可用在爆破场景下它可能意味着分机存在但当前状态不允许注册。这种情况下可以换个时间段再试。5.4 爆破成功后的验证别急着高兴svcrack报告找到密码后一定要手动验证一下。用svmap或者直接用SIP客户端比如Linphone、Zoiper尝试注册这个分机。验证的时候注意观察返回的响应码200 OK才是真的成功。我遇到过svcrack误报的情况原因是目标SIP服务对某些请求返回了非标准的响应码被svcrack误判为成功。验证成功后可以进一步测试这个分机的权限能不能拨打内部其他分机能不能拨打外部号码有没有语音信箱。这些信息对评估风险等级很重要。6. 扫描结果整理与报告输出6.1 svreport的用法把零散结果变成结构化数据svreport是SIPVicious里用来整理结果的工具。它可以把svmap、svwar、svcrack的输出转换成XML、PDF或者CSV格式。基本用法svreport -i session1 -o report.pdf但svreport用起来有个前提你得先有一个session文件。SIPVicious的工具在运行时可以用--session参数指定会话名把结果保存到会话文件里。比如svmap --session myscan 192.168.1.0/24 svwar --session myscan -e100-200 192.168.1.10这样两次扫描的结果都会保存到同一个会话里最后用svreport统一导出。6.2 手工整理结果的思路说实话svreport的输出格式有时候不太符合实际报告的需求。我更多时候是手工整理。svmap的结果用表格列出IP、端口、User-Agentsvwar的结果列出有效分机号svcrack的结果列出分机号和对应密码。然后把这些信息汇总到一份报告里按风险等级排序。一个典型的VoIP渗透测试报告应该包含发现的SIP服务列表、有效分机号列表、成功爆破的分机及密码、每个分机的权限测试结果、以及修复建议。修复建议部分重点提几个方向限制SIP服务的访问来源、强制使用强密码、启用TLS加密信令、部署入侵检测规则。6.3 结果验证的注意事项整理结果的时候有一个原则所有结果都要可复现。也就是说你报告里写的每一个发现都要有对应的命令和输出作为证据。我习惯在测试过程中把关键命令和输出都保存下来整理报告的时候直接引用。这样既方便自己复查也方便后续如果有人质疑结果时提供证据。另外测试过程中如果发现了高危问题比如某个分机可以拨打国际长途要及时和客户沟通不要等到报告写完才说。VoIP的资费风险是实打实的晚一天发现可能就多一天的话费损失。7. 实战中容易踩的坑和应对经验7.1 扫描不到任何结果先查网络再查工具这是最常见的问题。svmap扫完一个网段一个结果都没有。新手第一反应是工具坏了其实大概率是网络问题。排查顺序先确认Kali和目标在同一个网段用arp-scan看目标在不在线再确认目标SIP端口是不是5060有些PBX会改端口最后确认目标有没有做访问控制比如只允许特定IP访问SIP服务。我遇到过一种情况目标PBX的SIP服务只监听在127.0.0.1上外部根本访问不到这种情况下svmap当然扫不到。7.2 枚举到大量分机但爆破不动可能是IP被限制了svwar枚举出一堆分机号但svcrack跑起来全部返回403或者超时。这种情况多半是目标做了IP限制或者速率限制。应对方法降低爆破速度把-r调到1或者2换一个源IP试试如果有多网卡或者代理或者先暂停一段时间再试。有些PBX的封禁是临时的等几分钟就解了。7.3 别在非授权环境下测试这一点必须强调。SIP扫描和爆破会对目标服务产生实际影响尤其是爆破可能触发账户锁定、服务过载。在没有书面授权的情况下做这些操作法律风险很大。我个人的原则是只在自己搭建的实验环境或者有明确授权的客户环境里做。自己搭环境很简单用Asterisk或者FreeSWITCH在虚拟机里装一个就行成本很低。7.4 工具版本差异导致命令不兼容前面提过sipvicious有python2和python3两个版本参数有差异。比如老版本的-e参数在新版本里可能变成了--extensions。如果你照着网上的教程敲命令发现报错先检查版本。用svwar --help看一下当前版本的参数说明以实际帮助信息为准。7.5 扫描结果里的“假阳性”怎么识别svmap有时候会把一些非SIP服务误报为SIP服务尤其是那些监听在5060端口但实际跑着其他协议的服务。识别方法看User-Agent字段如果为空或者明显不是SIP相关的就要怀疑。另外可以手动发一个SIP OPTIONS请求验证sipp -sn uac 192.168.1.10:5060sipp是另一个SIP测试工具用它发一个标准的OPTIONS请求看返回是不是SIP格式的响应。如果不是那就是假阳性。8. 从攻击面到防御面SIP安全加固的实操建议8.1 限制SIP服务的暴露面最有效的防御措施就是别把SIP服务暴露在不必要的网络上。如果PBX只服务于内部分机就把它放在内网用防火墙限制5060端口的访问来源。如果确实需要外部访问用SIP over TLS5061端口并配合强认证。我见过太多把5060直接映射到公网的案例这种配置下被扫描和爆破只是时间问题。8.2 分机密码策略和注册限制分机密码至少8位包含大小写字母和数字禁止使用分机号本身作为密码。另外在PBX上配置注册失败次数限制比如连续5次失败就锁定该分机5分钟。这个配置在Asterisk里可以通过fail2ban配合实现在FreeSWITCH里也有类似的模块。8.3 日志监控和异常检测SIP服务应该开启详细的日志记录重点关注几类异常短时间内大量REGISTER请求爆破特征、来自非预期IP的注册尝试、大量404响应枚举特征。有条件的话部署一个SIP专用的入侵检测系统比如Snort的SIP规则集或者用Fail2ban监控Asterisk的日志。8.4 定期自查用SIPVicious扫自己的网络防御方也可以主动用SIPVicious做自查。定期用svmap扫自己的网段看看有没有意料之外的SIP服务在跑用svwar枚举分机看看有没有不该存在的分机号用svcrack对自己的分机做弱口令检查。这种自查比被动等报警要主动得多而且成本很低。我在实际项目里养成了一个习惯每次做完VoIP相关的评估都会把SIPVicious的几个核心命令整理成一个检查清单下次直接照着跑一遍。这个清单包括svmap扫全网段、svwar枚举常见号段、svcrack跑基础弱口令字典、手工验证高危分机。整个过程在实验环境里跑一遍大概半小时在客户环境里根据网段大小调整。这套流程不复杂但能覆盖大部分常见的SIP配置问题。如果你刚开始接触VoIP方向建议先在自己的实验环境里把这几个工具跑熟理解每个响应码的含义再去实际环境里操作。工具本身不难难的是对SIP协议行为的理解和对结果的准确解读这部分只能靠多练多看来积累。
返回列表