基于HOOK技术的“短信劫持”型手机木马取证
2017-09-11徐国天
徐国天
(中国刑事警察学院网络犯罪侦查系 辽宁 沈阳 110035)
基于HOOK技术的“短信劫持”型手机木马取证
徐国天
(中国刑事警察学院网络犯罪侦查系 辽宁 沈阳 110035)
近几年出现的新型手机木马程序中犯罪嫌疑人手机号码、邮箱账户等信息均经过加密处理,破解这些加密数据是目前面临的取证难点问题。提出了一种手机木马程序的动态检验方法。该方法是将木马程序在一部手机上真实地运行起来,木马运行之后会自动解密数据,解密之后的数据会出现在木马发出的电子邮件和短信之中。自行开发的短信监控软件可以截获木马发出的短信数据,并从中提取出犯罪嫌疑人的手机号码。手机木马动态检验方法可以对新型木马程序实施有效的检验分析。
短信劫持 木马 动态检验 ARP监听 HOOK
短信劫持型手机木马是一种恶意程序,智能手机一旦感染了这类恶意程序,犯罪分子会利用它来盗取用户银行卡内的账户资金。利用短信劫持型手机木马盗取账户资金案件从2012年开始出现,之后呈现出预演预烈的趋势,造成的社会危害也在不断扩大[1]。近几年此类案件呈现出以下特点,第一通常借助伪基站来传播诈骗短信。利用伪基站,犯罪分子可以在十几分钟内,向上万部手机群发诈骗短信,因此这种犯罪具有传播速度快、影响范围广的特点。第二此类犯罪通常是利用第三方支付平台的安全漏洞来进行资金盗取。在很多起案件中,犯罪分子可以在一两天时间内,盗取上千万的账户资金。因此这种类型犯罪具有作案时间短、涉案资金大的特点。研究此类案件中关键的电子物证,即从被害人手机端提取到短信劫持型手机木马的动态检验方法对公安机关的调查、取证工作有重要意义。
检验人员要从手机木马程序中提取出两类信息,一是犯罪嫌疑人使用的电子邮箱账户名和密码,二是犯罪嫌疑人的手机号码。在早期出现的老款木马程序中,这些信息是没有经过加密处理的很容易提取。但是在近一两年出现的新型木马程序中,这些信息都经过了加密处理,如何对这些加密数据进行解密是目前取证工作面临的难点问题。本文将通过一个具体的案例来对这个取证难点问题进行研究,本文针对Android系统手机木马进行分析。
1 利用短信劫持型手机木马盗取账户资金案件分析
2015年6月,某省最大的一家第三方支付平台报案称:系统监测到100余个账户存在异常转账行为,累计被盗金额达1000余万元。这是一起典型的利用手机木马盗取账户资金案件。
在这起案件中,被害人描述了这样一些情况:很多用户的银行卡未开通网上银行或电话银行服务、银行卡号和密码也没有泄露、口令卡和U盾也没有遗失,但是卡内的资金却被转走了。通过调查办案人员发现很多被害人手机上都收到过图1所示短信。
图1 被害人手机上收到的短信
这条短信的来电显示号码是10086,短信内容提示用户登陆网站兑换积分。这不是真正的中国移动官网地址,而是一个经过伪装的恶意网站链接。如果用户点击访问了这个恶意网站,可能会导致他的手机感染木马程序。这条诈骗短信是由伪基站设备发送的,“伪基站”可以伪造任意来电显示号码、设置任意内容、群发诈骗短信。犯罪分子通常是伪造10086、95588等官方号码发送诈骗信息。
“伪基站”设备一般是由一台笔记本电脑或一部智能手机与一个小型信号发射器组成[2]。正常情况下手机会与最近的合法基站取得联系,并通过它与外界通信。当伪基站开始工作后,它发出的信号频率与合法基站相同,但信号强度更大,会阻断手机与合法基站之间的通信链路。利用这短短10几秒钟时间,犯罪分子会将预先编辑好的诈骗短信发送到用户手机端,随后释放信号,恢复手机正常的网络通信。由于网络切换时间非常短,用户很难察觉到这种异常,见图2。
图2 “短信劫持型手机木马”资金盗取流程
当用户看到短信后,误认为是中国移动发给自己的,于是点击地址链接访问恶意网站。而恶意网站会诱导用户下载并安装一个名为“移动掌上客户端”的软件,这个软件实际上就是一个木马程序。木马会自动搜集被害人的通信录、短信箱和微信内容,并将这些数据发送到犯罪嫌疑人指定的电子邮箱里。犯罪嫌疑人会从这些数据中筛选出4种信息:身份证号、姓名、银行卡号和手机号码。
犯罪嫌疑人利用这4种信息在第三方支付平台冒充被害人注册一个账户,并尝试转移被害人银行卡内的资金。这个行为会促使平台给被害人手机发出一条短信验证码,这时,木马会再次发挥作用,它会拦截这条短信,不让用户查看,并将短信转发给犯罪嫌疑人手机,最后犯罪嫌疑人提交验证码,通过平台验证,实现资金盗取。这就是这起案件完整的作案流程。
在这起案件中送到实验室进行检验鉴定的是从被害人手机上提取到的“移动掌上客户端”程序,也就是手机木马程序。检验要求是从这个木马程序中提取出犯罪嫌疑人的电子邮箱账户、登陆密码和犯罪嫌疑人的手机号码,同时对木马程序进行功能鉴定。
2 检验方法分析
2.1 静态源代码分析法
目前手机木马程序常用的检验方法是静态源代码分析法[3]。它是将APK类型的木马程序转化为Java源程序,再从Java源代码中提取出犯罪嫌疑人的手机号、邮箱账户等关键配置信息。这种静态源代码分析法在早期老款木马程序鉴定工作中确实取得了显著效果,但是它无法胜任近一两年出现的新型木马的检验鉴定工作。
2014年笔者鉴定了一起手机木马盗取资金案件,在那起案件中,送检的就是一个老款木马程序。将这个木马转换为Java源代码之后,可以看到图3所示程序,这里出现的手机号码就是犯罪嫌疑人用来接收短信的手机号。继续浏览Java源程序,还可以找到犯罪嫌疑人的电子邮箱账户名和密码。通过分析这个老款木马,可以发现从Java源程序中找到犯罪嫌疑人的手机号和邮箱账户并不困难。同样,犯罪分子也发现了这个问题,于是在近一两年出现的新型木马程序中,关键配置信息都被经过了加密处理。我们看到的Java源程序如图4都是密文数据。在本文使用的案例中,送检的就是一种新型木马程序,所有关键信息都经过了加密处理。
图3 老款木马程序
图4 新款木马程序
目前比较常见的一种解决方案是在木马程序中寻找解密代码,找到之后,编写程序完成解密[4]。但对于普通侦查人员来说,需要一种相对便捷、快速的方法来获取案件线索。本文提出一种相对简单的办法,让木马程序自己进行解密。该方法关键就是让木马在一部测试手机上真实的运行起来,运行之后就会自动解密数据,而检验人员要做的就是把解密之后的结果提取出来。
2.2 动态检验方法
准备一部测试用Android手机,将送检的木马程序运行在手机上,木马运行之后,会向犯罪嫌疑人的邮箱发送一封电子邮件,把窃取到的信息发送给犯罪嫌疑人。木马在发出这封邮件之前,会先解密犯罪嫌疑人邮箱账户名和密码,解密之后的账户信息会出现在邮件数据中,只要截获这组通信数据,就可以从中提取出解密之后的邮箱账户名和密码。同样,木马运行之后会和犯罪嫌疑人手机通过短信进行联系,在发出短信之前,木马会先解密犯罪嫌疑人手机号,只要截获这组短信数据,就可以提取出犯罪嫌疑人的手机号。手机木马的动态检验方法,检验人员不用关心具体的解密过程,木马运行之后,会自己完成这个解密任务,只要把木马发出的邮件和短信数据截获下来,就可以从中提取出解密之后的信息,见图5。
图5 动态检验方法
3 提取犯罪嫌疑人电子邮箱账户名和密码
第一个检验任务是从木马发出的邮件数据中提取出犯罪嫌疑人的电子邮箱账户名和密码。图6中间设备就是普通家庭使用的无线wifi路由器,在测试手机上运行送检的木马程序。正常情况下,木马发出的邮件数据会首先提交给无线路由器,再由无线路由器转发给互联网上的邮件服务器,返回数据也是沿着这一路径到达测试手机。只要能截获这组通信数据,就可以从中提取出犯罪嫌疑人的电子邮箱账户名和密码。本文采用ARP监听的办法对木马发出的邮件数据实施监听。具体的检验步骤如下:首先,准备一台检验主机,在这台主机上对无线路由器和测试手机实施ARP监听。它会发出大量特殊的ARP数据包,这些数据包不会对这两部设备造成任何损坏,但是会改变测试手机网络数据的传输流向。ARP监听成功实施之后,手机木马发出的邮件数据不在提交给无线路由器,而是先提交给检验主机,再由它转发给无线路由器,并最终到达邮件服务器。也就是说,检验主机成为通信的中转站,可以在这台主机上捕获通信数据,提取出犯罪嫌疑人的邮箱账户信息。
图7是使用wireshark捕获的邮件数据,数据量比较大。观察这组数据,发现有一些英文单词,还有大量的乱码数据。这些乱码数据实际上是一种特殊的编码数据,具体是哪种类型编码在邮件当中已经记录。Content-Transfer-Encoding:base64,说明这封邮件数据经过base64编码处理,可以使用任何一款base64解码软件还原这些数据。第一行编码数据还原之后对应的是一个邮箱账户名,第二行编码数据还原之后对应的是这个邮箱的密码,这封邮件的主题是“通信录和短信”,最后一大组编码数据就是邮件正文,还原之后显示,邮件正文是这部测试手机的通信录和短信箱内容。通过对邮件数据的分析,获得了犯罪嫌疑人的电子邮箱账户名和密码,发现木马程序会将被害人手机上的通信录、短信箱内容发送到犯罪嫌疑人的电子邮箱。
图6 截获木马发出的邮件数据
图7 电子邮件内容
4 编写监控软件、提取犯罪嫌疑人手机号码
为了提取出犯罪嫌疑人的手机号码,笔者设计了一款短信监控软件,这款软件采用了和现有监控软件完全不同的设计思路,可以截获手机发出的所有短信,包括木马发出的短信数据。
4.1 Android系统的短信发送接口
Android系统提供的短信发送接口基本都封装在SmsManager和SmsMessage类中[5]。图8显示的是使用SmsMessage类发送短信的一段典型代码。使用Intent机制发送短信,smsto后面是接收短信号码,sms_body后面参数是短信内容。
图8 通过SmsMessage类发送短信
图9显示的是使用SmsManager类发送短信的典型代码。SendTextMessage函数负责发送一条短信数据,参数1代表目标电话号码;参数2是短信中心号码,null为默认中心号码;参数3为短信内容;参数4封装了短信发送成功或失败的状态信息;参数5封装了对方接收短信成功或失败的状态信息。目前在鉴定工作中遇到的APK样本程序均采用SmsManager类的SendTextMessage函数发送短信。本文以此函数为例介绍犯罪嫌疑人手机号码的提取方法,其它类型接口也可采用相同方法建立。
图9 通过SmsManager类发送短信
4.2 利用Hook机制劫持SendTextMessage函数实现外发短信拦截
Hook技术通过向目标进程注入动态链接库,替换进程中原有的函数,从而实现特定功能。最初Hook技术主要用于修改、完善操作系统的一些默认函数,增加某些特定功能。例如,各类Windows平台上开发的电子词典软件均具有一个自动光标取词功能,就是利用Hook技术把操作系统默认的字符串输出函数替换为电子词典开发商自设函数,从而可以得到屏幕上任何位置的文字信息。
图10 利用Hook机制实现短信拦截
如图10所示,本文使用Hook技术实现对木马进程Trojan中SendTextMessage函数的劫持,当木马进程调用SendTextMessage函数发送短信时,进程实际调用执行的是经过替换的Hook_SendTextMessage函数。这个函数在执行原始短信发送任务之后,会通过一个自编函数Get_Tel_Message从接收到的参数中提取出短信目的号码和短信内容,之后返回进程,执行后面正常的逻辑功能。
实现Hook木马进程需要解决的问题:如何附着目标进程,如何向目标进程注入特定的动态链接库,如何促使目标进程执行自己编写的替换函数。这些繁琐、复杂的任务不需要我们自行编写代码去完成,可以利用现有的Android平台的Hook工具来实现。目前现有的Android平台Hook工具:Xposed框架和CydiaSubstrate框架。本文采用CydiaSubstrate框架实现Hook木马进程中的SendTextMessage函数。
CydiaSubstrate框架是一个Android系统代码修改平台,通过它可以修改任何系统函数功能,这些函数可以是用Java或者C语言编写。Android系统上的Hook技术包括全局Hook和特定进程Hook,为了提高软件操作的简便性和适用性,本文采用全局Hook技术,如图11所示。在Android平台上所有进程都是由zygote进程孵化出来的,zygote进程在启动运行时会建立一个dalvik虚拟机实例,当它每次孵化一个新的进程运行时,这个dalvik虚拟机会自动复制到新产生的进程中去,这样一来,每个新产生的进程都有一个独立的dalvik虚拟机实例。本文选择对zygote进程实施Hook(对SendTextMessage函数实施替换,实现短信号码和短信内容的劫持提取),从而达到对Android系统上运行的所有进程(包括木马进程的Hook)。这样作的好处是开发出的软件只需运行一次,就可以对不同的木马程序外发短信情况进行监视,而不需要对每个木马程序进行单独设置。
图11 对zygote进程实施全局hook注入
4.3 短信拦截软件的设计、测试
跨进程Hook操作需要Root权限,因此要先将测试手机设置为Root模式。之后,从官方网站下载Cydiasubstrate框架本地服务应用程序Substrate.apk和动态连接库文件,将这些程序文件安装到测试手机上。之后按照如下步骤编写、测试短信拦截软件。
首先创建一个新的Android工程,由于设计的短信劫持程序将来是以插件的形式加载运行,因此不需要activity。之后,在AndroidManifest.xml文件中配置权限和主入口,代码如图12所示。声明cydia. permission.SUBSTRATE权限和substrate的主入口。
图12 添加权限和主入口
实现主入口Main.Java类,Hook系统SmsManager类中的SendTextMessage函数,部分核心代码如图13所示。程序首先调用HookClassLoad函数检测SmsManager类何时被加载,函数原型定义如下:void hookClassLoad(String name, MS.ClassLoadHook hook);其中name参数存储类名称,采用“包名+类名”格式,使用“.”符号分隔;Hook 参数表示成功Hook一个类之后返回的指针。因为一个被监控的特定类可以在任何时刻被目标进程加载,因此,CydiaSubstrate通过这个方法可以检测特定的类何时被加载,并在这个类被加载时发出通知。之后,程序调用GetMethod函数获取SmsManager类中的SendTextMessage方法。利用HookMethod函数实现Hook功能,从原始SendTextMessage方法中依次提取出目标电话号码、中心号码和短信内容,将这些信息利用系统日志打印输出。
图13 hook系统SmsManager类中的sendTextMessage函数
最后重新启动测试手机,运行木马程序,在log中可以查看到木马程序给犯罪嫌疑人手机发送短信的日志记录,从中可以提取出犯罪嫌疑人的手机号码和短信内容,日志记录样见图14。
图14 日志记录样
5 总结
本文提出的动态检验方法可以从木马发出的通信数据中提取出解密之后的犯罪嫌疑人手机号码、电子邮箱账户名和密码,可以获得木马程序运行之后表现出的行为特征[6]。该方法的缺点是将测试手机内的短信箱和通信录发送到犯罪嫌疑人手机上。因此,应对测试手机内存储的相关信息进行预处理,防止引起犯罪嫌疑人察觉。可以研究采用虚拟机的方法对木马程序进行测试,所有短信和邮件数据都在虚拟机环境内收发,以达到更好的隐蔽性。
[1]黄志敏,熊纬辉.利用“手机短信木马”实施网络盗窃犯罪的特点及防控对策[J].河北公安警察职业学院学报,2016(16):37-40.
[2]徐国天.GSMS类型伪基站检验方法研究[J].警察技术,2016(3):57-60.
[3]徐国天.基于“行为模拟”的木马线索调查方法[J].刑事技术,2014(2):19-22.
[4]董蕾,黄淑华,尹浩然.基于Android平台的手机木马关键技术分析[J].信息网络安全,2012(11):63-65.
[5]蔡罗成.Android后台监听实现机制浅析[J].信息安全与通信保密,2010(6):39-41.
[6]徐国天.基于“伪基站”的电信诈骗犯罪案件线索调查方法研究[J].中国刑警学院学报,2015(4):38-41.
(责任编辑:于 萍)
Research on Dynamic Forensic Method of SMS Hijacking Trojan
XU Guo-tian
(Computer Crime Investigation Department of Criminal Investigation Police University of China Liaoning Shenyang 110035)
In a number of new Trojan program, the suspect’s phone number, email accounts and other information are encrypted. It is a diffcult problem to crack the encrypted data. A dynamic test method for mobile phone Trojan program is presented. In this test, Trojan program is run on a mobile phone, and Trojan will automatically decrypt data. Decryption data will appear in the e-mail and messages sent by Trojans. As long as we capture the data, we can extract the clear text data. The method can be used to extract the suspect’s email account and password from the email data sent by Trojan horse. The message monitoring software designed by the author can be used to capture the short message data which is sent by Trojan horse, and extract the suspect’s mobile phone number. The dynamic test method of mobile phone Trojan can be used to test the new Trojan horse.
SMS Hijacking Trojan Dynamic forensic ARP monitoring HOOK
TP31
A
2095-7939(2017)04-0111-06
10.14060/j.issn.2095-7939.2017.04.023
2017-03-27
辽宁省教育科学“十二五”规划课题(编号:JG14db440); 辽宁省自然科学基金计划项目(编号:2015020091); 公安理论及软科学研究计划课题(编号:2016LLYJXJXY013);公安部技术研究计划课题(编号:2016JSYJB06)。
徐国天(1978-),男,辽宁沈阳人,中国刑事警察学院网络犯罪侦查系副教授,主要从事电子物证研究。