2G网络,包括2.5G的“全球移动通信”(GSM)网络、2.75G的“通用分组无线服务”(General Packet Radio Service,GPRS)网络和“全球演进的增强数据率”(Enhanced Data Rates for Global Evolution,EDGE),具有十分广泛的研究基础,在使用中,协议存在的许多安全隐患都被发现。虽然到目前为止,2G网络仍然上的通信协议仍然是使用最广泛的全球蜂窝协议,但随着3G网络的引入,2G网络技术开始并不断地受到抨击。然而,在人口最稠密的地区,人们想着是不是要回到2G网络的性能水平,并且让许多设备保持“向后兼容”(backward-compatible),以便让早期的2G技术仍然可以使用,即使是重新面对黑客的攻击也在所不惜。这样做的目的很简单,就是让传统的基础设施系统,如配电和发电站,能继续频繁使用2G网络,也可以作为其他网络接入机会下后备的连接机制。
注意
在这一节中,我们把主要精力集中在有关“全球移动通信”网络上与安全有关的主要内容上。另外,还有一些利用基于“码分多址复用”(CDMA)网络上附加的安全信息,这部分内容放在了本章的后面。
“全球移动通信”网络的基本网络模型如图12-1所示。虽然在“全球移动通信”GSM网络中,还有部署了许多额外的组件,但这些组件都是获得了GSM系统安全上,至关重要的子系统:
图12-1 基本“全球移动通信”GSM网络体系模型
·“移动基站” (Mobile Station,MS) 移动基站是连接到“全球移动通信”GSM语音、数据、设备。除此之外,还可能包括对“手机短信服务”(Short Message Service,SMS)或“手机彩信服务”(Multimedia Messaging Service,MMS)的连接。在一些规格中,“移动基站”被称为“用户设备”(User Equipment,UE)。
·“SIM卡” 在网络上的每一个“移动基站”必须有一个“SIM卡”。“SIM卡”的全称是“用户识别模块”(Subscriber Identity Module,SIM),只是大家更愿意使用“SIM卡”这个名称。“SIM卡”属于可移除的(removable),其作用是为“移动基站”提供识别“国际移动用户标识符”(International Mobile Subscriber Identifier,IMSI)的能力,同时该卡中保存了一个用于在网络上认证“移动基站”的唯一密钥。
·“移动用户临时识别码” (Temporary Mobile Subscriber Identifier,TMSI) “移动用户临时识别码”的产生和分配是随着“移动基站”认证过程中进行的。“移动用户临时识别码”可以代替“国际移动用户标识符”完成在可能的情况下保护用户的身份信息的作用。
·“基站收发信台” (Base Transceiver Station,BTS) “基站收发信台”无线蜂窝网络的无线设备,一般位于某个建筑上,比如手机信号发射塔上,提供到“移动基站”的无线连接,“基站收发信台”设备在“全球移动通信”网络中,几乎没有什么智能可言。
·“基站控制器” (Base Station Controller,BSC) “基站控制器”的作用是负责管理许多“基站收发信台”设备,为“移动基站”设备的维护和管理提供智能连接。
·“基站子系统” (Base Station Subsystem,BSS) 由“基站收发信台”和“基站控制器”一起,就构成了“基站子系统”。
·“移动交换中心” (Mobile Switching Center,MSC) “移动交换中心”提供了下游(downstream)“移动基站”设备的路由服务,包括“语音通话”、“手机短信服务”,“传真”,和“数据服务”。
·“归属位置寄存器” (The Home Location Register,HLR) “归属位置寄存器”是一个数据库资源,记录着该网络上用户的信息,这些信息包括了每个“移动基站”的“国际移动用户标识符”。
·“访客位置寄存器” (Visitor Location Register,VLR) “归属位置寄存器”记录下网络用户的信息时,“访客位置寄存器”就会接纳“非网络用户设备”(non-network device),以便于实现用户的手机漫游业务。
·“认证中心” (Authentication Center,AuC) “认证中心”负责“全球移动通信”网络中,用户身份的认证。
·“公共交换电话网” (Public Switched Telephony network,PSTN) “公共交换电话网”是“全球移动通信”网络提供商和其他网络服务之间的公共网络接口。
·“网络交换系统” (Network Switching System,NSS) “网络交换系统”是对“全球移动通信”网络后端的组件,包括“移动交换中心”,“归属位置寄存器”,“访客位置寄存器”,“认证中心”,共同在“全球移动通信”网络中搭建起“网络交换系统”。
随着我们对“全球移动通信”网络模型有了一个基本的了解,下面我们就可以开始评估用于保护“全球移动通信”网络供应商的认证和加密服务。
“全球移动通信”的认证交换在对用户身份进行验证的时候,是通过“国际移动用户标识符”的使用,以及关联的“用户密钥”(subscriber key)Ki ,该“用户密钥”Ki 存储在SIM卡。这个过程如图12-2所示。
图12-2 “全球移动通信”网络认证的交换过程
在“全球移动通信”的认证交换过程中,涉及“SIM卡”、“移动设备”(Mobile Equipment,ME)、“移动交换中心”和“认证中心”。“认证中心”和“SIM卡”都有用户的“国际移动用户标识符”知识,以及关联Ki 值作为设备注册过程的一部分。当“移动设备”连接到网络的时候,“SIM卡”会共享“国际移动用户标识符”信息,并将“国际移动用户标识符”转发到“认证中心”。“认证中心”会检索Ki 的值,并将与Ki 的值连接到“国际移动用户标识符”上,然后选择一个随机数作为“随机数”(RAND)的值,这个“随机数”将用于两个算法中,这两个算法分别是A3算法和A8算法,这两个算法分别与“用户密钥”Ki 生成“临时密钥”Kc 和“预期的响应”(Expected Response,XRES)值。“认证中心”共享“临时密钥”Kc 、“随机数”、“移动交换中心”和“预期的响应”值,最后,结束在认证过程中的“认证中心”的角色作用。
接下来,“移动交换中心”共享“移动设备”的“随机数”,然后将其发送给“SIM卡”。就像之前的“认证中心”AuC一样,“SIM卡”使用“随机数”用于“临时密钥”Kc 的值和“签名的响应”(Signed Response,SRES)的生成。“签名的响应”值随后会交付给“移动设备”,“移动设备”会通过无线接口传送到“移动交换中心”进行验证。
“移动交换中心”会对“签名的响应”和“预期的响应”进行比较,如果这两个值是匹配的,那么“移动交换中心”就知道这个“SIM卡”的“用户密钥”Ki是正确的,就会让“移动设备”ME通过身份验证,否则就不予以通过。“移动交换中心”会为“移动设备”生成和加密一个“移动用户临时识别码”,然后通过无线接口将其传送出去。
在这个认证交换过程中,注意“SIM卡”与“移动设备”是关联了的,会对“认证中心”进行认证。该认证符合网络提供商的要求,可以防止未经授权的设备访问网络的服务。认证交换并不会将提供者的身份证提交到“移动设备”上,然而,在这里,有一个弱点可以被攻击者成功地利用。
“全球移动通信”网络使用“A5/1”密码算法为用户提供了保密性控制,那就是在“移动设备”和“基站控制器”之间,通过“全球移动通信”的无线接口所进行的数据包传输。“A5/1”密码算法是一种基于流的加密算法,使用的是一种称为“线性反馈移位寄存器”(Linear Feedback Shift Register,LFSR)机制的加密算法。“线性反馈移位寄存器”的加密功能是用常见的硬件实现的,这样做可以降低实现的成本,保证设计优先。
“临时密钥”Kc 作为“A5/1”密码算法的输入,用来生成“密钥流”(keystream)数据。这样,明文数据会与“密钥流”数据进行“异或”(XOR)操作,以便生成密文数据。在解密和的时候,只要将密文数据再次与匹配的“密钥流”进行“异或”操作,就可以解密还原成原来的明文数据。
注意
“A5/1”密码算法是在“A5标准”(A5 standard)中几个密码中的一个,其中既包括“A5/2”密码算法,也包括“A5/0”密码算法。“A5/2”密码算法以前主要应用于美国北部,但是,目前已经取消支持对“A5/1”密码算法的支持。而“A5/0”密码算法是一个“空”的加密模式,换句话说,就是这个“A5/0”密码算法。这个密码“加密”算法并不对数据进行加密,只是为了将“不加密”也纳入到这样一个体系来,而对“不加密”所起的一个别名。需要说明的是,目前“A5/0”密码算法仍然被广泛地使用着。
现在,我们已经检查了一些支持“全球移动通信”网络的基本的安全机制,下面,让我们看看如何针对其漏洞进行攻击,以及针对“全球移动通信”用户暴露的攻击技术。
针对“全球移动通信”的攻击可以分为三类:
·隐私的攻击,特别是可以导致“国际移动用户标识符”(IMSI)信息暴露的攻击。
·机密性攻击,包括将通过“全球移动通信”网络无线接口通信的语音和数据暴露的攻击
·完整性攻击,攻击者直接操纵,或者是冒充“全球移动通信”网络的“后台服务”,修改通过“全球移动通信”无线接口与“全球移动通信”无线网络之间交互时传送的内容,其攻击对象是对其脆弱点实施多重攻击,而导致交互时传送的内容不能使用,最终导致隐私暴露,保密性被破坏,完整性要求也无从谈起。这一种攻击的危害自然不言而喻,“全球移动通信”是意义最为深远(far-reachin)的无线协议,在全球范围内都在使用,特别是在农村地区。数十亿的用户,在协议中存在重大缺陷时,一旦遭受到攻击和破坏,那么要想恢复元气,将是一个缓慢的过程。
虽然商业“全球移动通信”数据包捕获工具对于大多数用户来说,成本是过于高昂的,但是通过变通,你可以使用廉价的硬件来构建自己的“全球移动通信”嗅探工具包。“全球移动通信”数据包一旦被捕获,将会披露关于网络的一些基本信息,但是不会暴露通信数据的内容。这些内容包括通话的音频数据流内容,“手机短信服务”和“手机彩信服务”的内容,以及通信活动中直接传输的数据部分。究其原因,就是因为在“全球移动通信”通信中,虽然结构不是加密的,但所传输的数据都是加密的。在本章的后面,我们看到一些攻击技术,是攻击者将利用某一个“A5/1”密码算法的漏洞,对所传输的内容进行解密的攻击。
在攻击工具的硬件方面,我们仍然使用在上一章中,就表现出多才多艺的RTL版的“软件无线收发”设备,作为这里的“全球移动通信”网络嗅探工具。正如你在第11章中所看到的一样,原本这款廉价的RTL版的SDR设备,它的设计目的是为了接收数字高清电视的,然而,也只是简单地化蛹成蝶,在几乎没有多大改进的基础上,就摇身一变,变成了一个功能超强的黑客专业入侵工具。RTL版的SDR设备具有一个特殊的调试模式(debug mode),在这一模式下,该设备可以作为一个通用的SDR设备。如果我们想将其应用于对“全球移动通信”数据信息的接收工作,那么我们只要将其捕获的频率段调整到850MHz或1900MHz这两频率上的一个即可。当然,如12.1.1节中所说,这两个频率只是北美洲“全球移动通信”网络所使用的频率段,如果你身处欧洲或世界的其他地方,那么这两个频率段调整到900MHz或1800MHz上的这两个频率中的一个。目前,这款廉价的RTL版的“软件无线收发”设备可以捕获850 MHz和900MHz的频率段上“全球移动通信”网络中的活动,但不能访问更低或更高的频段上“全球移动通信”网络的活动。这个时候就需要使用E4000型号的RTL版的SDR设备才行。
使用AirProbe工具对全球移动通信网络进行嗅探
AirProbe是一个运行Linux操作系统上的“全球移动通信”无线网线接口,主要由三个主要部分组成,分别是“GSM信号采集”(GSM signal acquisition)模块,“解调”(demodulation)模块和“数据包分析”(packet analysis)模块组成。要将其作为一个SDR接口使用,该程序还需要几个主要的软硬件支持。硬件毫无疑问就是一台RTL版的SDR设备,软件的支持库有“GNU计划”中的无线;一个名叫“开源移动通信”(Open Source Mobile Communication)的程序,其文件名是Osmocom;还有就是Wireshark软件。AirProbe程序的功能主要是捕获“全球移动通信”网络上的活动,然后对数据包中的信息进行解码,以便在随后其他更专业的软件中进行分析。前面已经提到,在“全球移动通信”网络通信中,通信数据包结构和其中的通信数据是不加密的,而其通信数据包的内容则是加密的。因而在遍及世界的大多数地点,语音、数据、“手机短信服务”SMS和“手机彩信服务”MMS等有效载荷,由于其内容是加密的,所以可以拿到,但却看不了内容;而另一些我们可能感兴趣的数据结构内容却因为数据未加密而变得可以看到。
安装AirProbe软件的步骤很简单;然而,相比之下,其依赖库“‘GNU计划’中的无线”的安装却十分复杂。为了简化对“‘GNU计划’中的无线”的安装,该软件的开发人员Marcus Leech已经组建了一个shell脚本,该脚本可以在Ubuntu操作系统,以及其他基于Debian的系统上,自动地下载和编译所需要的程序,并实施安装。首先,我们通过apt-get工具,安装作为先决条件的必要软件包,其命令格式如下所示:
接下来,我们下载本程序的开发人员Marcus Leech对“‘GNU计划’中的无线”所构建的脚本程序,该脚本的下载地址为http://www.sbrac.org/files/build-gnuradio 。下载结束后,将其标记为可执行文件,并运行该文件。脚本应该运行在“非root”(non-root)的用户下,这就要求我们的系统需要通过sudo工具获得root用户的访问权限,然后安装安装工具包,以及其他所需要的软件,整个安装过程大约一小时。从脚本的输出内容很长,为了本书格式上的简洁,在下面我们特对输出内容中,不是很关键的内容进行了裁剪。
注意
对“‘GNU计划’中的无线”组件的代码编译过程,属于典型的“资源密集型”(resource intensive)的程序,对内存的消费极大,所以无论是你的还是别人的主机,要安装本程序的Linux操作系统至少需要2GB的内存才能继续。
一旦“‘GNU计划’中的无线”安装脚本运行成功后,就可以下载并安装“开源移动通信”(即osmocom程序)了,通过git下载该程序的源代码,命令格式和执行效果如下所示:
下载好该程序的源代码以后,我们需要将下载目录修改为libosmocore目录。然后我们创建 [1] (build)和安装软件,其操作步骤如下所示:
接下来,我们下载AirProbe软件,其操作步骤如下所示。
AirProbe软件并没有针对“‘GNU计划’中的无线”的结构进行过维护与修改更新。所以建议大家不要随便对该程序进行在线升级,因为在线升级到“‘GNU计划’中的无线”中的最新版,就会导致最新版本的兼容问题。不过,你可以申请一个名叫“neeo”的补丁,这个补丁是可用的,其下载地址是https://raw.githubusercontent.com/scateu/airprobe-3.7-hackrf-patch/master/zmiana.patch 。在作者本人的网站上,对该补丁程序进行了“镜像”(mirrored),所以读者也可以从作者本人的网站上进行下载,同时,除了程序下载之外,也可以看到有该补丁程序的源代码。我们改变为airprobe目录,然后下载并应用这个更新AirProbe软件的补丁,其步骤如下。
接下来,我们将当前目录切换到AirProbe程序的gsm-receiver目录中,然后编译和安装其中的软件,如下所示:
最后,我们修改PYTHONPATH变量来搜索本地安装的软件包,其步骤如下所示。我们将使用命令编译最初源代码,来使这种变化得到应用;这一步会在下一次我们登录Linux主机的时候自动发生。
安装了AirProbe软件以后,我们可以测试“全球移动通信”网络的解码功能。测试的方法是,使用一个“‘全球移动通信’信号文件”在AirProbe程序上进行测试,这个“全球移动通信”信号文件的程序名称叫作cfile,是由一个名为“浑沌计算机俱乐部” [2] (Chaos Computer Club,CCC)的黑客组织开发的。我们转到“AirProbe Python”的源文件目录中,然后就可以下载“全球移动通信”捕获文件了。这种格式的文件可以从“浑沌计算机俱乐部”网站的wiki目录中下载。
接下来,我们通过sudo命令获得root权限以后,就可以开始使用Wireshark软件进行协议分析了:
AirProbe软件将解码后的“全球移动通信”数据包作为UDP数据包的有效载荷,填充到UDP数据包中,并发送到“本地环回” [3] (local loopback)接口。我们在选择了标注为“lo”的网络适配器以后,就可以开始捕获数据包了,这时的界面截图如图12-3所示。
图12-3 捕获数据包的界面
然后,我们就可以使用AirProbe软件中的go.sh脚本对“浑沌计算机俱乐部”组织的“全球移动通信”信号文件进行解码工作,其步骤和显示效果如下所示。
解码后的“全球移动通信”信号数据包以十六进制的格式显示在终端上,这些内容是通过UDP协议发送的。而一旦进入到TCP/IP的网络中,那就很容易被Wireshark程序所捕获和解码了。在Wireshark工具中,我们很容易看到解码后的信息,识别“无线网络服务提供商”运营网络的属性,包括“移动国家代码”(Mobile Country Code,MCC)和“移动网络代码”(Mobile Network Code,MNC)跨国信息,如图12-4所示。
注意
Wireshark软件的运行必须早于上面go.sh脚本的运行,这样Wireshark软件才能捕获到上面所提到的“全球移动通信”信号通信数据包。
图12-4 解码后的信息界面截图
在将所捕获到的信号文件,又通过网络捕获进行处理的时候,我们可以继续随后的“全球移动通信”信号通信数据包的捕获。我们知道,“全球移动通信”使用什么样的频率取决于移动设备载体对频率的选择,所以要扫描本地“全球移动通信”活动。我们可以手动使用Windows操作系统中SDR#程序,寻找信号模式类似于图12-5所示的“全球移动通信”的例子,并且,我们也可以使用Kalibrate工具自动完成寻找工作。
图12-5 SDR#程序扫描到“全球移动通信”中的活动
Kalibrate软件是由Joshua Lackey所写,其目的是为了校准RTL版的SDR设备射频接收的频率。一些RTL版的SDR设备容易受到不准确的频率波动。例如,我们将无线频率调谐到850 MHz,但实际上只调谐到了849.5 MHz。因为这是实现信号分析的可靠的问题,所以Kalibrate工具可以通过扫描“全球移动通信”网络来识别出频率的漂移问题。其原理就是,当捕获到大量数据包时,可以根据这些频率与所设定的频率进行比较,通过比较不仅可以知道是否存在“漂移”(drift),还知道“偏移量”(offset)。我们可以使用这个工具,用于类似的目的,但也进行“全球移动通信”网络扫描和频率的报告。
首先,我们使用git工具下载Kalibrate的源程序,其操作步骤和结果如下所示:
然后,我们可以改变目录到Kalibrate软件的目录,通过“创建”的方式编译连接和生成这个软件的可执行文件。
要在Linux操作系统上使用RTL版的SDR设备之前,我们不得不卸载掉一个兼容但是有冲突的驱动模块,那就是dvb_usb_rtl28xxu驱动程序,其命令格式显示如下。我们还需要在“Linux的黑名单”(Linux blacklist)中增加这个驱动程序的项,以避免在操作系统重启以后,该驱动程序又死灰复燃,被系统加载。
接下来,我们运行Kalibrate程序,然后扫描可用的“全球移动通信”网络。我们先设置一个“初始射频增益”(initial RF gain),值为42 dB,和一个22 ppm的“初始频率误差”(initial frequency error),然后扫描北美洲的850 MHz频率的“全球移动通信”无线信号网络。如果是在欧洲和世界其他地区,那么这个扫描的频率值则指定为900 MHz频率的“全球移动通信”无线信号网络。
在这个输出的结果中,Kalibrate软件从RTL版的SDR设备所扫描的结果中识别出三个“全球移动通信”无线通信网络,功率电平最大的是在234通道中的890.4 MHz。要在这个频率上捕获到实时的通信数据包,我们需要在本地回环lo接口上打开Wireshark软件,让该软件捕获被“回环”出来的这些实时数据包,然后再借助gsm_receive_rtl.py脚本对实时的“全球移动通信”无线通信网络数据进行捕获,并将捕获到的数据包投向本地回环lo接口。运行命令的格式如下所示:
在这个例子中,我们将采样率降低到1个“每秒百万次采样值”(MSPS),这样做的原因是可以减少对主机系统的开销,命令中,“-s le5”的作用是让RTL版的SDR设备所用的带宽与“全球移动通信”无线通信网络所用的带宽相匹配,并且都使用890.4 MHz这个中心频率。增益值可以先设为24 dB,这个值可以根据后面低功率水平信道的需要而做出调整。
gsm_receive_rtl.py脚本将调用一个“图形化用户接口”的窗口,用来显示接收到的实时信息的强度信息,如图12-6a所示,与此同时,在终端窗口中,也同时显示数据包内容和接收时产生的错误信息,如图12-6b所示。所以成功接收到的数据包马上通过UDP协议将“全球移动通信”无线通信数据包的整包作为UDP数据包中的有效载荷,通过环回接口发送出去。如前所述,所谓环回地址,主要用于TCP/IP协议的内部协议测试,发向该地址的数据,马上就得到协议的回复后,又被转发出来,而在转发出的内容,正好可以被我们预设的Wireshark软件所接收和解码。
图 12-6
在北美洲和欧洲以外的一些网络,仍然有使用“A5/0”密码算法进行“加密” [4] ,传输一些未加密的语音、数据、“手机短信服务”或“手机彩信服务”等活动信息,虽然这种现象是可能的,但是大部分的情况是上述活动信息都是通过另外的密码算法进行加密的,所以通过Wireshark软件是无法访问的,或者说是通过Wireshark软件访问到的都是加密后的数据。然而,通过“A5/1”密码算法的漏洞,同样很容易受到“密钥还原”攻击(key recovery attack),让对手利用这一漏洞,克服这一安全障碍。
虽然“A5/1”密码算法的实现细节一开始就是作为秘密进行保密的,但是还是有据可查的,我们可以参考1999年由Marc Briceno根据他对其手机所做的逆向工程分析,并在随后公开发现的该密码算法参考文档,这样,就有一种可能,那就是密码学家对协议的安全质量进行评估,而不需要受到其不允许将分析和分析结果进行公开的限制。
该参考文档的结论并不是很好。“A5/1”密码算法存在重大漏洞,并且已经存在了很长的一段时间了。其中最严重的,出现在2008年,由David Hulton和“黑客的选择”(Hacker's Choice,THC)黑客组织中一自称为“Steve”的人很礼貌地指出,这个漏洞使用“预计算参考”攻击(precomputed reference attack)的形式,可以将整个密钥全部还原。在这种攻击中,攻击者通过几个已知明文数据包计算密钥流(keystream),然后通过密钥流数据(keystream data)和已知的密钥流状态(keystream state)信息进行一一对应(mapping),然后就可以通过观察明文的方式,识别出加密密钥(encryption key),而一一对应关系,只需要通过预计算的方式,将预计算的结果保存在一张表中,在密码破解的过程中,不停地查找这个表就可以了。通过这种攻击,攻击者还原一个Ki大约需要30分钟,其中那一套预先计算的查找表共有约288万亿种可能的条目,保存的数据文件约占2TB的存储空间。
这种攻击方式通过程序实现,并且公之于众,供大家使用的是gsm-tvoid工具,不过,就在David Hulton和THC黑客组织发布gsm-tvoid工具不久,这个工具所必须的那个查询表就从网站不作任何解释地下线了。公众猜测,最大的可能是美国政府介入调查,最终干预和限制这个利用“全球移动通信”缺陷进行攻击的黑客工具,导致Kraken项目的开发受到限制。
2009年,密码学家Karsten Nohl和Sascha Kriler共同推出的针对“A5/1加密算法的破解”项目(A5/1 Cracking Project),该项目的网页地址是https://opensource.srlabs.de/projects/a51-decrypt 。Karsten Nohl和Sascha Kriler复制和优化工作以前由David Hulton和THC黑客组织所做的工作,他们一起发现了新的“密钥还原查找表”(key-recovery lookup table),并且将其发布到“点到点对等网络”(Peer-to-Peer,P2P)网络上。这样做的好处是,由于“点到点对等网络”网络是一个分布式网络,没有固定的主机结构,各个站点为服务器或客观点,因而无法将数据的源头服务端全部定位,所以可以防止文件过早地被人为脱机下线。2011年,“A5/1加密算法的破解”项目团队成员Frank Stevenson发布了Kraken程序,这是一个整合了AirProbe程序,并且可以有效捕获和解密“全球移动通信”无线网络通信数据包的实用工具,该程序同样需要使用“A5/1加密算法”的查找表。此后不久,软件开发人员Daniel Meade发布了一个叫作Pytacle的程序,这个工具可以通过AirProbe程序自动捕获“全球移动通信”无线网络上的活动。然后通过Kraken程序解密“全球移动通信”无线网络通信数据包,并且可以将解密的语音通话内容转换成文件,更值得称赞的是,这个工具可以很容易播放一个完整的,或是一个简单的,针对“全球移动通信”网络语音通话的被动攻击。
通过Pytacle工具还原A5/1加密算法的密钥
尽管Pytacle工具对于实现“A5/1密钥还原”攻击(A5/1 key recovery attack)提供了一个简单的接口,但是针对一次完整的“全球移动通信”网络语音通话内容的攻击,还真没那么简单,至少需要以下资源:
·至少有一台RTL版的SDR设备,并配合AirProbe软件一起使用,在“全球移动通信”网络上进行数据包的捕获和数据源的修改。这部分内容详见本章12.2.5节的内容。
·Kraken软件需要专门针对现代“‘GNU计划’C语言编译器”(GNU C Compiler,GCC)开发,而进行源码级的修改。
·必须有Pytacle软件和一些额外的依赖关系程序。
·针对“A5/1”的加密操作,最好是有一个ATI公司的视频加速显卡,以便对运行时攻击计算机进行优化(该项是可选项)。
·“A5/1加密算法破解的查询表”,如果放在一个临时的存储驱动器里,一个“A5/1加密算法破解的查询表”大约占1.6TB的容量。
·如果将一个完整的“A5/1加密算法破解的查询表”拆分后,写入到一个或多个“A5/1”加密算法破解的查询子表中,那么这些子表总共大约需要占3TB的硬盘容量。
“磨刀不误砍柴功”,为了发动加载并发动一次攻击来还原“A5/1”加密算法的密钥值,首先我们必须装备好我们的系统。
1.发起“A5/1”密钥还原的攻击
我们需要完成以下几个步骤来准备我们的攻击系统。其中有几个步骤是漫长的,所以需要有足够的耐心,整个过程可能需要数天到数周的时间才能完成。
下载和编译连接Kraken程序 Kraken软件由好几个组件组成,这些组件用于生成A5/1的查询表,由于运算量极大,所以需要使用显卡上的“视频加速器”(video accelerator),这些工具会使用本地CPU或ATI显卡上的视频加速器执行密钥还原攻击,并且这些工具还需要准备一个原始的磁盘用于密钥流的查找攻击。可以在Kraken的官方库https://opensource.srlabs.de/projects/a51-decrypt 下载到。然而,在过去的几年中,Kraken软件的开发已经停滞不前了,该程序也将不能在现代Linux操作系统上使用最新版本的“‘GNU计划’C语言编译器”(GNU C Compiler,GCC)进行编译了。作为一种替代方案,我们可以手工从官方库下载补丁代码,你可以从GitHub中下载Kraken作者本人亲自修改的一个分支版本(fork),其命令格式及效果如下所示:
源代码下载之后,我们就可以切换到Kraken的目录中,通过编译连接后创建这个软件。该软件通常更希望在本地的硬件系统中,有一个带有“图形处理单元”(GPU)处理功能的ATI显卡,可以在离线的状态下进行工作的能力。因为这不是一个“全球移动通信”网络数据包破解的必要要求,我们也可以换成不用“图形处理单元”处理功能的noati软件来创建该软件,如下所示:
下载“A5/1加密算法破解的查询表” “A5/1加密算法破解的查询表”在网上发布的可用版本是基于“点到点对等网络”(P2P)网络的,所以可以用BitTorrent软件下载。即使你有一个快速的互联网连接,下载一个完整的“A5/1加密算法破解的查询表”可能也需要几个星期才能完成,甚至可能需要几个月的时间也不是不可能的,因为“点到点对等网络”网络中的数据传输,取决于拥有并发布“A5/1加密算法破解的查询表”的“点到点对等网络”网络其他对等点的网速。BitTorrent软件的下载,需要有“种子”(seed)的支持,在网站https://opensource.srlabs.de/projects/a51-decrypt/files 上,提供了40个可用的“A5/1加密算法破解的查询表”BitTorrent下载种子。由于一个完整的“A5/1加密算法破解的查询表”文件大约占1.6TB的容量,所以被等量拆分后,每一个文件大约是42GB的大小。通过一个类似命令行为ctorrent的BitTorrent工具就可以下载“A5/1加密算法破解的查询表”了,该程序可以从网站http://www.rahul.net/dholmes/ctorrent 上下载得到。另外,如果你在不久的将来参加一个黑客大会,你可以考虑使用邮件列表来寻找另外的与会者,然后大家可以在大会期间,通过相互之间的拷贝,最终使每个人都有一个本地的拷贝。
注意
对于一个1.6TB的文件,即使是本地的对拷,也要花很长的时间才能完成。假设对一个标准的硬盘的随机访问来说,一般的本地文件对拷速度是40M每秒,那么即使以这样的速度由本地硬盘的一个地方拷贝到本地硬盘的另一个地方,也需要12个小时才能完成。
下面,为了说明方便,我们假设上面下载的“A5/1加密算法破解的查询表”文件,保存在硬盘的“/media/a51”目录中。
准备A5/1查询的驱动程序 “A5/1加密算法破解的查询表”并不能直接用于破解的工作。相反,文件被写入到“原始”(raw)的磁盘设备中,也就是说例如,文件被入写到一个没有文件系统的磁盘设备中。之所以要这样做,是为了加快查找操作和索引搜索的速度 [5] 。要将“A5/1加密算法破解的查询表”内容直接写入到查询磁盘中,我们需要使用Behemoth脚本来完成。
Behemoth脚本本身就是Kraken软件的一部分,所以该脚本就位于Kraken软件安装目录中的索引目录中。Behemoth脚本在运行的时候,会先读取一个当前目录下的配置文件,其文件名叫作tables.conf,该配置文件中有磁盘的配置情况,以及哪一个文件保存在哪一个序号的磁盘上,有一个可以作为样例的配置文件,文件名叫作tables.conf.sample,这个文件可以复制成所需要的配置文件tables.conf,然后在必要的时候再编辑修改这个文件,完成配置。
首先,我们要确定磁盘设备的名称,这里的磁盘设备的名称就是连接到这台主机上可以进行加载和卸载的设备名称。Kraken程序中的fdisk工具可以查找有哪些磁盘设备是可以使用的。
在这个输出中,有三个磁盘与本系统有关。上面第一个磁盘“/dev/sda”是用于Linux操作系统使用的,所以不能用于Kraken程序。第二个磁盘“/dev/sdb”包含了Kraken程序所用的原始表,该表中通过BitTorrent程序下载的。第三个磁盘“/dev/sdc”将用于查找磁盘,用于将来Kraken程序保存还原密钥的搜索工作。
提示
固态硬盘驱动器(solid-state drive)是相对于传统的随机访问硬盘驱动器而言的,这将大大加快Kraken密钥查找攻击的速度。
因为只能有一个磁盘用于查找搜索,所以我们指定“/dev/sdc”作为查找磁盘目标。你应该考虑一下如何确保磁盘的配置最适合你的需求,是否有可能使用多个磁盘。一个完整的配置文件tables.conf的配置样例如下所示:
注意
我们必须要非常小心的是tables.conf文件中指定的“设备路径”。因为在操作系统重新启动、USB设备拨了重插时,该磁盘所对应的设备名称有可能改变,所以务必要确保上述三个磁盘设备在tables.conf文件中配置的正确性。要知道哪个磁盘用于保存数据,哪个磁盘用于保存结果。
接下来,我们运行Behemoth.py脚本,并在脚本的命令行中指定“A5/1加密算法破解的查询表”所保存的“原始”磁盘位置,在这里,假设这个磁盘位置是在“/media/a51”目录中。Behemoth脚本会在当前目录下,为每一个“A5/1加密算法破解的查询表”的分表创建一个索引,然后将每一个“A5/1加密算法破解的查询表”的分表的内容,以原始的格式,按tables.conf表中的要求直接写入到磁盘的指定扇区中。在进行这个操作的时候,请务必小心,因为如果tables.conf文件中目标磁盘配置的不正确,那么,Behemoth脚本在运行时会直接覆盖文件中所指定的那个磁盘驱动器上的所有数据,并且这种覆盖,是无法还原的。
Behemoth.py脚本将花上好几个小时,完成这个大工作量的操作,具体所耗费的时间取决于磁盘的读写速度。程序运行结束后,我们就有一个包含大量索引文件的目录结构。该结构相似的例子,如下所示。
安装gsmframecoder程序 gsmframecoder工具是由Johann Betz编写的,主要由Pytacle程序所用,对“全球移动通信”网络数据包中的内容进行破解的。这些数据包在传输过程中都是加密的,但明文的内容很容易知道,这就让我们可以从“A5/1”加密算法中还原密钥流的数据。我们下载源程序,解压缩数据包,编译连接和创建,最终生成可执行文件,然后就可以安装gsmframecoder工具了,上述几个步骤的操作如下所示:
安装“全球移动通信”编码器 在“全球移动通信”协议中,使用了“全球移动通信”GSM 06.10版本的“长时预测规则码激励”(Regular-Pulse Excitation Long-Term Predictor,RPE-LTP)算法,该算法用于语音传送的编码算法。一个开源代码的编程软件,可以实现将“全球移动通信”GSM 06.10版本的“长时预测规则码激励”算法编码的语音转换成wav格式。该程序由Jutta Degener和Carsten Bormann共同编写而成,源程序可以通过http://www.quut.com/gsm 网站进行下载,程序的名字叫作toast。该工具包括在“全球移动通信编码”项目中,同时,该程序也需要由Pytacle程序先完成对数据包中语音内容的解压和解密工作。此外,由于网站上提供的是源程序,所以我们需要下载源程序、解压缩程序包,编译连接和创建,最后安装这个新重要的编码器,其步骤实例如下所示:
安装RTL版的“软件无线收发”设备文件格式转换器 AirProbe软件并没有人积极地进行维护,并且软件本身存在一些bug,这两个弱点,使得Pytacle软件的使用变得很不方便,特别是当“GNU计划”中的无线架构发生了改变以后,这一现象更加突出。有一个重要的需要说明的问题是,gsm_receive_rtl.py脚本所保存的信号捕获文件,在格式上无法向Pytacle程序提供必要的几项内容,而这几项内容恰恰Pytacle程序用于密钥还原和数据解压所用。比如,gsm_receive_rtl.py程序的“-o”参数,会触发一个bug,最终导致程序只写入零字节的文件。
然而,如果使用rtl_sdr工具所捕获的数据包,并生成信号捕获文件,然后再通过一个rtlsdr-to-gqrx工具的转换,最后生成文件的格式就可以由Pytacle软件所使用。这个转换作为工具的rtlsdr-to-gqrx程序,是由Paul Brewer编写,下载网址是https://gist.github.com/DrPaulBrewer 。我们可以下载这个简单的工具,同样,由于是开源的程序,所以也还是上面的编译、安装这套流程,其步骤显示如下。
安装Pytacle工具 下一步,我们下载和解压缩Pytacle工具程序包:
Pytacle程序需要配置好几个该程序所要使用的工具的路径。这是该软件实施攻击的一个重要部分。单击程序的“属性”按钮,然后对于图12-7中显示的每一个工具都需要配置一个完整的路径信息,其格式类似于下面的例子。
一旦Pytacle程序配置好了以后,保存这些文件名的路径偏好,这样就不用在以后每次使用的时候都重新录入这些信息。随后,我们退出Pytacle程序。至此,我们基本上已在我们的系统上,完成了基于“A5/1”加密算法的“‘全球移动通信’密钥还原攻击”的准备工作。
2.执行基于“A5/1”加密算法的密钥还原攻击
在准备好上述所有的工具之后,我们现在可以发起一次针对基于“A5/1”加密算法的密钥还原的攻击。首先,我们打开RTL版的SDR设备,找到“全球移动通信”无线网络的频率,然后开始捕获无线信号信息,如图12-8所示。请注意,rtl_sdr工具并不显示任何解码的输出,所以最好是在开始时先使用gsm_receive_rtl.py脚本进行捕获数据包的工作,以确保你在切换到rtl_sdr工具之前能捕获到“全球移动通信”无线网络的数据包,并生成捕获文件。
图12-7 配置所使用工具的路径
图12-8 开始捕获无线信号信息
注意
记住,在美国和其他许多国家,拦截蜂窝网络的活动是非法的。这里提供的信息仅供参考,所以你只要认识到可以发动什么样的攻击应该就足够了;你不应该是在实践中的应用这些技术。
提示
通过“Kalibrate kal”工具识别目标“全球移动通信”无线网络的频率,有关这部分内容,在12.2.5节中已介绍过了。
在捕获一段时间以后,我们就通过按Ctrl+C组合键停止rtl_sdr程序的运行。下一步,我们使用rtlsdr-to-gqrx工具,将gsm.bin文件转换成Pytacle所支持的格式,其命令格式如下所示:
注意
运行成功以后rtlsdr-to-gqrx工具并没有产生任何信息,只是简单地返回到命令提示符下。通常情况下,输出文件的大小一般正常是输入文件大小的四倍。
下一步,我们运行Kraken服务器开始处理由Pytacle文件在9666端口上通过TCP协议传送的索引文件。这一处理过程将使用我们的操作系统的大约1.6GB内存空间:
提示
对于“全球移动通信”的捕获和Pytacle攻击系统这两个进程来说,Kraken服务器进程可以运行在与二者不同的主机上。这时,你只需要在Pytacle属性中将“Kraken服务器的IP地址”由回环地址“127.0.0.1”改到Kraken服务器所在主机的IP地址即可。
下一步,我们开始运行Pytacle程序,命令格式如下。
不要使用Pytacle程序内置的数据包捕获功能,如前所述,通过这个功能生成的捕获数据文件在经过AirProbe的gsm_receive_rtl.py脚本转换时,由于Pytacle文件的一个bug,最终会导致转换后的文件无法用于随后的攻击之中。取而代之的方法,就是我们可以手动在“破解”对话框(Crack)中,将rtlsdr-to-gqrx工具作为一个输入文件(infile)输出给一个指定的cfile文件,我们单击“破解”按钮,就可以开始这个破解过程了。
如果你的“全球移动通信”捕获文件中,没有包含加密的“全球移动通信”的活动,那么Pytacle工具将会迅速报告“没有立即分配,对不起!”(No Immediate Assignment found,sorry!),否则,Pytacle程序将会解码和解析“全球移动通信”分组数据,尝试使用gsmframecoder工具还原密钥流数据,然后发送密钥流的内容到Kraken服务器进行分析。
当Kraken服务器接收到密钥流数据,Kraken服务器将用原始的“A5/1加密算法破解的查询表”信息,在磁盘资源中搜索相关的密钥信息。如果发现Kraken服务器将会向Pytacle程序返回密钥信息,这就给了我们解密和解压数据包中包含的语音信息,或者是“手机短信服务”信息、“手机彩信服务”信息,如图12-9所示。
图12-9 返回密钥信息得到的信息
对“A5/1”密钥还原的攻击的防御技术
通过Kraken程序和Pytacle程序对“A5/1”加密算法的密钥进行还原,这是一个复杂的过程。从攻击者的角度来看,这个密钥还原过程是有利的,因为该过程允许捕获“全球移动通信”的活动,还原Kc密钥,被动地解密该活动,排除通过异常分析工具进行侦测的任何机会。
从防守的角度看,要避免使用“全球移动通信”网络。现代的3G和4G“长期演进技术”网络中,没有“A5/1密钥还原攻击”所需要的漏洞可供使用,所以选择它们对于用户来说,是一个更安全的选项。然而,“全球移动通信”网络仍然是最广泛的移动通信世界的形式,在未来很可能会继续使用多年。
对于攻击“全球移动通信”网络,除了“A5/1密钥还原攻击”方式之外,还有一种替代的攻击方式,那就是攻击者可以利用“全球移动通信”网络的第二个重要缺陷,进而攻击通话的语音,以及“手机短信服务”信息和“手机彩信服务”的内容,这种缺陷就是通信双方缺乏相互认证。
“全球移动通信”网络在认证的过程中识别无线移动设备,是通过验证该设备的“国际移动用户标识符”(IMSI)、所对应的Ki ,以及计算出的“签名的响应”(SRES)是否正确来实现的。尽管这样一种算法提供了一种机制,这种机制可以让“全球移动通信”网络“无线网络服务提供商”保护自己免受未经授权使用上的攻击。但是这种机制对于客户端设备来说,并不对一个网络进行身份的验证。
这个漏洞对于攻击者来说,代表着一种机会,那就是一个攻击者可以冒充合法的“全球移动通信”网络,然后通过使用一个叫作“国际移动用户标识符捕获器”的设备对用户的“国际移动用户标识符”进行收集。此外,仿照合法的提供商在“全球移动通信”网络上所提供的服务,攻击者也可以在这个假的“全球移动通信网络”上提供一些类似的网络服务,使得用户很难意识到他们现在正在连接到一个骗子网络上。如果被骗连接的无线移动设备主机使用这个冒名顶替的网络发送和接收“手机短信服务”信息或“手机彩信服务”、拨打电话,以及发送或接收数据信息的时候,那么这些动作所产生的数据包,连同“国际移动用户标识符”信息将一同发送给攻击者的所设计的陷阱网络中,这相当于给了攻击者一个窃听攻击的机会。
虽然2.5G的“全球移动通信”网络可以提供相互的认证,但这个功能并没有被广泛采用,直到3G“全球移动通信”网络,这种情况才得到改观。其中,对传统的“全球移动通信”网络设备升级的成本,是这些网络不愿意升级到2.5G“全球移动通信”网络的一个最常被提到的可能因素。
在美国,有几个可用的设备可以在公开场合下使用。这些设备具有像合法的“全球移动通信”网络接入设备一样,接收和发送2G“全球移动通信”网络上的通信能力。正如前面提到的,在一个认证的频率上发送无线信号,在美国是非法的。所以对于这里介绍的步骤,读者应该谨慎使用,特别是要避免干扰已认证的“全球移动通信”网络和用户的正常活动。
通过YateBTS实现国际移动用户标识符捕获器
要创建一个可以在2G“全球移动通信”网络上使用的“国际移动用户标识符”捕获器,我们需要通过软件和硬件组合起来,使其能够完成一个“基站子系统”(Base Station Subsystem,BSS)和“网络交换系统”(Network Switching System,NSS)组件所要完成的任务。
有多个设备需要组合安装,才能使其可以正常地运行在2G“全球移动通信”网络上,Range(中文名“兰奇”)网络公司,作为一个OpenBTS项目的开发者,销售这样的硬件套件,这些硬件套件可以作为一个2G“全球移动通信”网络运行,进而实现一个“国际移动用户标识符”信息的捕获器的作用。该设备在网络地址是http://www.rangenetworks.com/products/professional-development-kit ,这个专业的开发套件售价为2300美元,所提供硬件设备型号有GSM850、GSM900、DCS1800和PCS1900几款 [6] 。OpenBTS软件开发包最初是由Harvind Samra、David A Burgess和Glenn Edens共同开发的。该软件开发包兼容了很多“全球移动通信”网络常用的服务的工具集,比如语音通话、“手机短信服务”收发,以及“通用分组无线服务”(General Packet Radio Service,GPRS),基本上可以完成“全球移动通信”网络上的各种数据通信功能。
在其网站http://www.openbts.org 上,OpenBTS项目明确的对象,是创建一个“使用‘软件无线收发’设备向用户的设备提供一个标准的‘第三代移动通信合作伙伴计划’(3GPP)规范无线接口的Linux应用程序。”,也就是说,OpenBTS项目的目的,并不要创造一个“国际移动用户标识符”的捕获器设备;相反,OpenBTS项目的目的是“扩大覆盖面,向没有‘全球移动通信’网络服务的用户提供服务;为‘全球移动通信’网络服务表示出‘缺医少药’的市场区域,推出一个创新平台;面对新兴网络技术,提供全面的技术支持。”这部分内容可以参阅网址http://openbts.org/about 上的介绍。
“全球移动通信”网络服务中的“基站子系统”和“网络交换系统”在OpenBTS项目中,除了使用‘软件无线收发’设备之外,还可以使用其他硬件作为候选。包括Fairwaves UmTRX设备;Ettus研究设备,该设备的各系列中,有B100、B200、B210、E100、E110(提供了有限的支持)、N200、N210、USRP2等设备;Nuand bladeRF设备。其中Nuand bladeRF设备的x115型号,零售价为650美元,x40型号,零售价为420美元,二者都可以在http://nuand.org 网站上查到详细的资料说明。其中的Ettus研究设备中,B200型号的售价是675美元,这很显然是各个低成本设备中另一个不错的选择,该设备的详细资料可见http://www.ettus.com 。
2014年1月,OpenBTS项目中的两个早期开发人员发布了OpenBTS项目中一个名叫YateBTS [7] 软件的分支版本(forked version)。有关YateBTS软件的详细介绍,可以参见网址http://www.yatebts.com 。YateBTS软件包含了OpenBTS中大量的源代码,但该程序裁剪掉许多通信组件,而这些通信组件很显然提供的是一些模块化的通信能力,所以从该软件整体上来看,软件在通信方面的灵活性有所削弱。
在下面的攻击中,我们试着探索一个可行的步骤,那就是通过YateBTS软件创建一个Nuand bladeRF x115型号的“国际移动用户标识符”捕获器(IMSI catcher)设备,该设备的实物图如图12-10所示。对于下面的步骤,其实选择其他硬件设备也可以,但是有可能会有稍微不同的配置步骤。另外,我们还需要经常参考YateBTS和Nuand网站上最新的资源作为配置说明。
图12-10 x115型号国际移动用户标识符捕获器的实物图
目标系统是运行在Ubuntu操作系统的14.04版本上的,这个现代系统使用了USB 3.0的接口,这是bladeRF软件运行功能时所需要的配置。首先,我们把Ubuntu版的“个人软件包”(Personal Package Archive,PPA)增加到“稍有自由”(universe)和“非自由”(universe)版 [8] 档案中。在这个例子中,我们在Ubuntu操作系统14.04版本(该版又名“可靠”trusty)上添加库文件用于发布版中。你应该针对你的使用平台,指定Ubuntu操作系统的适当版本:
接下来,我们将“个人软件包”添加到“个人软件包”的bladeRF项目中,然后更新其软件包的列表:
然后,我们需要安装bladeRF软件所需要的数据包的依赖库。
随着bladeRF数据包的安装完毕,我们就可以将bladeRF设备连接到USB 3.0的接口上,然后通过bladeRF-cli命令行工具,通过与设备之间的交换操作,配置确认了系统的功能。下面的例子允许我们通过查询bladeRF设备验证各个操作功能,以及收集有关硬件的基本信息:
下一步,我们将安装“还是一个电话引擎”(Yet Another Telephony Engine,YATE)软件。因为“还是一个电话引擎”近期正在积极发展,有时系统无法提供完整的发布版,所以我们不得不手动下载源文件,然后编译连接后创建该程序。我们使用这些“传统套路”步骤下载“还是一个电话引擎”程序的源程序,然后配置、创建,在生成可执行文件以后,就可以安装在我们的系统上:
接下来,我们仍然采用上面的“传统套路”,重复这些步骤将YateBTS软件也安装到我们的系统上。在配置脚本的输出中,要确保你所看到的输出文件,在bladeRF程序中,可以在系统中找到并明确表示,该程序是运行这一输出格式的。这句话类似于“检查一下,要确保bladeRF程序是支持‘pkg-config...0.16.2-2014.09-rc2-1-ppatrusty’这个文件的”:
“还是一个电话引擎”的正常使用,需要依靠一些提供了系统功能的“非自由”(universe)版的配置文件的支持。这些“非自由”版的软件都保存在/usr/local/etc/yate目录中,主要有subscribers.conf、ybts.conf和javascript.conf。首先,我们打开subscribers.conf文件,然后找到“;regexp=” [9] 这一行,将其修改为用于读取功能的“regexp=.*”。这种变化,可以让任何移动设备连接到网络。我们保存并关闭这个配置文件。
接下来,我们打开ybts.conf文件,找到“Radio.Band=”这一行,将其修改为“Radio.Band=900”,这样做的目的就是配置新的无线频率,将其修改为欧洲的“全球移动通信”网络波段。在北美洲,这就允许我们使用美国北部的工业(Industrial)、科学(Scientific)或医疗(Medical),或三者一起(合称ISM)的公共波段来操作一个“全球移动通信”基站。我们改变“Radio.C0=”这一行的内容,将其修改为“Radio.C0=50”,这样就可以接收到“绝对无线频率信道号”(Absolute Radio Frequency Channel Number,ARFCN)。在无线收发这个部分,我们修改“;Path=./transceiver”这一行为“Path=./transceiver-bladerf”。这一变化是运用正确的可执行文件,使其在mbts的进程中为YateBTS提供支持。最后,保存并关闭这个配置文件。
然后,我们打开javascript.conf文件,并在一个文件中增加一个路由(routing)项和“一个盒子中的网络” [10] (Network in a Box,NIB)项这两行,增加的位置及效果如下所示。
添加和修改这些行的内容以后,我们保存并关闭该配置文件。
接下来,我们为“还是一个电话引擎”程序创建一个日志目录:
最后,我们添加/usr/local/lib目录到systemwide库的“搜索路径”(search path)中,其命令的格式如下所示:
我们开始“还是一个电话引擎”程序的执行,当程序成功运行以后,就可以创建一个“全球移动通信”通信基站。
然后,我们检查日志文件的内容,识别和纠正一下系统上的任何配置错误。如果“还是一个电话引擎”程序开始运行的时候没有错误,那么该程序就会调用第二个进程,该进程名叫“mbts”进程,我们要确保这两个进行都在顺利运行着。该步骤如下所示:
一旦有了“还是一个电话引擎”程序的运行实例,我们就俨然成为一台“全球移动通信”通信基站(当然,这是我们冒充的),随后,只要有某个无线移动设备连接到这个冒充的网络上,我们就可以查询这台被攻击设备的“国际移动用户标识符”信息的值了。其步骤和实例效果如下所示:
如果“手机短信服务”的发送是通过一个设备连接到我们的“还是一个电话引擎”程序运行实例上的话,那么“还是一个电话引擎”程序就会捕获和存储这些数据包到文件中,以备后面的检验。要从“还是一个电话引擎”程序中获得“手机短信服务”的信息,我们需要通过nc程序连接到设备的管理端口上,然后发出一个“手机短信服务”列表的查询功能。
短信文本内容本身是否可以使用,可以通过JavaScript程序进行验证,在nib.js文件中有一个实例。在这段JavaScript脚本中,msg.execute这个脚本的参数中包含的文本内容,正是我发送的文本内容。要完成侦听的访问,就需要处理“手机短信服务”消息的内容,使之可以为“还是一个电话引擎”程序的实例所用。
到目前为止,我们所看到的技术,仍然聚焦于“全球移动通信”无线通信网络。在美国,由于法律规定,禁止针对蜂窝网络进行监控,所以针对“码分多址访问”侦听方面的攻击技术少之又少。然而,少并不代表没有,我们还是完全有可能利用“全球移动通信”和“码分多址访问”网络,利用无论是2G无线网络和3G无线网络的架构,借助于再利用的认证设备,找到一个遍及大量家庭和商业企业的新式网络,那就是:“家庭基站”。
[1] 这里的“创建”特指的是通过一些编程语言的编辑、编译、连接等程序一次性完成某个源代码到可执行文件的转换过程。上面的这一系列动作的一次性操作,就是“创建”(build)或者“重新创建”(rebuild)。——译者注
[2] “浑沌计算机俱乐部”,又称“欧洲黑客联盟”,是一家德国的黑客组织。是1984年,由当时32岁的程序员Wau Holland在Hamburg(汉堡市)成立。——译者注
[3] 在TCP/IP协议中规定,IP地址为127开始的IP地址都是环回地址,其目的主要用于协议测试。凡是发往这个地址的数据,都会按协议规定进行返回(注意不是原样返回)。比如,即使你在不连网的前提下,ping 127.x.y.x的IP,协议在处理以后都会返回相对应的网络操作成功的消息。不过,更为大家所知的环回IP地址是127.0.0.1,但实际上127.x.y.z的地址全部都是。本处采用这个地址一个程序发,一个程序收的原因是这样速度快,节省资源,尤其是数据量很大的时候。如果要采用正常的socket一个发一个收,则会因为数据要经过TCP/IP的各层解析才能转发回来,效率低,并且有丢包、拥堵等出错可能。——译者注
[4] “A5/0”是将“不加密”的版本作为它加密算法系列中的一个版本。——译者注
[5] 磁盘都是由扇区(sector)组成的,为了便于查找,所以一套文件系统需要有文件索引扇区和数据扇区,查找一个文件的时候,通常是先到索引扇区中找到索引,然后才能到数据扇区中查找数据,对于一个频繁使用的系统来说,系统在存文件的时候,会优先使用未用过的扇区,这样对于一个超大的文件来说,会分散保存在很多不连续的扇区中,这样在读取的时候,硬盘磁盘需要不停地寻道,因而效率很低。如果明知某一个超大文件将几乎占满一个硬盘,那么避开文件系统,直接对扇区进行读写,有三大好处:一是不要索引,从而省略了索引检索的时间;二是索引区也可以用来保存文件,增大存储容量;三是在保存的时候,直接将数据保存在连续的扇区中,从而大大加快读取速度。唯一的缺点就是这需要有高超的底层程序编写能力。——译者注
[6] 每个型号名中的数字,可能是所能侦测的频率。──译者注
[7] 在本处的名称中,后缀BTS,指的就是前面提到的“基站收发信台”,所以OpenBTS很显然是与“基站收发信台”相关的一个项目,而YateBTS又是与“还是一个电话引擎”和“基站收发信台”同时相关的软件产品。——译者注
[8] 这是按软件的自由度来划分的,一个软件可以分为“完全自由”(自由)、“稍限自由”(restricted)、“稍有自由”(universe)和“非自由”(universe)四个等级。“稍有自由”版是官方不提供支持与补丁,全靠社区支持;“非自由”版是官方完全不提供支持和补丁。——译者注
[9] 注意行首有半角分号(“;”)和无半角分号的区别,一般来说,有半角分号表示这一行是注释,是没有作用的。无半角分号则表示这是一个有效的配置项的行。——译者注
[10] “一个盒子中的网络”指的是一个网络上的所有设备,连同网络交换设备,一起都制作在一个设备外壳中。这里既指网络成员小而少,也指这种网络形式很紧凑。——译者注