Pentesting VoIP
VoIP 基本信息
要开始了解 VoIP 的工作原理,请查看:
基本消息
响应代码
1xx—临时响应
2xx—成功响应
3xx—重定向响应
4xx—客户端失败响应
5xx—服务器故障响应
6xx—全局失败响应
VoIP Enumeration
电话号码
红队可以采取的第一步是使用OSINT工具、Google搜索或抓取网页来搜索可用的电话号码以联系公司。
一旦你有了电话号码,你可以使用在线服务来识别运营商:
知道运营商是否提供VoIP服务,你可以确定公司是否在使用VoIP……此外,公司可能没有雇佣VoIP服务,而是使用PSTN卡将自己的VoIP PBX连接到传统电话网络。
诸如自动音乐响应等情况通常表明正在使用VoIP。
Google Dorks
OSINT 信息
任何其他有助于识别所使用的 VoIP 软件的 OSINT 枚举对红队都是有帮助的。
网络枚举
nmap
能够扫描 UDP 服务,但由于扫描的 UDP 服务数量较多,它的速度非常慢,并且在这类服务上可能不够准确。
svmap
来自 SIPVicious (sudo apt install sipvicious
): 将在指定网络中定位 SIP 服务。svmap
容易被阻止,因为它使用了 User-Agentfriendly-scanner
,但你可以修改/usr/share/sipvicious/sipvicious
中的代码并进行更改。
SIPPTS scan
from sippts: SIPPTS扫描是一个非常快速的SIP服务扫描器,支持UDP、TCP或TLS。它使用多线程,可以扫描大范围的网络。它允许轻松指示端口范围,扫描TCP和UDP,使用其他方法(默认情况下将使用OPTIONS)并指定不同的User-Agent(等等)。
metasploit:
额外的网络枚举
PBX 还可能暴露其他网络服务,例如:
69/UDP (TFTP): 固件更新
80 (HTTP) / 443 (HTTPS): 从网页管理设备
389 (LDAP): 存储用户信息的替代方案
3306 (MySQL): MySQL 数据库
5038 (Manager): 允许从其他平台使用 Asterisk
5222 (XMPP): 使用 Jabber 发送消息
5432 (PostgreSQL): PostgreSQL 数据库
以及其他...
方法枚举
可以使用 SIPPTS enumerate
从 sippts 找到 可用的方法。
分析服务器响应
分析服务器返回给我们的头部信息非常重要,这取决于我们发送的消息和头部的类型。使用来自 sippts 的 SIPPTS send
,我们可以发送个性化消息,操纵所有头部,并分析响应。
如果服务器使用 websockets,获取数据也是可能的。通过 sippts 中的 SIPPTS wssend
,我们可以发送个性化的 WS 消息。
Extension Enumeration
在PBX(私人分支交换机)系统中,扩展指的是分配给组织或企业内各个电话线路、设备或用户的唯一内部标识符。扩展使得在组织内部高效地路由电话成为可能,无需为每个用户或设备提供单独的外部电话号码。
svwar
来自SIPVicious(sudo apt install sipvicious
):svwar
是一个免费的SIP PBX扩展线路扫描器。在概念上,它的工作方式类似于传统的拨号器,通过猜测一系列扩展或给定的扩展列表。
SIPPTS exten
来自 sippts: SIPPTS exten 识别 SIP 服务器上的扩展。 Sipexten 可以检查大范围的网络和端口。
metasploit: 你也可以使用 metasploit 枚举扩展/用户名:
enumiax
(apt install enumiax
): enumIAX 是一个 Inter Asterisk Exchange 协议 用户名暴力破解枚举器。enumIAX 可以在两种不同模式下操作:顺序用户名猜测或字典攻击。
VoIP 攻击
密码暴力破解 - 在线
在发现了 PBX 和一些 分机/用户名 后,红队可以尝试通过 REGISTER
方法对分机进行身份验证,使用常见密码字典进行暴力破解。
请注意,用户名 可以与分机相同,但这种做法可能会因 PBX 系统、其配置和组织的偏好而有所不同...
如果用户名与分机不同,您需要 找出用户名以进行暴力破解。
svcrack
来自 SIPVicious (sudo apt install sipvicious
): SVCrack 允许您破解 PBX 上特定用户名/分机的密码。
SIPPTS rcrack
来自 sippts: SIPPTS rcrack 是一个用于 SIP 服务的远程密码破解工具。Rcrack 可以在不同的 IP 和端口范围内测试多个用户的密码。
Metasploit:
VoIP嗅探
如果你在开放Wifi网络中发现VoIP设备,你可以嗅探所有信息。此外,如果你在一个更封闭的网络中(通过以太网连接或受保护的Wifi),你可以在PBX和网关之间执行MitM攻击,例如 ARPspoofing以嗅探信息。
在网络信息中,你可能会找到管理设备的网页凭证、用户分机、用户名、IP地址,甚至哈希密码和RTP数据包,你可以重放这些数据包以听到对话,等等。
要获取这些信息,你可以使用Wireshark、tcpdump等工具……但一个专门创建的嗅探VoIP对话的工具是 ucsniff。
请注意,如果SIP通信中使用了TLS,你将无法看到明文的SIP通信。 如果使用SRTP和ZRTP,RTP数据包将不会是明文。
SIP凭证(密码暴力破解 - 离线)
查看这个例子以更好地理解SIP REGISTER通信,以了解凭证是如何发送的。
sipdump
和sipcrack
,是sipcrack的一部分(apt-get install sipcrack
):这些工具可以从pcap中提取SIP协议中的摘要认证并进行暴力破解。
SIPPTS dump
来自 sippts: SIPPTS dump 可以从 pcap 文件中提取摘要认证。
SIPPTS dcrack
来自 sippts: SIPPTS dcrack 是一个用于破解通过 SIPPTS dump 获得的摘要认证的工具。
SIPPTS tshark
来自 sippts: SIPPTS tshark 从 PCAP 文件中提取 SIP 协议的数据。
DTMF 代码
不仅可以在网络流量中找到 SIP 凭据,还可以找到用于访问 语音邮件 的 DTMF 代码。 这些代码可以在 INFO SIP 消息、音频 或 RTP 数据包 中发送。如果代码在 RTP 数据包中,您可以剪切对话的那部分并使用工具 multimo 提取它们:
免费通话 / Asterisks 连接配置错误
在 Asterisk 中,可以允许来自 特定 IP 地址 的连接或来自 任何 IP 地址 的连接:
如果指定了IP地址,主机将不需要每隔一段时间发送REGISTER请求(在REGISTER数据包中发送了生存时间,通常为30分钟,这意味着在其他情况下,电话将需要每30分钟REGISTER一次)。然而,它需要开放端口以允许VoIP服务器进行通话。
要定义用户,可以定义为:
type=user
:用户只能接收电话。type=friend
:可以作为对等方进行通话并作为用户接收通话(与分机一起使用)type=peer
:可以作为对等方发送和接收通话(SIP-trunks)
还可以通过不安全变量建立信任:
insecure=port
:允许通过IP验证的对等连接。insecure=invite
:不需要对INVITE消息进行身份验证insecure=port,invite
:两者都可以
当使用**type=friend
时,host变量的值将不被使用**,因此如果管理员错误配置SIP-trunk使用该值,任何人都将能够连接到它。
例如,这种配置将是脆弱的:
host=10.10.10.10
insecure=port,invite
type=friend
免费通话 / Asterisks上下文错误配置
在Asterisk中,上下文是拨号计划中一个命名的容器或部分,将相关的分机、操作和规则组合在一起。拨号计划是Asterisk系统的核心组件,因为它定义了如何处理和路由来电和去电。上下文用于组织拨号计划、管理访问控制,并提供系统不同部分之间的分离。
每个上下文在配置文件中定义,通常在**extensions.conf
**文件中。上下文用方括号表示,上下文名称包含在其中。例如:
在上下文中,您定义扩展(拨打号码的模式)并将其与一系列操作或应用程序关联。这些操作决定了电话的处理方式。例如:
这个示例演示了一个简单的上下文,称为 "my_context",扩展名为 "100"。当有人拨打 100 时,电话将被接听,播放欢迎消息,然后电话将被终止。
这是 另一个上下文,允许 拨打任何其他号码:
如果管理员将 默认上下文 定义为:
任何人都可以使用 服务器拨打任何其他号码(服务器的管理员将为通话付费)。
此外,默认情况下 sip.conf
文件包含 allowguest=true
,因此 任何 攻击者在 没有认证 的情况下都能够拨打任何其他号码。
SIPPTS invite
来自 sippts: SIPPTS invite 检查 PBX 服务器是否允许我们在没有认证的情况下拨打电话。如果 SIP 服务器配置不正确,它将允许我们拨打外部号码。它还可以允许我们将通话转移到第二个外部号码。
例如,如果您的 Asterisk 服务器有不良的上下文配置,您可以在没有授权的情况下接受 INVITE 请求。在这种情况下,攻击者可以在不知道任何用户/密码的情况下拨打电话。
免费电话 / 配置错误的 IVRS
IVRS 代表 交互式语音响应系统,是一种电话技术,允许用户通过语音或按键输入与计算机系统进行交互。IVRS 用于构建 自动呼叫处理 系统,提供一系列功能,如提供信息、路由电话和捕获用户输入。
VoIP 系统中的 IVRS 通常包括:
语音提示:引导用户通过 IVR 菜单选项和说明的预录音频消息。
DTMF(双音多频)信号:通过按下电话上的按键生成的触摸音输入,用于在 IVR 菜单中导航和提供输入。
呼叫路由:根据用户输入将电话直接转接到适当的目的地,如特定部门、代理或分机。
用户输入捕获:收集来电者的信息,如账户号码、案件 ID 或任何其他相关数据。
与外部系统的集成:将 IVR 系统连接到数据库或其他软件系统,以访问或更新信息、执行操作或触发事件。
在 Asterisk VoIP 系统中,您可以使用拨号计划(extensions.conf
文件)和各种应用程序(如 Background()
、Playback()
、Read()
等)创建 IVR。这些应用程序帮助您播放语音提示、捕获用户输入并控制呼叫流程。
漏洞配置示例
之前的例子中,用户被要求按1拨打一个部门,按2拨打另一个部门,或者如果他知道完整的分机号,则输入完整的分机号。 漏洞在于所指示的分机长度没有被检查,因此用户可以输入5秒超时的完整号码并进行拨打。
分机注入
使用如下分机:
当 ${EXTEN}
是将被拨打的 分机 时,当 ext 101 被引入 时,将会发生以下情况:
然而,如果 ${EXTEN}
允许输入 超过数字(如在旧版 Asterisk 中),攻击者可以输入 101&SIP123123123
来拨打电话号码 123123123。这将是结果:
因此,对分机 101
和 123123123
的呼叫将被发送,只有第一个接到电话的分机会建立连接……但是如果攻击者使用一个 绕过任何匹配 的分机,该分机并不存在,他可以 仅向所需号码注入一个呼叫。
SIPDigestLeak 漏洞
SIP Digest Leak 是一个影响大量 SIP 电话的漏洞,包括硬件和软件 IP 电话以及电话适配器(VoIP 转模拟)。该漏洞允许 泄露 Digest 认证响应,该响应是根据密码计算的。然后可以进行 离线密码攻击,并根据挑战响应恢复大多数密码。
**漏洞场景来自这里**:
一部 IP 电话(受害者)在任何端口上监听(例如:5060),接受电话呼叫
攻击者向 IP 电话发送 INVITE
受害者电话开始响铃,有人接听并挂断(因为另一端没有人接电话)
当电话挂断时,受害者电话向攻击者发送 BYE
攻击者发出 407 响应,请求认证并发出认证挑战
受害者电话在第二个 BYE 中提供对认证挑战的响应
攻击者可以在他的本地机器上(或分布式网络等)对挑战响应进行暴力破解攻击并猜测密码
SIPPTS 漏洞来自 sippts: SIPPTS 漏洞利用了影响大量 SIP 电话的 SIP Digest Leak 漏洞。输出可以以 SipCrack 格式保存,以便使用 SIPPTS dcrack 或 SipCrack 工具进行暴力破解。
Click2Call
Click2Call 允许一个 网络用户(例如可能对某个产品感兴趣) 提供 他的 电话号码 以接收电话。然后会拨打一个商业电话,当他 接听电话 时,用户将 被呼叫并与代理连接。
一个常见的 Asterisk 配置文件是:
之前的配置允许 任何 IP 地址连接(如果密码已知)。
要 组织一个电话,如前所述,不需要读取权限,只需要 在写入中 发起。
拥有这些权限的任何知道密码的 IP 都可以连接并提取过多信息,例如:
更多信息或操作可以被请求。
窃听
在 Asterisk 中,可以使用命令 ChanSpy
指定要监控的 分机(或所有分机)来听取正在进行的对话。此命令需要分配给一个分机。
例如,exten => 333,1,ChanSpy('all',qb)
表示如果你 拨打 分机 333,它将 监控 all
的分机,开始监听 每当新的对话开始时 (b
) 以静音模式 (q
) 进行,因为我们不想进行互动。你可以通过按 *
或输入分机号码在进行的对话之间切换。
也可以使用 ExtenSpy
仅监控一个分机。
除了监听对话外,还可以使用分机将其 录制到文件中,例如:
通话将保存在 /tmp
。
您甚至可以让 Asterisk 在通话结束时执行一个脚本以泄露通话。
RTCPBleed 漏洞
RTCPBleed 是一个影响基于 Asterisk 的 VoIP 服务器的重大安全问题(发布于 2017 年)。该漏洞允许 RTP(实时传输协议)流量,即承载 VoIP 通话的流量,被 互联网上的任何人拦截和重定向。这是因为 RTP 流量在通过 NAT(网络地址转换)防火墙时绕过了身份验证。
RTP 代理尝试通过在两个或多个参与者之间代理 RTP 流来解决影响 RTC 系统的 NAT 限制。当 NAT 存在时,RTP 代理软件通常无法依赖通过信令(例如 SIP)获取的 RTP IP 和端口信息。因此,一些 RTP 代理实现了一种机制,使得这样的 IP 和端口元组能够自动学习。这通常是通过检查传入的 RTP 流量并将任何传入 RTP 流量的源 IP 和端口标记为应响应的来完成的。这种机制可能被称为“学习模式”,不使用任何形式的身份验证。因此,攻击者 可以 向 RTP 代理发送 RTP 流量,并接收原本应发送给正在进行的 RTP 流的呼叫者或被呼叫者的代理 RTP 流量。我们称这种漏洞为 RTP Bleed,因为它允许攻击者接收原本应发送给合法用户的 RTP 媒体流。
RTP 代理和 RTP 堆栈的另一个有趣行为是,有时 即使不易受 RTP Bleed 漏洞影响,它们仍会 接受、转发和/或处理来自任何源的 RTP 数据包。因此,攻击者可以发送 RTP 数据包,这可能允许他们注入自己的媒体,而不是合法的媒体。我们称这种攻击为 RTP 注入,因为它允许将不合法的 RTP 数据包注入到现有的 RTP 流中。此漏洞可能在 RTP 代理和端点中发现。
Asterisk 和 FreePBX 传统上使用 NAT=yes
设置,这使得 RTP 流量能够绕过身份验证,可能导致通话中没有音频或单向音频。
有关更多信息,请查看 https://www.rtpbleed.com/
SIPPTS rtpbleed
来自 sippts: SIPPTS rtpbleed 通过发送 RTP 流来检测 RTP Bleed 漏洞。
SIPPTS rtcpbleed
来自sippts: SIPPTS rtcpbleed 通过发送 RTCP 流来检测 RTP Bleed 漏洞。
SIPPTS rtpbleedflood
来自 sippts: SIPPTS rtpbleedflood 利用 RTP Bleed 漏洞发送 RTP 流。
SIPPTS rtpbleedinject
来自 sippts: SIPPTS rtpbleedinject 利用 RTP Bleed 漏洞注入音频文件(WAV 格式)。
RCE
在 Asterisk 中,如果你以某种方式能够 添加扩展规则并重新加载它们(例如,通过攻陷一个易受攻击的网络管理服务器),则可以使用 System
命令获得 RCE。
有一个命令叫 Shell
,可以在必要时 替代 System
来执行系统命令。
如果服务器 不允许在 System
命令中使用某些字符(如在 Elastix 中),请检查网络服务器是否允许 以某种方式在系统内部创建文件(如在 Elastix 或 trixbox 中),并利用它 创建一个后门脚本,然后使用 System
来 执行 该 脚本。
有趣的本地文件和权限
sip.conf
-> 包含 SIP 用户的密码。如果 Asterisk 服务器以 root 身份运行,您可能会危害 root。
mysql root 用户 可能 没有任何密码。
这可以用来创建一个新的 mysql 用户作为后门。
FreePBX
amportal.conf
-> 包含网络面板管理员(FreePBX)的密码。FreePBX.conf
-> 包含用于访问数据库的用户 FreePBXuser 的密码。这可以用来创建一个新的 mysql 用户作为后门。
Elastix
Elastix.conf
-> 包含多个明文密码,如 mysql root 密码、IMAPd 密码、网络管理员密码。多个文件夹 将属于被攻陷的 asterisk 用户(如果不是以 root 身份运行)。该用户可以读取之前的文件并控制配置,因此他可以使 Asterisk 在执行时加载其他后门二进制文件。
RTP 注入
可以使用工具如 rtpinsertsound
(sudo apt install rtpinsertsound
)和 rtpmixsound
(sudo apt install rtpmixsound
)在对话中插入 .wav
文件。
或者您可以使用来自 http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/ 的脚本来 扫描对话(rtpscan.pl
)、向对话发送 .wav
(rtpsend.pl
)和 在对话中插入噪音(rtpflood.pl
)。
DoS
有几种方法可以尝试在 VoIP 服务器上实现 DoS。
SIPPTS flood
来自 sippts**: SIPPTS flood 向目标发送无限消息。sippts flood -i 10.10.0.10 -m invite -v
SIPPTS ping
来自 sippts**: SIPPTS ping 进行 SIP ping 以查看服务器响应时间。sippts ping -i 10.10.0.10
IAXFlooder: DoS IAX 协议用于 Asterisk。
inviteflood: 一个用于在 UDP/IP 上执行 SIP/SDP INVITE 消息洪水的工具。
rtpflood: 发送多个格式良好的 RTP 数据包。需要先知道正在使用的 RTP 端口(先嗅探)。
SIPp: 允许分析和生成 SIP 流量,因此也可以用于 DoS。
SIPsak: SIP 瑞士军刀。也可以用于执行 SIP 攻击。
模糊测试工具: protos-sip, voiper.
操作系统漏洞
安装像 Asterisk 这样的软件最简单的方法是下载一个已经安装了它的 操作系统发行版,例如:FreePBX, Elastix, Trixbox... 这些的一个问题是,一旦它工作,系统管理员可能 不会再更新它们,而 漏洞 会随着时间的推移被发现。
参考文献
Last updated