安卓应用中的信息泄露问题探究

2018-04-16 15:07江苏联合职业技术学院无锡机电分院张灵芝
电子世界 2018年23期
关键词:通话记录安卓内存

江苏联合职业技术学院无锡机电分院 张灵芝

随着社会经济和科学技术的飞速发展,安卓系统被应用的越来越广泛。安卓应用系统的通信架构由客户端和服务器组成,作为当下最为流行的操作系统,其安全性成为社会各界人士关注的重点。基于此,本文通过对安卓应用中的信息泄露问题进行分析,从内存信息泄露、敏感信息泄露、隐私信息泄露等方面入手,详细的论述了安卓应用中信息泄露问题的解决对策。

前言:随着智能手机应用越来越广泛,安卓应用发展愈发迅速,且很多安卓应用都是不收费的,一部分开发者会在系统中嵌入广告库,以此来获取更多的利润。除此之外,智能手机功能越来越丰富,许多信息被储存在手机中,如位置信息、设备标识符等。为了对这些信息进行更好的保护,必须深入分析各种信息泄露的问题,制定合理的解决对策,这样才能为安卓应用的安全性提供保障。

1 安卓应用中的信息泄露问题的系统

1.1 内存信息泄露问题

1.1.1 内存溢出

内存溢出导致的内存泄露主要包括两方面,其一是注册没有取消出现的内存泄露问题;其二是没有关闭集合中对象而出现的内存泄露问题。前者内存泄露与纯Java内存泄露相比,情况更为严重。由于在注册过程中,一些安卓程序会持续引用相关程序对象(注册机制),即使移动设备上的安卓程序停止运行,但是其他应用程序也会继续运行该程序,使得用户注册信息泄露,且泄露的内存信息不能被当做垃圾收回。后者是指人们在应用程序对象时,会将其加入到一个集合中,当应用完成之后,却没有及时清理掉,长此以往,集合不断增大,当溢满之后,会出现内存泄露现象,如果集合处于静态状况下,其泄露程度更大。

1.1.2 没有关闭资源对象的内存泄露

在应用资源对象过程中,通常会采用一定的缓冲手段,当这些文件应用完毕之后,相关人员要及时将它们关闭,为它们缓冲内容及时、准确的回收内存提供保障。而这些缓冲内容不仅仅是储存于Java虚拟机里,同时还存储于Java虚拟机之外。如果设置这些缓冲内容的引用为空,但是不将它们关闭,这种情况下,会有一部分不良代码使内存出现更大的压力,极易引起安卓应用的内存泄露情况(邹明宇,Android应用程序的隐私泄露检测关键技术研究:燕山大学,2017年)。不良代码致使内存出现压力的原因主要有:Bitmap调用方法不当;在对Adapter构造过程中,缓存应用不当甚至没用。

1.2 隐私信息泄露问题

1.2.1 短信泄露

短信是安卓用户进行沟通的重要方式之一,短信中储存着各种各样的联系人信息和用户自身的信息。安卓应用在获取到智能手机发送短信的权限之后,通过短信发送用户隐私信息,并将这些信息发送到目的号码中。在此过程中,一些人会窃取这些隐私数据,并进行恶意传播。同时还有一些恶意程序会发送各式各样的扣费信息,为用户带来了非常大的损失。除此之外,在安卓系统中短信被储存到SQLite数据库里,在查询数据库时,会使用户隐私泄露并恶意传播。

1.2.2 通话记录和通讯录泄露

安卓设备中的储存的通信录是用户对联系人信息进行记录的主要方式之一,而且在通讯录中,不但记录着与联系人相关的联系方式,同时还记录着非常多的其他信息,如与联系人之间的关系、电子邮箱、家庭住址等等。一旦这些信息泄露出去,会为使用者带来不必要的麻烦。此外,对于安卓系统中的通话记录和通讯录中的各种信息一般情况下是被储存在SQlite数据库里。安卓应用在得到相关权限之后,能够随时随地的泄露相关信息,并进行传播等。

1.2.3 网络泄露

网路泄露是安卓系统隐私泄露的主要途径,同时也是危害范围最广的途径。安卓应用系统在请求URL过程中,会携带大连的用户隐私信息,并将这些信息发送到相应的服务器中,这使得用户的隐私信息在无意识中受到威胁。同时网络泄露形式多种多样,在安卓系统中,进行网络连接时,可以以不同的方式与网路相连。除此之外,由于Http请求类型比较多,如POST、GET等,这些请求类型使网咯连接方式多出了很多不确定性。

1.3 敏感信息泄露问题

1.3.1 数据明文泄露

安卓应用程序在正常运行过程中,会涉及到大量的数据输入和输出,如程序运行状态以及各个参数的设置等数据都需要在外部储存器中进行保存,如果不保存,在系统停止运行时,会丢失大量数据。同时Shared Preferences的创建即可读又可写,文件内容的明文编码或者是明文非常容易被其他应用截取,出现敏感信息泄露现象。

1.3.2 cookie管理不当

服务器在运行过程中,通过cookie类对象操作客户端cookie,然后利用相应的方法对客户端发送的全部cookie数组进行获取,随后设置客户端。在此过程中,HTTP协议是不安全的,且是无状态的。与HTTP协议相关的数据没有经过任何加密措施直接上传到网络中,使得敏感数据被截获的概率大大增加。

2 安卓应用中的信息泄露问题的解决对策

2.1 内存信息泄露的解决对策

2.1.1 内存溢出的解决办法

一般情况下,内存溢出导致内存泄露的处理方法从以下几方面进行:1)引用内存过程中,直接进行处理,处理方法有弱引用、强引用以及软引用等。首先,强引用。主要是指在heap堆中构造一个新的Object对象,以“o”引用此对象,然后在利用“o”构建上述对象与new Object()之间的引用关系。这个过程便是强引用,同时在进行强引用过程中,还要与弱引用和软引用相互配合,使安卓程序呈现强弱随时转换的状态,这样可以有效防止内存泄露。其次,软引用,软引用主要用于高速缓存的内存数据中,在jvm警报内存不足之前将全部的软引用清除出去,这样对于gc来说,就可以收集软类型对象,最大限度的解决内存溢出问题。该解决方案主要参考Android内存溢出解决方案(OOM)整理总结。2)对Dalvik虚拟机进行优化。这种方法主要是对Dalvik虚拟机中的堆内存进行合理分配,在此过程中,对安卓平台而言,它的托管层主要应用的是Dalvik JavaVM,对其进行优化从手动处理GC考虑,从而解决内存泄露问题(朱洪军,韩洋,华保健,陈灏,移动应用程序内存泄露机制分析与检测方案设计:计算机工程与应用,2016年17期)。

2.1.2 没有关闭资源对象问题的解决对策

解决没有关闭资源对象引起的内存泄露问题主要从以下几方面进行:1)将Bitmap内存及时回收。安卓系统中,有着独立的回收垃圾机制,这个机制可以不定期的将无用的内存空间进行回收,Bitmop属于私有构造。开发者在开发程序过程中,不能直接创建一个新的Bitmap对象,可以将Bitmap实例化。这时将Bitmap加载到内存中,其内存区域有两部分,其一是Java部分,其二是C部分。系统在不运行过程中,Java部分会实现自动回收功能,而对于C部分来说,虚拟机不能实现直接回收功能,可以通过对底层功能进行调用,即调用recycle()将C部分内存释放,这样便可以有效解决内存泄露问题。详见曹邦琴和徐昊的Android应用中优化Bitmap使用避免内存溢出。2)避免Context超出范围。如果开发者不想对内部各个对象的生命周期进行控制,那么要避免在Activity中出现非静态对象,从而有效的解决内存泄露问题。

2.2 隐私信息泄露的解决对策

2.2.1 短信泄露的解决对策

在制定短信泄露的解决对策时,需要从以下几方面考虑:1)严格控制安卓系统权限。用户应该具备一定的风险意识,尽可能的避免将访问网络权限和访问隐私权限同时对可以程序开放。在日常生活中,要将很少使用或者是不用的功能,如手机定位、红外、高清摄像以及蓝牙等停止使用或者是关闭,避免移动设备被病毒或者是远程攻击搜索到,当需要这些功能时,再将其打开。此外,在使用免费WIFI时,要选择自身信任的网络,不能轻易对外界发送个人隐私信息。2)在正规平台中对软件进行下载。智能设备用户在下载软件过程中,要以软件官方平台为准,不要到论坛或者不知名的网站中下载。同时对于不明来路的软件以及不良网页都要禁止在手机中打开,到正规的手机营销商处对手机进行维护,防止病毒程序植入。

2.2.2 通话记录和通讯录泄露问题的解决对策

针对这种问题来说,需要从以下几方面考虑:严格遵守程序保密规定。安卓程序中的保密规定不但对保障国家安全、商业秘密保护以及企业数据保护有着巨大的作用。同时也对个人通话记录和通讯录的隐私信息保护起到非常大的作用。用户在使用安卓应用程序过程中,有时为了方便办事,常常将通话记录和联系人保存到程序中,如电子邮件、QQ、微信、通信、通讯录等等软件程序中,常会保留大量的通话记录。因此,为了防止各项通话记录被窃取,严格遵守这些软件中要求的保密规定,从根源上杜绝信息泄露。同时也可以使用代码或者是简写的方式避免个人隐私信息泄露。

2.2.3 网络泄露的解决对策

网络信息泄露解决对策的制定需要从以下几方面进行考虑:1)检查Root权限。在安卓系统中,其底层内核为Linux内核,Root为Linux管理员,有着最高权限。它可以停止或者是启动安卓应用程序中的任何一个进程,以此来修改和访问程序中的全部文件。为了防止恶意程序通过Bug获取Root权限,可以使用Python语言,利用特征字符串扫描应用程序的源码,对代码中与Root权线存在一定关系的操作进行查询。以此来解决恶意程序入侵网络导致信息泄露的问题。2)检测组建间通讯。组件间的通讯主要是通过Intent和URLs进行的,安卓应用程序根据URLs相关信息对目标组件进行搜寻。这种情况下,可以先对xml文件进行解析,提取安卓系统申请的信息如组件信息、权限信息等。如果锚函数和源函数同时存在,那么需要参照Susi权限与锚、源函数之间的对应关系,对源码中两种函数的存在与否进行判断,从而找出泄露途径,并更换相关代码,解决泄露问题,整个隐私泄露的解决对策详见燕山大学邹明宇的Android应用程序的隐私泄露检测关键技术研究。

2.3 敏感信息泄露的解决对策

2.3.1 数据明文泄露的解决对策

数据明文泄露的解决对策主要从以下几方面考虑:1)在安卓程序开发过程中,不能直接对相关文件进行创建。避免将敏感数据信息如密码等明文储存于Shared Preferences文件中,从而解决信息泄露问题。2)在代码查询过程中,要采取参数化方法进行查询,避免在SQL语句中之间拼接上用户参数,以此来防止恶意软件或者是黑客对SQL进行注入攻击,从而确保敏感信息不外泄。同时还要禁止安卓程序大面积公布有用的信息,如果用户需要对这些有价值的信息进行访问,应该利用访问控制措施保护它们,从而保证敏感信息不外泄。

2.3.2 cookie管理不当的解决对策

cookie管理不当的解决对策主要从以下几方面进行考虑:1)实现HTTPs。通常情况下,HTTP协议主要是用于服务器和客户端的数据传输,在使用时,未对数据进行加密。因此,要使用协议的加密版本,也就是HTTPs。首先,利用HTTPs通信功能,使服务器具有连接HTTPs连接的处理功能。其次,在SSL/TLS非对称结构加密技术支持下,将客户端请求发送到https协议地址中。在此过程中,客服端和服务器之间在构建进程时会对参数进行加密,即“握手”,以此防止信息泄露。2)管理cookie。在管理时,需要设置中间变量对cookie进行管理。此外,在完成相关任务之后要及时的将cookie数据清理掉,这样才能确保敏感信息不被泄露出去(罗亚玲,黎文伟,苏欣,基于HTTP流量的安卓应用敏感信息泄露检测:计算机应用研究,2017年第5期)。

结论:综上所述,安卓应用中信息的安全性非常重要,确保信息不外泄有着非常大的现实意义。经过上文分析可得,基于安卓应用中信息泄露问题,需要深入分析程序的内存状态,避免内存溢出问题出现,且要确保客户端不被恶意侵扰。同时在服务器端要采取有效措施管理cookie数据以及各类明文的储存。这样才能有效的解决信息泄露问题。

猜你喜欢
通话记录安卓内存
法院调取公民通话记录的合宪性考察
iPhone不卡的秘密曝光:安卓也能享受
外部高速缓存与非易失内存结合的混合内存体系结构特性评测
文物表情包
“春夏秋冬”的内存
分手
一种基于安卓系统的手机侧抓包分析方法
不用解释
安卓L未至安卓M来了!安卓首泄漏M系统
基于内存的地理信息访问技术