解密短信木马为何屡杀不尽--android手机短信木马的攻与防

        短信,一个几乎很少有人使用的通信手段,却因为利益的驱使,使得短信木马泛滥,更有一个庞大的黑色产业链在高速运转,短信木马为何屡杀不尽呢?我们为您解密!

邂逅黑产

        近日逛了逛以某西游记人物命名的威客网,看到一个项目需求是要做安卓短信转发的应用。正好笔者对安卓系统安全以及短信都有所涉猎,因此对该项目产生了兴趣。
项目需求主要归结为以下几点:
1)主动告知,应用在被控制手机上安装之后要自动发送一条短信到指定号码(主控手机)。
2)短信拦截,被控手机收到的所有短信都会自动转发给主控手机。
3)拦截开关,主控手机可以通过发送短信命令的方式控制被控手机来开启或关闭短信拦截功能。
4)控制发送,主控手机可以控制被控制手机发送任意内容的短信到任意号码。
5)最重要的一点是,要求能够免杀,至少要过360。
        从需求可以看出,此人要做的是一款短信木马。随着和他深入沟通也了解到短信木马背后的巨大黑色产业链。这条产业链主要由木马制造商,包马人,洗钱人构成。木马制造商主要是一些黑客或者程序员。包马人负责从木马制造商处购买木马,并通过网站挂马,诱骗安装、刷机等方式安装到用户的手机里,盗取用户的信息。而盗取来的用户的这些信息,则由洗钱人变现,最后和包马人分赃。
        发这个需求的人就是包马人。根据这个包马人的描述,他们每天都会有几百名用户中招,对于他们来讲时间就是金钱。所以哪怕一个木马能够免杀一天他们也愿意花钱购买,用争分夺秒来形容,一点也不为过。而且包马人还很自豪的说,一般情况下一个月他们就可以赚一辆豪车。听起来确实挺暴利的,难怪他们敢冒着被抓的风险从事黑产。

短信木马种类

短信木马的种类很多,主要有这么几类:
1)银行支付类木马,这类木马主要盗取用户的网银或支付类应用的账号和密码。
2)恶意订阅付费服务,这类木马主要通过后台静默发送短信订阅付费服务。
3)短信诈骗,这类木马通过后台静默给手机里的联系人发送诈骗短信。

        实际中木马可能是多种功能混合的木马。包马人为了尽快得到免杀的木马,还主动发了一份安卓短信木马的源码给笔者,并说明把这款木马改成免杀就可以了。对于笔者来说这份源代码作为研究样本真是再好不过了。

短信木马分析

结合代码分析和实际测试,笔者发现短信木马的隐蔽性和危害性做的都非常有技巧。接下来笔者就为各位详细剖析一下:

1)首先谈谈隐蔽性。之前就听过网上报到说网友中了木马,网银密码被盗,造成失窃的事情。笔者一开始就纳闷,被装了短信木马,桌面不是多了一个图标么。这个陌生的图标,谁一看都会怀疑的,怎么会发现不了呢。
        原来木马一旦被安装,只要运行一次,那么在桌面上的木马图标就会消失。实现原理是在木马的Activity的onCreate方法里,会调用PackageManagerService的setComponentEnabledSetting方法来禁用当前的Activity。一旦Activity被PackageManagerService禁用,那么它就会从桌面上消失了。这对于普通的用户来说确实很难发现。

2)短信木马不仅在桌面隐藏图标,而且还会防卸载。稍微懂一点安卓的用户就会知道,在系统设置的“应用”里可以卸载安装在手机里的应用。如果木马是安装上去的,当然也应该可以从这里卸载掉。可是很不幸,你很有可能看到的是这样的界面,“卸载”按钮变灰了。

这是怎么回事呢?原来木马的设计者利用了安卓系统里的“设备管理器”的机制。一旦用户不小心将一个申请设备管理的应用激活,那么这个应用就升级为设备管理器了,也就无法通过“卸载”按钮来卸载它。这时只需多做一步,进入“系统设置”,点击“安全”,然后找到“设备管理器”,将列表中的木马应用取消激活即可(如图2)。然后就可以正常卸载了。

3)除了防卸载以外,短信木马还做了低内存防杀死。安卓系统在剩余内存比较低的时候,会选择系统中优先级不高的进程,将其杀死以释放内存。这款短信木马后台通过启动一个“前台服务”,来将自己在安卓系统中的优先级提的很高。这样木马进程就不容易被安卓系统杀死了,生存能力大大提升。但“前台服务”必须会在通知栏里留下一个通知,这似乎又违背了木马的隐蔽性要求。“聪明”的木马设计者,将这个通知做成了全透明。

 

如图3,不仔细看还真是发现不了这里有个通知。但是如果通知多了,有时木马通知嵌在中间了,还是会引起有心人注意的。

4)隐秘性和健壮性都做的很好了,适配性上也不赖。由于安卓的版本众多,为了适配不同的安卓版本,一款应用一般会做一些适配性的工作,以保证在不同的安卓版本上也能正常运行。就短信拦截而言,在安卓4.4以前,只需要注册一个Receiver并把优先级提高,就可以先收到系统广播的Intent,从而实现拦截。但到了安卓4.4,系统只允许一个应用接收短信广播,而这个应用默认是设为系统短信应用的。所以短信木马无法通过Receiver来拦截。但是它做了很好的适配,对系统SMS URI注册了ContentObserver,一旦系统受到短信,并存入ContentProvider后,短信木马就立刻知道了。它会去立刻读取短信内容,然后转发,并且删除ContentProvider中的短信记录。使得用户无法看到正常的短信。这种修改数据的方式,也变相地做到了拦截短信。但这种方式会产生一次短信提示音,因为毕竟短信时被真实收下来再被删除的。因此安卓4.4的用户如果发现手机响了一下短信提示音,可是却找不到未读短信,那么就要怀疑是否中马了。

        可见,这款木马真的很顽强,很隐蔽,功能也很强大。但从技术角度看短信木马的技术含量并不高,实现的门槛比较低。以这款短信木马为例,他涉及到的也就是Service、BroadcastReceiver、DeviceAdmin、ContentObserver等机制,这些都是安卓提供给开发者使用的开放API。而且这款木马也不要求获得root权限,可以在没有root的手机上运行。这意味着,它并没有使用进程注入、钩子等高级技术来实施拦截和破坏。实现成本很低,相信大多数安卓程序员都能开发出来。

        也许正因为短信木马的实现难度较低,又不要求设备root,同时还能获得巨大的商业利益,所以导致了短信木马的泛滥。这种形势下,木马的查杀率就显的很重要了。出于对免杀技术的好奇,笔者基于这款木马进行了进一步的研究和试验。

如何免杀

有些用户认为,“安装了安全软件,手机就安全了”。可实际上是不是这样呢?

我们都知道安全软件主要的功能有两个方面,静态扫描和动态监控。动态监控必须获得root权限才能生效,所以对于大多数没有root手机的用户来说。安全软件的动态监控起不了作用。这种情形下我们唯一能依赖的是静态扫描,也就查杀。查杀也分两种,一种是本地查杀,另一种是云查杀。

但两者原理是类似的,都是通过从被扫文件中抽取出特征,然后到特征库(病毒库)中去匹配,如果匹配上了,那么就认定为病毒。基于特征的病毒查杀具有快速、全面的优点,但同时它也有一些不足:

a)更新滞后性。病毒库更新之后才可查杀新型病毒。病毒库收集到特征之前,病毒和木马是完全肆虐横行的。

b)很难有效查杀未知变种。病毒或者木马的编写者,如果一旦确定了被查杀的特征,则可以通过技术手段变换特征,制造出变种病毒和木马,从而达到免杀的目的。

根据这些缺点,笔者做了一些试验并提出了以下若干免杀方案:

1)特征变换法

笔者基于手头上的一款短信木马源代码做试验,选用10款知名安全软件进行测试。

360卫士、安全管家、瑞星手机安全、乐安全、金山手机卫士、LBE安全大师、腾讯手机管家、网秦安全、McAfee Security、百度卫士。

首先将原版的木马源代码编译出apk来,然后安装到装有安全软件但并未root的手机,结果360卫士、安全管家、LBE安全大师、腾讯手机管家、网秦安全、百度卫士报毒了(如图4)。

        然后笔者将源代码删除一半(不考虑其能否运行,只要能编译成功就行)再安装到手机,如此往复直到不再报毒为止。这样就可以确定最近一次删除的代码中含有病毒特征。接着再逐步添加代码,直到再次报毒,找到这个特征。通过这种类似二分查找的方式,可以将原版源代码中的所有特征都可以找出来。经过笔者的一番努力,最后发现这些特征在java代码里都是以字符串形式存在的。很显然我们只要将这些特征字符串变换一下就产生了新的变种,而且可以避开杀毒软件的查杀了。

变换的方式有很多,例如:

①  StringBuilder动态生成特征字符串

②  特征字符串以密文形式存在,需要使用时再动态解密

③  将特征字符串转移至资源中等等。

        变换之后特征字符串以非明文的形式存在。这样杀毒公司在获取这个新变种的样本之前,杀毒软件很难对其进行查杀。但这种方式的免杀时间也不会太长,毕竟对于新变种再次抽取特征是非常方便的。

笔者按照这种方案测试完后(修改了特征字符串、包名、应用名),10款杀毒软件没有1款能查杀(如图5)。

2)代码加密法

        杀毒软件抽取的特征不仅仅只是字符串,也有可能是调用方法,或者二进制特征。那么这种情况下,需要变换整个APK中的代码。安卓APK里的Java代码都是存放在classes.dex里的。因此如果将含有病毒特征的classes.dex已一种加密形式存在资源文件或者assets中,运行时再解密,那么杀毒软件在没有破解加密算法之前,是无法查杀该类的病毒木马的。其实该方案也可以理解成对APK进行加壳处理。比如木马经过App保护服务提供商的加壳处理后,就可以直接达到免杀目的。如果木马的编写者,技术足够好,那他可以开发出自己的加壳方案,那么对于杀毒软件来说,这将是更大的挑战。要查杀这类病毒更是难上加难。

笔者使用这种方案后,同样10款安全软件也都未能查杀。

3)动态下载法

        以上的两种方式,无论怎么变换,病毒的代码其实还是在本地的,也就是在APK内部。如果病毒代码不在APK里呢,是不是就更难查杀了呢。其实这完全可以实现的。木马的编写者可以编写一个正常的APK,然后让这个应用在特殊的条件下触发并从网络下载恶意的代码然后再执行。这种的隐蔽性可以做到非常高,单纯扫描是几乎扫不出来的,因为事实上APK里就是没有恶意代码。

这种方案,效果也是一样,10款安全软件都不能查杀。 


        表1总结了这三个方案的测试结果,Yes表示可以查杀,No表示不能查杀。可见这三种免杀方案都可以使木马躲过杀毒软件的查杀。从中我们可以看出,一个病毒或者木马的编写者,要绕开杀毒软件查杀并不是非常困难。因此,“安装了安全软件,手机就安全了”,这样的观念,其实并不是很科学。实际上安全软件查杀未知变种病毒木马的能力是非常有限的。

应对策略

既然完全依靠杀毒软件不是很靠谱,那么普通手机用户该如何应对呢?

笔者觉得,首先要做是,每位手机用户都要提高自己的安全意识。不要轻易下载和安装来历不明的应用,即使是自己的朋友推荐的应用链接也不要轻易相信,有可能是朋友中了木马之后,木马应用发过来的。尽量只从正规大型市场或者应用的官方网站下载应用。另外也不要轻易打开来历不明的网页链接,挂马的网站也会对手机安全造成威胁。

其次,国外的一些安全公司已经开始研究如何抵御未知攻击的技术,这样就能解决短信木马通过变换特征绕开查杀的大部分问题,希望国内的安全公司迅速更上,填补这项国内空白。

最后,我们认为终极还是系统级安全解决方案。上文也提到安全软件主要通过静态扫描和动态监控来保障手机安全。既然静态扫描目前不是100%可以依赖,,动态监控一般是基于进程注入方式实现的,需要授予root权限问题是,root是把双刃剑,root手机之后虽然安全软件可以动态监控了,但病毒木马也存在获得root权限的可能了。一旦病毒木马获得root权限,那后果不堪设想。如果动态监控做到系统里可以直接赋予root权限而无需出厂后root手机,当然系统安全还可以做更强大的安全功能,比如芯片安全。去年工信部颁布的安全五级要求,其中一级就要求2013年11月1号后入网的手机本身必须要带有权限监控功能。有了这样的系统级安全解决方案,短信木马所做的敏感操作:发送短信、读写短信数据库等都会被拦截到,用户可以及时发现并禁止或卸载它,因此,在系统级安全解决方案前,短信木马根本不足为惧。不过缺陷是,工信部提出的标准里面并没有对接收短信做权限监控,木马可以在接收短信后通过网络把短信转发出去,从而绕开发送短信的权限监控。

另外,也建议司法部门加大执法力度,一旦发现到木马,可以追踪其控制端手机号,从而跟踪该SIM卡,锁定购买人,然后顺藤摸瓜找到犯罪嫌疑人和犯罪团伙。

小结

        短信木马虽然从安全技术角度来说,不是特别有技术含量,但他对用户的隐私以及财产安全造成的危害却不小。想要彻底根治短信木马仅仅是靠安全应用是远远不够的,更要靠全社会的共同协作和努力。用户需要自己提高安全意识,手机和芯片厂商要提供更好的系统安全方案,杀毒软件公司要为用户提供更好的杀毒服务,法制部门则应对犯罪行为进行更加严厉的打击。

时间: 2024-10-22 11:40:52

解密短信木马为何屡杀不尽--android手机短信木马的攻与防的相关文章

DeskSMS:在PC端收发Android手机短信

DeskSMS我们都知道用手机接收.发送短信简单又方便.但是很多人又苦于不习惯用手机打字输入.今天推荐的DeskSMS就是一个可以轻松在电脑上发送.接收Android手机短信的工具.DeskSMS在PC端收发短信如果你的电脑安装了Google Chrome 或 Firefox 浏览器并且还是Android手机手机用户,就可以在电脑和Android手机端分别安装DeskSMS应用程序,安装后用户可以通过Google帐号在电脑中同步手机端的短信,并且可以直接在电脑中轻松在线发送.回复短信.是不是很酷

“短信门”招致巨亏 分众剥离手机短信

中介交易 SEO诊断 淘宝客 云主机 技术大厅 江南春口中"尚在探索阶段"的无线业务,终于给分众传媒(Nasdaq:FMCN)的业绩带来负累. 6月6日,分众传媒公布的2008年第一季度(截至2008年3月31日)]http://www.icomcn.com[未审计财务报告显示,其总营收1.616亿美元,同比增长214.7%;若不计非现金股权奖励支出.收购产生的无形资产摊销及同非持续性运营业务相关一次性支出,分众传媒今年第一季度调整后的净利润达4480万美元,每股美国存托凭证收益0.3

Android发送短信方法实例详解_Android

本文实例讲述了Android发送短信方法.分享给大家供大家参考,具体如下: 短信和打电话一样,都是android手机的基本功能,下面以实例说明android如何实现发送短信的功能. 程序如下所示: import java.util.regex.Matcher; import java.util.regex.Pattern; import android.app.Activity; import android.app.PendingIntent; import android.content.I

IM工具或取代手机短信两年内短信数量或降两成

IM用户之间即时沟通,仅需缴纳数据流量资费 □本版撰文 信息时报记者 潘敬文 手机短信到了最危险的时候!除了IM(即时通讯)工具.微博私信.米聊等第三方软件,在不停挑战手机短信的生存,就连苹果.谷歌.微软.诺基亚等知名手机厂商,近日也推出自有IM软件,提供免费文本聊天服务,用户之间沟通仅需缴纳数据流量资费,此举对运营商短信业务大有取而代之的架势.有分析认为,伴随着使用IM软件长大的年轻一代,手机短信被逐步取代.合并为数据业务是迟早的事情. 手机巨头猛推IM服务 近日,苹果公司在全球开发者大会(W

Android发送短信方法实例详解

本文实例讲述了Android发送短信方法.分享给大家供大家参考,具体如下: 短信和打电话一样,都是android手机的基本功能,下面以实例说明android如何实现发送短信的功能. 程序如下所示: import java.util.regex.Matcher; import java.util.regex.Pattern; import android.app.Activity; import android.app.PendingIntent; import android.content.I

android 短彩信-Android手机如何实现发送短彩信功能,不调用系统界面

问题描述 Android手机如何实现发送短彩信功能,不调用系统界面 Android手机如何实现发送短彩信功能,不调用系统界面,Android手机如何实现发送短彩信功能,不调用系统界面 解决方案 短信可以后台发送,彩信不行 解决方案二: 后台发送短信http://blog.csdn.net/beijingshi1/article/details/7614267

Android实现短信加密功能(发送加密短信、解密本地短信)_Android

短信加密此类功能由于新手学习的需求量较小,所以在网上很少有一些简单的demo供新手参考.小编做到此处也是花了比较多的时间自我构思,具体的过程也是不过多描述了,讲一下demo的内容.       demo功能: 1.可以发送短信并且加密(通过改变string中的char) 2.能够查看手机中的短信 3.能够给收到的加密短信解密. 涉及到的知识点: 1.intent bundle传递 2.ContentResolver获取手机短信 3.listveiw与simpleAdapter 4.发送短信以及为

手机短信验证码真的安全吗?

手机的蓬勃发展,衍生出来众多行业,也让原本功能单一的手机号做出极大的改变.如今似乎每个人的手机号都绑定了或多或少的各种账号,手机绑定的东西越来越多,涉及到的重要的东西也越来越多,例如像银行卡绑定手机号,支付宝等等能与资金挂上钩的. 如今手机绑定最主要的表现方式就是通过短信验证码来证明自己的身份,验证的方式极其简单便捷,当人们在享受这份简单便捷的验证方式时,不由也为短信验证码来验证身份信息的方式产生了不信任感. 那么手机短信验证码真的安全吗? 如果说安全的话,没有什么是真正的安全的,短信验证码也不

手机短信能否作为法庭证据?

最近刘先生有点烦,一条突如其来的手机短信给他的生活带来了极大的困扰.因为刘先生此前收到一条以好友曾某名义发来的手机短信,称因手机遗失,已变更原有手机号码,并附上了新号码.次日,又有人用新号码给刘先生来电,要求借款2万元.刘先生从声音判断,认为是曾某,但为防万一,又让其用手机发个借款短信.对方照办后,刘先生将款汇到了指定账号.事后当刘先生与曾某核对此事时,曾某却矢口否认,并称根本没有遗失手机.更没有换号.经查,新号码系不记名的手机卡号.刘先生认为曾某是有意赖账而成讼.最终,两位好友不得不因为一条手