高校校园App安全保护方案
来源:本站 作者: 发表于:2020.09.17 196浏览
校园App快速普及的同时,其安全问题也逐渐凸显。在技术上,开发者为高校定制校园App等碎片化服务而忽略安全问题;多数开发者的安全技术匮乏,无法就移动应用从设计、编码、测试、发布、更新等各个环节对安全风险进行控制。这些原因都可能导致校园App在防攻击、防篡改、防病毒等方面安全防护能力较低。在管理上,国内Android市场缺乏安全监管机制,以及Android平台的开源与开放性,校园App市场需求大等一系列因素,导致众多高校校园App出现诸多安全问题。
在校园App出现的诸多安全隐患中,程序源文件安全、本地数据存储安全、网络传输安全、内部数据交互安全、恶意攻击防范能力等,从多方面展示了校园App可能存在的安全风险,如图1所示。
图1校园App存在的安全隐患
此外,国内外研究多是阐述如何对大批量的应用程序进行检测,但在高校校园的特殊业务场景下,针对此类碎片化业务服务,如何保护校园App安全的研究较少。本文根据北京大学医学部开发校园App时采取的措施,从应用程序源文件安全和数据安全两方面阐述校园App的安全保护方案。
一、校园App安全隐患研究
1.程序源文件安全隐患
应用程序中含编码阶段的代码包和配置文件,在Android开源的环境下,如果未对应用程序采取有效保护措施,可能面临被反编译的风险。攻击者可能使用下载工具对未经加固保护的应用程序、可执行文件进行反汇编、反编译或动态调式等攻击,并可能通过逆向法破解应用程序的实现逻辑,如获取与服务器端的通讯方式、加解密算法、密钥、软键盘实现技术等,从而造成算法被窃取、文件被非法篡改或是程序接口被调用、篡改应用程序内容、植入恶意收费应用或广告SDK、引诱下载其他应用程序等后果。因此,高校校园App的开发者需保证应用软件包的完整性和可靠性。
2.数据存储与传输安全隐患
(1)数据存储与交互安全隐患
校园数据安全是高校信息化安全建设的重要组成部分。高校数据库一般都部署在学校内网的服务器中,并且有专门的防火墙限制,利用网络层面进行数据保护。而在使用移动应用的过程中,如果开发者在AndroidManifest.xml文件中权限配置不当,客户端本地静态数据如本地系统文件、本地业务数据等都可能被盗用,从而造成用户的敏感信息泄露。
Android系统本身有四大组件:Activity、Service、Broadcast Receive和Content Provider。Activity组件是Android程序与用户交互的界面;Service组件是后台运行的服务进程;Broadcast Receiver组件对外部事件进行过滤接收,并根据消息内容执行响应;Content Provider组件是应用程序之间共享数据的容器,可以将应用程序的指定数据集提供给第三方App。
不同的应用程序或进程之间可能存在共享数据,然而应用程序中不同的数据具有严格的访问权限。如果访问权限设置不当,应用程序中的数据可能被其他程序直接访问或修改,导致用户的敏感数据泄露,或应用程序被恶意篡改账号,盗取账号信息等。若组件中设置了导出权限,存在登录界面被绕过、敏感数据泄露、数据库SQL被注入的风险。
(2)数据传输安全隐患
客户端与服务器之间传输数据通常遵循通信协议指定的内容格式和内容类型,如果未对传输数据加密,传输数据很有可能被还原成网络层的数据包进行解包并分析,暴露通信过程中的各种关键数据。
在使用HTTPS协议时,客户端需对服务器身份进行完整性校验,即验证服务器是真实合法的目标服务器。如果没有校验,客户端可能与仿冒的服务器进行通信链接,即造成“中间人攻击”。
当客户端的WebView组件访问使用HTTPS协议加密的URL时,如果服务器证书校验错误,客户端应该拒绝继续加载页面。如果重载WebView的onReceivedSslError()函数并在其中执行handler.proceed(),客户端可以绕过证书校验错误继续访问此非法URL,将导致“中间人攻击”。攻击者冒充服务器与手机客户端进行交互,同时冒充手机客户端与服务器进行交互,充当中间人转发信息的时候,也有可能窃取手机号、账号、密码等敏感信息。
二、安全防护实践
1.解除程序源文件安全隐患
应用开发者可以使用自己开发的加固工具或是第三方的加固工具,来强化应用程序的安全能力。
加固技术可以在不改变应用客户端代码的情况下,将针对应用程序的各种安全缺陷保护技术集成到应用客户端中,提供应用开发、打包、发布、运行全生命周期的安全,并在文件中设置防二次打包的配置,有效防止针对移动的反编译、二次打包、内存注入、动态调试等恶意攻击行为,进而全面保护应用程序安全。
北京大学医学部在开发校园App时,研发人员采用加固方式保护Android版本的程序源文件安全。
图2 APK文件加固方案
对APK文件加固后,可以有效保护Android应用程序不被反编译。同时,代码混淆通过将Java代码中的方法名、变量名、类名、包名等元素名称改成毫无关联且无意义的名字,或对简单的逻辑分支进行混淆,使攻击者难以找到函数调用的内容,无法掌控App内部实现逻辑,增加逆向工程和破解的难度。
除使用加固工具外,北京大学医学部还针对打包上线的应用程序,将Android版本应用发布在校园内的服务器上;因iOS应用必须通过App Store审核,故将iOS版本应用发布在App Store上,同时向用户公布官方下载路径。由此可以有效避免校园应用被植入其他应用程序,防止App被破解、被盗版,防止恶意推广安装其他应用软件,避免用户安装仿冒软件等。
2.解除校园App数据安全隐患
(1)解除数据存储与交互的安全隐患
如上文所说,校园App在数据存储与交互时存在安全隐患。目前,高校大都使用统一身份认证,故登录时的账号和密码都不会在本地存留。应在考虑数据安全时重点考虑业务数据存储安全、交互数据安全和传输数据安全。
解除Webview明文存储密码风险。其他恶意程序也可能通过提权或者root的方式访问Webview数据库,窃取用户的用户名信息及密码。北京大学医学部在开发App时通过设置WebView.getSettings()中的方法setSavePassword(false)关闭Webview组件的保存密码功能。
关闭必要组件的导出权限。限制AndroidManifest.xml中的Activity、Broadcast Receiver、Content Provider、Service组件导出权限,对于须导出的组件必须限制于授权用户或者应用组件。
采用显式方式调用Intent组件。Intent通常用于Activity、Service、Broadcast Receiver等组件之间进行信息传递,包括发送端和接收端。当使用隐式的Intent调用时,并未对intent消息接收端进行限制,因此可能存在该消息被未知的第三方应用劫持的风险。Intent消息被劫持,可能导致用户的敏感数据泄露,或者恶意程序执行等风险。
(2)解除数据传输安全隐患
采用HTTPS协议传输数据。北京大学医学部在开发校园App时,针对业务敏感数据,采用HTTPS传输协议,加入了SSL(Secure Socket Layer)子层实现的HTTPS协议可确保数据在网络上加密传输,即使传输数据被截获,也无法解密和还原,保护数据在传输中的安全。
HTTPS需校验服务器。Android允许开发者重定义证书验证方法,重定义之后,若不对证书进行正确的校验,同样可能会导致“中间人攻击”。所以如果开发者重定义了证书验证方法,还需要对证书进行校验。
禁止Webview组件绕过证书校验。攻击者冒充服务器与手机客户端进行交互,同时冒充手机客户端与服务器进行交互,充当中间人转发信息的时候,也有可能窃取敏感信息。所以WebView绕过证书校验时,也可能会造成“中间人攻击”。
采用安全加密算法并避免密钥硬编码。AES/DES是常用的两种对称加密算法,其工作模式有ECB、CBC、CFB和OFB。当其使用ECB或OFB工作模式时,加密数据可能被选择明文攻击CPA破解;密钥硬编码也易造成加密算法被破解,导致客户端隐私数据泄露,加密文件破解,传输数据被获取,“中间人攻击”等后果,造成用户敏感信息被窃取。
(3)提升恶意攻击防范能力
长远角度来讲,没有绝对的安全。校园App除了应用程序本身的问题外,还需注意防护外界的恶意攻击,即在遵守应用程序开发规范的前提下,不断提升自身防护能力,做好应用程序的安全防护工作,排除安全隐患。北京大学医学部在迭代更新校园App时,都会使用业界安全公司的安全检测服务对新发版的应用进行安全检测,避免因增加新的业务服务带来安全问题。(作者:魏仿,北京大学医学部信息通讯中心;来源:《中国教育网络》)