最近《世界新闻报》因深陷“窃听门”而被迫关闭,一幕幕窃听丑闻被公之于众,并引一系列不良连锁反应,各国政界名流、影视明星等纷纷自危。所谓“窃听门”就是雇佣私人侦探、用窃听电话的非法手段获取内幕新闻。现在公众们质疑手机安全的呼声越来越大。无独有偶的是苹果手机利用后台隐蔽程序后台收集数据 用户行踪轻易易被泄露, Alasdair Allan和Pete Warden两名程序员发现,其操作系统里有个Consolidated.db是一个缓存文件,其中保存了用户行踪的信息,而且在处理这些数据时,苹果也并未采用任何加密措施,也就是说能轻易被其他人截获。
实际上这种潜伏在手机中的卧底软件我们叫它Rootkit,它是最早来源于计算机系统。在1994年2月的一篇安全咨询报告中首先使用了Rootkit这个名词。这种程序的出现立刻引起计算机安全人员的注意,无论是做恶意行为的攻击者,还是进行安全监视的维护人员,这种能够“隐身”运行的程序都是一个非常好的解决办法。由于Rootkit使用了多种复合技术,使其不被传统安全软件检测出,相比于桌面操作系统平台,移动手机平台上的安全软件严重匮乏,加上垃圾短信和浏览有安全隐患的网站致使手机会频繁“中招”, 对监听者而言现在的智能手机是极佳的目标。它既能打电话又能访问互联网络。这样恶意软件编写者就更加注视对智能手机的攻击,也正是由于Rootkit程序可以成功地将自己隐藏于系统之中,为此,它必须与运行的操作系统紧密相连,利用一些十分底层的核心技术来实现“隐身”。利用这些技术的时候,往往需要程序运行时具有系统最高权限,这样Rootkit程序就具有了最高权限。
一、Rootkit的危害
对于任何的手机病毒程序来说,它首先需要成功地将自己存储在被感染的手机存储器上,也就是手机自带的内存或者存储卡。如果被感染的目标手机系统上安装有杀毒软件或者安全软件,这些软件往往会带有对手机文件系统监视的功能。当手机上的存储器中的文件数目发生变化的时候,这些软件就会马上发现这种变化,进和VJ自己到被感染手机的存储器上时,杀毒软件或者安全软件发现此时的手机文件系统正在创建一个新的文件,它们就会马上启动扫描程序,扫描程序开始检查这个新的文件是不是一个病毒程序,如果是,那么病毒刚刚复制完毕自己到手机上时,它就会被杀毒软件或者安全软件删除了,根本不可能得到运行的机会。
然而,杀毒软件以及安全软件的这种文件系统监视功能,在一般情况下,会存在一个时间差。手机系统公布出来的一些系统函数或者方法由于一定的经济利益以及安全限制,并没有将系统底层的核心技术公布出来,当杀毒软件以及安全软件的开发者采用这些“不完整”的系统函数或者方法开发软件的时候,这些被开发出来的功能很可能就不够反应迅速,存在一定的弊端。例如对于Symbian系统使用的一些文件系统监视方法,它就会有一定的延迟。
并且对于杀毒软件以及安全软件来说,病毒的种类千差万别,不可能对每一种新出现的病毒程序都有特征记录,于是病毒程序还是能够成功创建自己到目标手机的存储器上。到了这一步,一般的病毒程序就开始运行自己,然后进行工作。但是,对Rootkit程序来说,它的情况就与众不同了。Rootkit程序最核心的目的就是在于能够利用手机系统的底层技术,来达到一些“高级”的目的。这其中,隐藏自己的存在就是一个高级目的。
很多时候,手机的使用者会检查自己的手机状态,例如他会看看自己的手机究竞存放了哪些文件,如果没用或者没见过,他就会删除这些他认为是“垃圾”的文件。而对于杀毒软件以及安全软件来说,它们很可能会进行定期扫描,例如在每天的12点对手机内存上的所有文件进行一次扫描,目的是发现可能存在的病毒程序。这些情况往往会导致一些病毒程序会被发现,不能够继续工作。那么,如果一个病毒程序采用了某种技术,将自己从手机上的文件系统上“隐藏”起来,让手机使用者以及手机杀毒软件乎全软件都无法发现自己,那么病毒程序就可以为所欲为的进行破坏与感染了。Rootkit就是这样一种可怕的病毒程序。
在设计手机系统时,很可能也采用了一些未公开的方法来实现一些特殊目的,通常这些方法都是极其保密的。但是,对于手机病毒的制造者来说,他们会深入分析手机系统的内部实现原理,从而找出这些未公开的方法。这些未公开的方法中很可能就涉及到文件系统的一些底层技术。Rootkit将这些文件系统的底层技术利用起来,让自己从系统中“消失”,甚至会迷惑了手机系统本身。
二、现代智能手机攻击案例分析
攻击1:通过GSM监视通话信息
本次攻击的目标是让远程攻击者隐蔽地监听或记录用感染Rootkit的智能手机进行通话的隐私数据。无论何时只要发生Rootkit感兴趣的事件,Rootkit就会激活。例如,当受害者智能手机的日历程序显示备注时(如会议),Rootkit可能就会激发恶意操作。当Rootkit激活时,它会悄悄地拨打攻击者的电话(这个可预先在Rootkit程序中设置,或者通过攻击者发送的短信发送给Rootkit程序),这样攻击者就可以远程监听或记录当前通话信息。另外,当受害者拨打电话时,Rootkit也会激活,从而记录通话信息。Freerunner手机配有通过串行总线连接的GSM收音机,因此其可作为串行设备用于应用程序。在正常的手机操作中,用户空间应用程序将请求访问GSM设备的系统调用发送给系统内核。内核响应该请求,反过来应用程序也能够访问该设备提供的通讯功能。GSM设备使用一系列AT (attention)命令.其使得内核和用户空间应用程序调用特定的GSM 功能。例如,GSM设备通常支持AT命令拨打电话、获取SMS消息等功能。为了恶意操作GSM设备(例如,给远程攻击者打电话).Rootkit程序必须从内核执行AT命令。Rootkit程序原型是通过拦截用户设置的警报来运行。如图1显示,警报可与用户空间日历程序中的关键字“会议相关联。一旦检测到会议 关键字.则警报激活,Rootkit就会拦截此警报并进行恶意攻击。攻击程序则悄悄地拨打远程攻击者电话,这样攻击者就能窥探或记录受害者的秘密通信信息。Rootkit拨打的电话号码可能通过程序写入Rootkit代码,也可能通过短信发送,Rootkit截取该短信并获取攻击者号码(在攻击2描述了基于短信的Rootkit控制)。
GSM Rootkit拦截报警信号,如会议通知,并向攻击者发送信息以监听通话隐私Rootkit触发。Rootkit必须有能力拦截报警信号(如来自日历程序的警报)才能触Rootkit。Rootkit程序通过hook系统调用表和用Rootkit恶意写操作地址替换真实写操作系统调用地址来达到此目的。当报警信号发出时,屏幕上将显示具体的消息。Rootkit程序中恶意写操作拦截显示在屏幕上的消息,并检查三个子字符串。首先检查消息中的“window Prop子字符串,该字符串显示当前消息为通知类型。然后,检查是否存在 Clock“子字符串该字符串用来验证消息是否来自时钟程序(更多字符串用于检查其它用户空间程序的警报)。最后,必须出现NETWM TYPE子字符串,此字符串出现代表产生了报警信号。通过研究未感染内核中的警报发送给方式,研究人员了解到这些字符串的重要意义。
拨打电话,当Rootkit激活时.其会模拟用户空间通信应用程序拨打电话。特别是像Qtopia软件这样的用户空间,应用程序会向内核发送一系列系统调用,该软件栈与Freerunner手机的OpenMoko Linux分发版一起发送。这些系统调用启动GSM设备,并指示其拨打指定号码。具体来说,像Qtopia这样的应用程序利用写操作系统调用给GSM设备发送AT命令(这些命令为参数),所要拨打的电话也可作为系统调用参数。Rootkit程序通过发送与内核AT命令相同的序列来达到同样的目的。
通过研究Qtopia软件栈.我们获得了必须用来拨打电话的AT调用序列。当拨打电话时 我们使用strace方法跟踪Qtopia发送的写操作系统调用的参数。然后,我们设计了一个激活后,能发送与内核空间AT命令相同序列的Rootkit程序。为了发出与AT调用相同的序列,Rootkit首先使用下代码所示的get fs/set fs调用序列,并修改数据段边界来指向内核寻址空间而不是指向用户寻址空间。get fs/set fs序列允许内核从内核模式中发出系统调用(如代码所示的sysopen sys write and sys close调用)。当发出系统调用后,Linux内核首先要确保调用的参数在用户空间应用程序的虚拟地址空间范围之内。
尽管当用户空间应用程序发出系统调用命令后(如,为确保应用程序不能恶意地涉及系统调用参数中的内核数据),这项检查工作相当重要,但它却会导致内核系统调用的失败。Get fs/set fs调用序列修改了数据段以便于检测系统能够成功调用参数,这就允许内核空间发出系统调用指令。Rootkit则会简单地打开GSM设备,并用适当的参数来定位写操作系统指令序列(例如AT命令),然后关闭该设备。在代码发出的AT命令激活了电话子系统.并成功建立起同攻击者电话之间的连接。然而,AT命令并没有启动智能手机中由声音子系统控制的麦克风。为了激活麦克风,我们使用usermodehelper函数并控制Rootkit发出如下的内核模式命令:
本次攻击的目的是泄露受害者的位置隐私。受Rootkit感染的智能手机接收来到白攻击者的短信(SMS).并查询受害人的当前位置。Rootkit拦截该消息并将用户当前位置通过GPS发送给远程攻击者。与GSM设备一样,GPS设备也是串行设备。内核运行ttY-driver结构体链表来维护安装在系统上的一系列串行设备。Rootkit利用该结构体的成员变量name可以很容易地定位到GPS设备。每个tty_driver结构体还包含一个缓冲区(读缓冲区),在该缓;中区中存储未被用户空间应用程序读取的数据。在用户访问该数据之前是,Rootkit程序从此缓冲区中读取数据。泄露位置隐私的Rootkit技术必须实现如下三个机制。
首先,必须拦截入侵短信,并确定是否是远程攻击者查询受害者位置的短信;
第二,必须能够从GPS接收器获得位置信息;
最后,必须生成受害人当前位置的短信,并将其发送给攻击者。
值得一提的是第一个机制对攻击1也相当有效,而不对Rootkit必须拨打的号码进行硬编码,攻击者可发送受感染手机必须通过短信拨打的号码。攻击者还可以通过短信启用/禁用Rootkit的恶意功能,这样就使得攻击者可以远程控制Root kit。通过修改系统调用的相应表项,并指向Rootkit代码,这样Rootkit程序就可以通过hook内核读写系统调用来拦截短信。因此,Rootkit拦截必须要去每个用户空间应用程序的读/写操作,GSM设备接收和处理短信。用户空间sMs应用程序不断查看GSM设备是否有新邮件。当SMS应用程序试图读取GSM设备时,Rootkit代码截获该操作,并从GSM设备的读缓冲区中读取数据。
存储在缓冲区的短信通知中包含字符串+CMTI= Simindex , 其中 Simindex 代表短信序列号。当查找到该子字符串后,Rootkit则解析该短信,并判断是否包含攻击指令(以某种预定义的格式)。每个消息对应一个状态位,其决定邮件是否已经被读取过。Rootkit程序确保将非攻击者发送的短信标记为未读,并能够被用户空间sMs应用程序处理从而使Rootkit隐蔽地进行操作。如果Rootkit拦截到来自远程攻击者的信息 那么它会试图从GPS设备获取位置信息。
Rootkit可以很容易地从与GPS设备相关的ttY-driver结构体的读缓;中区中获得位置信息。需要注意的是,即使用户已禁用GPS,Rootkit仍然可以获取位置信息。这是因为Rootkit在内核模式下运行.其可以启动GPS设备并获取位置信息,而且在取得信息后立即禁用该设备。在获得位置信息后,Rootkit会生成一条短信,同时通过将GSM调制解调器配置为文本模式来发送该短信,并发出AT+ CMGS命令(发送邮件)。保护位置隐私很重要,最近已经引起了研究界相当的注意。
Rootkit破坏内核并通过GPS获得用户位置信息,击败了现有的大多数用来保护位置隐私的防御措施。此外,攻击是悄悄进行的,接收到的攻击消息并不立即显示给受害者。该攻击唯一可见的痕迹是由服务提供商记录的消息发送记录。只有当用户收到月结单时才会发现发送给未知号码的短信。才可能会检测到攻击。然而,许多用户很少注意到这些细小的变化,从而长时间未发现这些攻击。
三、Rootkit未来发展趋势分析
随着智能手机的大量普及使用,手机Rootkit开始逐步进入手机安全人员的视野。由于Rootkit技术的隐蔽性、运行效率要远远高于一般的手机病毒技术,而且Rootkit对手机杀毒软件的防删除、防关闭技术更要比病毒程序底层,这些与生俱来的优越性使得手机攻击者的视线逐步转移到手机Rootkit的开发上。
在未来,手机Rootkit将具有以下一些高技术含量的特点:
(1)手机硬件Rootkit将大量出现;
(2)文件隐藏技术将日渐成熟,如钩子技术;
(3)任务/线程隐藏技术将同时开始成熟;
(4)拥有底层的对抗杀毒软件技术;
(5)结合手机系统更加紧密;
(6)着重利用手机系统的安全漏洞;
(7)手机硬件驱动层面的Rootkit将成为主流。
四、总结
恶意软件的发展史是攻击者和防御者之间的竞争史.当防御者改进恶意操作检测工具时,攻击者也会用新技术来逃避侦查。Rootkit通过破坏操作系统来逃避检测。从而能够避开用户空间检测工具并长期隐蔽运行。内核级Rootkit利用智能机操作系统,带来了严重的社会影响。移动手机平台的流行吸引着攻击者开始越来越多地开发和部署正对这些平台的病毒、蠕虫。笔者建议,窃听事件频出,用户不必恐慌,首先不要将手机轻易交给陌生人使用,以防手机被植入窃听木马;其次要购买正规渠道的手机,还有就是不要点击、下载匿名邮件、中奖短信等信息中的链接。