一、客户端APP安全
1.反编译保护
问题描述:APP源代码对于一个公司是非常重要的信息资源,对APP的保护也尤为重要,APP的反编译会造成源代码被恶意者读取,以及APP的逻辑设计。
处理措施:采用加密和混淆技术达到反编译保护,混淆技术作用是增加了用户反编译后阅读代码的难度。
2.APP二次打包
问题描述:“Android APP二次打包”则是盗版正规Android APP,破解后植入恶意代码重新打包。不管从性能、用户体验、外观它都跟正规APP一模一样但是背后它确悄悄运行着可怕的程序,它会在不知不觉中浪费手机电量、流量,恶意扣费、偷窥隐私等等行为。
处理措施:客户端使用从属方证书进行签名后进行发布而不是使用第三方开发商的证书进行签名,以防开发商内部监管异常,证书滥用的情况出现。
3.数据安全
问题描述:APP所在目录的文件权限;SQLite数据库文件的安全性;Logcat日志;敏感数据明文存储于Sdcard。
处理措施:检查App所在的目录,其权限必须为不允许其他组成员读写;重要信息进行加密存储;具有敏感信息的调试信息开关一定要关闭;在将文件保存到外部存储之前,先对文件内容进行加密。
4.键盘安全
问题描述:安卓应用中的输入框默认使用系统软键盘,手机安装某软件后,可以通过替换系统软键盘,记录应用的密码; 测试客户端是否使用随机布局的密码软键盘。
处理措施:开发自定义软键盘;对自定义软键盘进行随机化处理,同时在每次点击输入框时都进行随机初始化。
5.Webview漏洞
问题描述:addJavascriptInterface、searchBoxJavaBridge_、accessibility和 accessibilityTraversal接口引起远程代码执行漏洞;密码明文存储漏洞。
处理措施:版本4.2之后,对被调用的函数以 @JavascriptInterface进行注解从而避免漏洞;关闭密码保存提醒。
6.应用数据可备份
问题描述:系统为应用程序的数据提供了备份和恢复功能,因此,当一个应用数据被备份之后,用户即可在其他手机或模拟器上安装同一个应用,以及通过恢复该备份的应用数据到该设备上,在该设备上打开该应用即可恢复到被备份的应用程序的状态,可能会造成信息泄露和财产损失。
处理措施:设置默认为不备份应用数据。
7.debug调试
在准备发布应用之前要确保关闭debug属性,调试开启会存在应用被调试的风险。
二、通信安全
1.通信保密性
验证客户端和服务器之前的通信是否使用https加密信道,采用https协议通信可以防止信息在传输过程被窃听的风险。
中间人拦截代理方式可以让采用https通信的数据暴露无遗,还应该对SSL证书有效性做验证,分为强校验和弱校验两种方式,强校验就是在手段端先预埋好服务端的证书,当手机端与服务端通信时获取证书,并且与手机本地预埋的服务端证书做对比,一旦不一致,则认为遭到了中间人劫持,自动断开与服务端的通信。弱校验则是在手机端校验证书的域名和手机真实访问的域名是否一致、证书颁发机构等信息。
2.访问控制
问题描述:测试客户端访问的URL是否仅能由手机客户端访问。是否可以绕过登录限制直接访问登录后才能访问的页面,对需要二次验证的页面(如私密问题验证),能否绕过验证。
处理措施:建议服务器进行相应的访问控制,控制对应页面仅能通过手机客户端访问。同时进行页面访问控制,防止绕过登陆直接访问页面的非法访问。
三、服务端安全
1、安全策略设置
密码复杂度策略
问题描述:测试客户端程序是否检查用户输入的密码,禁止用户设置弱口令。
处理措施:建议在服务器编写检测密码复杂度的安全策略,并将其运用到账号注册,密码修改等需要进行密码变更的场景,以防止弱密钥遍历账户的方式进行暴力猜解。
认证失败锁定策略
问题描述:测试客户端是否限制登录尝试次数。防止使用穷举法暴力破解用户密码。
处理措施:建议在服务端编写账户锁定策略的逻辑,当一天内多次输入密码错误时进行账号锁定以防止通过暴力猜解密码。
单点登录限制策略
问题描述:测试能否在两个设备上同时登录一个账户。
处理措施:建议在服务器进行账号登陆限制相应逻辑代码的编写,通过Session或数据库标志位的方式控制同一时间只有一个设备可以登陆某一账号。
会话超时策略
问题描述:测试客户端在一定时间内无操作后,是否会使会话超时并要求重新登录。超时时间设置是否合理。
处理措施:建议在客户端编写会话安全设置的逻辑,当10分钟或20分钟无操作时自动退出登录状态或是关闭客户端。
界面切换保护
问题描述:检查客户端程序在切换到后台或其他应用时,是否能恰当响应(如清除表单或退出会话),防止用户敏感信息泄露。
处理措施:建议客户端添加响应的逻辑,在进行进程切换操作时提示用户确认是否为本人操作。
UI敏感信息安全
问题描述:检查客户端的各种功能,看是否存在敏感信息泄露问题。
处理措施:建议用户名或密码输入错误均提示“用户名或密码错误”,若客户端同时还希望保证客户使用的友好性,可以在登陆界面通过温馨提示的方式提示输入错误次数,密码安全策略等信息,以防用户多次输入密码错误导致账号锁定。
安全退出
问题描述:验证客户端在用户退出登录状态时是否会和服务器进行通信以保证退出的及时性。
处理措施:保证客户端和服务器同步退出,APP退出时服务器端的清除会话。
密码修改验证
问题描述:验证客户端在进行密码修改时的安全性。
处理措施:建议在修改密码时,客户端及服务器系统增添原密码输入验证身份的逻辑,以防Cookie登陆修改密码。
2、任意账号注册
问题描述:使用任意账号可以进行注册,造成非实名制注册风险,恶意注册者可以注册大量账号。大量账号可以用于薅羊毛等恶意操作。
处理措施:注册过程最后的确认提交时,服务器应验证提交的账号是否是下发验证码的手机号。
3、短信重放攻击
问题描述:检测应用中是否存在数据包重放的安全问题。是否会对客户端用户造成短信轰炸的困扰。
处理措施:token和手机号一起,重放无法造成短信轰炸,另外就是限制每个手机号每天只能发送短信次数,例如10次。每个ip每分钟只能发送3次。
4、短信验证码
问题描述:短信验证码对于防止暴力破解是一种有效的手段,但是如果验证码没有使用有效,则会导致其无法发挥防暴力破解的效果。
处理措施:设置短信验证码使用一次即失效,并且每个短信验证码在5分钟内有效。
5、SQL注入
问题描述:它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制Web应用程序后面的数据库服务器。攻击者可以使用SQL注入漏洞绕过应用程序安全措施;可以绕过网页或Web应用程序的身份验证和授权,并检索整个SQL数据库的内容;还可以使用SQL注入来添加,修改和删除数据库中的记录。
处理措施:不要使用动态SQL,加密存储在数据库中的私有/机密数据,限制数据库权限和特权,定期测试与数据库交互的Web应用程序。
对于希望进行内测分发或企业签名的开发者,虾分发(xiafenfa.com)是一个值得推荐的平台。虾分发提供了完整的内测分发和企业签名解决方案,能够极大地帮助开发者完成应用程序的分发和签名过程。