解析Skype采用的反跟踪技术
2012-08-15吕方兴
吕方兴
(菏泽学院计算机与信息工程系 山东 菏泽 274015)
由于Skype采用了一套加密的私有协议,到目前为止,还没有研究机构或个人能够完全理解其运行的全部细节。可以说Skype是目前众多的P2P软件中,对安全考虑得最全面的系统之一。虽然也有一些Skype的漏洞被公布,但是总体而言,攻击者还无法针对Skype软件进行有效的攻击,甚至连运行商也无法非常准确地识别出Internet网络中的Skype流量。如果Skype真的能够被证明是安全的,这无疑将为P2P网络安全技术的发展带来一片新天地。
1 Skype所面临的安全威胁
Skype的安全从以下几个方面分析是复杂的:①Skype通话的安全取决于多个因素,包括了运行Skype的计算机的安全,以及通过Skype语音流的网络的安全;②因为Skype协议是专有的和秘密的,所以可以获取的唯一信息来源只有该公司对其的安全陈述以及对该软件的反汇编技术;③因为Skype采用了P2P架构,Skype通话的安全可能被网络中的第三方所影响;④因为Skype程序在运行时能够不断地更新自己,Skype系统的安全可能在未收到任何提示的情况下动态更新。
安全不是一个可以被独立加以分析的抽象标准。所以,评估Skype的安全必须从考虑特定的安全威胁入手,然后确定Skype的设计和操作是否能避免这些安全威胁。
针对Skype安全问题主要来自于对Skype客户端的威胁。
1.1 文件传输劫持
为了截取文件,攻击者需要有访问进行文件传输的一方或双方主机的权限。因为文件传输采用了链路加密的技术,所以即使在线截获了文件传输的数据包,也不一定能够破译。尽管如此,攻击者仍然可以窃取最终存储在本地硬盘的传输文件。
1.2 即时消息劫持
为了截取即时消息,攻击者同样需要有访问进行文件传输的一方或双方主机的权限,或者其他能够获取Skype应用程序客户端界面的方式,因为如果能够远程查看和控制Skype应用程序客户端界面,在某种意义上说就相当于劫持了即时消息。和文件传输一样,即时消息在传输的时候不大可能被劫持。但是如果即时消息被显示在桌面或存储在历史即时消息存放目录,那么攻击者就可以实现即时消息的劫持了。安装在靶机的抓取屏幕和键盘记录软件可以被用来完成这一功能,从而使得Skype的即时消息功能的安全性能大打折扣。
1.3 语音窃听
窃听语音比劫持文件和即时消息更为复杂。语音的实时加密技术往往使得攻击者无功而返。但是,通过分析,Skype系统可能对加密密钥做3种处理:①它可能在语音信道中传输加密密钥;②它可能采用其他的密钥来加密这个密钥,然后传输;③它可能存储这一密钥到用户的硬盘空间中。基于以上分析,攻击者或许可以通过一些反向工程技术获悉Skype软件采用的加密算法、整个加密流程乃至加密密钥,然后在这个基础上对劫持的加密语音信息进行攻击。
2 Skype所采用的反跟踪技术
为了防止恶意攻击者采用反向工程的方法对软件进行破解,Skype采用了许多反跟踪技术,所以当使用编译器进行跟踪时,程序总会抛出一系列异常。如果要对其进行反向工程的研究,必须首先研究Skype采用了哪些反跟踪技术,找出有效的解决办法,才能深入到对该软件内部的语音流加密机制的处理分析。Skype可能采取的反跟踪技术主要有以下几种。
2.1 检测跟踪法
当解密者利用各种跟踪调试软件对加密系统分析执行时,势必会造成许多与正常执行加密系统不一致的地方,如运行环境、中断入口和时间差异等。这种方法是在反跟踪技术中对不一致的地方采取一定的措施,可以起到保护加密系统的目的。
Skype中就采用了检测跟踪法,在程序启动时,多次对程序的运行环境进行判断,如果计算机中安装了类似SoftICE一类的反编译软件,则Skype就不会运行。
2.2 抑制跟踪中断
Debug的T和G命令分别要运行系统的单步中断和断点中断服务程序,在系统向量表中这两个中断的中断向量分别为1和3,中断服务程序的入口地址分别存放在0000∶0004和0000∶000C起始的4Byte中。因此,当这些单元的内容被修改后,T和G命令将无法正常执行。
在对Skype的反汇编中,可以在程序中下断点进行调试,但是程序抛出异常后,查看其异常链时,发现无法下断点,所以不排除程序中部分使用抑制跟踪中断。
2.3 对程序分块加密执行
为了防止加密程序被反汇编,加密程序最好以分块的密文形式装入内存,在执行时由上一块加密程序对其进行译码,而且在某一块执行结束后必须立即对它进行清除,这样在任何时刻内不可能从内存中得到完整的解密程序代码。这种方法除了能防止反汇编外还可以使解密者无法设置断点,从而从一个侧面来防止动态跟踪。
Skype中使用了该方法。在对其跟踪中发现,程序初始时,首先要对其中部分代码进行解密替换工作。要想下断点,必须首先搞清楚程序对代码替换的起始位置,否则只能单步调试。除此之外,还有一段隐代码,即把一段代码隐藏到了数据段中,如果使用静态反汇编就很难发现。而这段代码又是非常重要的一部分,它对后面的执行产生了较大影响。
2.4 程序自生成技术
程序的自生成是指在程序的运行过程中,利用上面的程序来生成将要执行的指令代码,并在程序中设置各种反跟踪措施的技术。这样可以使得反汇编的指令并非是将要执行的指令代码,同时还可以隐蔽关键指令代码,但由于实现代价较高,一般只对某些关键指令适用。
这种方法在Skype中也被使用。在跟踪中能看到,在运行过程中,前一段指令执行后,会自动更改替换后续的指令。但这种行为是否是因为程序发现被跟踪而导致的,目前尚不清楚。
2.5 迷惑技术
为了迷惑和拖垮解密者,可以在加密系统中多设置专门针对解密者的“陷阱”,这样可以消耗解密者的时间和精力,消磨解密者的斗志和毅力。
设置大循环:在加密程序中设置多重循环,并使上一层循环启动下一层循环,下一层循环启动下下一层循环,如此循环,而且还可以频繁地调用子程序,还要保证不能有一层循环被遗漏不执行。
废指令法:在加密程序中设置适当的无用程序段,而且在这其中设置如大循环等程序,这种方法在反跟踪技术中被称为废指令法。要实现废指令法有三点要保证:①废指令要精心组织安排,不要让解密者识破机关,这是废指令法的基本点,因为它的目的是诱导解密者去研究破解自身,并在破解过程中拖垮解密者,所以废指令法本身的伪装十分重要;②废指令应大量选用用户生疏的指令或DOS内部功能的调用,以最大程度地消耗解密者的精力和破译时间;③要确保废指令段不能被逾越,这是废指令法要注意的重要问题,因为它如果能被轻易逾越,那么就说明加密系统所采取的废指令法是失败的反跟踪技术。
2.6 利用 SEH 链
在对Skype的跟踪中,发现程序总是抛出异常中止运行,但对SEH链下断点却无法拦截,这样就很有可能是程序进行了一些异常处理。
除此之外,还有很多程序反跟踪技术,如设置堆栈指针法、对程序段校验法、指令流队列发、封锁键盘输入以及设置显示器的显示性能等。这些技术在分析的过程中暂时未发现,但是不排除Skype采用的可能性。
3 总结
虽然在理论上,采用反向工程的思路具有较大的可行性,但是由于Skype在反跟踪方面做了较多有效的处理,使得对其进行反向工程的工作量比较大,需要花费较多的时间与精力。
[1]屈丹.VoIP 语音处理与识别[M].国防工业出版社,2010,05.
[2]李祥军,周智,魏冰.黑客大曝光:VoIP 安全机密与解决方案[M].电子工业出版社,2010,10.
[3]张春红.P2P 技术全面解析[M].人民邮电出版社,2010,05.
[4]张文,赵子铭.P2P网络技术原理与C++开发案例[M].人民邮电出版社,2008,08.