在移动应用安全领域,Android平台因其开放性而成为安全研究人员的重点关注对象。本文将从手动静态分析、自动化静态分析和动态调试分析三个方面,阐述新手如何对Android应用进行安全测试。 手动静态分析是Android安全测试的基础,不需要运行应用程序,就能发现一些潜在的安全问题。 首先,我们需要获取目标应用的APK文件。有两种主要方法: 从设备中提取: 或使用APK下载器: APK反编译可以查看应用的内部结构和代码逻辑: 使用JADX(推荐): JADX能同时提供资源文件和反编译的Java源代码,是比较全面的反编译工具。 使用APKTool: APKTool将 使用DEX2JAR: 生成的jar文件,可使用JD-GUI查看。 应用证书可能会暴露一些开发环境信息或安全问题: 需要关注的方向: 清单文件是Android APK的配置中心,其内容包含权限、组件和安全设置: 重点关注: 存在的风险: 定位源码中可能潜在的安全问题: 可以关注的安全问题: 自动化静态分析工具可以提高安全测试效率,快速扫描潜在的安全问题。 MobSF(Mobile Security Framework) 访问http://localhost:8000上传APK文件进行分析。 QARK(Quick Android Review Kit) AndroBugs Framework 动态分析通过运行应用并观察其行为,发现静态分析难以识别的安全问题。 设置代理拦截 安装Drozer 进行全程流量拦截,模拟正常用户行为: SSL锁定绕过 模拟器检测绕过 检查应用存储的数据: 此处需要关注的安全问题: 使用Drozer探索应用组件: 检查应用日志中的敏感信息: Android应用的安全测试是一个多层次的过程,需要结合静态分析和动态分析才能全面评估应用的安全状况。以上所属的入门指南介绍的方法和工具可以帮助安全研究人员和开发者发现Android应用中简单的安全问题,从而修复Android APP的问题,提高应用的安全性。而实际测试中,不同的Android应用还有很多不一样的攻防对抗点,需要具体问题具体分析。 安全测试的最终目的是帮助提升应用安全性,而非用于非法活动。在进行任何测试前,务必获得适当的授权。 参考:https://nightowl131.github.io/AAPG【适合新手】Android应用安全测试入门指南
1. 手动静态分析
1.1 获取APK文件
adb shell pm list packages
adb shell pm path com.target.app
adb pull /data/app/com.target.app/base.apk
1.2 反编译APK
jadx -d output_folder --deobf target.apk
apktool d target.apk
.dex
文件反编译为.smali
格式,便于修改后重打包。d2j-dex2jar target.apk
1.3 检查证书
openssl pkcs7 -inform DER -in META-INF/*.RSA -noout -print_certs -text
cleartextTrafficPermitted="true"
1.4 分析Android清单文件
aapt dump target.apk AndroidManifest.xml > manifest.txt
<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 .
2. 自动化静态分析
2.1 推荐工具
开源的自动化移动应用安全测试框架,支持Android、iOS和Windows应用。# 安装并运行MobSF
git clone https://github.com/MobSF/Mobile-Security-Framework-MobSF.git
cd Mobile-Security-Framework-MobSF
./setup.sh
./run.sh
LinkedIn开发的工具,专注于识别Android应用的安全漏洞。pip install qark
qark --apk path/to/app.apk
针对Android应用的漏洞扫描系统。git clone https://github.com/AndroBugs/AndroBugs_Framework.git
cd AndroBugs_Framework
python androbugs.py -f path/to/app.apk
2.2 自动分析的优势
3. 动态调试分析
3.1 前期准备
Burp Suite是推荐的代理工具:# 在Android设备上设置代理
设置 -> 网络和互联网 -> Wi-Fi -> 长按连接的网络 -> 修改网络 -> 显示高级选项 -> 代理设置
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 绕过安全检测
可使用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 攻击面分析
# 分析攻击面
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应用安全测试指南(新手篇)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论