2022微信小程序安全测试指南.docx
微信小程序安全测试指南目录1.微信小程序安全测试指南31.1.一.概述31.1.1指南概述31.1.2注意事项31.2.3微信小程序介绍41.3.三.微信小程序测试指南51.3.1微信小程序客户端测试53. 1.1微信小程序架构分析53.1. 2微信小程序客户端功能模块安全73.1.3微信小程序源代码提取83.1.4微信小程序源代码分析样例91.微信小程序安全测试指南1.1.一,概述1.1.1 指南概述1.1.2 注意事项1 .由于新技术新业务的发展速度较快,可能存在客户要求的测试项不在指南中的情况,本文档只提供对微信小程序进行测试的基本思路;另外测试方法可能会有其他更好的替代方案,请积极探索并实践;2 .风险等级评定请按照业务需求评估,给出的定级进攻参考;1.2. 二.测试准备本节主要介绍微信小程序在测试过程中使用到的系统环境及测试工具:系统MacOSWindows101.2.1 常用工具列表名称用途iTools下载安装ipa,文件管理、越狱等ADBPC端与安卓手机进行调试交互BurpSuite抓包分析工具Nmap端口扫描工具名称AWVSSqlmap中国菜刀WxappUnpacker用途WEB漏洞扫描工具SQ1.注入工具Webshell连接工具小程序源代码获取工具1.2.3 微信小程序介绍微信小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用,也体现了“用完即走”的理念,用户不用关心是否安装太多应用的问题。应用将无处不在,随时可用,但又无需安装卸载。对于开发者而言,小程序开发门槛相对较低,难度不及APP,能够满足简单的基础应用,适合生活服务类线下商铺以及非刚需低频应用的转换。小程序能够实现消息通知、线下扫码、公众号关联等七大功能。其中,通过公众号关联,用户可以实现公众号与小程序之间相互跳转。微信小程序与APP之间的区别下载安装微信小程序:通过微信(扫描二维码、搜索、分享)即可获得;App:从应用商店(APPStore、应用汇等)下载安装;(2)内存占用微信小程序:无需安装,和微信共用内存使用,占用内存空间忽略不计;App:安装于手机内存,一直占用内存空间,太多的App可能会导致内存不足;手机适配微信小程序:一次开发,多终端适配;App:需适配各种主流手机,开发成本大;(4)产品发布微信小程序:提交到微信公众平台审核,云推送;App:向十几个应用商店提交审核,且各应用商店所需资料不一样,非常繁琐;功能区别微信小程序:限于微信平台提供的功能;App:对硬件资源的利用更加淋漓尽致,可以做出功能、设计、效果和流畅程度远远超过小程序的软件和服务;(6)传输要求微信小程序:必须使用HTTPS,且绑定域名需要备案,不能直接使用IP作为地址;App:依照开发商自主要求,HTTPS传输可选可不选;开发背景微信小程序:适合初创团队,试错成本低,需要较少时间和资金投入;App:适合成熟的商业大公司,对自我品牌要求较高的企业。1.3. 三.微信小程序测试指南1.3.1 微信小程序客户端测试3.1.1微信小程序架构分析微信小程序采用了框架化进行开发,主要分为视图层、逻辑层、JSBridge。JS负责业务逻辑层的实现,而视图层则由WXM1.和WXSS来共同实现,前者其实就是一种微信定义的模板语言,而后者类似CSS0从下面的微信小程序架构图上可以清晰的看出,小程序借助的是JSBridge实现了对底层API接口的调用,所以在小程序里面开发,开发者不用太多去考虑I0S、安卓的实现差异的问题,安心在上层的视图层和逻辑层进行开发即可视图层框架的视图层由WXM1.与WXSS编写,由组件来进行展示,将逻辑层的数据反应成视图,同时将视图层的事件发送给逻辑层。逻辑层逻辑层将数据进行处理后发送给视图层,同时接受视图层的事件反馈。文件组成部分(一)一个小程序主体部分由三个文件组成,必须放在项目的根目录:APP.js:小程序(全局)逻辑;APP.json:小程序(全局)公共设置,决定页面文件的路径、窗口表现、设置网络超时时间等;APP.wxss:小程序公共(全局)样式表。(二)一个小程序页面由四个文件组成:JS:页面逻辑;WXM1.:页面结构,框架设计的一套标签语言,结合基础组件、事件系统,可以构建出页面的结构;WXSS:是一套样式语言,用于描述WXM1.的组件样式,用来决定WXM1.的组件应该怎么显示;JSON:页面配置。QuickStart员网目最只体页面目录费面结构代码页面株式代5贝诙配代码I工H娶目量应用生命周IW代码府网至同配代码应用全篇样式前项目目录播述员面的四个文件必方网名冏路彼,片pages.Nindexide×.jsindex.wxmlidex.wxss fislogsIogsjsIogsJsonlogs.wxmllogs.w×ss Kutilsutil.jsapp.jsapp.jsonapp.wxss从上述的架构图、文件组成部分来看,重点分析的就是小程序的逻辑层。而逻辑层主要的组成部分是由APPJs.APPJson>JS文件、JSoN配置文件等组成,因此测试过程中主要分析的对象就是这一些。3.1.2 微信小程序客户端功能模块安全微信小程序客户端功能模块安全大致可以分为以下6个部分:3.1.2.1 网络传输安全微信小成熟传输虽然使用HTTPS,并对访问域名进行校验控制,但如果后端服务器未做SS1.双向认证,仍无法抵御攻击者在本地安装代理证书实施中间人攻击的威胁。3.1.2.2 数据存储安全本地数据存储采用(KEY,VA1.UE)形式存放在DB,数据的保护继承了微信的数据库加密防护策略。3.1.2.3 文件存储安全本地文件存储采用HASH映射机制进行文件定位,文件存储在外部存储,本身通过自定义算法实现完整性校验。3.1.2.4 框架本身安全:框架上继承了微信成熟的JSAPl框架和底层的TBS浏览器内核,因此在未出现新的ODAY漏洞之前,整体的框架安全还是十分可靠;3.1.2.5 伪造小程序二维码安全:扫码功能依赖微信APP的原生的扫码功能;生成小程序特定页面的直达二维码,依赖于ACCESS_TOKEN,而ACCESS_TOKEN是通过小程序私有的APPID和APPSeeret请求得到,攻击者无法获知到APPSeCret信息伪造生成二维码;3.1.2.6 数据泄露安全小程序登录体系可以依赖微信接口和公众号平台,也可以由小程序自行实现。前者根据微信平台的安全规范实施,由微信进行整体的安全维护,因此安全性较高。后者则由小程序自行控制安全性。从上述的客户端功能模块安全分析中来看,小程序客户端本身的安全继承了微信APP整体的安全建设。因此无需像传统的移动端测试对客户端本身进行测试,测试的重点还是在于服务端,即小程序与后端进行交互过程中存在的安全风险,基本上跟测WEB没有区别。但是跟传统黑盒测试WEB的区别是,在目前为止,可以非常简单的提取到小程序的源码信息。如小程序在传输过程中进行了数据的加密传输,那么我们就可以通过源码的分析来得出整个加密算法的技术流程。3.1.3 微信小程序源代码提取微信小程序分发后的文件后缀为pkg0在写这篇指南的时间为止,提取出来的pkg文件还是可以通过工具直接还原成可读的源代码,但不排除后续微信更新,增加Pkg文件提取、逆向还原的难度。微信小程序在手机中存放的目录如下:安卓:datadataCOm.tencent.mm/MiCroMsg不同微信号的值不同appbrandpkg苹果:varmobileCOntainerS/Data/APPliCatiOn/不同微信号的值不同/WechatPrivateZcI5d9cced65acecd30d2d6522df2f973WeApp1.ocalCacherelease如果手机上打开了很多微信小程序,那么目录中就会存在多个小程序Pkg文件。第一种区分方法是按照修改时间来进行区分。第二种方法是在微信页面中删除所有浏览过的小程序,重新打开需要进行测试的小程序,那么目录中只会存在一个Pkg文件。安卓的提取方法如下,苹果可以使用It。IS工具直接拷贝。adbshellcddatadatacoB.tencefit.MMicrMsg7eaa3417825137674379747268clc6aapbrandpkg,U-1261323258_6.wxepkg-l79392M-3.wxapkg_1123949441_ie6.wxapkg*cp,.-1261323258.6.wxapkgsdcardtexitdbpullsdcard/_-1261323258_6.wxapkg.用还原源码命令:nodeWuWxapkgJs-o-d目标文件.pkg还原后的文件形式大致如下:名希A修我日期大小app-config.json今天下午7:272KBJSONapp-service.js今天下午7:2791KBJavaScripappjs今天下午7272KBJavaScripapp.jso今天下午7:271KBJSONapp.wxss今天下午7:2723KB文稿Ifmsdk今天下午7:27一文件夹images今天下午7:27文件央Qpdge-frame.html今天下午7:27157KBHTM1.OCpages今天下午7:27一文件夹utils今天下午7:27文件央weps今天下午7:27文件夹文件夹中的HTM1.、WXSS等文件主要是存放了页面结构、小程序页面样式等内容,重点分析的还是文件中JS文件,如小程序在与后端服务器进行了加密传输,可以根据传输中的加密参数值进行跟踪,逐步分析参数是进行如何加密方式。3.1.4微信小程序源代码分析样例如下图中的请求包,在请求包内存在参数md5Data0该处请求包为登录时的请求包,尝试修改手机号为其他手机号进行爆破,发现当修改了手机号之后,服务端未报错,提示验证失败。那么这个md5Data参数就是传输过程中的校验参数值。如果我们能通过源代码中获取到md5Data参数的生成方式,那么我们就可以掌握整个传输过程中的加密方式,进而可以更加深入的对该程序进行分析。POST/get_sms_codeHTTP/1.1charset:utf8referer:httpsservicewechat.mwx49f7d1675d7c919/1/page-frame.htmIntnt-type:applicationjsoUser-Agent:Mozilla/5.0(1.inux;Android8.0;Ml6BuildOPR1.170623.027;wv)AplWebKit537.36(KHTM1.1likeGecko)Version/4.0Chrom53