基于 Android APP 安全测试流程(一) – 作者:redhatd

1. 大纲

APK 解包与逆向

客户端程序安全 

敏感信息安全

部分测试会用到 jdk   Eclipse+ADT+Android SDK 这开发平台弄会比较麻烦 可能会放到后面讲

如果你只是想快速测试某 APP 不妨用阿里云 MQC    以及网易易盾

特别需要说的  :建议移动安全适合专人来做,因为需要专门的电脑环境配置也比较麻烦。

2. 需要的环境以及工具

SDK:Java JDK,Android SDK。 

apk 工具:android 组件安全测试工具,activity 劫持测试工具,android 击键记录测试工具,

代理工具(proxydroid),MemSpector,Host Editor。

工具:7zip,dex2jar,jd-gui,apktool,IDA pro,ApkAnalyser,Eclipse,dexopt-wrapper,010 editor,SQLite Studio,ApkIDE。

3.apk 解包与逆向

APK 解包和逆向是所有 APP 安全分析的开始。当然我这里说的比较浅显。

一般 APK 用压缩包软件即可打开解压 我这里使用的 7zip  好处无广告无捆绑速度还行,这里随便找的一个游戏 APP 具体就不透露了

工具  dex2jar  jd-gui

3.1 下载与使用 dex2jar 

下载地址:https://sourceforge.net/projects/dex2jar/

使用:

解压之后输入  d2j-dex2jar.bat 文件名  一般为 classes.dex  (见上图)  APK 解压放到了桌面 test 文件夹中

会在 dex2jar 目录生成一个这个文件

那么如何查看该 jar 文件的内容呢?此时就需要安装 jd-gui。 

3.2 下载与使用 jd-gui

下载地址: http://jd.benow.ca/ 

使用没什么好说 windows 就一个 exe  打开之后就这样  下图中打开 classes.dex2jar-jar 代码是经过混淆处理的 最明显就是其中有 a.b.c.d 这样的内容。

如果没有混淆处理这里应该明文,混淆处理是一种防止逆向的手段,混淆处理后虽然也有逆向分析手段但是这里不具体分析了。

没有混淆处理基本说明 apk 发开人员安全意识不够。

3.3 反编译 so 库

工具 IDA PRO   大名鼎鼎的工具 – – 下载地址应该不需要了

APK 解压之后在 lib/armeabi 有个.so 文件  用 IDA pro  打开 可以看到 so 文件中包含的函数,ARM 汇编代码,导入导出函数等信息

4. 客户端程序安全

4.1 安装包签名

检测客户端是否经过恰当签名(正常情况下应用都应该是签名的,否则无法安装),签名是否符合规范。

工具 jarsigner    

jarsigner 这个是命令行执行工具  只要安装了 jdk  会在 jdk 中的 bin 目录里 用来执行(具体 JDK 安装要配置环境变量不赘述)

C:\Program Files\Java\jdk1.8.0_121\bin>jarsigner.exe

用法: jarsigner [选项] jar-file 别名

       jarsigner -verify [选项] jar-file [别名…]

[-keystore <url>]           密钥库位置

[-storepass <口令>]         用于密钥库完整性的口令

[-storetype <类型>]         密钥库类型

[-keypass <口令>]           私有密钥的口令 (如果不同)

[-certchain <文件>]         替代证书链文件的名称

[-sigfile <文件>]           .SF/.DSA 文件的名称

[-signedjar <文件>]         已签名的 JAR 文件的名称

[-digestalg <算法>]        摘要算法的名称

[-sigalg <算法>]           签名算法的名称

[-verify]                   验证已签名的 JAR 文件

[-verbose[:suboptions]]     签名/验证时输出详细信息。

                            子选项可以是 all, grouped 或 summary

[-certs]                    输出详细信息和验证时显示证书

[-tsa <url>]                时间戳颁发机构的位置

[-tsacert <别名>]           时间戳颁发机构的公共密钥证书

[-tsapolicyid <oid>]        时间戳颁发机构的 TSAPolicyID

[-tsadigestalg <算法>]      时间戳请求中的摘要数据的算法

[-altsigner <类>]           替代的签名机制的类名

[-altsignerpath <路径列表>] 替代的签名机制的位置

[-internalsf]               在签名块内包含 .SF 文件

[-sectionsonly]             不计算整个清单的散列

[-protected]                密钥库具有受保护验证路径

[-providerName <名称>]      提供方名称

[-providerClass <类>        加密服务提供方的名称

  [-providerArg <参数>]]… 主类文件和构造器参数

[-strict]                   将警告视为错误

警告

第一条 是因为签名密钥不在本地密钥库中

第二条 没有时间戳

再执行命令

jarsigner.exe -verify -verbose -certs C:\Users\Administrator\Desktop\test.apk

显示内容比较多看部分就可以 红框部分有地点:成都  名称为 darknights   

若客户端安装包签名有异常(例如签名证书为第三方开发商而不是客户端发布方),此时高风险;若无异常则无风险。

4.2 客户端程序保护

反编译 使用 apktool  

章节 3 基本讲的反编译内容。这里在补充一个 apktool 反编译为 smali 代码

工具 apktool  

下载:https://ibotpeaches.github.io/Apktool/install/

根据实际情况选择

我这里只下载 jar  放到 windows 目录

然后会生成一个 跟 apk 同名的文件夹  下面会有一个 smali 的文件夹

因为这个应用在之前做了混淆   现在看 在 alipay(支付宝接口) 关键部分也是做了混淆

判定:此时应用为低风险

大部分代码(包括核心代码)经过混淆,此时低风险。

部分代码混淆,关键代码(加密或通信等)可以获知其关键代码,此时中风险

客户端全部进行加壳保护,此时认为无风险。

5. 敏感信息安全

5.1 数据文件

主要的是在安卓环境中测试,安装解包后的文件是否权限合理,这里需要用到 Eclipse+ADT+Android SDK   但是作为简单简介可以用任意一个安卓模拟器来做

这里我使用的是逍遥模拟器(安卓)新装的一个 ES 文件浏览器   最左边是测试的 APP

ES 文件浏览器 的好处 

1:安卓处于保护自己的目的,一般系统自带文件管理是看不到所有文件的。

2:有些文件修改需要 ROOT 权限 es 文件浏览器有 ROOT 工具

打开 ES 文件浏览器点击应用 可以看到这样应用 package Name  可以根据这个关键字去目录里搜索

ROOT 工具箱打开不然你看不到隐藏的文件

根据关键字搜索找到文件

基本权限跟 LINUX 表示方法是一样 关键要观察这个应用所在目录下的所有文件权限(除 LIB 目录下外)

判断:

正常的文件权限最后三位应为空(类似「rw-rw—-」),即除应用自己以外任何人无法读写;

目录则允许多一个执行位(类似「rwxrwx—x」)。如果文件任何人可写就存在安全问题。

如下图(开头字母是 D 的目录)  安卓也有命令行具体调用这里不多说了 因为模拟器我搞半天没调用出来

特别说明的:

当客户端使用 MODE_WORLD_READABLE 或 MODE_WORLD_WRITEABLE 模式创建文件时,shared_prefs 目录下文件的权限也会多出一些,这不一定是安全问题(Google 已不推荐使用这些模式)

先到这里吧 估计要写拆成三个文章来写。

来源:freebuf.com 2019-03-08 15:12:02 by: redhatd

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论