简析移动客户端安全
2020-01-29 09:00:53 Author: www.freebuf.com(查看原文) 阅读量:299 收藏

风起云涌的高科技时代,随着智能手机和iPad等移动终端设备的普及,人们逐渐习惯了使用应用客户端上网的方式,而智能终端的普及不仅推动了移动互联网的发展,也带来了移动应用的爆炸式增长。层出不穷的攻击方式无疑是对我们现阶段大家生活必不可少的工具——手机带来更多的烦恼与危害。

网站移动客户端的使命

1、首先,做移动客户端,这是一个商业行为,其本质和动力是一种商业诉求,而不仅仅是一个技术开发和用户体验的考量;

2、对于网站来说,竞争的本质是抢夺用户的时间,由于移动硬件的丰富和普及,用户的时间从PC端分离出来很大一部分给移动端,所以,从抢用户时间的角度来讲,移动端是一个新战场,必打。

3、避免被浏览器绑架流量入口,降低对搜索引擎的依赖度,同时APP可以做到快捷、安全、界面的一致,用户使用APP的时候不会受到第三方的任何干扰。

移动APP面临的威胁

在海量的应用中,APP可能会面临如下威胁:

这是从黑客攻击角度来分类的。然后,简单介绍一下手机中最常见的威胁方式。在这里,我们从木马病毒说起。

手机病毒。手机中的软件,嵌入式操作系统(固化在芯片中的操作系统,一般由J**A、C++等语言编写),相当于一个小型的智能处理器,所以会遭受病毒攻击。而且,短信也不只是简单的文字,其中包括手机铃声、图片等信息,都需要手机中的操作系统进行解释,然后显示给手机用户,手机病毒就是靠软件系统的漏洞来入侵手机的。手机病毒要传播和运行,必要条件是移动服务商要提供数据传输功能,而且手机需要支持 Java等高级程序写入功能。现在许多具备上网及下载等功能的手机都可能会被手机病毒入侵。

手机病毒可能造成的危害主要表现在以下五个方面。

危害一:侵占手机内存或修改手机系统设置,导致手机无法正常工作。手机的工作原理与电脑类似,有专家认为手机就是经过简化的电脑设备,手机的正常运转必须依赖一定的软件和硬件环境。危害二:盗取手机上保存的个人通讯录、日程安排、个人身份信息等信息,对机主的信息安全构成重大威胁。危害三:传播各种不良信息,对社会传统和青少年身心健康造成伤害。危害四:攻击和控制通讯“网关”,向手机发送垃圾信息,致使手机通讯网络运行瘫痪。

木马病毒。是一种计算机黑客用于远程控制计算机的程序,一旦进入就会驻扎在计算机里,随着计算机的运行而自动运转,对目标计算机进行特殊的操作,一般是窃取密码和重要文件,对控制计算机实施监控和资料修改等操作。木马病毒能正常工作必须由客户端程序和服务端程序建立网络通信,这种通信是基于IP地址和端口号的。一般客户端不是木马程序,服务端才是木马程序,隐藏在服务端的木马程序一旦被触发,就会不断将通信的IP地址和端口号发给客户端,客户端利用服务端发出的信息与服务端建立一条通信线路,最终通过这条线路来控制服务端的计算机。

接下来,我们提出一些安全小常识。

手机病毒的预防

1)乱码短信、彩信,删。乱码短信、彩信可能带有病毒,收到此类短信后,立即删除,以免感染手机病毒。 

2)不要接受陌生请求。 利用无线传送功能比如蓝牙、红外接收信息时,一定要选择安全可靠的传送对象,如果有陌生设备请求连接最好不要接受。因为,手机病毒会自动搜索无线范围内的设备进行病毒的传播。

3)保证下载的安全性。 现在网上有许多资源提供手机下载,然而很多病毒就隐藏在这些资源中,这就要求用户在使用手机下载各种资源的时候确保下载站点是否安全可靠,尽量避免去个人网站下载。 

4)选择手机自带背景。 漂亮的背景图片与屏保固然让人赏心悦目,但图片中带有病毒就不爽了,所以用户最好使用手机自带的图片进行背景设置。

5)不要浏览危险网站。 比如一些黑客,非法网站,本身就是很危险的,其中隐匿着许多病毒与木马,用手机浏览此类网站是非常危险的。

其实,这些都只是进行预防,正所谓“防患于未然嘛”!如果我们担心在使用手机软件的过程中,不小心中招了,那也不用怕。从现在开始,你完全可以下载一个管理手机的安全性APP,这样一来,就可以利用可靠的安全软件智能的去管理我们的手机。

接下来,小编带大家从实际生活中的案例来总结总结。

手机客户端安全吗?

前期,估计大家都被不法分子通过复制大家手机中的移动支付APP盗刷新闻给震撼了。而这件事的轰动是相当大的,我们有在往期的报告中提到过,这里再次帮大家简单提及一下。

主要是骗子可以利用短信和消息发送一个带有恶意代码的链接,点击的受害者自己的理财APP将会被克隆在远程。对,这就是“应用克隆技术”。一经出现,引发了不少网民的恐慌情绪。一些一度被认为威胁不大、厂商也不重视的安全漏洞,竟然能“克隆”用户账户、窃取隐私信息、盗取账号及资金……营造安全移动支付环境,容不得一丝侥幸。手机厂商、应用开发商、网络安全研究者应携起手来,共同落实网络安全法及其他法律法规要求,彻底堵死可能的风险与漏洞。

所以,不明来历的链接不要点;不明来历的二维码不要扫;及时关注官方动态进行app的升级。另外,不要为了方便而取消安全性加强的密码设置。

为了帮助大家顺利预防危害,我们可以从下图简单了解一下。

防止账户被盗刷,有以下几个小窍门:

第一,用自己的手机号绑定理财手机应用。如若绑定自己的手机号,能够在账户产生交易时或是账户异常时及时将相关信息发送至手机上,用户可以随时了解自己的账户动态;在更换手机号后,要第一时间联系银行和理财服务人员,更改绑定手机号;如果手机丢失,应第一时间联系银行和理财服务人员取消相关的手机绑定业务,或采取挂失、冻结账户等方式进行钱财保护。

第二,保管好自己的账号密码、身份信息及手机。不轻易泄露自己的***号、***号、手机号码,不随意将装有理财应用的手机长时间交给他人使用。

第三,关闭理财APP内置功能提高安全性。设置安全系数较高的密码、关闭“小额免密”功能、取消手机APP自动登入模式等措施都能够提高使用理财APP的安全性。

第四,避免使用不可信的网站或公共wifi。强化警惕意识,在发现自己账户异常时,及时与理财产品公司取得联系。

当然,我们还可以从其他安全角度去分析。

移动端的客户端,用户贡献内容积极踊跃,内容品质利他有一定价值?

此类贡献积极的app,具备如下特点:

1,贡献入口在一级界面,固定位置,随时调用,有安全感。

2,用户关系导入方便,方便用户回应互相反馈,个人交际圈内保持动态感。

3,发布流程简单,清晰,容易理解,发布之后即可见到,获得及时回馈。

4,个人页面累积内容,敏感字段展示。

5,用户轻松可以发现更大范围的用户精彩内容、搜索到所需信息。

6,内容复杂多样,往往存在内部链接至其他软件内部内容推广,指多级跳转的现象很多。

7,以时下较为吸引的画面作为广告或者新闻,骗取点击量和浏览量。

以上现象的APP其实都很值得大家思考。

而且,大家有没发现,虽然你手机里装了很多软件,但要比起来最浪费时间的app,应该是具备如上设计特点的app了。然后就是游戏?

APP总体性安全

下面,从APP总体性安全说一下。这里,我们不妨说的稍微专业一点。大致可分为下面几个点:

iOS由于系统封闭,相对安全一些,所以部分安全措施只需要在安卓平台考虑,下面就不做特殊说明了。

一、接口安全

1. HTTPS

HTTPS不再像以前那样是少数金融APP的专利了,特别是iOS从9.0开始默认采用HTTPS,HTTPS基本成为了标配。

2.加密算法

如果光用HTTPS还不够放心,那你也可以用自己的密钥再对接口中的敏感信息进行加密。加密时非对称、对称加密算法最好配合使用,这样既能利用到非对称加密算法的安全性,又能避免其加密内容太长时的性能问题。一般做法是用RSA算法加密传输AES算法的密钥,然后用AES算法加密具体信息。

3. deviceID和Token

大多数情况下,我们需要获取唯一设备号,方便数据统计,以及和用户名密码关联生成token。iOS因为安全原因,已经无法正确获取uniqueIdentifier和MAC地址,而安卓因为生态过于繁杂,在某些机型上取imei、mac也经常会存在问题,所以在两个平台都可以用一个非常偷懒的方法,即直接在本地生成一个UUID作为deviceId并缓存起来。

服务器结合deviceID、用户名密码、时间戳等生成一个token,返回给客户端,之后客户端每次请求必须把token放在http头里返给服务器,这样服务器才会受理请求,返回信息。此外token还应根据自身情况设计一个失效机制,比如2周内没访问过就失效

二、 安装包安全

1.验证包完整性

由于安卓市场的鱼龙混杂和安卓平台的开放性,很容易就被一些不法分子利用,反编译后植入后门代码再重新打包给无知群众使用,以从中牟利。所以我们很有必要去验证包的完整性。这里有几个思路,一是验证签名,二是验证dex文件,三是验证apk,具体的验证可以使用CRC32、MD5这类数据摘要算法。

一个必须要注意的点是如果把用于比对的正确值存放在本地java代码中,就很容易被黑客反编译利用,即使用接口从服务器去获取这些数据,相关的验证代码也很有可能被反编译后去除,那么比较稳妥的做法是把安全验证和必要的初始化过程捆绑起来放在so的C++代码中去处理,通过 JNI 进行调用,这样黑客就没那么方便反编译和绕过安全验证相关代码了。

2.防动态注入

比较简单省事的方案是在进行安全验证时检查手机是否root,并检查进程中是否有常见的hook工具如Cydia Substrate或者Xposed等,如有,则提醒用户并直接关闭客户端。

3.加壳

对于apk来说,只要能反编译,那么花上足够多的时间和耐心,总归可以慢慢破解,那么更有效的方案就是给apk加壳了。所谓加壳,简单说就是把要加壳的目标apk加密,然后在外面再套一层壳apk,在使用时壳apk负责解密原apk,并通过DexClassLoader动态加载。整个过程还是有点复杂的,索性网上相关的文章不少,有兴趣可以去搜来参考。

三、系统安全

1.自定义键盘

系统自带的键盘很可能会被劫持,所以大多数涉及钱的app都很有必要写一个自己的键盘组件。特别是输入密码所用的键盘,最好还能随机生成数字的位置。

2.防截屏

黑客很有可能控制手机,偷偷的给APP截屏,这样你的屏幕上有敏感信息时,比如每次输入密码会有短暂的字母显示,就会暴露,这时候就需要有防截屏的功能。谷歌自己就提供了这个功能,只需要在每个Activity的setContentView()方法前加上下面这段代码就可以了:

getWindow().setFlags(LayoutParams.FLAG_SECURE,LayoutParams.FLAG_SECURE);

3.在移动端管理session是一个比较重要的点。我们都知道,大多数的客户端所有功能的实现都需要大家进行身份的验证,比如手机号和一些个人信息,当然,敏感的的可能还会用到***。接下来,从专业的角度来简单说说。客户端与服务器端通信往往需要维持通信会话,而会话的保持各家公司有各家公司的做法,但是大致方法都是相同,就是首次登陆的时候从服务器端拿回一个token,而这个token有一定的过期时间。这里提供一种简单的方法,就是登陆时拿到账号密码作为参数通过接口进行登陆(https),登陆成功后会返回token,之后所有与服务器的通信都要带上这个token,至于这个token如何携带也有多种方法,可以通过请求头,也可以通过参数,不同公司不同做法。服务器返回数据的同时刷新token并返回新token,客户端接收数据的同时保存新token作为下次请求使用。当然这样做只是使用了一个token,有些是一个请求token,一个刷新token,请求token的有效期较短,刷新token的有效期较长,当请求token过期后使用刷新token刷新请求token。总之做法很多,就看你怎么使用了。

四、APP本身存在一些安全隐患

目前的互联网存在着两种不同的信息获取方式那就是WEB和 移动客户端,面对与传统的WEB方式,APP可谓是增长迅猛,大有取而代之的趋势。所以,移动客户端安全安全和web安全是息息相关的。我们就可能存在的检测点从数据的传输方面来简单的来谈一谈可能存在的漏洞点。

1.SQL注入:通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。一般存在于登录界面。

2.XSS:跨站脚本攻击,恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。存在于表单标签中。

3.SSL:安全套接层协议,是为网络通信提供安全及数据完整性的一种安全协议。

4.CSRF:通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

5.敏感信息泄露:用户在使用APP的时候,设置代理抓到的包中,包含已登录用户的一些个人信息,这里有可能存在用户名、密码的明文传输。

6.会话标识未更新:已经登录的用户正常/非正常退出,往往可以通过获取正常用户登录成功后,具有唯一标识的信息,来模仿用户登录成功的操作使其在线,然后就可以使用该用户的账号。

7.任意用户注册漏洞:此类漏洞并不危害到用户信息泄露,但是别有用心的黑客可能会利用此漏洞注册任意手机号码,并利用此注册账号去社工号码主人的朋友或者家人。

8.后台弱口令:一般是由那些懒人制定的弱密码而来的。

9.越权:身份相等的同级用户。当然,也可以让自己体验更高权限的账号。

10.文件上传:在你上传文件、照片时候,更改传输信息中的文件类型。

很明显,上面这些漏洞往往是由于后台开发者疏忽导致的。所以,APP本身的安全,其实大部分权利还是掌握在开发人员手里的。

小结

安全是极难做到100%的,更多的情况是道高一尺魔高一丈,但是尽量多的安全保障,可以让别人的破解成本指数级的提高,直至让人觉得破解你的客户端性价比太低了。还是那句话,如果你和另一个人在野外遇到一头豹子,你想要逃生,不需要跑的比豹子快,只需要跑的比另一人快就够了。

*本文作者:HackerButWhite,转载请注明来自FreeBuf.COM


文章来源: https://www.freebuf.com/articles/terminal/219480.html
如有侵权请联系:admin#unsafe.sh