如何做好软件安全测试
一、软件安全性测试基本概念
软件安全性测试包括程序、网络、数据库安全性测试。根据系统安全指标不同测试策略也不同。
1.用户程序安全的测试要考虑问题包括:
① 明确区分系统中不同用户权限;
② 系统中会不会出现用户冲突;
③ 系统会不会因用户的权限的改变造成混乱;
④ 用户登陆密码是否是可见、可复制;
⑤ 是否可以通过绝对途径登陆系统(拷贝用户登陆后的链接直接进入系统);
⑥ 用户推出系统后是否删除了所有鉴权标记,是否可以使用后退键而不通过输入口令进入系统。
2.系统网络安全的测试要考虑问题包括:
① 测试采取的防护措施是否正确装配好,有关系统的补丁是否打上;
② 模拟非授权攻击,看防护系统是否坚固;
③ 采用成熟的网络漏洞检查工具检查系统相关漏洞;
④ 采用各种木马检查工具检查系统木马情况;
⑤ 采用各种防外挂工具检查系统各组程序的客外挂漏洞。
3.数据库安全考虑问题:
① 系统数据是否机密(比如对银行系统,这一点就特别重要,一般的网站就没有太高要求);
② 系统数据的完整性;
③ 系统数据可管理性;
④ 系统数据的独立性;
⑤ 系统数据可备份和恢复能力(数据备份是否完整,可否恢复,恢复是否可以完整)。
二、根据软件安全测试需要考虑的问题
1. 保护了最薄弱的环节
攻击者往往设法攻击最易攻击的环节,这对于您来说可能并不奇怪。即便他们在您系统各部分上花费相同的精力,他们也更可能在系统最需要改进的部分中发现问题。这一直觉是广泛适用的,因此我们的安全性测试应侧重于测试最薄弱的部分。
如果执行一个好的风险分析,进行一次最薄弱环节的安全测试,标识出您觉得是系统最薄弱的组件应该非常容易,消除最严重的风险,是软件安全测试的重要环节。
2. 是否具有纵深防御的能力
纵深防御背后的思想是:使用多重防御策略来测试软件,以至少有一层防御将会阻止完全的黑客破坏。 “保护最薄弱环节”的原则适用于组件具有不重叠的安全性功能。当涉及到冗余的安全性措施时,所提供的整体保护比任意单个组件提供的保护要强得多,纵深防御 能力的测试是软件安全测试应遵循的原则。
3. 是否有保护故障的措施
大量的例子出现在数字世界。经常因为需要支持不安全的旧版软件而出现问题。例如,比方说,该软件的原始版本十分“天真”,完全没有使用加密。现在该软件想修正这一问题,但已建立了广大的用户基础。此外,该软件已部署了许多或许在长时间内都不会升级的服务器。更新更聪明的客户机和服务器需 要同未使用新协议更新的较旧的客户机进行互操作。该软件希望强迫老用户升级,没有指望老用户会占用户基础中如此大的一部分,以致于无论如何这将真的很麻 烦。怎么办呢?让客户机和服务器检查它从对方收到的第一条消息,然后从中确定发生了什么事情。如果我们在同一段旧的软件“交谈”,那么我们就不执行加密。
「软件测试」如何进行APP安全性测试
一、前言
在SDK最近的项目中上线的包被第三方杀毒软件报出有病毒的问题,后来经过查验发现是SDK悬浮窗动画的逻辑被检验出有病毒,最后进行了修改。事情虽然解决了,但是引起该问题的一个原因是在测试中没有安全测试,而安全测试的标准,方法都没有。因此今天将之前工作中参与过的安全测试以及从网上查阅到有关安全测试的资料进行整理。有不足的之处,尽情谅解。
二、软件权限
1)扣费风险:浏览网页,下载,等情况下是否会扣费,一般在游戏APP,和社交APP等需要考虑这些。
2)隐私泄露风险。例如在我们安装APP应用时通常会看到"xx要读取手机通讯录"等提示,这些提示可以提示用户拒绝接受,这些是APP测试中的测试点。
3)校验input输入。对于APP有输入框的要对输入的信息进行校验,比如密码不能显示明文。在测试中红人馆注册时需要对input进行测试。
4)限制/允许使用手机功能接人互联网,收发信息,启动应用程序,手机拍照或者录音,读写用户数据。这个在通信行业用的比较多,比如展讯,高通等芯片厂商,他们在出厂芯片时要对手机各个功能进行测试。
三、代码安全性
之所以单独拿出来说,是因为在SDK测试过程中SDK代码被第三方工具检测出游病毒代码,这样一来就会影响输入法的使用。因此在后续测试中要尝试加入安全性测试。
四、安装与卸载安全性
1)应用程序应能正确安装到设备驱动程序上
2)能够在安装设备驱动程序上找到应用程序的相应图标。在SDK测试项目中发现有些设备受权限的问题,无法下发图标创建快链。
3)是否包含数字签名信息。在SDK测试项目中基本上没有,但是在输入法打包和主线版本上存在这样的测试。
4)安装路径应能指定
5)没有用户的允许应用程序不能预先设定自动启动
6)卸载是否安全,其安装进去的文件是否全部卸载
7)卸载用户使用过程中产生的文件是否有提示
8)其修改的配置信息是否复原
9)卸载是否影响其他软件的功能
10)卸载应该移除所有的文件
11)安装包的存放。在SDK下载安装包的测试中我们经常会看到下载下来的包后面有四个随机的字符串,这个的目的是为了防止第三方工具恶意删除安装包的问题。
在SDK测试项目中有专门针对下载安装卸载的用例,对安装的路径和下载的文件夹路径等有相关的测试,测试结果页表明,某些手机(例如华为mate1)在删除了某个下载路径文件夹之后受权限应用不会自动创建。
五、数据安全性
1)当将密码或其他的敏感数据输人到应用程序时,其不会被储存在设备中,同时密码也不会被解码
2)输人的密码将不以明文形式进行显示
3)密码,信用卡明细,或其他的敏感数据将不被储存在它们预输人的位置上
4)不同的应用程序的个人身份证或密码长度必需至少在4一8个数字长度之间
5)当应用程序处理信用卡明细,或其他的敏感数据时,不以明文形式将数据写到其它单独的文件或者临时文件中。以防止应用程序异常终止而又没有删除它的临时文件,文件可能遭受人侵者的袭击,然后读取这些数据信息。
6)当将敏感数据输人到应用程序时,其不会被储存在设备中
7)备份应该加密,恢复数据应考虑恢复过程的异常通讯中断等,数据恢复后再使用前应该经过校验
8)应用程序应考虑系统或者虚拟机器产生的用户提示信息或安全警告
9)应用程序不能忽略系统或者虚拟机器产生的用户提示信息或安全警告,更不能在安全警告显示前,利用显示误导信息欺骗用户,应用程序不应该模拟进行安全警告误导用户
10)在数据删除之前,应用程序应当通知用户或者应用程序提供一个"取消"命令的操作
11)"取消"命令操作能够按照设计要求实现其功能
12)应用程序应当能够处理当不允许应用软件连接到个人信息管理的情况
13)当进行读或写用户信息操作时, 应用程序将会向用户发送一个操作错误的提示信息
14)在没有用户明确许可的前提下不损坏删除个人信息管理应用程序中的任何内容
15)应用程序读和写数据正确。
16)应用程序应当有异常保护。
17)如果数据库中重要的数据正要被重写,应及时告知用户
18)能合理地处理出现的错误
19)意外情况下应提示用户
20)HTTP、HTTPS覆盖测试。在测试中我们经常会遇到与请求的加密解密测试,以确保产品的安全性
如何去测试一个 app 是否存在安全问题
身为测试答一个,这类安全性测试,是app专项测试中必须要做的一环,简单列举下目前常做的测试类别
1. 用户隐私
检查是否在本地保存用户密码,无论加密与否
检查敏感的隐私信息,如聊天记录、关系链、银行账号等是否进行加密
检查是否将系统文件、配置文件明文保存在外部设备上
部分需要存储到外部设备的信息,需要每次使用前都判断信息是否被篡改
2. 文件权限
检查App所在的目录,其权限必须为不允许其他组成员读写
3. 网络通讯
检查敏感信息在网络传输中是否做了加密处理,重要数据要采用TLS或者SSL
4. 运行时解释保护
对于嵌有解释器的软件,检查是否存在XSS、SQL注入漏洞
使用webiew的App,检查是否存在URL欺骗漏洞
5. Android组件权限保护
禁止App内部组件被任意第三方程序调用。
若需要供外部调用的组件,应检查对调用者是否做了签名限制
6. 升级
检查是否对升级包的完整性、合法性进行了校验,避免升级包被劫持
7. 3rd库
如果使用了第三方库,需要跟进第三方库的更新
怎么去测试一个app是否存在安全问题?
说说我对安全测试的理解。全部基于工作中积累的经验,跟各位知友分享。
首先,个人认为经过安全测试后的App,并不是说它就是一定是安全的;只能说减少了一些已知的安全问题,降低了它的安全风险,提高了App被调试分析以及破解的门槛。那么一般如何去进行安全测试呢?
安全测试一般分为动态功能测试和静态测试。
动态功能测试一般从App自身的内容出发,来进行测试内容的整理。
从应用内容出发,例如App内有提供帐号登录的功能,那么,
请问是否有对登录的帐号密码保存在手机本地,
又问是否对与服务器端的交互封包提供了加密处理;
交互封包中的帐号密码是否也有处理;
再问是否对加密的密钥进行隐蔽的保存;
并且误帐号或密码的登录次数是否有限制等。
可以看到整个流程是,从应用本身的功能点出发,而引发的一系列测试内容。而这种类型的安全测试,也更多的像是需要测试人员对App在进行安全攻击,然后确认其安全性。
可以看到在整个测试过程中,更多的是需要人工参与,无法进行自动化测试的功能。
如果说以上和应用内容相关测试为动态功能测试,那么再来看看静态测试。
静态测试主要测试些什么呢?
再看上面的测试逻辑,请问如何知道封包是否加密呢?可以通过调试分析App进程。
那么怎样的App可以或者更容易被调试分析和破解呢?这就涉及到Apk本身的很多配置。例如在Apk的AndroidManifest.xml文件内,有android:debuggable=“false”这样的标志位。并且由于Apk底层都是使用Java,其本身很容易被反编译获得源码,这样可以更进一步的分析应用的漏洞点。所以从这个方面想,是否应该需要对Java的dex文件进行保护或者混淆。
综上,可以看到静态测试更多的是在Apk文件本身的层面进行,因此它具有通用性。而且更重要的是,这部分测试内容更适合于自动化测试。
针对App的静态测试,自动化测试工具:WeTest腾讯质量开放平台(wetest.qq.com),可以扫描出一部分安全问题。更多的功能性问题,还是需要人工去排查发现。
以上,共同进步,祝好!
手机上的app性能测试怎么测
你好朋友
有很多方面需要考虑到,我列几点有明显特征的(我这里特指跟网络有交互的移动互联网应用,不是那种单机版的应用):
功能测试:手机软件的基本功能。倒不一定完全由测试人员来完全执行,但却是所有测试中最重要的,需要测试人员做很好的测试策略和职责划分。
稳定性测试:大多数手机应用是需要保证能够稳定运行一定时间的(尤其是对于一些记事类应用),而且在应用的运行状态发生切换后需要继续保持当前的状态,不出现闪退。
性能测试:这部分分为两个方面,一部分是后台服务的性能测试(API的响应时间和响应报文大小),一部分是应用自身的性能情况(占用CPU、内存、I/O、电量情况,以及页面到页面之间的切换速度,如果是游戏或动画,还要保证能够在一定的帧率以上)。
安全测试:关键的机密数据连接有没有走加密连接;本地数据库有没有做加密处理,是否会被其他恶意应用读取;后台服务的接口是否安全,会不会受SQL注入的影响;应用有没有做混淆,会不会被逆向以及会不会在渠道方被修改重新签名挂马;敏感数据是否存在了SD Card上等等。
地理位置定位测试:大多数业务软件(电商类)都支持获取用户的地理位置信息,方便做一些本地业务的定制(尤其是对于O2O行业),至少需要考虑到三方面:1. 城市是否能准确定位;2. 定位位置精度是否符合要求;3. 地理位置名称解析过程无误。
应用升级兼容性测试:需要保证应用能够在升级或跨版本升级后一些关键数据得以保留,而不必用户重新设置,诸如用户账户认证信息、亮度设置、用于标示设备的UUID和一些关键的应用功能开关设置等等。
设备兼容性测试:随着Android设备的快速分化以及iOS设备的缓慢分化,应用需要适配在不同配置的硬件平台上(不同的CPU体系结构、不同的RAM配置、不同的Flash存储、不同的传感器配置、不同的网络模式等等),同时还要兼顾不同的OS版本,所以需要很大的精力放在系统兼容性和设备兼容性测试上。
耦合应用测试:对于今天的移动应用,“孤岛”模式的应用已经不复存在。大多数应用需要跟其他应用进行交互,从而达到“社交化”或“分享”以及“支付”的功能,这样,它在运行时跟其他软件的交互就存在一定的不确定性,这时如果应用有版本升级,我们需要关注升级后的耦合应用跟我们的应用之间的交互是否还依旧有效。
PUSH跳转测试:现今的移动应用同样还存在通过推送服务来让用户到达特定页面的特征。这样我们需要对PUSH服务能否到达特定页面并正确展示特定页面做测试。
统计上报测试:对于大多数应用来说,收集一些用户数据有助于他们对用户行为作出分析,从而对比是不是一些新功能的加入能提高用户的活跃度或转化率。这些信息都需要一定的上报方案才能获取、入库和分析。所以对于QA来说,这部分工作并不弱于一般功能测试。
---------------------------------------------
看到 @孟双双 补充说的网络环境,我再补充一下网络相关的。网络方面可以重点关注三类测试:
功能测试(用户体验方面)。在有些2G/3G网络上请求延迟会比较大,建立连接速度慢,以及不断进行大量的分散请求也会导致功耗增大、反复建立连接导致完成所有请求/响应时间长,这些都需要关注到。同时,应用内提供一套支持节约流量的使用模式也是一种可取的途径。另外,应用自身也可以考虑加上一定的离线工作模式,如将一些关键数据在WiFi连接时或有网时进行预取。参考豆瓣电台离线模式或虾米的歌单离线收听。不过此类测试可以通过一些工具来模拟网络延迟大或是丢包严重的情况,用2G/3G网络直接测试的环境构造成本会比较大。
适当的性能测试。功能测试已经能发现很多用户体验方面的问题,但这是大概的。如果要特别精细地定位问题瓶颈,需要通过性能测试详细分析延迟出现在哪里,是在建立连接的过程还是服务端响应的过程,或者是应用本地处理返回的数据上。
由于运营商在2G/3G网络环境上的复杂配置,很多情况下应用到服务端的连接会出现各种各样的怪象,导致用户无法在操作应用端时成功将请求发往服务端。这部分无法直接通过测试来保证(除非你**真的**有足够的资源可以做好众测)。建议跟运维组联系部署或租用全国范围内的电信、联通、移动网络监控(监控到关键域名下URL的响应)。
望采纳祝你好运
谁能简单讲讲手机应用软件安全性测试要测试什么啊?
1、文件检测:检查dex、res文件是否存在源代码、资源文件被窃取、替换等安全问题。2、漏洞扫描:扫描签名、XML文件是否存在安全漏洞、存在被注入、嵌入代码等风险。3、后门检测:检测App是否存在被二次打包,然后植入后门程序或第三方代码等风险。