浅谈Android开发的安全问题

什么是安全问题?

从黑客的角度定义,只要黑客能够从app中找到一些方法获取我们的源码根据某些明显的字段得到重要信息从而修改程序以达到一定目的;窃取用户信息;窃取本地重要信息间接可以修改用户信息的,都是安全问题。


安全的意义?

安全问题,在Web开发中很重要,同样在安卓开发中,安全也很重要。安全就像空气,看不见摸不着,一旦出现安全,没有及时修复,对于公司将是致命的伤害。但是也有公司故意巧妙地利用安全漏洞做一些营销,效果非常好,当然,这个是基于可控的基础之上。


安全的分类

大的分类分两种:

一、数据通信安全

二、本地app程序安全

数据通信安全又分两类:

app与服务器通信安全和app本地数据通讯安全

一、数据通信安全

app与服务器通信安全

与服务器进行数据交互,数据肯定要加密。加密主要有对称加密、非对称加密,不可逆加密。从安全性考虑可选择对称加密AES加密方式。AES主要是用在数据本身的加密,即使传输过程中被截取了,也是加密过后的数据。但AES的弊端的是,客户端加密的话,密钥肯定是储存在app中,如果app被成功破解了,数据也就被暴露了。所以只有app本身程序的安全也解决了,app才能相对安全。

非对称加密最普遍的就是RSA加密,因为RSA加密有个长度限制,这就导致了RSA加密不能用于所有的数据交互。但是可以用到一些短数据,比如用户个人信息之类的,在交易中,一次订单的数据也不是很大等。

不可逆加密,比如MD5加密、SHA加密等。所谓的不可逆加密就是,只能单向加密,不能反向解密。MD5把数据加密,最后得到固定长度的16进制编码。这个加密的作用一般是匹配验证,验证某个数据是否改变。比如密码,在向服务器存储密码,一般不会存储明文密码。安卓本地存储个标志也一般不会明文存储。

在通信上,有时并不一定对数据本身进行加密。比如可以使用令牌的方式,具体做法是:用户登录成功后,服务器生成一个访问令牌给客户端,此服务器设置令牌的有效期。客户端的所有请求都携带这个令牌去请求数据。当令牌时效的时候,客户端用户所有请求都请求不到,客户端用户退出登录状态。令牌时效都是由服务器来判断,时效的方式:1、令牌过期。这个一般是用户长期不登录,服务器设置的过期时间已经到了。2、令牌错误,一搬是黑客拿未知令牌恶意请求数据3、令牌更换,一般是客户端在另一台设备上登录重新获取了最新令牌。另外,令牌也可以使用户不用再次输入密码再次登录。

从安全方式来看,请求数据最好使用https协议进行请求。

app本地数据通讯安全

主要是指组件之间的通信,广播,某个图片或者数据标记,携带的明显关键字,有可能被反编译之后smali中查到,比如sharedpreferces存储的xml文件数据

二、本地app程序安全

1.APK破解

程序开发中都会去混淆打包,但是对于逆向工程的高手来说,APK 包非常容易被反编译成可读文件,稍加修改软件逻辑或者插入恶意代码,替换广告商 ID就能重新签名打包成新的 APK。

建议应对方法:

使用 ProGuard、DexGuard  等工具混淆代码;是给程序加固,第三方加固工具都可以用。重要逻辑用 NDK 实现。.so库相对来说很安全了。做三方库的公司,大都把sdk重要的打成.so库,我认为不光是因为Java不能够完成而只能c++完成,还有保密安全这一措施。


2.数据的存储

外部存储(SD 卡)上的文件没有权限管理,所有应用都可读可写。开发者把敏感信息明文存在 SD 卡上,或者动态加载的 payload 放在 SD 卡上;sharedpreferces存储的xml文件数据,本地数据存储是在手机的本地存储data文件下,虽然访问需要系统权限,但对于root的手机,这些在本地的数据很容易暴露出来。

建议应对方法

不建议全局可读写的内部存储方式,不要把敏感信息放在外部存储上面;在动态加载外部资源的时候验证文件完整性;一些重要数据(用户账号密码等),或者标记存储本地的时候也应该进行加密,或者直接存储hash码,而不能直接存储明文。有些存储本地的数据,比如令牌,就需要进行加密处理。登录成功后的重要信息,如需要存储本地,也需要加密。


3.组件暴露 (Activity, Service, Broadcast Receiver, Content Provider)

组件在被调用时或调用其他组件时未做验证,通过调用获取某些信息,构造某些数据。(比如:调用暴露的组件发短信、微博等)。

建议应对方法

验证输入信息、验证组件调用等。android:exported 设置为 false。使用 android:protectionLevel="signature" 验证调用来源。

如果是非常重要的组建,不要在这里面进行配置,如果可以用fragment完成的,最好用fragment来做。并且重要的信息不要在配置文件里面配置。


4.WebView

恶意 App 可以注入 JavaScript 代码进入 WebView 中的网页,网页未作验证。恶意网页可以执行 JavaScript 反过来调用 App 中注册过的方法,或者使用资源。这些恶意程序嵌入 Web App,然后窃取用户信息,远程调用 App 代码。更有甚者,通过 Java Reflection 调用 Runtime 执行任意代码。

建议应对方法

不使用 WebView 中的 setJavaScriptEnabled(true),或者使用时对输入进行验证。



总结

Android 应用的漏洞大部分都是因为开发人员没有对输入信息做验证造成的,另外因为 Intent 这种特殊的机制,需要过滤外部的各种恶意行为。再加上 Android 应用市场混乱,开发人员水平参差不齐。再加上 root 对于 App 沙箱的破坏,Android 升级的限制。如果想要保证你的应用没有安全漏洞,就要记住:永远不要相信外面的世界。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容