【适合新手】Android应用安全测试入门指南

目录

1. 手动静态分析

1.1 获取APK文件

1.2 反编译APK

1.3 检查证书

1.4 分析Android清单文件

1.5 源代码分析

2. 自动化静态分析

2.1 推荐工具

2.2 自动分析的优势

3. 动态调试分析

3.1 前期准备

3.2 应用安装与使用

3.3 绕过安全检测

3.4 本地存储分析

3.5 攻击面分析

3.6 日志分析

总结


 公众号来源:猕猴桃实验室     =>  转载请注明“转载于公众号:猕猴桃实验室”

公众号:猕猴桃实验室

微信公众号:猕猴桃实验室

在移动应用安全领域,Android平台因其开放性而成为安全研究人员的重点关注对象。本文将从手动静态分析、自动化静态分析和动态调试分析三个方面,阐述新手如何对Android应用进行安全测试。

图片

1. 手动静态分析

手动静态分析是Android安全测试的基础,不需要运行应用程序,就能发现一些潜在的安全问题。

1.1 获取APK文件

首先,我们需要获取目标应用的APK文件。有两种主要方法:

从设备中提取:

adb shell pm list packages
adb shell pm path com.target.app
adb pull /data/app/com.target.app/base.apk

或使用APK下载器:

  • • APKCombo(推荐)

  • • APK Mirror

  • • Evozi APK Downloader

1.2 反编译APK

APK反编译可以查看应用的内部结构和代码逻辑:

使用JADX(推荐):

jadx -d output_folder --deobf target.apk

JADX能同时提供资源文件和反编译的Java源代码,是比较全面的反编译工具。

使用APKTool:

apktool d target.apk

APKTool将.dex文件反编译为.smali格式,便于修改后重打包。

使用DEX2JAR:

d2j-dex2jar target.apk

生成的jar文件,可使用JD-GUI查看。

1.3 检查证书

应用证书可能会暴露一些开发环境信息或安全问题:

openssl pkcs7 -inform DER -in META-INF/*.RSA -noout -print_certs -text

需要关注的方向:

  • • 使用Android Debug证书(公开的私钥)

  • • 证书已过期

  • • 使用未知CA或自签名证书

  • • 缺少中间CA证书

  • • 未启用证书锁定(cert-pinning)

  • • 允许明文流量:cleartextTrafficPermitted="true"

  • 公众号:猕猴桃实验室

1.4 分析Android清单文件

清单文件是Android APK的配置中心,其内容包含权限、组件和安全设置:

aapt dump target.apk AndroidManifest.xml > manifest.txt

重点关注:

  • • SDK版本要求:<uses-sdk android:minSdkVersion="23" android:targetSdkVersion="28"/>

  • • 权限声明:<uses-permission android:name="..."/>

  • • 导出组件:android:exported="true"

  • • 备份设置:android:allowBackup="true"

  • • 调试选项:android:debuggable="true"

存在的风险:

  • • 过度申请权限

  • • 组件导出且未适当保护

  • • 允许应用备份

  • • 启用调试模式

1.5 源代码分析

定位源码中可能潜在的安全问题:

# 查找API端点
grep -Ei 'api|http|https|URI|URL' -R .

# 检查不安全的文件权限
grep -Ei 'MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE' -R .

# 查找数据库操作
grep -Ei 'SQLiteDatabase|realm|getDefaultInstance|query' -R .

# 查找敏感信息
grep -Ei 'username|password|secret|token|login|auth' -R .

# 查找日志记录
grep -Ei 'Log.v|Log.d|Log.i|Log.e|System.out.print' -R .

可以关注的安全问题:

  • • 明文凭据(包括Base64编码或弱加密)

  • • 不安全的文件读写模式

  • • 使用HTTP而非HTTPS

  • • 敏感信息写入日志

  • • 硬编码的密钥或凭据

2. 自动化静态分析

自动化静态分析工具可以提高安全测试效率,快速扫描潜在的安全问题。

2.1 推荐工具

MobSF(Mobile Security Framework)
开源的自动化移动应用安全测试框架,支持Android、iOS和Windows应用。

# 安装并运行MobSF
git clone https://github.com/MobSF/Mobile-Security-Framework-MobSF.git
cd Mobile-Security-Framework-MobSF
./setup.sh
./run.sh

访问http://localhost:8000上传APK文件进行分析。

QARK(Quick Android Review Kit)
LinkedIn开发的工具,专注于识别Android应用的安全漏洞。

pip install qark
qark --apk path/to/app.apk

AndroBugs Framework
针对Android应用的漏洞扫描系统。

git clone https://github.com/AndroBugs/AndroBugs_Framework.git
cd AndroBugs_Framework
python androbugs.py -f path/to/app.apk

2.2 自动分析的优势

  • • 快速识别常见漏洞

  • • 生成详细的分析报告

  • • 减少人工分析的工作量

  • • 可作为CI/CD流程的一部分

3. 动态调试分析

动态分析通过运行应用并观察其行为,发现静态分析难以识别的安全问题。

3.1 前期准备

设置代理拦截
Burp Suite是推荐的代理工具:

# 在Android设备上设置代理
设置 -> 网络和互联网 -> Wi-Fi -> 长按连接的网络 -> 修改网络 -> 显示高级选项 -> 代理设置

安装Drozer
Drozer是一个强大的Android安全评估工具:

# 主机端
pip install drozer

# Android设备上安装agent.apk
adb forward tcp:31415 tcp:31415
drozer console connect

3.2 应用安装与使用

adb install target.apk

进行全程流量拦截,模拟正常用户行为:

  • • 注册/登录

  • • 浏览应用功能

  • • 上传/下载文件

  • • 尝试边界情况

3.3 绕过安全检测

SSL锁定绕过
可使用Frida注入代码绕过证书验证:

// frida脚本示例
Java.perform(function() {
    var SSLContext = Java.use("javax.net.ssl.SSLContext");
    SSLContext.init.implementation = function(km, tm, sr) {
        return this.init.call(this, km, null, sr);
    };
});

模拟器检测绕过
修改APK中的检测代码:

# 查找模拟器检测代码
grep -Ei "isEmulator|build.fingerprint|qemu.hw.mainkeys" -R .

# 修改代码后重打包
apktool b modified_app_dir

3.4 本地存储分析

检查应用存储的数据:

# 查看SQLite数据库
adb shell
cd /data/data/com.target.app/databases/
sqlite3 app_database.db
.tables
SELECT * FROM users;

# 查看SharedPreferences
cd /data/data/com.target.app/shared_prefs/
cat *.xml

此处需要关注的安全问题:

  • • 明文存储的凭据

  • • 硬编码的加密密钥

  • • 敏感文件权限设置不当

  • • 敏感数据存储在外部存储

3.5 攻击面分析

使用Drozer探索应用组件:

# 分析攻击面
run app.package.attacksurface com.target.app

# 检查导出的活动
run app.activity.info -a com.target.app
run app.activity.start --component com.target.app com.target.app.SecretActivity

# 分析内容提供者
run app.provider.info -a com.target.app
run scanner.provider.finduris -a com.target.app
run scanner.provider.injection -a com.target.app

# 测试SQL注入
run app.provider.query content://com.target.app.provider/data --projection "* FROM sqlite_master;--"

3.6 日志分析

检查应用日志中的敏感信息:

# 实时查看应用日志
adb logcat | grep "$(adb shell ps | grep com.target.app | awk '{print $2}')"

总结

Android应用的安全测试是一个多层次的过程,需要结合静态分析和动态分析才能全面评估应用的安全状况。以上所属的入门指南介绍的方法和工具可以帮助安全研究人员和开发者发现Android应用中简单的安全问题,从而修复Android APP的问题,提高应用的安全性。而实际测试中,不同的Android应用还有很多不一样的攻防对抗点,需要具体问题具体分析。

安全测试的最终目的是帮助提升应用安全性,而非用于非法活动。在进行任何测试前,务必获得适当的授权。

参考:https://nightowl131.github.io/AAPG

免责声明: 

文章中涉及的内容可能带有攻击性、损害性,请注意识别。文章内容仅能用于安全检测、安全防御、安全研究等合法合规的用途,请勿用作其它方面。若有违反,违反者将自行承担相应法律责任及连带责任,违反者的行为与本文章内容的创作者无关。请遵守相关法律法规,共同维护网络环境的清朗!如有问题可私信联系,望知悉。

往期回顾:

社区交流订阅:

公众号来源:猕猴桃实验室     =>  转载请注明“转载于公众号:猕猴桃实验室”

公众号:猕猴桃实验室

微信公众号:猕猴桃实验室

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值