前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >APP渗透

APP渗透

作者头像
用户2700375
发布2022-06-09 14:44:07
8680
发布2022-06-09 14:44:07
举报
文章被收录于专栏:很菜的web狗很菜的web狗

一些工具的介绍

apktool 将APK转为smail代码,以供审计,其实就是反编译。

jeb 安卓反编译工具,用于逆向工程或审计APK文件,可以提高效率减少许多工程师的分析时间,能将Dalvik字节码反编译为Java源代码

adb 用来操作(调试)android设备(比如android手机)的一套指令集,例如adb shell 可以直接进入手机的命令行界面

drozer 移动端渗透测试框架,模块化的测试APK文件的系统薄弱点

Android Studio 是谷歌推出的一个Android集成开发工具,基于IntelliJ IDEA,主要用于写APP代码,以及调试,测试

dex2jar 将apk反编译成java源码(classes.dex转化成jar文件) 与jd-gui配套

jd-gui 查看APK中的classes.dex转化成的jar文件,即源码文件

客户端程序安全

安装包签名

使用 JDK 中的 jarsigner检查安装包的签名

代码语言:javascript
复制
jarsigner -verify dzhtest.apk -verbose -certs
image-20200622125307357
image-20200622125307357

如上图,说明测试结果为安全。

要说明的是,只有在使用直接客户的证书签名时,才认为安全。Debug 证书、第三方(如

开发方)证书等等均认为风险。

反编译保护

测试app能否反编译为源代码。未做保护的Java代码,可很清楚的了解到代码逻辑,并实行进一步攻击。

准备工具

首先把apk当成zip解压 得到

image-20200622130614916
image-20200622130614916

classes.dex拖到dex2jar的根目录下 进行反编译

image-20200622131107475
image-20200622131107475

得到classes-dex2jar.jar文件。

JD-GUI打开classes-dex2jar.jar文件。最后如果代码是无混淆的情况则是不安全的,读代码可分析代码逻辑

image-20200622131424773
image-20200622131424773

应用完整性校验

攻击者能够通过反编译的方法在客户端

程序中植入自己的木马,客户端程序如果没有自校验机制的话,攻击者可能会通过篡改客

户端程序窃取手机用户的隐私信息。

ApkTool 将目标 APK 文件解包

ApkTool 下载地址

使用如下命令解包

代码语言:javascript
复制
java -jar apktool.jar d -f apk 文件路径 -o 解包目标文件夹
apktool d -f apk dzh.apk -o apptest 根据自己实际情况来
image-20200719220540166
image-20200719220540166

解压完毕后随便找一个目录比如app的logo进行修改。这样可以更直观方便的确认app是否存在自校验。

image-20200719224911494
image-20200719224911494

这里找到logo所在文件夹替换一下app的logo来进行验证

用 ApkTool,将解包目录重新打包成未签名的 APK 文件,命令如下

代码语言:javascript
复制
java -jar apktool.jar b -f 待打包的文件夹 -o 输出 apk 路径
apktool b -f 待打包的文件夹 -o 输出 apk 路径 根据自己实际情况来
image-20200720094705792
image-20200720094705792

接下来用 SignApk,对未签名的 APK 文件进行签名,命令如下

代码语言:javascript
复制
java -jar signapk.jar testkey.x509.pem testkey.pk8 待签名 apk 文件路径 签名
后输出 apk 路径
image-20200720095111720
image-20200720095111720

最后丢到模拟器里我们看到替换成功了。

image-20200720100159321
image-20200720100159321

这就说明应用不会经过自校验。如果应该会自效验的话 打开app不会正常启动

debug模式

客户端软件 AndroidManifest.xml 中的 android:debuggable=”true”标记如果开启,可被

Java 调试工具例如 jdb 进行调试,获取和篡改用户敏感信息,甚至分析并且修改代码实现的业务逻辑,我们经常使用 android.util.Log 来打印日志,软件发布后调试日志被其他开发

者看到,容易被反编译破解。

检查 AndroidManifest.xml 文件中的 debuggable 属性(MobSF) – 检查是否能被调

https://github.com/MobSF/Mobile-Security-Framework-MobSF

应用程序数据可备份

Android 2.1 以上的系统可为 App 提供应用程序数据的备份和恢复功能,该由

AndroidMainfest.xml 文件中的 allowBackup 属性值控制,其默认值为 true。当该属性没

有显式设置为 false 时,攻击者可通过 adb backup 和 adb restore 对 App 的应用数据进行

备份和恢复,从而可能获取明文存储的用户敏感信息。

总结一下就是如果allowBackup属性为true时就可对应用程序数据备份,即为 allowBackup 开启,记录漏洞,停止测试

image-20200727094437108
image-20200727094437108

应用权限测试

应用权限分配不合理

1、使用反编译工具反反编译

2、打开源码后,检查应用 AndoridManifest.xml 文件,将应用权限和业务功能需要权限

做对比,检查申请应用权限是否大于业务需要权限,有即存在安全隐患。或者

代码语言:javascript
复制
python manitree.py -f AndroidManifest.xml

https://github.com/antitree/manitree

组件安全

使用 ApkTool 解包, 打开解包目录中 AndroidManifest.xml,对其中声明的各个组

件,

根据以下规则判断是否可导出:

\1. 显式声明了 android:exported=”true”,则可导出;

\2. 显示声明了 android:exported=”false”,则不可导出;

\3. 未显示声明 android:exported:

a) 若组件不是 Content Provider:

i. 若组件包含则可导出,反之不可;

b) 若组件是 Content Provider:

i. 若 SDK 版本<17 则可导出,反之不可。

一般我们写报告的话列出所有可以导出的组件即可

image-20200727095905462
image-20200727095905462
image-20200727100040503
image-20200727100040503

Acitivity

Android 每一个 Application 都是由 Activity、Service、content Provider 和 Broadcast

Receiver 等 Android 的基本组件所组成,其中 Activity 是实现应用程序的主体,它承担了

大量的显示和交互工作,甚至可以理解为一个“界面”就是一个 Activity。

检查 AndroidManifest.xml 文件中注册的 Activity(MobSF) – 检查 exported 属性

是否被设置为 true,若是则根据业务判断风险

这里要安装drozer具体不说明了参考

https://www.sohu.com/a/253061520_99907709

还需要在安卓模拟器下安装

https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk

image-20200727151610654
image-20200727151610654
代码语言:javascript
复制
运行
开启转发	adb forward tcp:31415 tcp:31415
建立连接	drozer console connect

最后如下图说明成功

image-20200727152516820
image-20200727152516820

接下来简单说下如何去使用

代码语言:javascript
复制
run app.package.list 列出设备中安装的包
run app.activity.info -a 包名  查看组件信息
run app.activity.start --component <packagename> <activity>

页面,如果想访问他本来是有限制的,但是现在可以通过命令访问,那么就说明漏洞是存在的。

adb连接模拟器

代码语言:javascript
复制
# mac 网易mumu
adb connect 127.0.0.1:5555
# mac 夜神
adb connect 127.0.0.1:62001

adb shell
adb push xxx.apk /sdcard/ 将本地xxx.apk传到模拟器的sdcard里面

敏感信息安全

数据文件

检测客户端是否保存明文敏感信息,能否防止用户敏感信息的非授权访问

文件敏感信息泄露以明文存储“记住密码”居多。一般来说,先将安卓设备中的文件复

制到有鼠标的主机上,方便查看。

首先查看相关文件的权限配置。

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

法读写;目录则允许多一个执行位(类似“rwxrwx—x”)。如下图所示,(lib 子目录是

应用安装时由 android 系统自动生成,可以略过):

image-20200720102129434
image-20200720102129434

可见每个目录都可以读 表示不正常。

权限检测完整后,检查客户端程序存储在手机中的SharedPreferences 配置文件,通常是对本目录下的文件内容(一般是xml)进行检查,看是否包含敏感信息。

最后在检测SQLite数据库文件,在私有目录及其子目录下查找以.db结尾的数据库文件。对于使用了webView缓存的应用,会在databases子目录中保存webview.db 和webviewCache.db。。

还有些时候,客户端程序 apk 包中也是是保存有敏感信息的,比如检查 apk 包中各

类文件是否包含硬编码的敏感信息等

image-20200720104920035
image-20200720104920035

例子中暂时没有发现硬编码敏感信息

代码语言:javascript
复制
威胁等级

根据敏感信息泄露的程度进行威胁等级评分。若私有目录中存在存储了用户登陆密码
(明文或只进行过一次单项哈希散列),手势密码(明文或只进行过一次单项哈希散列)或
曾经访问过网址的 Cookie 等敏感信息的文件,此时为高风险,若不存在则无风险。

安全建议

尽量避免在文件、数据库、日志等位置写入敏感信息。如果确实需要存储,应当进行
加密。对于内存中的信息泄露,可以通过反注入、反调试来解决。
此外,正常的文件权限最后三位应为空(类似“rw-rw----”),目录则允许多一个执
行位(类似“rwxrwx—x”)。

Logcat日志

本项主要是检查客户端程序存储在手机中的日志是否含有敏感信息。

这里使用adb工具连接设备

代码语言:javascript
复制
adb devices

使用adb查询logcat日志

代码语言:javascript
复制
adb shell logcat -d > /Users/sch0lar/test.txt

并未发现有敏感的信息

根据敏感信息泄露的程度进行威胁等级评分。若相关信息中存在存储了用户登陆密码

(明文或只进行过一次单项哈希散列),手势密码(明文或只进行过一次单项哈希散列)或

曾经访问过网址的 Cookie 等敏感信息,此时为高风险,若不存在则无风险。

密码安全

键盘劫持

测试客户端程序在密码等输入框是否使用自定义软键盘。安卓应用中的输入框默认使用

系统软键盘,手机安装木马后,木马可以通过替换系统软键盘,记录手机键盘输过的密码。我自己的理解就是 app中是否使用app自己定义的键盘如果使用的是系统自带的键盘那么则可被记录。

在通俗点数哦 使用系统的输入法才能键盘记录。

image-20200728110337313
image-20200728110337313

例如这种就是安全的。

随机布局软键盘

测试客户端实现的软键盘,是否满足键位随机布放要求。一般银行的一些业务会有这种随机的键盘。

威胁等级

当客户端软键盘未进行随机化处理时为低风险;当客户端软键盘只在某一个页面载入时

初始化一次而不是在点击输入框时重新进行随机化也为低风险。(大致意思就是不会一直随机重置键盘只会初始化一次)

安全建议

键位每次使用都随机布放

屏幕录像

客户端使用的随机布局软键盘是否会对用户点击产生视觉响应。当随机布局软键盘对用

户点击产生视觉响应时,安卓木马可以通过连续截屏的方式,对用户击键进行记录,从而获得用户输入

使用adb截图。

代码语言:javascript
复制
adb shell screencap -p > 1.png

如果成功截图 说明没有防截屏 漏洞存在

威胁等级

当使用第三方程序(或系统截屏)可以对客户端内容进行截屏时,为中风险;当客户端

会对截屏操作进行有效抵抗时(无法截屏或截屏结果为黑屏等无意义图片)无风险

安全建议

在敏感信息的输入过程尽量避免视觉反馈,或者在操作系统层面对截屏相关功能进行

Hook 以阻止敏感信息输入期间其它程序的截屏操作(需要 root 权限)。

安全策略

安全策略在实际测试中受限较多,因此建议的风险等级:安全策略类全部为低危。

密码强度检测

测试客户端程序是否检查用户输入的密码强度,禁止用户设置弱口令。

注册时 当我们输入注册的密码为123456等弱口令时。查看客户端是否允许。

image-20200728115841057
image-20200728115841057

如上图 不允许 此项安全

账号登陆限制

测试一个帐号是否可以同时在多个设备上成功登录客户端,进行操作。

我们找两个设备 如果能同时登陆一个账号则存在漏洞。不能则此项安全

账户锁定策略

测试客户端是否限制登录尝试次数。防止木马使用穷举法暴力破解用户密码。

我们多次尝试输错密码 看看app是否会限制登陆错误次数。限制则此项安全

image-20200728120104020
image-20200728120104020

问题验证

测试对账号某些信息(如单次支付限额)的修改是否有私密问题验证。私密问题验证是

否将问题和答案一一对应。私密问题是否足够私密。

自己理解就是 修改一些重要信息时 是否会进行身份验证。比如支付宝,如果转账超过多少钱是需要短信验证身份的。

对于敏感功能操作时,要进行私密问题验证。

有则漏洞不存在。

会话安全

测试客户端在超过 20 分钟无操作后,是否会使会话超时并要求重新登录。超时时间设

置是否合理。

web里比较常见 比如qq企业邮箱 20分钟不操作 会话就会超时 需要重新登录。

威胁等级

当系统不存在会话超时逻辑判断时为低风险,若存在则无风险

安全建议

设置会话超时

界面切换保护

检查客户端程序在切换到其他应用时,已经填写的账号密码等敏感信息是否会清空,防

止用户敏感信息泄露。如果切换前处于已登录状态,切换后一定时间内是否会自动退出当前

会话。

我自己的理解就是 当我填了账号密码后 切换到了其他app。再回来时 账号密码应该被清空而不是一直保留。 如果登陆了测试app后切换到了其他app ,几分钟之内 测试app是否会自动注销。

如果会清空账号密码,会自动注销 为安全

UI信息泄露

检查客户端的各种功能,看是否存在敏感信息泄露问题。

使用错误的登录名或密码登录,看客户端提示是否不同。(如果有不同并且验证码无效则可爆破)在显示卡号等敏感信息时是否进行部分遮挡。

威胁等级

若在用户名输入错误和密码输入错误时提示信息不同则存在 UI 信息泄露问题,

此时为低风险,否则无风险。

安全建议

注意UI信息防护

验证码安全

安全退出

测试客户端退出时是否正常终止会话。

检查客户端在退出时,是否向服务端发送终止会话请求。客户端退出后,还能否使用退

出前的会话 id 访问登录后才能访问的页面。

威胁等级

若客户端退出登录时不会和服务器进行 Logout 的相关通信则为中风险,否则无风险。

安全建议

客户端退出时要做到和服务器进行 Logout 的相关通信。

密码修改验证

测试客户端在修改密码时是否验证旧密码正确性。

威胁等级

当进行密码修改时是否要求输入旧密码 如果需要输入则无风险。不需要输入原密码中风险。

安全建议

修改密码需要验证原密码的正确性。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-06-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一些工具的介绍
  • 客户端程序安全
    • 安装包签名
      • 反编译保护
        • 应用完整性校验
          • debug模式
            • 应用程序数据可备份
              • 应用权限测试
              • 组件安全
                • Acitivity
                • 敏感信息安全
                  • 数据文件
                    • Logcat日志
                    • 密码安全
                      • 键盘劫持
                        • 随机布局软键盘
                          • 屏幕录像
                          • 安全策略
                            • 密码强度检测
                              • 账号登陆限制
                                • 账户锁定策略
                                  • 问题验证
                                    • 会话安全
                                      • 界面切换保护
                                        • UI信息泄露
                                          • 验证码安全
                                            • 安全退出
                                              • 密码修改验证
                                              相关产品与服务
                                              验证码
                                              腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
                                              领券
                                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档