cvmachine.com - 申博开户网

查找: 您的方位主页 > 手机频道 > 阅览资讯:Android缝隙与安全总结

Android缝隙与安全总结

2019-03-29 10:53:41 来历:www.cvmachine.com 【

一.Activity

缝隙

越权绕过缝隙

原理:

没有对调用activity的组件进行权限验证,就会形成验证的安全问题。

防护:

1. 私有activity是相对安全的,设置exported为false。

2. 揭露activity应:慎重处理接纳的intent;回来数据不该包括灵敏信息;不该发送灵敏信息;收到回来数据时慎重处理。

 

垂钓诈骗绑架

原理:

发动一个activity时,参加标志位FLAG_ACTIVITY_NEW_TASK,能够使被发动的activity立马出现给用户,可用于垂钓诈骗。

防护:

1. 假如当时程序进入后台那么对用户进行提示该程序现已进入后台运转。

 

隐式发动intent

包括灵敏数据

原理:

当存在两个运用具有相同的隐式发动activity需求的action时,一个运用的activity是导出的,一个运用的activity是不被导出的,那么当触发该action时,将会弹出挑选哪一个activity的界面,然后能够发动那个不被导出的activity。(老版别才有,新版别已修正此缝隙,经测4.4版别无此缝隙)。

 

拒绝服务

原理:

本地组件发动时没有对Intent.getXXXExtra()获取或处理的数据进行反常捕获,然后导致进犯者可经过向受害者运用发送空数据、反常或许变形数据来使该运用crash的目的。

防护:

1. 慎重处理接纳的intent以及其带着的信息。

2. 对接纳到的任何数据做try catch处理,关于不符合预期的数据做反常处理,反常包括但不限于:空指针反常、类型转化反常、数组越界拜访反常、类未界说反常、序列化反序列化反常(getSerializableExtra、getParcelableExtra)

Fragment注入

原理:

经过导出的PreferenceActivity的子类,没有正确处理Intent的extra值。进犯者可绕过约束拜访未授权的界面。

防护:

当targetSdk大于等于19时,强制完结了isValidFragment办法;小于19时,在PreferenceActivity的子类中都要参加isValidFragment ,两种状况下在isValidFragment办法中进行fragment名的合法性校验。

二.Service

缝隙

权限提高

原理:

当一个具有高权限的service是被导出的时,假如没对调用这个Service进行权限约束和调用者的身份验证时,那么歹意的app将具有调用高权限的service的才能来履行高权限行为等。

 

Service

绑架

原理:

关于隐式发动的service,当存在同action名触发条件的service时,先装置运用的service优先级高,即便本运用运用startservice想要发动本运用的未导出的隐式service时也会被先装置的其他app的service绑架,因而想要绑架某个隐式发动的service时,只需求更早的在android体系中装置同action名的隐式发动的servic。(经测验,android4.4版别也有此问题;android5.0之后发动隐式的service时需求指明包名,因而理论上能够防止绑架的问题)。

 

音讯假造

原理:

关于被导出的service具有接纳音讯并进行相应操作时,假如不加权限操控和调用者的身份验证,那么将有或许具有音讯假造的安全危险。

 

拒绝服务

原理:

同Activity缝隙->拒绝服务->原理

防护:

同Activity缝隙->拒绝服务->防护

 

Service

安全防护

1. 私有的service尽量不界说intent-filter并且设置exported为false。

2. 揭露的service设置exported为true。

3. 尽量用显现的办法发动service。

4. 协作service需对协作方的app签名做校验。

5. Service接纳到的数据需求慎重处理。

6. 内部service需运用签名等级的protectionLevel来判别是否为内部运用调用。

7. Service不该在onCreate时决议是否供给服务,应在onStartCommand/onBind/onHandleIntent等办法被调用时做判别。

8. 当service有回来数据时,应判别接纳数据的组件是否有信息走漏的危险。

9. 尽量不发送灵敏信息。

 

三.Broadcast Receiver

缝隙

灵敏信息走漏

原理:

发送intent的时分没有清晰指定接纳者,而是简略的经过action进行匹配,而假如这个intent里包括灵敏数据,那么歹意运用就能够注册一个播送接纳者,嗅探并且阻拦这个播送并且盗取灵敏数据。

防护:

运用LocalBroadcastManager来注册和发送播送只能被app本身播送接纳器接纳。

 

权限绕过缝隙

原理:

运用Context.registerReceiver()动态注册的播送默许是导出的,假如导出的BroadcastReceiver没有做权限操控,导致其能够接纳一个外部可控的url、指令等信息来履行特定的功用,那么进犯者能够运用运用的这些功用来履行越权操作。

防护:

1.运用带权限查验的registerReceiver API进行动态播送的注册。

2.运用LocalBroadCastManager来动态注册播送,其有以下三点优势:

  • 不用忧虑灵敏数据走漏,经过这种办法发送的播送只能运用内接纳。
  • 不用忧虑安全缝隙被运用,因为其他运用无法发送播送给该运用。
  • 它比体系的大局播送更高效。

 

音讯假造

原理:

关于有必要露出的Receiver来说,假如其对外接纳Intent而没有进行权限操控和身份验证,那么进犯者则能够假造Intent中的音讯。

防护:

自界说声明权限,其protectionLevel为signature,在该露出的Receiver中运用android:permission对其进行自界说权限约束,那么当其他运用假如和该运用的签名不共同时将无法恳求该自界说权限,那么其他运用宣布的不具有该自界说权限的同action播送是不会被该露出的Receiver接纳到的。

 

拒绝服务

原理:

同Activity缝隙->拒绝服务->原理

防护:

同Activity缝隙->拒绝服务->防护

 

Broadcast

安全防护

1. 私有播送接纳器设置exported为false,尽量不装备intent-filter。

2. 私有播送尽量运用LocalBroadcastManager动态注册和运用。

3. 露出的播送接纳器需求对数据来历进行权限操控和身份验证。

4. 播送接纳器关于接纳的数据要慎重地运用多种反常来操控数据处理。

5. 发送播送时假如包括灵敏数据则需求显现目的和指定接纳者包名,setPackage()

 

四.Content Provider

缝隙

信息走漏

原理:

Content Provider组件的特点exported被设置为true或是Android API<=16时,Content Provider被以为是导出的。假如没有对Content Provider的权限做好操控,那么歹意程序有或许运用这种办法读取APP的灵敏数据。

防护:

1. minSdkVersion不低于9.

2. 不向外部app供给数据的私有content provide,应设置exported为false。

3. 运用protectionLevel为signature来进行权限操控。

4. 揭露的content provider保证不存储灵敏数据。

Content Provider组件的特点exported被设置为true或是Android API<=16时,Content Provider被以为是导出的。

 

五.SQL

注入缝隙

原理:

对Content Provider进行增修正查操作时,程序没有对用户的输入进行过滤,未选用参数化查询的办法,或许导致sql注入进犯。这样进犯者能够精心结构selection、projection参数等sql句子组成部分,完结在未授权的状况下从content provider获取更多的信息。

防护:

1. 完结强健的服务端校验。

2. 运用参数化查询句子,比方SQLiteStatement。

3. 防止运用rawQuery()。

4. 过滤用户的输入。

 

六.目录遍历缝隙

原理:

ContentProvider.openFile()办法运用不当将导致该缝隙,Uri.getPathSegments()这个API规划的时分未考虑输入数据会包括编码后的url的问题。

防护:

首要对paramUri解码,文件创立后再经过调用File.getCanonicalPath()来获取文件或文件夹的绝对途径,最终校验生成的文件是否数据某个文件夹下面。

 

七.信息走漏缝隙

灵敏信息:

暗码、手机号、方便付出手机号、Email、身份证、银行卡、CVV码、有用期。

LogCat

输出灵敏信息

原理:

1. 运用层Log灵敏信息输出。

2. 运用层System.out.println灵敏信息输出。

3. 体系某些反常的Log输出。

4. Native层灵敏Log输出。

防护:

1. Eclipse中装备ProGuard完结release版apk完结主动删去Lod.d/v等。

2. 运用自界说LogCat类,上线前封闭Logcat开关。

 

灵敏数据明文存储于Sdcard

原理:

Android体系的文件一半存储在sdCard和运用的私有目录下面,有些运用把灵敏数据保存在了sdcard中,存在其数据被污染和替换的危险。

防护:

运用的灵敏数据制止存储在sdcard中。

 

数据库灵敏数据明文存储

原理:

Database装备办法安全危险首要在于开发者在创立数据库(Database)时没有正确的选取适宜的创立办法(MODE_PRIVATE, MODE_WORLE_READABLE, MODE_WORLD_WRITEABLE)进行权限操控,然后导致灵敏信息走漏或许数据被篡改。

防护:

1. 灵敏信息在数据库中需求加密存储,防止弱加密或许不加密的办法。

2. 关于灵敏的数据库文件,不能运用MODE_WORLD_READABLE或许MODE_WORLD_WRITEABLE的办法进行创立。

 

Shared Preference

大局可读写

原理:

开发者在创立文件时没有正确的选取适宜的创立办法(MODE_PRIVATE, MODE_WORLE_READABLE, MODE_WORLD_WRITEABLE)进行权限操控,明文存储灵敏信息。

防护:

1. 防止运用MODE_WORLD_READABLE或许MODE_WORLD_WRITEABLE的办法创立进程间通讯的shared preferences文件。

2. 重要灵敏信息应该加密存储,因为假如android体系被root之后,app的私有目录也将能够被外部程序拜访。

3. 防止乱用android:sharedUserId特点,在运用该特点的时分,不要对运用运用测验签名,不然其他具有相同签名的同sharedUserId的运用将能拜访到该运用的内部存储。

4. 运用Secure Preferences等第三方加固库进行存储。

 

灵敏信息硬编码

原理:

开发者在开发进程中把重要信息硬编码到apk文件中,导致进犯者能够经过逆向apk的办法得到重要灵敏信息。

防护:

防止硬编码灵敏信息。

 

HTTP

明文传输灵敏信息

原理:

Http协议是明文传输数据的,当其传输灵敏数据时将有或许被进犯者盗取到。

防护:

1. 灵敏信息假如运用http协议传输,那么要对其进行加密,尽量运用非对称加密算法。

2. 运用https协议传输数据。

 

八.权限安全缝隙

权限走漏缝隙

原理:

首要存在于某些具有高权限操作的组件被导出,而体系没有进行严厉的身份验证和权限操控而导致的其他运用能够运用该组件而发作越权操作的行为。

防护:

1. 设置相应的组件为非导出的,也便是私有的。

2. 假如组件有必要被导出,那么经过设置自界说权限的办法来到达只需同签名的运用才可拜访的作用,参阅Broadcast Receiver缝隙->音讯假造->防护。

 

默许设置缝隙

AndroidManifest.xml

装备文件中的默许设置

allowBackup

默许设置危险

原理:

AndroidManifest文件中的allowBackup特点默许值为true,其为运用程序供给了数据备份和康复的功用,可是这样进犯者就能够运用这种功用获取灵敏信息、假造身份、直接对服务器进犯等。

防护:

显现设置android:allowBackup=false,运用android:restoreAnyVersion的默许值。

 

Debuggable

默许设置危险

原理:

android:debuggable特点用于指定运用程序是否能够被调试,假如设置其为true,那么其将能够被java调试东西(jdb)调试,信息和代码都将或许会被获取和修正。

防护:

体系默许其为false,运用体系默许设置。

 

组件默许导出危险

原理:

1. android:exported=true表明当时组件能够被另一个application的组件发动;false表明当时组件只会被当时application或许具有相同user ID的application发动。

2. 假如组件总具有隐式发动的intent-filter标签,那么其默许的exported=true,不然默许值为false。

3. 主activity被以为不具有危险。

防护:

1. 没必要导出的组件设为私有,exported=false。

2. 有必要导出的组件要对该组件进行权限操控。

 

WebView

默许设置

原理:

部分函数默许设置存在危险:

1. setSavePassword(boolean):webview默许敞开暗码保存功用mWebView.setSavePassword(true),假如该功用未封闭,在用户输入暗码时会提示用户是否保存暗码,假如是,那么暗码将会被明文保存到运用的私有目录的databases目录下的webview.db文件中。假如手机被root,那么将有信息走漏的危险。

2. setAllowFileAccess(boolean):webview默许mWebView.setAllowFileAccess(true),在File域下能够履行恣意的js代码,能够对私有目录文件进行拜访,未对file:///办法的URL做约束,导致隐私信息走漏、cookie信息走漏等。

3. android4.1版别曾经默许setAllowFileAccessFromFileURLs(true)/setAllowUniversalAccessFromFileURLs(true),即答应经过file域URL中的js读取其他本地文件,在之后的版别默许为false;当设置了setAllowUniversalAccessFromFileURLs(true),那么setAllowFileAccessFromFileURLs函数将失效。

4. setAllowContentAccess(boolean):其表明是否答应在WebView中拜访内容URL(Content Url),默许答应。内容Url拜访答应WebView从装置在体系中的内容供给者载入内容,比方让WebView拜访ContentPrivider存储的内容。

防护:

如无必要,则需求手动将以上几个函数设置其值为false。

 

九.WebView

缝隙

长途代码履行缝隙

原理:

1. 在android4.4版别以下:API16及以下,直接调用add办法将会引进searchBoxJavaBridge_接口而引发该缝隙,首要原因是体系没有对答应反射调用的公有函数做约束,导致进犯者能够运用露出在js中的接口,经过反射的办法无约束的调用其他java类供给的公有办法,导致权限走漏。相似的危险函数还有accessibility,accessibilityTraversal。

2. 在android4.4版别及以上,该缝隙发作的原因都是发作在chromium v8内核中。

防护:

除了把自己运用里露出的js接口做安全处理,还要移除体系添加的三个接口:searchBoxJavaBridge_、accessibility、accessibilityTraversal。

 

UXSS

缝隙

原理:

通用型跨站脚本(UniversalCross-Site Scripting),首要运用浏览器及插件的缝隙来结构跨站条件以履行歹意代码。其缝隙目标为浏览器及其插件,其影响规模为在浏览器中拜访的一切站点。

防护:

及时晋级手机webview组件。

 

WebView

设置方面的安全危险

1. set,如无必要设置其为false。

2. setPluginState(enum),如无必要设置其为OFF。(ON/ON_DEMAND/OFF)

3. 同默许设置缝隙->WebView默许设置。

 

WebView

疏忽证书过错缝隙

原理:

WebView组件加载网页发作证书认证过错时,会调用WebViewClient类的onReceivedSslError办法,假如该办法完结调用了handler.proceed()来疏忽该证书过错,则会遭到中间人进犯的要挟,或许导致隐私走漏。

防护:

不调用android.webkit.SslErrorHandler的proceed办法,选用默许的处理办法SslErrorHandler.cancel(),中止加载问题页面。

 

同源战略绕过

原理:

当运用程序运用WebView并支撑File域时,JavaScript的延时履行能够绕过file战略的同源检查,并能够拜访受害运用的一切私有文件。具体来说即经过WebView对Javascript的延时履行和将当时html文件删去并软衔接指向其他文件就能够读取到被符号链接所指的文件,然后经过js再次读取html文件即可获取到被符号链接所指的文件。

防护:

1. 将不用要导出的组件设置为不导出的。

2. 假如运用需求导出的组件包括WebView,要制止运用File域协议:myWebView.getSettings.setAllowFileAccess(false)。

3. 假如有必要运用File域协议,要制止File协议调用。

4. 假如有必要调用JavaScript,那么需求慎重判别加载的file是否为灵敏的file。

 

WebView

防护

1. 手机厂商把手机内置的webview与google坚持更新共同。

2. 手机厂商把手机内置的浏览器缝隙修补程度要与Google官方坚持共同,并且检测个性化自界说露出的API接口。

3. 手机浏览器厂商浏览器缝隙修补程度要与Google官方坚持共同,并且检测个性化自界说露出的API接口。

4. APP开发人员留意webview各项默许设置。

5. 用户随时把手机内置webview以及浏览器更新到最新版别。

 

十.Https

通讯缝隙

疏忽SSL

证书校验

原理:

在自界说完结X509TrustManager时,checkServerTrusted中没有检查证书是否可信,导致通讯进程中或许存在中间人进犯,形成灵敏数据绑架。

防护:

在自界说完结X509TrustManager时,在checkServerTrusted中对服务器信息进行严厉校验。

 

疏忽域名校验

原理:

1. 在自界说完结HostnameVerifier时,没有在verify中进行严厉证书校验,导致通讯进程中或许存在中间人进犯,形成灵敏数据绑架。

2. 在setHostnameVerifier办法中运用ALLOW_ALL_HOSTNAME_VERIFIER,信赖了一切Hostname,也有中间人进犯危险。

防护:

1. 自界说完结HostnameVerifier时,在verify中对Hostname进行严厉校验。

2. 在setHostnameVerifier办法中运用STRICT_HOSTNAME_VERIFIER进行严厉域名校验。

 

Socket

长途衔接缝隙

原理:

假如手机运用装备了服务端并开放了某个端口(TCP/UDP),可是短少对客户端的身份验证或许存在权限操控缝隙,那么将会导致进犯者运用此端口获取其支撑的一切功用。

防护:

1. 运用公私玥暗码体系在客户端对恳求进行私玥加密,在服务端运用公玥进行签名验证,可是这样无法保证恳求内容的私密性,仅仅供给了不行假造的恳求信息。

2. 不运用这种办法来操控运用的功用,改动规划。

3. 不运用0.0.0.0的监听ip地址,而运用127.0.0.1的本地地址,或许给相关的动作履行参加用户安全提示,用户答应才能够进行呼应操作。

 

十一.白名单绕过缝隙

签名白名单绕过

原理:

1. Apk中的META-INF文件夹下的三个文件:

a) MANIFEST.MF存储的是每一个文件对应的SHA1(或许SHA256)音讯摘要算法提取出的摘要然后进行BASE64编码。

b) CERT.SF存储的是MANIFEST.MF文件的全体SHA1值,经过BASE64编码跋文录在其主特点块的SHA1-Digest-Manifest特点值下;逐条核算MANIFEST.MF文件中的每一个块的SHA1,经过BASE64编码跋文录在其同名块的SHA1-Digest特点值下。

c) CERT.RSA存储的是对CERT.SF文件的签名和包括公钥信息的数字证书,其满意PKCS7格局。签名算法包括DSA/RSA/EC三种,别离对应CERT.DSA/CERT.RSA/CERT.EC。

2. Android装置程序在校验签名文件时,android4.x版别只会校验META-INF文件夹下读取到的第一个签名文件,假如验证过错则退出;android5.x版别会逐一校验META-INF文件夹下的签名文件,只需有一个签名验证成功则经过。

3. 危险在于若安全评价软件运用证书白名单机制,或许只会读取验证一个签名文件,而没有检查此证书的有用性与合法性。那么当存在多个签名文件的歹意运用,别离是有用的但不合法的和无效的但合法的签名文件,在android5.x版别上装置软件时因为存在有用的签名文件则能够装置成功,而安全软件检查签名的时分假如只检查了一个无效的但合法的签名文件时将经过安全验证,而此刻发作绕过缝隙。

防护:

安全软件在评价apk文件时要验证一切签名文件的有用性与合法性,别离作出对应的判别。

 

URL

白名单绕过缝隙

原理:

运用在翻开外部传入的URL时,对域名校验时假如运用体系供给的getHost函数获取域名后进行字符串比较时而发作的缝隙,因为该体系函数规划存在缺点,其能够被绕过。

绕过办法1:url地址变形,示例http://192.168.0.2\.126.com/index.html,其运用getHost得到的域名为192.168.0.2\.126.com

会很简单被判别为正常域名,但是android的webview会将其解析为http://192.168.0.2/.126.com/index.html

,那么该地址或许会带来危险。

绕过办法2:运用url跳转,示例http://hao.126.cn/?c=redirect&url=http://aaa.bbb.cn/123

,其经过getHost得到的域名也是正常的,但跳转拜访的地址却存在危险的或许。

防护:

慎重处理对传入URL的验证,主张选用正则表达式匹配的办法。

 

程序自晋级缝隙

原理:

Apk自晋级进程中,假如没有留意安全开发标准,导致其在下载apk的进程中被进犯者中间人绑架,替换了apk文件。

App晋级流程

存在危险

缝隙损害

晋级API

晋级API未加密

回来歹意下载地址,下载歹意APK

下载API

下载API未加密

下载文件被绑架,下载歹意APK

程序装置API

APK本地途径篡改

装置过错的APK

防护:

1. 晋级API运用HTTPS。

2. 下载API运用HTTPS。(假如运用http,下载地址和md5值都能够被绑架的)

3. 装置apk时需求对apk文件进行包名和签名验证。

安卓“Janus”缝隙

原理:

向原始的App APK的前部添加一个进犯的classes.dex文件(A文件),安卓体系在校验时核算了A文件的hash值,并以”classes.dex”字符串做为key保存, 然后安卓核算原始的classes.dex文件(B),并再次以”classes.dex”字符串做为key保存,这次保存会掩盖掉A文件的hash值,导致Android体系以为APK没有被修正,完结装置,APK程序运转时,体系优先以先找到的A文件履行,疏忽了B,导致缝隙的发作。

该缝隙能够让进犯者绕过安卓体系的signature scheme V1签名机制,然后直接对App进行篡改。并且因为安卓体系的其他安全机制也是建立在签名和校验根底之上,该缝隙相当于绕过了安卓体系的整个安全机制。

防护:

制止装置有多个同名ZipEntry的APK文件。

插件动态加载安全缝隙

原理:

1. Apk文件中的classes.dex文件相当于可履行文件,当app运转后体系会对classes.dex做优化,生成其对应的odex格局文件,也便是可履行文件的换成代码文件。

2. Android4.1之前的版别供给的类加载器DexClassLoader能够在运转时动态加载dex文件生成的odex文件存储在运用的非私有目录中,之后的版别只能保存在运用的私有目录中。

3. 运用程序在加载已有的odex文件时只验证了odex文件中的modTime和crc,未作其他校验。

4. 危险在于进犯者能够精心结构歹意odex文件运用其他办法替换运用程序原有的odex文件,只需求保证歹意的odex文件中modTime和crc值能经过校验即可,履行了歹意的odex文件将会导致歹意代码注入等问题。

防护:

1. 每次履行程序的时分从头生成odex文件。

2. 存储原有odex文件的信息用于下次加载的完整性和防篡改校验。

十二.第三方SDK

Zip

解压缩缝隙

原理:

当压缩文件中具有../../../等目录跳转符时,会发作目录穿越危险,当解压该文件的运用具有某些途径的写权限时,进犯者能够结构指定的目录对原有文件进行替换,比较常见的是so文件或许odex文件的歹意替换。

防护:

解压时过滤../跳转符。(ZipEntry.getName().contain(“../”)?)

FFmpeg

文件读取缝隙

原理:

运用了低版别的FFmpeg库进行视频解码。在FFmpeg的某些版别中或许存在本地文件读取缝隙,能够经过结构歹意文件获取本地文件内容。

防护:晋级FFmpeg库到最新版。

十三.数据安全危险

数据存储

原理:

SD卡数据被第三方程序拜访。发现调用getExternalStorageDirectory,存储内容到SD卡能够被恣意程序拜访,存在安全危险。

防护:

主张存储灵敏信息到程序私有目录,并对灵敏数据加密

大局File可读写缝隙-openFileOutput

原理:

openFileOutput(String name,int mode)办法创立内部文件时,将文件设置了大局的可读权限MODE_WORLD_READABLE。进犯者歹意读取文件内容,获取灵敏信息。

防护:

请开发者承认该文件是否存储灵敏数据,如存在相关数据,请去掉文件大局可读特点。

大局文件可写

原理:

openFileOutput(String name,int mode)办法创立内部文件时,将文件设置了大局的可写权限MODE_WORLD_WRITEABLE。进犯者歹意写文件内容损坏APP的完整性。

防护:

请开发者承认该文件是否存储灵敏数据,如存在相关数据,请去掉文件大局可写特点。

大局文件可读可写

原理:

openFileOutput(String name,int mode)办法创立内部文件时,将文件设置了大局的可读写权限。进犯者歹意写文件内容或许,损坏APP的完整性,或许是进犯者歹意读取文件内容,获取灵敏信息。

修正主张:请开发者承认该文件是否存储灵敏数据,如存在相关数据,请去掉文件大局可写、写特点。

私有文件走漏危险-getSharedPreferences

原理:

装备文件可读 运用getSharedPreferences翻开文件时第二个参数设置为MODE_WORLD_READABLE。

文件能够被其他运用读取导致信息走漏。

防护:

假如有必要设置为大局可读办法供其他程序运用,请保证存储的数据非隐私数据或是加密后存储。

 

装备文件可写

原理:

运用getSharedPreferences翻开文件时第二个参数设置为MODE_WORLD_WRITEABLE。文件能够被其他运用写入导致文件内容被篡改,或许导致影响运用程序的正常运转或更严峻的问题。

防护:

运用getSharedPreferences时第二个参数设置为MODE_PRIVATE即可。

 

装备文件可读可写

原理:

运用getSharedPreferences翻开文件时,如将第二个参数设置为MODE_WORLD_READABLE 或 MODE_WORLD_WRITEABLE。当时文件能够被其他运用读取和写入,导致信息走漏、文件内容被篡改,影响运用程序的正常运转或更严峻的问题。

防护:

运用getSharedPreferences时第二个参数设置为MODE_PRIVATE。制止运用MODE_WORLD_READABLE | MODE_WORLD_WRITEABLE办法。

 

十四.数据加密

明文数字证书缝隙:

Apk运用的数字证书可被用来校验服务器的合法身份,以及在与服务器进行通讯的进程中对传输数据进行加密、解密运算,保证传输数据的保密性、完整性。

明文存储的数字证书假如被篡改,客户端或许衔接到冒充的服务端上,导致用户名、暗码等信息被盗取;假如明文证书被盗取,或许形成传输数据被截获解密,用户信息走漏,或许假造客户端向服务器发送恳求,篡改服务器中的用户数据或形成服务器呼应反常。

 

AES弱加密

原理:

在AES加密时,运用“AES/ECB/NoPadding”或“AES/ECB/PKCS5padding”的办法。ECB是将文件分块后对文件块做同一加密,破解加密只需求针对一个文件块进行解密,下降了破解难度和文件安全性。

防护:

制止运用AES加密的ECB办法,显式指定加密算法为:CBC或CFB办法,可带上PKCS5Padding填充。AES密钥长度最少是128位,引荐运用256位。

随机数不安全运用

原理:

调用SecureRandom类中的setSeed办法。生成的随机数具有确定性,存在被破解的或许性。

防护:

用/dev/urandom或/dev/random来初始化伪随机数生成器。

AES/DES硬编码密钥

原理:

运用AES或DES加解密时,密钥选用硬编码在程序中。经过反编译获取密钥能够容易解密APP通讯数据。

防护:

密钥加密存储或变形后进行加解密运算,不要硬编码到代码中。

 

十五.内存仓库类缝隙

未运用编译器仓库维护技能

原理:

为了检测栈中的溢出,引进了Stack Canaries缝隙缓解技能。在一切函数调用发作时,向栈帧内压入一个额定的被称作canary的随机数,当栈中发作溢出时,canary将被首要掩盖,之后才是EBP和回来地址。在函数回来之前,体系将履行一个额定的安全验证操作,将栈帧华夏先寄存的canary和.data中副本的值进行比较,假如两者不符合,阐明发作了栈溢出。

不运用Stack Canaries栈维护技能,发作栈溢出时体系并不会对程序进行维护。

防护:

运用NDK编译so时,在Android.mk文件中添加:LOCAL_CFLAGS := -Wall -O2 -U_FORTIFY_SOURCE -fstack-protector-all

 

未运用地址空间随机化技能

原理:

PIE全称Position Independent Executables,是一种地址空间随机化技能。当so被加载时,在内存里的地址是随机分配的。

不运用PIE,将会使得shellcode的履行难度下降,进犯成功率添加。

防护:

NDK编译so时,参加LOCAL_CFLAGS := -fpie -pie敞开对PIE的支撑。

libupnp栈溢出缝隙

原理:

运用了低于1.6.18版别的libupnp库文件。结构歹意数据包可形成缓冲区溢出,形成代码履行。

防护:

晋级libupnp库到1.6.18版别或以上。

十六.其他缝隙

串谋进犯

原理:

程序1的组件在没有权限的状况下,运用程序2的组件进行越权绕过履行操作。

防护:

1. 运用Context.checkCallingPermission()和Context.enforceCallingPermission()来保证调用者具有相应的权限。

2. 校验运用的permission维护等级是否与体系中已界说的permission维护等级共同。(PackageManager.getPackageInfo.permissions[i].protectionLevel ==PackageManager.getPermissionInfo())

指令行调用类相关的危险或缝隙

动态链接库中包括履行指令函数:

原理:

在native程序中,有时需求履行体系指令,在接纳外部传入的参数履行指令时没有做过滤或查验。进犯者传入恣意指令,导致歹意指令的履行。

防护:对传入的参数进行严厉的过滤。

暂时计算到的:libBugly.so 指令函数 execl

libcocklogic-1.1.3.so 指令函数 popen

libagora-rtc-sdk-jni.so 指令函数 execvp

 

 

 
 

本文地址:http://www.cvmachine.com/a/luyou/99868.html
Tags: Android 安全 缝隙
修改:申博开户网
关于咱们 | 联络咱们 | 友情链接 | 网站地图 | Sitemap | App | 回来顶部