浅谈APK安全及自动化审计

像上面提到的组件安然,我们一样平常都是经由过程阐发安卓的androidManifest.xml文件来判断的

一、 闲聊

说到移动安然,可能大年夜家对照陌生,由于这方面的钻研是在近来几年才徐徐火起来的那么什么是移动安然呢?首先,我们知道,移动安然无非便是ios平台和安卓平台上的一些安然性的问题,包括平台系统系统本身的一些问题和利用层面上的问题当然在客户端和办事端在进行交互的时刻还必要涉及一些通信协议,主如果http及https协议,当然还有一些其他的协议,比如websocket等等

这些协议本身的缺陷我们就不做过多的关注了,我们必要关注的是数据包在传输的历程中是否有进行需要的加密,办事端是否有对用户的操作权限进行节制,办事真个一些营业逻辑处置惩罚是否存在缺陷等等,这一方面的思路基础和web渗透差不多,但也有一些不合,后面会讲到

二、木马进击

说到移动安然,当然少不了病毒和木马的进击,常见的远控木马有droidjack、SpyNote等等,还有前一段光阴如雨后春笋般涌现的锁机软件

图1Droidjack

图2 锁机软件

进击者可以使用Droidjack这类软件,天生木马法度榜样,这种恶意的木马法度榜样一样平常存在于一些三流的apk市场里一样平常来说,进击者会在这些apk中投放一些带有诱惑性的信息,比如免费不雅看某某美男视频,某某视频免广告客户端,某某爽图浏览器等等进击者将这些带有诱惑性信息的apk宣布到收集上后,会在远程办事器上起一个办事端法度榜样,一旦用户安装运行了这个恶意法度榜样,黑客就可以在远程办事端对用户手机进行操控,监视用户的各类行径,进而偷取用户隐私信息

归根结底,这些木马病毒层面的进击,主要照样因为用户安然意识方面太懦弱,就不做为主要的评论争论工具了,我们主要照样针对安卓的利用层面的安然性进行一些评论争论

三、App办事端破绽掘客

那么我们该若何进行app破绽的掘客呢?首先,对付从web安然转战移动端破绽掘客的安然事情者而言,当然想挖一挖和自己所在领域对照邻近的破绽,而app的办事端基础和web安然领域的办事端差不多,只是web法度榜样它的客户端更多的是浏览器,而移动利用它一样平常都有一个可以安装在移动设备上的app法度榜样以是,对付app办事端破绽的掘客上面,我们照旧可以凭借以往的web履历,对此中的一些xss,ssrf,sql注入,随意率性文件读取等破绽进行掘客

在对web利用进行破绽进行掘客时,我们可以经由过程在浏览器设置设置设备摆设摆设代理,来对我们web利用进行抓包阐发,那么对移动端利用我们该怎么进行数据包阐发呢?

着实,安卓利用的数据包阐发也是要基于代理的,只是代理的设置设置设备摆设摆设相对繁杂点罢了我们在burptsuit或者fiddler中设置设置设备摆设摆设响应的代理后就可以应用他们进行数据包的截取和重放操作了详细的步骤这里就不做具体阐述,网上都有教程,各位可自行查阅

这里,对付xss,sql注入等一些经典的破绽我就不做多说了,也没什么好说的,这里主要说下移动利用的越权破绽我们知道,web安然里,越权破绽一样平常时因为办事端没有对用户哀求进行权限校验,只凭用户id就履行了用户哀求而导致的那么精确认证要领是一种什么样的历程呢?用翰墨简要的描述便是:用户在登岸认证成功后,办事端会将标识用户权限写进cookie,然后返回给浏览器,浏览器保留下这个cookie;用户在之后提议的哀求包中带上这个cookie,办事端对数据包中的cookie做校验,从而识别用户权限,履行响应权限的操作

图3 cookie认证历程

当然,还有一种认证要领是session认证Session认证和cookie认证都可以对用户的身份进行认证,那么,Session认证和cookie认证要领的差别什么呢?

简单来说,cookie寄放在客户端,而session寄放在办事端从安然的角度来说的话,cookie相对不安然,而session相对安然些,由于cookie是寄放在客户真个,进击者可以在客户端获取cookie,假如用于标识用户身份的字段没有进行加密,轻易被罗列,那么,进击者就可以对cookie进行捏造,进而进行越权操作而假如启用了session认证,那么客户端登入成功后得到的仅仅是对应的session的id这个id是一串加密的字符串,是无法被遍历的

那么它的认证历程又是什么样的呢?首先我们要知道,session认证也必要依附于cookie的,用户在登岸成功后,办事端会将用户对应的session写进办事真个数据库中,session中带有用户的一些身份标识等信息,然后办事端会将这个session对应的id发送给客户端,以是客户端中的cookie的内容一样平常就只有一串sessionid=xxxxxx这样的字符串用户在之后提议的哀求中必要带上这个sessionid,办事端经由过程识别sessionid,然后查询数据库,得到响应的用户权限信息,然后再判断用户是否有权限履行相应的操作

显然,session机制要相对安然一些,但安然的另一壁也是必要付出价值的,相对cookie来说,session机制会加倍耗损办事器的机能

[1] [2] [3] [4]下一页

图4 Session认证历程

然则,在移动端,用户身份认证是不用cookie的,而是基于token进行识别那么它又是一种什么样的认证要领呢?用简要的翰墨表述的话,它的认证历程一样平常是这样的,客户端登岸验证成功后,办事端会返回一个token字符串,这个字符串便是该用户的会话凭据,用户在此后与办事端进行交互时,都要带上这个token,这样才能对用户身份进行识别

图5 Token认证历程

假如我们在阐发数据包的时刻,发明有哀求是不带token的,那么这个数据包很有可能就存在越权破绽,当然还得结合详细的场景进行阐发,判断其是否对营业逻辑有影响这是我们在移动端掘客越权破绽的一样平常姿势然则,这种姿势不免难免太弱智,没什么门槛,基础是谁碰着都能挖

针对越权破绽,还有一种掘客姿势,提及来,感到也对照奇葩,这种越权破绽的孕育发生根滥觞基本因是因为认证策略本身的掉误记得在好久曩昔,对一款直播软件进行过一次协议的阐发,发明其认证逻辑是这样的:用户登入校验成功后,办事端返回用户id,然后本地临盆用户token,在此后的哀求中,带上这个token作为用户身份的凭据这个显然是有bug的,由于这个用户id是可以遍历的,而token的天生算法是在本地,以是进击者只要获取到其他用户的id然后将本地的token天生算法抠出来,就可以自己谋略token,然后捏造用户登岸了

当然这种越权破绽的掘客难度照样对照大年夜的,这要求破绽掘客者有对照深的逆向阐发能力和编码能力然则,作为开拓者,毫不能由于这种难度而放松对利用安然方面的加固,分外是用户认证这种异常紧张的功能模块,必然要做好安然方面的防护

四、Apk客户端破绽掘客

1、常用对象先容

至于客户真个破绽,主如果经由过程反编译对象对app客户端进行反编译,得到源码,然后结合一些履历及安然常识进行静态源码审计常见的反编译对象有apkide,jeb,apktools等下面给大年夜家截个图,懂得一下:

图6 改之理

图7 Jeb

当然我最爱好用的照样android逆向助手,异常实用

图8android逆向助手

结合jeb应用,基础可以满意日常逆向阐发

安卓利用平台主要分为native层和java层Java层的话,我们可以应用以上对象进行阐发,而native层的话,则要借助ida来进行阐发Ida是一款异常好用的反汇编对象,我们可以经由过程ida对apk的so文件进行反汇编,然后使用其f5功能,将arm汇编代码转为c++伪代码,对此中的逻辑算法进行阐发它还支持动态调试,可远程调试apk利用,我们可以使用ida动态调试,bypass掉落一些so层中的校验,如二次打包校验,或者进行动态调试脱壳

2、利用脱壳简介

说到利用脱壳,这在apk阐发历程中是很有需要的在说脱壳之前,我们先来懂得下什么是加壳加壳即在利用运行之前优先得到法度榜样的节制权,之后再把法度榜样的节制权交给原本的法度榜样在安卓平台上的加壳实现是将蓝本的dex文件加密并暗藏起来,然后经由过程壳法度榜样获取蓝本的dex文件再还原回去;还有一种是将函数指令抽掏出来,在运行的时刻,经由过程hook响应的类加载函数,将指令添补回去

对付加壳后的利用,原法度榜样的逻辑基础面貌全非了,我们无法经由过程加壳后的法度榜样来进行安然阐发以是,我们必要对利用进行脱壳处置惩罚常见的自动化脱壳对象有drizzledump和dexhunterDexhunter很好用,但必要刷机,而且很多加密厂商都对其进行了反省,以是直接用是行不通的,必要做一些改动,bypass一些检测至于具体的应用要领,大年夜家可以自行上网探求教程,这里就不做赘述了假如对象不能用,那着末只好上ida了

3、静态源码审计

下面我们来具体看一下针对源码层面的安然检测必要留意的问题

组件安然

首先是组件方面的安然问题,我们知道安卓利用有四大年夜组件,分手是:activity,service,content provider,broadcast receiver这些组件假如不是很有需要,应该将其导出属性即exported设置为false,即禁止导出假如设置为true的话就会被外部利用调用,可能造成信息泄露,权限绕过等破绽别的,在应用Intent.getXXXExtra() 获取或处置惩罚数据的时刻,假如没有做try…catch进行非常处置惩罚的话,就可能呈现回绝办事破绽,这些非常包括但不限于:空指针非常、类型转换非常、数组越界造访非常、类不决义非常、序列化反序列化非常AndroidManifest.xml是Android利用的进口文件,它描述了package中裸露的组件(activities, services, 等等),他们各自的实现类,各类能被处置惩罚的数据和启动位置 除了能声明法度榜样中的Activities, ContentProviders, Services, 和Intent Receivers,还能指定permissions和instrumentation(安然节制和测试)经由过程阐发这个manifest.xml文件,我们还可以发明例如利用数据备份和利用可调式这些破绽当然这些破绽一样平常属于对照低危的破绽,即对法度榜样的营业逻辑不会造成太大年夜的影响而且利用可调式这个破绽,实期近使设置了debuggable禁止进击者调试该利用,也不能够阻拦进击者对利用进行调试,由于开拓者只能节制利用本身不受调试,但节制不了用户的系统进击者只要设置下内存中的一个属性即可对系统中的所有利用进行调试,无论利用是否设置可被调试但,此处照样有需要做下这个禁止调试的设置的,由于并不是所有的逆向阐发者都知道能够绕过这个设置的

上一页[1] [2] [3] [4]下一页

webview安然问题

要说安卓客户端利用中对照严重的破绽,那肯定是webview方面的破绽了现在很多App里都内置了Web网页,比如说很多电商平台,淘宝、京东、聚划算等等,如下图:

图9 webview展示图

着实这些都是android中的一个组件webview实现的WebView是一个基于webkit引擎、展现web页面的控件,它的感化是显示和衬着web页面,直接应用html文件作结构,与javascript交互调用Webview可以零丁应用,也可以结合其他子类一路应用Webview最常用的子类有WebSettings类、WebViewClient类、WebChromeClient类这里就不做过多先容了,假如对安卓编程感兴趣的,可以百度查找更多资料

Webview这个组件可谓是一个两面刀,一方面,它的呈现可以减轻客户端开拓的包袱,将法度榜样的主要逻辑放到办事端长进行实现,本地只要应用webview加载响应的网页即可,但假如设置设置设备摆设摆设不恰当,就可能存在远程敕令履行破绽相关的cve有cve-2012-6636,cve-2014-1939,cve-2014-7224

cve-2012-6636这个破绽是源于法度榜样没有精确限定应用WebView.addJavascriptInterface措施远程进击者可经由过程应用Java Reflection API 使用该破绽履行随意率性Java 工具的措施

cve-2014-1939 这个破绽是因为java/android/webkit/BrowserFrame.java 应用 addJavascriptInterface API 并创建了SearchBoxImpl类的工具,进击者可经由过程造访searchBoxJavaBridge_ 接口使用该 破绽履行随意率性Java代码

cve-2014-7224 进击者主如果使用了accessibility和accessibilityTraversal 这两个 Java Bridge来履行远程进击代码

Webview远程敕令履行的孕育发生还必要依附java的反射机制Webview 中的addJavascriptInterface措施可以往 WebView里注入了一个 Java Object, 而这个Jave Object 的措施可以被Javascript 造访之以是供给 addJavascriptInterface, 是为了WebView中的Javascript可以和本地的 App 通讯这确凿是一个很强大年夜的功能,这么做的好处在于本地App逻辑不变的环境下,不必要进级App 就可以对法度榜样进行更新,改动响应的 Web页面就可以了然则在Android 的早期版本并没有对可以造访的措施做限定,使用 Java 的反射机制,可以调用随意率性工具的随意率性措施,这便是WebView 破绽 的根本成因

apk更新包进击 (中心人进击)

上面说起的几个破绽是安卓利用中对照常见也是影响对照大年夜的破绽,还有一些破绽相对影响对照轻,但假如使用适合它的迫害照样对照严重的比如中心人进击,它必要进击者和受害者处于同一个局域网下,受害者的流量受到进击者的节制中心人进击醒目什么?弹个xss吗?获取用户 cookie?当然这里显然获取用户cookie没有用,应该是token 信息在移动端进击中,中心人进击使用适合以致可以导致远程敕令履行比如节制利用更新时下载的更新包,将其调换为恶意的进击数据包,利用没有对更新包做需要的署名校验就履行了这个被进击者改造后的返回包中的更新法度榜样,这就可能导致恶意法度榜样法度榜样被履行

五、Apk破绽静态扫描对象实现

1、项目先容

对付客户真个破绽检测,今朝没有什么好的扫描引擎前一段光阴调研了下某数字公司,某梆,某加密的apk安然扫描对象,效果一样平常,基础差不多,都是基于反编译后的源码进行的简单破绽验证那么我们是否也可以自己写一个自动化检测对象呢?我此前也自己写了一个 apk自动化漏扫对象

下面我来讲一下我的实现思路,首先我们知道,我们主要的阐发工具是AndroidManifest.xml和dex 文件,但这两个都是编译后的二进制文件,我们必要将他们反编译出来反编译 AndroidManifest.xml必要用到的对象是AXMLPrinter.jar,而反编译 dex文件必要用到的文件是 baksmali.jar着实这两个jar包也是一些逆向对象常用的 jar包我们来看下 android逆向助手这款反编译对象的法度榜样目录:

图10 安卓逆向助伎俩度榜样目录

这个名叫android逆向助手的逆向对象主要便是用了这两个对象实现对AndroidManifest 和 dex文件进行反编译的

我们的自动化漏扫对象中只要编写响应的逻辑,调用这两个对象将AndroidManifest和dex 文件反编译出来后,我们就可以经由过程匹配一些破绽特性,对破绽进行检测了

下面是项目目录布局的简要先容:

图11 Apk破绽扫描项目目录及简介

首先我们必要利用的包名,然后对application的一些设置进行检测,如是否容许备份,是否可调式等;然后得到acvitiy ,service,content provider,broadcast receiver 这四个组件的一些设置设置设备摆设摆设信息,判断其是否可导出;然后获图利用申请的权限,判断其是否过于敏感;获图利用自身创建的权限,判断下它是否做好了权限限定

接下来对反编译后的smali文件进行破绽特性检测这主如果依附与我们事先网络好的破绽特性这里我把破绽特性写到了一个xml 文件中,在启动破绽扫描的时刻,加载到内存中,供法度榜样调用我们可以自定义这些破绽特性,让我们的法度榜样可以扫描到更多的破绽今朝破绽特性的定义支持字符串和正则形式这个项目今朝还在掩护,不过基础功能都已经实现,可以满意日常的扫描检测,只要轻细对扫描结果进行一些排误即可

2、今朝软件支持的破绽检测类型

1、随意率性文件读写破绽

2、密钥硬编码破绽

3、强制类型转换本地回绝办事破绽

4、系统组件本地回绝办事破绽

5、Intent Schema URL破绽

6、Content Provider组件本地SQL 注入破绽

上一页[1] [2] [3] [4]下一页

7、代码动态加载安然检测

8、证书弱校验

9、主机名弱校验

10、HTTPS敏感数据挟制破绽

11、Hash算法不安然

12、AES弱加密

13、Locat泄露隐私信息

14、日志透露风险

15、PendingIntent误用风险

16、Intent隐式调用

17、数据库文件随意率性读写

18、WebView系统暗藏接口破绽检测

19、WebView组件远程代码履行破绽检测

20、WebView轻忽SSL证书差错检测

21、WebView明文存储密码

22、SharedPreferences随意率性读写

23、随意率性文件读写

24、随机数应用不安然

25、组件权限反省

26、利用是否可调式反省

27、利用权限反省

28、利用自定义权限反省

30、利用备份破绽反省

3、应用措施

1、将必要扫描的apk文件放到workspace/apk 目录下

2、点击AndroidCodeCheck.exe或履行python AndroidCodeCheck.py 即可履行破绽扫描

4、申报输出

申报输前道路在report下

1)txt款式

算是法度榜样的运行日志吧,也可以作为扫描结果参考

2)html款式

html款式的申报有目录,点击目录中的破绽名称即可跳转到响应的破绽类型阐明在类型阐明处可点击返回目录返回到破绽目录列表,方便破绽审阅

着末给一个破绽扫描的申报截图,有点简陋,后期会慢慢完善

图12 申报目录首页

图13 破绽详情

5、项目地址

Apk静态源码漏扫对象项目地址:

https://github.com/zsdlove/ApkVulCheck

六、参考

webview方面安然问题:https://blog.csdn.net/fengling59/Article/details/50379522

上一页[1] [2] [3] [4]

赞(0) 打赏
分享到: 更多 (0)
免责申明:本站所有资料均来自于网络,版权归原创者所有!本站不提供任何保证,不保证真实性,并不承担任何法律责任

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

阿里云优惠网 更专业 更优惠

阿里云优惠券阿里云大礼包