《支付宝终端切面管控体系建设实践周磊(流炎).pdf》由会员分享,可在线阅读,更多相关《支付宝终端切面管控体系建设实践周磊(流炎).pdf(29页珍藏版)》请在三个皮匠报告上搜索。
1、付宝终端切管控体系付宝基础框架团队/周磊(流炎)概览 管控:客户端为什么要管控、怎么管、要做什么,整体设计 体系:管控之上,安全/隐私/稳定性险解决案 切:管控之下,核切能如何建设,如何做优化,如构建时间、包、性能为什么要管控户资源越来越受到各重视隐私照明弹隐私舆情发酵付宝内部业务复杂,为难以规范,险不可控隐私合规政策+机曝光+户重视平台级别应,多技术栈+三舆情险,传播速度快付宝作为融app,信是第位必须有套能可以管控安全隐私问题耗电报警为什么要管控愿景:对客户端内可能存在的险,提供统 问题定义+感知 +管控能,帮助客户端业务更快更灵活的感知和控制险怎么管-定义问题问题 =不匹配的(主体 +场
2、景 +为 +度 )例:模块名/包名/类名/三来源的/服务堆栈例:前后台状态机型/系统安装包信息正在展示的例:调隐私函数加载动态代码访问xx件例:次数/耗时/量举例:【三sdk】【不能在付宝内】【动态加载dex】;【任意任务】在【后台执】时不能超过【2分钟】;现实世界:时间地点了什么事客户端世界:怎么管-描述主体主体具有主观性、多维的特征,我们尽量从多个维度提供描述,让管控能精确匹配到主体抓取堆栈来源public class MainActivity extends AppCompatActivity Override protected void onCreate(Bundle savedIn
3、stanceState)super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);A a=new A();a.doBiz();public class A public void doBiz()/A业务调了LBSService组件去获取位置 LBSService.requestLocation(new LBSService.Callback()Override public void onLocated(Location location)/handle location );public class L
4、BSService public static void requestLocation(Callback callback)ThreadPool.execute(new Runnable()Override public void run()Location location=locationManager .getLastKnownLocation(LocationManager.GPS_PROVIDER);callback.onLocated(location););举个例,我们想知道有谁访问了户定位信息,有这样段代码MainActivity.onCreate()包名聚合三包:com.(
5、huawei/xiaomi/oppo/vivo).push(XXService.onCreate(),XXButton.onClick()跨线程溯源包:德/优酷/ucsdk真实调怎么管-描述场景场景是事件发时客观因素的描述设备状态 +安装包状态 +运时状态例:机型/系统版本/品牌例:版本号/32/64/渠道号例:户态/展示中的/前后台状态怎么管-描述为/度在代码的世界,为可函数来描述,度就是函数在段时间内执的次数和总时安全隐私敏感函数耗电敏感函数稳定性敏感函数系统敏感api内部敏感apicpu相关(Thread/Runnable/Callback/Handler)传感器/络(WakeLock/
6、Sensor/Network/Gps)所有函数户信息、业务数据怎么管-管控能尽量丰富的为管控能:监听/拦截/改参/改返回值/try catch/抛异常,持云端配置,持脚本本地拦截器设计远程动态配置脚本注管控要做什么-整体设计付宝管控设计管控总结我们具象化了问题,并提供 问题描述+感知+管控 通底层能那么基于管控我们能做什么呢,接下来介绍下业务实践管控体系-端隐私险管控客户端隐私监控客户端隐私监控平台访问堆栈LocationManager.getLocation()at com.alipay.xx.ARunnable.a()at com.alipay.xx.ARunnable.run()开发者推
7、送函数管控平台决策键管控,动填表单后台访问上报推送到客户端修复匹配堆栈、场景、参数,返回指定的mock值管控体系-耗电险控制利切监控具体任务和api使情况发现异常某业务Runnable.run()循环跑,cpu消耗时间占超过30%某业务的wakelock直没释放,tag为xx后台重传感器直没释放,注册的堆栈为xxx开发者上报诊断信息聚合问题函数管控平台填写管控规则发布管控策略切配置Runnable、Callable、Thread、HandlerSensor、Wakelock户机监控管控体系-稳定性险控制传统hotpatch分析问题修改代码打包patch测试/审批灰度发布函数管控分析问题键函数管
8、控测试/审批灰度发布学习成本 性能影响较 适于复杂修改场景体积1kb 实时效 学习成本低 适于简单修改快速场景分析崩溃成配置if(堆栈=“a call b”&b throw NullPointerException)catchException(b)学习patch编写管控总结基于管控我们实现了 问题发现+防控 的闭环,可以更快更灵活防控险函数管控涉及对量函数的控制,那么对底层切能有哪些要求呢?核切能-介绍管控客户端内容安全、隐私付宝代码编译期AOP运时Hook切点织切能撑耗电稳定性性能dex/so切配置ART hook/PLT hook管控接性能影响分析管控原场景信息分发api层核层管控组件拦
9、截器管理上下收集前后台/业务模块信息/跨线程堆栈业务决策1.输切配置2.注册管控器切点数/耗时分析辅助决策函数拦截器异常监控拦截器/切云控监控/云控监听/拦截/catch异常/修改参数&返回值系统代码切性能分析核切能-挑战代码多类多(10万级)法多(百万级)dex超过100MB配置丰富切多(隐私函数接近1千)切点也多(所有函数都要切)不同包名管控逻辑不样,还能重叠管控功能必须全(拦截/改参/try catch/改返回值)影响编译速度包运时性能稳定性+导致核切能-设计类件 依赖 切配置规则构建类关系树匹配织点切织校验正确性类件编译期运期切签名备份原法参数装箱+切签名拦截器1 before pro
10、ceed拦截器N before proceed执原拦截器N after proceed拦截器1 before proceed返回结果替换原法 为分发逻辑AOPEntry输输出执原法、拿到结果核切能-构建速度优化传统AOP框架基于.class做插桩付宝DexAOP10万+.class件解析+插桩.class件读IO写IO10万+耗时数分钟10个dex件解析+插桩dex件读IO写IO10个基于.dex进制操作做插桩耗时20+s除了常的多线程解析/类关系树缓存等段之外,付宝直接插桩dex,显著提升IO性能核切能-桩点设计例:Aspect J Body插桩 包:功能:全 适范围:应内函数 静态性能:动
11、态性能:public class TestRunnable implements Runnable Override public void run()doSomething();怎么评价桩点的好坏:包影响 功能是否全:监听/拦截/改参/改返回值/try catch 适范围:部分还是所有函数 性能:静态性能/管控性能1.备份原法法签名2.原替换为分发逻辑原法内容拷成执原原法invoker核切能-桩点设计public class TestRunnable implements Runnable Override public void run()doSomething();付宝Body桩点 包:
12、功能:全 适范围:应内函数,不持super 静态性能:动态性能:Runnable共的执原接原法内容拷成执原核切能-桩点设计InstantRun 插桩 包:功能:全 适范围:应内函数,不持super 静态性能:动态性能:Invoke 插桩 包:功能:全 适范围:应内函数调(持系统函数)静态性能:动态性能:核切能-桩点策略频函数+常驻管控普通函数+常驻管控函数分类其它函数(不常管但要能管)Runnable、Callable、Handler切织策略性能优先body+invoke织Location、TelephonyManager、Camera持系统函数管控invoke织其它函数包、静态性能优先instant run织hook兜底分治策略核切能-运时优化减少效分发减少分发成本场景开关(前后台、保场景)例:耗电重点关后台场景,相关切前台不分发取消装箱切配置件中声明需要后台场景开关,插桩动植场景开关性能拦截器取消了参数装箱(如Handler.post()核切能-总结撑切配置上千定制切、函数99%全插桩包性能编译速度20s4%左右1%左右切撑业务需求的同时,将对端的影响控制在可接受范围内展望多技术栈持(C/C+)管控升维,多栈融合