2024移动APP安全漏洞分析技术与方法.docx
移动APP安全漏洞分析技术与方法移动应用安全背景介绍目录页移动应用漏洞分析工具介绍z移动应用常见漏洞分析移动应用漏洞分析样例分享2008年谷歌第一次I/O大会意味着安卓第一代产品正式对外,2007年苹果也发布了iOS1!自2015年以来,各界媒体对移动应用的漏洞关注度也越来越高,漏洞的产生不仅带来用户设备与信息的安全影响,也给企业带来业务或声誉上的损失。以下数据结论来源于OWASP,Mobiletop10:生成函数使用调试标识配置金融类toplO有个漏洞,平均每个含个漏洞。其中是AES/DES弱加密风险,可导致用户应用加密被破解;是SharedPrefS任意读写漏洞,可导致用户个人身份信息、密码等敏感信息泄露。错误备份标识配置4%拒绝服务漏洞密钥硬徽WebVieW明文存储8%WebVieW不校验证书9%AES/DES弱力密20%File任意读写20%拒绝服务漏郴5%随机数生成函数使用错误校验证书7%WebVieW不密钥硬编码10%四大组件配匿安21%20%中间人攻击漏摒物硬编码7%3%0WebVieW远程代码执行常规应用类toplO有个漏洞,平均每个含个漏洞。其中是四大组件配置安全,可导致用户账号密码泄露;是AES/DES弱加密风险漏洞,可导致应用加密被破解。游戏类topl(个漏洞,平均每个应用含个漏洞。其中是代码/引擎漏洞,可导致用户应用加密被破解;是支付漏洞,可导致用户手机被远程控制、隐私泄露等风险。2015年18个行业gpl应用的JI玻制粒a量WdMw9MI%HISOO用WJ攻击1720SiWedPTeh任她图1491TVMHMIt1*7AfVMSIMfflIBWIafl06使删B谡10»WfbVmWWi%三三v6人a561PendmqhtentiXRKM三"502AAlfi<MM"冽IntenItdwfneirfBII,202ins*3tt137ZnUtu文外心NNI124tg<HWI'13WHwwwfWRB9W½.19WBKmw8Ff49mtn三R75C8tpaSk白景触>a1秋Sra安全0T限我帖A瞥吧.*阿里移动安全漏洞年报2015年公开应用Jl词的类St分布DMBB0>乌云:AndrOid相关漏洞2016-04-1418:572016-06-0114:502016-03-3011:532016-05-1412:00招商界行android客户端https通信内容完全被抓取51公积金管家AndrOid客户端手势密码及其他漏洞::wooyun-2016-0196328|SAlNTSEe内部平台10银行信用卡wooyun-2016-0190545ISAlNTSEC内部平台102016-03-2212:082016-05-0612:09人人下处未授权访问/涉及IOSAndroid多个app源码/生产环境:wooyun2016-0187466ISAlNTSEC内部平台152016-03-1309:152016-04-2709:15IPOS机安全之乐刷AndroidAPP-处SQ1.注入:WOOyun-2016TH83885iSAINTSEC内部平台20POS机2016-01-1319:252016-02-2711:49在某android平台发现了某apk短信马(伪装为违章杳沏/已有用户中招):WOoyun-2016-0169624SAINTSEC内部平价202015-10-2116:052016-01-2111:00邮储银行Android客户端设计缺陷可能导致客户端用户密码泄漏:wooyun-2015-0147541SAlNTSEC内部平台202015-10-2114:432016-01-1916:00东方财富网APP(1.2)可能导致数据泄漏(AndrOid版):wooyun-2015-0147717SAlNTSEC内部平台52015-10-1613:362016-01-1817:30中国联通沃邮箱等部分Android客户增免密码登陆(可获取任意联通用户pop3密码):wooyun-2015-0147087ISAlNTSEC内部平20电信运营商云:AndrOid相关漏洞0146515IU5-12-0210:022016-01-1610:04亲宝宝AndrOid客户网任意账户密码亚翼:WOOyUn-2015-0157507iSAINTSEC内部平台205-10-1312:222016-01-1414:58南方基金Android客户端本地明文存储用户信息、账户名部平台10金等信息:WOOyun-2015-0145187ISAlMrSEC内5-10-1312:112016-01-1516:18兴业全球基金AndrOid客户端存在用户敏感信息泄露:WOOyUn-2015-0145194SAlVrSEC内部平价10P2P金融5-10-1214:582016-01-1209:18京东金融AndrOid客户端更新I;R1.地址可被劫持:WOoyUn-2015TH44996SAlNTSEC内部平台125-10-0516:072016-01-1115:325-10-0710:272016-01-1115:32挖财理财记账Android客户端泄露用户手机短信WooyUn-2015-0144896SAlNTSEC内部平台20众禄赭金AndrOid客户端存在越权代存账户交林青彳机割1.吊口漏洞:ooyun-2015TH45094|SAlNTSEC内部平台205-10-1310:562016-01-1115:32。.痂android最新版本调试功的未关闭:wooyun-2015-0146309ISAlNTSEC内部步台105-10-0718:032016-01-1115:32南方基金Android客户端存在泄露用户敏感数据信息:wooyun-2015-0145186SAINTSEC内部平台105-10-0815:522016-01-1115:32挖财理财记账AndrOid客户端用户数据明文存储在本地数据库可被远程窃取:wooyun-2015-0144933ISAlNTSEC内部平台12用户的敏感数据乌云:iOS相关漏洞2014-04-1014:232014-07-0914:232014-05-0213:212014-06-1613:222014-02-1923:202014-04-0523:20支付宝iOSSDK存在第二方厂商可以记录用户敏感信息漏洞ooyun-2014-056541SAlNTSEC内音搜狗某应用SQ1.注射(泄漏XagiOS等敏感信息):WoOyUn-2014-059168ISAlNTSEC内部平台19拉手网IoS客户端SQ1.注入一枚多库:wooyun-2014-051462SAlNTSEC内部平台202014-02-1919:232014-04-0519:23金立IUNIOS官网超级版主账号泄密:WOOyun-2015-051394ISAlNTSEC内部平台102014-01-0316:192014-04-0316:19macosx&ios内核模块对象未初始化漏洞:WOOyUn-2014T)47772SAINTSEC内部平台52014-01-0209:092014-04-0209:10财付通ios手机端泄露用户注册证件号码与安全手机:WoOyUn-2014-047581ISAINTSEC内部平台2013-12-2120:322014-02-0420:332013-11-0210:302014-01-3110:31某二甲医院IOS客户端患希信息泄雷:woo5-un-2013-046674SAlXTSEC内部平台20支付宝IOS支付宝绕过密码登录原手机所有使用过的支付宝帐号ooyun-2013-041742ISAINTSEC内部银监会通报2014年2月银监会就国内众多银行银行客户端存在高位风险和漏洞,可能导致信息泄露,资金安全等问题给予了通报。通报涉及到被抽查的国内多家大型国有和股份制银行机构,本次检查再度强调了对移动银行的安全合规要求,其中提到了8点风险:.是否完整.手机银行客户端是否存在情况Android平台是否存在的现象.中是否暴露了敏感客户信息.梳理手机银行代码,客户端编译打包前要进行代码核查,确认已关闭.安全检测要关注是否及时清除应从手机银行安全认证体系进行整体安全评估要关注以及敏感信息是否泄漏目录页移动应用漏洞分析工具介绍ContentsPage dex文件反编译工具dexdump、smali.jarbaksmalide×2jar class字节码反编译工具jd-gui、jd-cmd、jad等 逆向分析工具IDAPro>jdb、gdb、ClaSS-dump-z、Clutch>introspy>CyCriPt等 综合逆向工具APKTookAPKIDE(改之理)、AndroidKiller>XPoSed等 协议抓包工具Wireshark>fiddler等APIC 第一步准备测试工具与测试样本。测试工具:de×2jar>jd-gui;测试样本:sample001.apk 第二步使用dex2jar对应用APP进行快速反编译,获取反编译jar文件。 第三步使用jd-gui查看反编译得到的.jar文件。02快速验证一款APP是否加固或采用签名保护 第一步准备测试工具与测试样本。测试工具:APKIDE;测试样本:SampIeOO1.apk 第二步将SamPieOo.apk导入APKlDE中,等待APKlDE对APK进行反编译 第三步通过APKIDE找到程序名称,更改程序名称 第四步使用APKlDE对APK进行重编译、签名再安装到手机中 第五步在手机中找到快速修改名称的APK,运行并查看APK是否采用保护03快速对一款APP进行传输协议包抓取 第一步准备测试工具与测试样本。测试工具:fiddler;测试样本:sample001.apk 第二步将搭建fiddler测试环境(PC与手机端) 第三步在指定手机端上使用APK完成协议请求 第四步在fiddler上抓取到APK的协议请求 第五步分析请求协议包结构 第一步准备测试工具与测试样本。测试工具:爱加密漏洞分析平台;测试样本:SampIeOO1.apk 第二步将SamPIeOO1.aPk上传到爱加密漏洞分析平台中,等待检测 第三步下载SamPleoO1.aPk的漏洞检测结果 第四步对检测结果进行查看与分析目录页ContentsPage移动应用常见漏洞分析第一节:AndrOid客户端常见漏洞分析第二节:iOS客户端常见漏洞分析第1节:Android客户端常见漏洞分析组件安全>AndrOid组件安全>ACtiVity界面劫持>BaCkUP备份安全>JaVa调试开启安全>本地拒绝服务安全>WebVieW远程代码执行安全HTTP/HTTPS中间人攻击数据封包弱加密数据安全A服务器权限绕过用户敏感信息泄露>WebVieW密码明文保存漏洞本地数据全局读写漏洞界面敏感数据显示泄露>调试日志泄露>内置账号/测试IP泄露>手势密码绕过会话保持机制安全服务器请求重发攻击第1节第1类.组件/控件安全Android组件安全ACtiVity界面劫持BaCkUP备份安全JaVa调试开启安全WebVieW远程代码执行安全第1节第1类-AndrOid组件安全式,因为android没有提供所有应用共同访问的公共存储区。比如通讯录数据。Android四大组件strsActivityA.'UServiceUlionteProvider数据COmemProVider用于保存和获取数据,并使其对所有应用程序可见。这是不同应用程序间共享数据的唯一方对于程序中的每一个界面都是一个Activity,每一个ACtiVity有不同的功能,比如登录、注册、注册码验证、手势密码等,ACtiVity之间的切换需要满足一定的条件。SerViCe服务是伴随着程序启动,一直运行在后台,主要起检测作用的执行代码。服务一般用于时刻检测客户端的更新状态、时刻检测是否异地登录、时刻上传用户的操作信息。BroadCaSt广播是当程序检测到外界的某种运行环境发生变化时,而执行的逻辑代码,比如程序的自启、网络变化变化、实时消息(打车软件)。第1节第1类-组件的访问权限控制技术指标漏洞参数默认值编码要求android:exported是AndrOId中的四大组件Activity,Service,Provider,ReceiverPrH大组件中都会有的一个属性,如果android:exported设置了true表示可对外进行访问或使用,如果android:exported设置了false表示不可对外进行访问或使用。如果对内部组件进行设置android:exported值为true,则可能出现组件被外部APP进行恶意访问、非法操作等风险。如果包含有Intent-filter默认值为true;没有Intent-filter默认值为false。业务需求中需要对组件进行对外开放,则根据该开放性是针对于所有还是针对于个别,如果针对于所有则可设置android:exported为true即可,如果是针对于个别则通过自定义权限来进行访问安全控制。局站查询机房堂询机架查询©©说多强询机历卡询电路查询©©光路查询保0询ODF景询©©支播论坛运营商内部APP登录界面绕过第1节第1类Activity垂露风险权限绕过amstart-,gxluzj/.frame,impl.module,home.HomeActvapp_processhastextrelocations,thisiswastingmemoryaasefixk+.qdb后动登褂面后的界面ActiVityapp_processhastextrelocations.Thisiswastingmemorya第1节第1类ACtiVity暴露风险本地拒绝服务攻击Causedby:jav&lang.IlIegalSiasException:ICan'findtheBandaIoryQXIraidentifiedbykeyoidOnfi6dclas:com.WeitUar1.android,hotel,voucher.HoteivoucherVerifyActivity.orderIdHrayN0口&"+resumeactivitycoa.sankuai.BlVBkngheEditAcjava.lang.RuntimeException:Vnablejava.lang.RuntimeException:Unablejava.lang.NullPointerExceptionjava.lang.RuntinieException:Unablejava.Iang-NullPointerExceptionJava.lang.RuntimeException:Unablejava.lang.NullPointerExceptiontototostartstartstartactivityCooponentInfocob.sankuai.neiiuan/com.meltuan.android,hotel.activityCooponentInfoco.sankuai.OeitUan/cootsankuai.meituan.poi.bactivityComponentInfoco.sankuai.neituan/com.sankuai.meituan.topic.fakepdate提示很抱歉,土豆视叛,已停止运行*定第1节第1类Service服务暴露优酷土豆检测版本更新使用的是<serviceSerViCe服务,反编译到的代码:android:label="YoukuPushNotificationsStartActivityService"android:name=*'com.youku.service.push.StartActivityService"Iandroid:exported="true'1(2)传入PlJShMSg的SeriaIiZabIe的数据:IabeI_53:intent.SetFlagS(876609536);intent.setclass(this,UpdateActivity-Class);intent.putE×tra("updateurl",pushMsg.updateurl);intent.putE×tra("updateversion",pushMsg.updateversion);intent.putExtra("updatecontent",pushMsg.updatecontent);intent.putE×tra("updateType,',2);this.StartActivity(Intent);return;优酷客户端内的数据序列恶意伪造并启动暴露的SerViCe:PushMsgpushMsg=newPushMsg()jpushMsg.type=1;pushMsg.updateurl="datawisegame41839dld5pushMsg.updatecontent="ThisisFake"Intentintent=newIntent();intent.setClassName("com.youku.phone","com.youku.service.push.Starintent.putExtra("PushMsg",pushMsg);startservice(intent);MlMl1ServiceW>三中C,。“OOWSOUUMon2244中IW动江苏掌曲蕾业厅0拒绝服务攻击B三OM¥«lAeIS交报告应用程序错误业厅t试访网卷的数斌被防跟琮禁很抱歉,应用程序出现他误,即格退出O调提交函误报告,我们会尽快修短这个问地!伪造升级拒绝服务第1节第1类-BrOadCaSt广播暴露<receiverandroid:name=".PushMsgReceivern>恶意注册易到广播<intent-filter><actionandroid:name=,ponent.groundhog.RECEIVED_MESSAGE"l<intent-filter><receiver>借助广播,监听【易到用车】的ublicclassPushMsgReceiverextendsBroadcastReceiverOverridepublicvoidOnReceive(Contextcontext,Intentintent)Stringstr=intent.getAction();System.out.println(str);Stringstr2=intent.getE×tras().getString(!messageT);System.out.println(str2);设置MaSSage监听订单信息be.xMl.pufhM94ger.Syt<B.oucpe.ex*ile.pu9sess*ge7.Sy*tB.out最终监听到订单v.98«yoogcbe.CCffPOXZ.grouadh09RlCXIVEDeXtSSAGE(jonxpcj2.0,:!,wcbodw:oter.d.xraBj*:ordr"orrid:48$2670.wlast.updt<,aap0,prodcttypeB,as>ount0.00,eatraauatj0.00,e三pect-ttxt-t三:1431504000Cj.l*-r*.I-JIVV1-W、4./、4>r4>I»TfuA-I'."XIW二I*.TX.1.:.ln.urf、,:,-*>-Wj-?.%vn.jjvi:,e.w.vl./t,.rw.t。厂»4,-、rWl.rIl<,4,IIITY,!.、rM-、,1I1.l11.p.1*Iv,/,0«*.*T1,f:<flcoport<:O,Ufc-py:0,l-tupportcpy*:1r*b<l«ftc«Mde0crlpc100e:*S<ItX®*第1节第1类一COntentPrOVider暴露ContentProvider暴 第一步准备测试工具与测试样本。测试工具:de×2jar>jd-gui、adb使用环境;测试样本:SampIeOO1.apk 第二步使用dex2jar与jd-gui获取测试样本APP的代码,获取代码中的ContentPrOVider信息 第三步使用adbShell来读取指定CotentProVide信息 第四步观察结果第1节第1类-AndrOid本地数据库SQ1.注入两种不同的DB数据库查询方法:3SQ1.demoprivateStringShowData(Stringmid)%.result"newString10=mid;Cursorv1=this./rawQuery(7ii1.ECT*FROMUSertabIeWHEREid4寸+mid二V1.moveToFirstO;While(IvIJsAfter1.astO)fthis.resu/t三String.valueOf(thi»./»54/)+"id:"+v1.getlnt(0)+"n"+"user:".getString(1)+"n"+"pass:"+v1.getString(2)+"nn"v1.moveToNextO;v1.closeO;retuEvateStringShowData2(Stringmid)this.resu/t=""Cursorv1=this.77o.rawQuery('SE1.ECT*FRoMu>erableWuEREJcl=newStringbm_id);1.moveToFirstO;hile(!v1JsAfter1.astO)hs.resut=String.vaIuef(this.resultj+"id:"+v1.getlnt(O)+"11"+.getString(1)+“n"+"pass:"+v1.getString(2)+nn"v1.moveToNextO;2'orJd<>,Buttonuser:"+v1id:1user:adminpass:admin888id:2user:rootpass:root123id:3user:×iaodpass:xiaodwin显示Intent跳转隐试Intent跳转漏洞拒绝服务、信息泄露。第I节第I类Tmem隐式跳转风险显式调用一般是用于同应用程序之间的组件调整,它直接指定了接收参数的Activity,可以唯一确定一个ACtiVity,意图特别明确。隐式调用一般是用于在不同应用程序之间的组件跳转,因跳转目标是由系统来进行判断,特殊情况下会出现目标错误,造成传递数据泄露的安全风险第1节第1类-BaCkuP备份安全AndroidAPI1.evel8及其以上AndrOid系统提供了为应用程序数据的备份和恢复功能。此功能的开关决定于该应用程序中AndroidManifeStXm卜文件中的allowBackup属性值,其属性值默认是TrUe。当allowBackup标志为true时,用户即可通过adbbackup和adbrestore来进行对应用数据的备份和恢复,这可能会带来一定的安全风险。备份指令:adbbackup-nosystem-noshared-apk-fcom.xx.xxxxF:RestoreA还原指令:adbbackup-fF:Restore-apkcom.xx.xxxx第1节第1类-JaVa调试开启风险JaVa调试的开启是指在客户端开发时,主配置文件AndroidMainfeStXml中设置了debuggable的DebUggabIe属性为true,导致产生以下风险:>jdb调试>ReIeaSe和DebUg的调试获取和篡改用户敏感信息,甚至分析并且修改代码实现的'业务逻辑,例如窃取用户密码,绕过验证码防护等ReIeaSe和DebUg模式下,程序运行两种不同逻辑流程,比如:Debug则走程序中的内测流程,使用内网IP、1.og调试日志全开;RelaseF则走线上的发布版本。第1节第1类-ReIeaSe和DebUg模式ReIeaSe和DebUg模式下,程序运行两种不同逻辑流程,比如: Debug则走程序中的内测流程,使用内网IP、1.Og调试日志全开; RelaSe下则走线上的发布版本。9etContentView(213098688);.th,.a1.ogo.(IageVXew)hndVewById1213162478);Fmng-Zfc誓g3lA.4()qituthKy(O)dNative;获取一个字苻手?Ure(t.,“CoB.ZhUbjXe.client-J)a.C(:-,"JeTKIS(SU1).二);dJIHOADD。if(l-.equaIg(Strl)“(!CoaXifl.DSBOGl)同it<ArrBj4:(在签名信息不一致,并且不是DEBUG模幻迪共示信息3hwnp(他的软件育信版风差通Mr毂云从正规建径值下-);flQ19h();return;:)this.BHandler.postDelayed(this.enterHoset10001.);所以只需将str1恒等于str2,或者将Config中的DEBUG调试模式即可。24b997 .PrologUe98 IJF。一一一设置为1,开启DEBUG调试模式本地数据全局读写漏洞调试信息泄露第1节第2类-本地数据全局读写漏洞APP在创建数据库时,将数据库设置了全局的可读权限,攻击者恶意读取数据库内容,获取敏感信息。在设置数据库属性时如果设置全局可写,攻击者可能会篡改、伪造内容,可以能会进行诈骗等行为,造成用户财产损失。以下为数据库全局读写的一种实现方式,漏洞代码样例:trySQ1.iteDatabaserdb=openOrCreateDatabase(,.Ejnull);SQ1.iteDatabasewdb=openOrCreateDatabase(,Context.MODE-WOR1.D-WRITEAB1.E,null,null);(SQ1.iteExceptione)e.printStackTrace();运行日志信息泄露进入OnResum©某银行app日志泄露明文密码nulldeviceID:866001023475214devicelD:866001023475214图片验证码登录报文IoginStr:1.elientIdt":"866001023475214”,FimageCOde,:"5524'1,"cli.Platform":"android","clientinfo":"866001023475214MI3android4.4.4","clientversion":*1*.卜DassOrd":"123456"i"IoginType":"l"zmobileNo*:"15093212852","bankCode":"6458")明文密码明才丰用号登录-一登录http不为空3'M号>bi1.OgonFTIS.urlIogonRequest170jSonViewTypetrue某金融app)biUrIusername-15093159098,账号和验证码>bi.urlVerifyCodejuyj>bi.urlrememberMe三true>bi.urlservice三phonepadpassportpassPortlA>gin.do>bi.urle×tendtgt三true>bi.UXluuid-91c94152-5c-4456-b43a-f0082cc82aea>bi.urlpasswordsuningfdl23456户月文密码测试内网/账号的泄露XontentView(2130903089);s.三AccountInput三(CPPhoneInDUt)fIndViewById(2131165399);s.mPwdInput=(CPXPa3$WCrdIneUE)EindyiewBvId(2131165400):s.三AccountIrput.SetText("18601005417":某钱包泄内部S.mPwdlnput.SuTeXt("3x2984");|飞一;口洋县£码s.m1.oinBtn=(CPButton)fIndViewById(2131iiVlhT1八,口"s.m1.oginBtn.observer(this.mAccountInput);还有些APP在发布版本内部还嵌这测试环境代码,当符合某种条件时,顺利调出测试流程,版本更新(当船51.4)嬉打客电话想拉枝?下IUl昆4(XH>23-1111如某八戒外包网:第1节第2类-避免测试数据残留HTTP/HTTPS中间人攻击数据封包弱加密手机验证码机制安全会话保持机制安全其他漏洞第1节第3类-HTTP/HTTPS中间人攻击HTTP下的升级劫持住22o4B。夬陷编号:WYun-2015-150915易信安卓客户端升级过程存在缺陷,可被中间人攻击利用植入木马I美厂商:网易Zhchbin2015-11-0216:32http:/*.*.*.*/android_update.json枚ff是杏仃新版本更新该接口返回内容如NCversionCode":217,"md5":,'c2c5fa6842ca56e91e72e38efl40ec8",downloadUrl':"http:,k","title":"5qOA5rW1.5Yiw5paw54mI5pys,description,':"MS7jg3DmlrDlop7jg3HnvqTku1.vDmilDlkZjnmoTmnYPpmZDphY3nva4KMi7jg3DmlrDlop7jg3HpnZ1.mnpznmoRHnSUbmiqXorablm77n:pnZ1.mnpznlKjmi1.flj6ku47igDzlj5HnjrDigJ3kuK3igJzpnZ1.mnpzmkYTlg4mn1.rig33nnm7Tmj(ali3fonoajkuK3kv6Hmgaml1.blj5HnmoTnvKnnlaXmlofmoYgKNS7jgJDkvJJljjbjgjHosIPmlbTI3E17bplb/IhZHmja1.mntYHnqIsKNi7jgJDkvJjlj北jgJHkvJjlj1boh6rlrprkuYnooajmg4Xmt7vl:lpI3oi6Xlub3idWc三","notify":true,"mini":0,"length":46306404,"patch":false,"patchlO关于检需制新IK本i【新”主支持设1101.人”Sii1.避清新成员的权阳配