介绍
本次实验介绍电话信号的篡改:一种旨在通信会话中插入、修改和删除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