《ANDROID APP安全从入门到放弃pub(47页).pdf》由会员分享,可在线阅读,更多相关《ANDROID APP安全从入门到放弃pub(47页).pdf(47页珍藏版)》请在三个皮匠报告上搜索。
1、ANDROID APP安全从入门到放弃何勇亮何勇亮上海市信息安全测评认证中心(照片部分由主办方添加)WHO AM I高级等保测评师CISP、CISSP、CISAW、PMP等级保护测评、渗透测试网络安全咨询、风险评估Wechat:unicotech目录APP安全初探1APP安全学习路径2一点体会31PartAPP安全初探APP 安全现状数据来源:工业和信息化部,华经产业研究院数据来源:2019金融行业移动APP安全观测报告APP安全风险M1-平台使用不当M2-不安全的数据存储M3-不安全的通信M4-不安全的身份验证M5-加密不足M6-不安全的授权M7-客户端代码质量问题M8-代码篡改M9-逆向工
2、程M10-无关的功能OWASP MOBILE TOP 10 2016ANDROID应用安全风险2018年Android应用安全白皮书安全标准及规范OWASP移动安全测试指南JR/T 0092-2012中国金融移动支付客户端技术规范YD/T 1438-2006 数字移动台应用层软件功能要求和测试方法YD/T 2307-2011 数字移动通信终端通用功能技术要求和测试方法JR/T 0095-2012中国金融移动支付应用安全规范NIST SP800-163 Vetting the Security of Mobile ApplicationsAPP安全人才需求2PartAPP安全学习路径APP安全学
3、习路线图开发基础基础安全机制安全工具箱逆向分析开发基础:开发环境构建开发基础:语言基础开发基础:项目文件结构开发基础:APK文件格式基础安全机制:ANDROID系统架构基础安全机制:ANDROID安全机制应用层(代码安全、接入权限)应用框架(数字证书)SSL(网络安全)SQLite(数据库安全)虚拟机(安全沙箱)Linux Kernel(文件访问控制)基础安全机制:四大组件安全基础安全机制:AndroidManifest.xml安全工具箱:SDK工具toolsplatform-toolsbuild-tools安全工具箱:APKTOOL/Shakaapktoolhttps:/ibotpeache
4、s.github.io/Apktool/反编译资源文件到原始格式(包括resources.arsc,classes.dex,9.png以及XML等);将资源文件打包回二进制APK/JAR;组织和处理依赖于框架资源的APK;http:/ Killer安全工具箱:smalidea/Android Studio安全工具箱:IDA Pro安全工具箱:Xposedhttps:/repo.xposed.info/安全工具箱:http:/ vs JVM逆向分析:四种文件格式的关系.java.class.smali.dexjavacsmalibaksmalidxsmali2java逆向分析:smali语言简介
5、v命名法p命名法寄存器含义v0v0第一个局部变量寄存器中间的局部变量寄存器vM-Np0第一个参数寄存器(通常为调用对象)中间的参数寄存器vM-1pN-1第N个参数寄存器逆向分析:JNI NATIVE开发逆向分析:JNI Native开发逆向分析:arm简介ARM核心概念 寄存器 地址 异常和中断逆向分析:arm寄存器工作状态 ARM状态 Thumb状态工作模式 用户模式(USR)系统模式(SYS)快中断模式(FIQ)中断模式(IRQ)管理模式(SVC)中止模式(ABT)未定义模式(UND)逆向分析:IDA动态调试前期准备1.拷贝IDA目录下dbgsrv/android_server至终端运行2
6、.转发端口:adb forward tcp:pc_port tcp:mobile_port逆向分析:IDA动态调试3、程序启动 adb shell am start D n PackageName/ActivityName4、IDA挂接、选择Debugger-Attach to Process逆向分析:二进制插桩技术通过动态二进制插桩框架控制了程序的执行,就能够将插桩添加到执行程序中。我们可以在代码块之前和之后插入想要的代码,甚至也可以完全替换它们。动态二进制插桩框架都有三种执行模式:解释模式(Interpretation mode)、探测模式(probe mode)和JIT模式(just-i
7、n-time mode)Java.perform(function()var getString=undefined;exports=Module.enumerateExportsSync(libtest.so);for(i=0;iexports.length;i+)if(exports.name=Java_com_example_hooktest_MainActivity_getString)getString=exports.address;send(getInt is at +getString);break;逆向分析:Frida实战device=frida.get_usb_device
8、()device.on(spawn-added,spawn_added)def spawn_added(spawn):if spawn.identifier.startswith(com.shtec.test):print(spawn_added:,spawn)hook(device,spawn.pid,hook.js)device.resume(spawn.pid)if(Java.available)Java.perform(function()var application=Java.use(android.app.Application);application.attach.overl
9、oad(android.content.Context).implementation=function(context)var result=this.attach(context);var classloader=context.getClassLoader();/get classloaderJava.classFactory.loader=classloader;hook();/hook实现return result;);Java.perform(function x()var AMapLocation=Java.use(com.amap.api.location.AMapLocation);AMapLocation.getLatitude.implementation=function()result=this.getLatitude();console.log(AMapLocation getLatitude:+result);console.log(printStack();return result;Hook加固类应用Hook指定类方法Firda获取设备Firda载入hook代码Hook native方法3Part一点体会任重道远,勤学苦练