APP下载

Android应用内话费计费安全防控体系*

2017-09-30黄斐一余洪李琳

电信工程技术与标准化 2017年9期
关键词:话费计费逆向

黄斐一,余洪,李琳

(咪咕文化科技有限公司,北京 100032)

Android应用内话费计费安全防控体系*

黄斐一,余洪,李琳

(咪咕文化科技有限公司,北京 100032)

随着移动互联网业务的飞速发展,应用免费、应用内计费(In-App-Purchase)被越来越多的用户所接受。主流的计费通道包括支付宝、微信和手机话费支付。本文探讨了如何构建一个应用内话费计费的安全防控体系,通过计费SDK软件加固、异常计费行为发现、常态化计费SDK更新和升级等方式,进行端到端的安全管控。

安卓手机应用;应用内话费计费;手机支付;安全

1 引言

应用内计费(In-App-Purchase)指用户可以免费下载的手机应用(下称手机App或App),但在使用应用的过程中购买App内的数字产品并支付费用,比如:游戏的道具、虚拟货币,音乐和视频等等。用户支付的方式多种多样,主要分为手机话费支付和非话费支付两大类。若App希望提供手机话费的支付能力,它一般需要集成由电信运营商提供的话费计费SDK,并成为相关运营商的合作伙伴。当用户购买App中的数字内容时,App就会调用话费计费SDK提供的话费计费通道,通过运营商完成代扣费。若App希望提供人民币支付的能力,一般的做法是集成由微信和支付宝提供的支付SDK,并在计费的时候由App调用。

从用户的角度来说,支付分为有密码支付和无密码支付。有密码支付以微信支付、支付宝支付为代表,即每次支付前用户需要完成登录、账号密码验证的步骤,方可发起支付。无密码支付以运营商的手机话费支付为代表,它可以使用用户的手机号码(本人或他人)完成支付,而无需提前设定、支付时使用账号和密码,这种场景以中国移动咪咕公司和中国移动互联网公司的手机话费支付为代表。以中国移动咪咕公司的话费计费SDK为例,当App调用计费SDK的计费接口时,SDK根据一系列条件判定本次计费的策略,包括一键支付、图形验证码、短信验证码。一键支付策略无需用户输入任何信息、直接点击“确认支付”按钮即可完成计费;图形验证策略需用户根据看到的图片输入要求的内容、并点击“确认支付”按钮即可完成计费;短信验证码需用户首先填入手机号码、点击“获取验证码”,而后填入获取到的短信验证码,并点击“确认支付”按钮方可完成计费。

在上述无密支付场景中,无论哪一种策略,都无需用户事先设定账号、密码。在提供极大支付便利的同时,也引入了一定的信息安全风险:在没有用户输入账号和密码的前提下,如何确认本次计费系使用官方合法的计费SDK发起,如何确认本次支付来自于用户的真实意愿和真实行为。这就是本文需要探讨的课题。

2 应用内话费计费安全风险

一个完整的话费计费流程包括计费确认页面展示、用户确认、订购3个主要步骤。这3个步骤都是由运营商提供的官方计费SDK承载和展示的。是不法分子往往尝试破解计费SDK,并且通过破解的计费SDK发起计费,这样一来,他们就可以实现如下几种非法操作。

2.1 诱导消费

恶意App往往将官方计费SDK的计费确认页面进行覆盖、篡改,淡化收费提示、修改金额、甚至直接将页面提示修改为“免费”、“赠送”等误导性字眼,以此设置各类消费陷阱诱导用户完成付费。

2.2 计费点盗用

集成运营商的话费计费SDK的App需要事先报备和审核,通过审核的App方能被分配一系列的计费点和相应的计费SDK。计费SDK需通过一系列安全手段将该SDK与该App进行强绑定,防止该计费SDK被使用在非报备的App上。若不法分子通过逆向和破解的手段将此绑定关系解除了,即可将该计费SDK集成到其他的非法App中(如涉黄、涉赌类App),利用合法App的计费点进行计费。

2.3 暗扣

暗扣特指未经过用户确认和允许,在用户不知情的情况下私自发起的计费。它需要将用户手机中事先植入的木马、病毒等控制程序,在用户不知情的情况下模拟用户发起计费请求。除此之外,还需要对计费SDK进行破解,使得计费请求发起的时候无任何计费确认页面弹出、且无需用户手动开展任何确认。

3 应用内话费计费安全防控体系

在不使用账号、密码作为用户计费验证手段和可信根的情况下,计费SDK本身即成为新的可信根。我们需要通过它来保障计费请求系合法的App调用合法的计费SDK发起、保障计费请求由用户本人意愿发起以及用户行为的合法性。

为此我们设计了一整套话费计费安全防控体系,如图1所示。它主要包括3个部分:在计费SDK上线前,通过软件加固的手段防止恶意破解;在计费过程中,一旦发现非法App通过破解的SDK发起的计费请求,或用户行为与正常用户行为差异极大,即予以拦截;为保证安全加固手段和异常识别手段的长期有效,计费SDK会开展周期性的更新。

图1 话费计费安全防控体系

3.1 计费SDK安全加固

计费SDK安全加固是指对SDK的代码(Java和C)通过各种技术手段进行保护,防范不法分子通过逆向分析[1]的方法破解代码的核心逻辑。软件安全加固包含了一系列的技术手段,包括代码混淆、白盒加密、反调试、反篡改、虚拟机等。这些软件加固手段往往不会单独使用,而会同时使用、相互守护。

3.1.1 代码混淆

代码混淆[2]是指通过增大代码复杂度、冗余度的方法,在正常的业务代码中插入大量的垃圾代码,对代码中定义的字符串、变量、数学表达式进行变形、等价变化,对数据流和控制流进行变形使其增加大量的分支逻辑、跳转逻辑,从而提升代码逆向分析破解的难度、保护代码核心逻辑。

3.1.2 白盒加密

白盒加密[3]不是一个算法,而是某种加密算法的表现形态。某种加密算法的白盒加密形态将原有以字符形态存在的密钥(如“123”)变成以代码的方式存在(如函数A、B、C的运行结果拼装而来),提升加解密算法的安全性。

3.1.3 反调试

调试技术指通过计算机的调试接口手段获取程序运行过程中产生重要变量和数据的技术手段。反调试技术[4]则是防止被保护的程序被第三方程序调试。它主要通过监控各类计算机调试接口发现调试,通过布置调试阻碍让破解者无法调试,比如一旦发现调试即让被保护的程序崩溃或退出。

3.1.4 反篡改

对于破解者来说,当发现了他的调试无法开展下去,且一直被一段反调试程序破坏的时候,他往往会篡改这段反调试程序,使其不起作用。这时就是反篡改技术发挥作用的时候。所以说反篡改技术一般配合其他安全加固手段共同使用,用于守护其他安全加固手段。当这些加固手段被破坏的时候,发篡改程序就能够起到监控、发现、防止篡改的作用。

3.1.5 虚拟机

图2 虚拟机保护技术

上述多种软件加固技术可以理解为传统的加固技术。遗憾的是,被加固的代码最终会编译为x86或ARM CPU能够识别的指令集。对于逆向分析者来说,通过专业的逆向分析工具,如IDA,即可对其进行直接开展逆向工作。与传统加固手段不同的是,代码虚拟机化[5]采用将x86或ARM的汇编指令进行了变化,如将ARM指令集中的MOVE指令变成了其他的指令命名方式。这样一来,等同于构建了一个虚拟的CPU,如图2所示。所有代码先进行虚拟指令变形,在运行时则通过一个解释器解释执行。这样一来,代码在执行的过程中会按照私有的指令执行,并通过解释器解释成CPU可以识别的机器码执行。这种代码保护手段成为虚拟机保护(VMProtection)。通过这种手段保护的代码无法被IDA直接识别和逆向。破解者需先攻破虚拟代码解释器方能够开展有效的逆向工作。尽管虚拟机技术被业界公认为下一代代码安全保护技术,但是目前尚未有App/SDK真正的使用虚拟机保护技术保护其代码。这是因为虚拟机技术需要在保障安全性的同时,克服两大难题:兼容性和运行效率。所以虚拟机保护产品需要走向成熟还有较长的路要走。

3.2 计费异常识别

与大型网络游戏防范游戏外挂的手段类似[6],开发人员会在计费SDK中代码中植入“打点”代码。所谓打点代码,通俗的说就是一系列与主业务逻辑无关的、以安全功能为主要目标的代码。在计费SDK中,打点代码不参与计费流程所必须参数的交互,比如不处理给哪个用户计费、购买什么、多少价格等等。它常常开展复杂的数学计算和数学变换,也往往尽可能多的抓取手机客户端的软硬件信息,如手机型号、品牌、操作系统版本等。这些打点代码获取的数据和信息是进行异常识别的基础。

根据HTTP网络交互特性,交互报文的长度是没有限制的。所以,打点代码采集的信息的上传随着计费SDK客户端与服务端的交互同步进行。这些信息会被添加到业务报文后面,随着业务报文一起被上传到服务端。基于收集到服务端的打点信息,服务端即可以判断计费SDK是否完整,从而判定识别非完整计费SDK发起的计费进行异常判定。举个非常简单的例子,打点代码可以在业务报文后面添加一个字节,这个字节是常数“1”。服务端会校验每一次计费请求之后有没有这个常数“1”,若没有则可判定为非法SDK发起的计费请求。

基于用户行为的异常判定依据正常用户行为模型开展。一般来说,会事先设定一系列正常用户的行为模式。每次计费发起时会通过这些模型进行匹配,若匹配到异常行为模型则可直接判定为异常请求;若匹配到正常行为模型则可判定为正常请求;若未匹配到异常模型、亦未匹配到正常模型,系统一般不会进行处置,而留待事后大数据分析进行判定。未能判定的原因可能是模型不全面,需要抽象该行为并制定新的模型;也可能是单条请求无法判定,需要通过大数据关联分析进行确认。

3.3 计费SDK动态更新

任何安全防护手段都一直面临着逆向分析和破解攻击,所以周期性的更新计费SDK是非常必要的。更新包括对安全加固手段的更新、打点代码的更新以及异常判定模型的更新。更新分为静态更新和动态更新两种,两种更新方式各有优劣、各有适用场景。静态更新指计费SDK更新后需App重新集成新版本的计费SDK,并且将集成了新版SDK的App进行重新发布。这种更新方式往往发生在计费SDK与App之间的接口发生变动或者计费SDK有较大的框架性变化时使用。动态更新指计费SDK的自更新,无需App重新集成和发布。这种更新方式往往在计费SDK进行安全性更新以及无较大框架下变化的情况下使用。

4 结论

本文介绍了一个计费安全防控体系,它通过计费SDK软件加固、异常计费行为发现、常态化计费SDK更新和升级等技术和机制为安卓手机应用话费计费构建了端到端的安全保障。当然,只有持续的更新才是保障安全的基石。上述框架中的任何技术、模型和机制,都需要持续不断的发掘新技术、新思路,强有力的对抗破解和逆向分析。

[1] 赵荣彩,庞建民,张靖博. 反编译技术与软件逆向分析[M].北京:国防工业出版社,2009.

[2] 罗宏,蒋剑琴,曾庆凯. 用于软件保护的代码混淆技术[J].计算机工程, 2006(32).

[3] Gu, Yuan Xiang, Mcrae Paul, Nicolescu Bogdan, et,al. Interlocked binary protection using whitebox cryptography: US 9141787[P].2015.

[4] 徐剑,武爽,孙琦,等. 面向Android应用程序的代码保护方法研究[J]. 信息网络安全, 2014(10).

[5] 章华清. 基于虚拟机的软件动态保护系统的设计与实现[D].西安:西安电子科技大学, 2016.

[6] 腾讯游戏研发部游戏安全中心. 游戏安全:手游安全技术入门[M]. 北京:电子工业出版社,2016.

Android IAP security management system for Android applications

HUANG FEI-yi, YU Hong, LI Lin
(Migu Culture Technology Co., Ltd., Beijing100032, China)

With the development of mobile Internet, download for free and in-app-purchase is becoming more and more popular.Primary online payment includes Alipay, Tenpay and mobile phone payment. In order to tackle with this problem, an end-to-end IAP security management system for Android applications is introduced in this paper, which includes methodologies of software hardening, abnormal charging detection and frequent SDK update and upgrade.

Android applications; in-app-purchase; mobile phone payment; security

TN929.5

A

1008-5599(2017)09-0013-04

2017-08-26

* 中国移动集团级一类科技创新成果,原成果名称为《多版本、新机制的App计费安全SDK能力系统》。

猜你喜欢

话费计费逆向
5G网络独立组网中融合计费方案的研究
逆向而行
基于云计算和微服务架构的高速公路计费系统
生活中的分段计费
挑战舌头
买东西 送话费 生意马上好几倍
充话费
基于AM3354的电动汽车充电监控计费系统电表通信的实现
逆向工程技术及应用