• 1
  • 1
分享

首发:https://mp.weixin.qq.com/s/iFqF60qQhYo2WW1Rghw3KQ

软件测试是对项目研发过程产物(文档、代码、程序等)进行审查,保障产品质量的过程。软件测试从测试内容上可以分为功能测试、性能测试、安全测试、兼容性测试等等。

其中,安全测试是当今互联网产品的一项重要测试。那么,什么是安全测试?应该如何开展安全测试呢?

安全测试的前世今生

1945年12月, 在宾夕法尼亚大学摩尔电气工程学院,占地1500 平方英尺,重达30吨的世界上第一台全电子数字计算机ENIAC诞生。不过,那时的计算机输入还是卡片带,谈不上编程语言。

随着第一代电子的计算机诞生,出现了机器语言和汇编语言。当时编程仅被少数人和科学家所能驾驭,程序还不复杂,没有测试的概念。随着代码规模、复杂度的不断提升,一部分人开始思考如何验证程序的正确性。

1957年Charles baker在他的新书中对调试和测试进行了区分,至此软件测试诞生,并发展壮大成一门新的重要学科。随着计算机应用数量、规模、成本、复杂性的大幅提升以及经济风险的大大增加,软件测试的重要性日益突出。

1994年10月,万维网联盟在麻省理工学院计算机科学实验室成立,标志着世界进入互联互通时代。万维网的出现使得世界上任何地方的任何一个人都可以通过网络访问任意一个联网程序,这极大提升了程序的普及和使用范围。

同时,也使得程序容易遭受到更多的攻击和破坏。随着系统安全形势的日益严峻,软件安全测试应运而生。

纵观计算机行业发展史,我们不难发现计算机处理能力的提升催生了编程语言的出现,编程语言的发展促使了软件测试的诞生,万维网(WWW)的普及又触发了安全测试的兴起。所以,事物的诞生和发展都是形势发展到某一阶段的产物。那么,安全测试的未来将如何呢?

根据工信部安全中心发布的《2021年网络安全半年形势分析》报告显示,当前网络安全形势严峻,全球勒索软件攻击事件数量增长明显,大规模数据泄露事件不断涌现:

  • 2021年3月,微软Exchanger Server电子邮件服务器的安全漏洞导致全球范围内大量企业、政府部门被感染。

  • 2021年5月,美国最大的输油管道公司Colonial Pipeline遭受勒索攻击,导致美国东海岸燃油输送线路大面积停运。

  • 2021年6月,富士通的项目信息共享攻击ProjectWEB被攻击,导致多个政府部门敏感数据泄露。

诸如此类,还有facebook的用户数据泄露、棱镜门、万豪信息泄露、震网病毒、委内瑞拉全国断网等等。

从这些事件中,我们不难发现随着数字时代的深入和万物互联的加深,不法分子也加速向线上转移,初步形成了专业化、规模化和产业化的网络黑灰产业。各种黑客组织的趋理性攻击越来越明显,网络安全防护形势日益严峻。

大视角看,世界主要国家都将网络安全作为国家安全的战略重点,纷纷出台各类综合性网络安全文件,不断加码数据安全和供应链安全的要求,对各行业的网络安全水平提出了更多更细致的要求。

在这种大环境下,各公司为了满足各类监管要求、行业标准,确保自身系统的安全可靠,势必会不断加大安全领域的投入。

安全测试随着也将迎来一波大的发展,安全测试技能将会受到越来越多用人公司的青睐和追捧。

认识和开展安全测试

世界上没有绝对的安全,只有相对的安全。系统安全也是如此,攻破系统的成本大于攻破系统的收益,则认为系统是安全的,这个安全就是相对安全。

有人说不对啊,我建个局域网,禁止外网访问,那我是不是就是绝对安全?

网络隔离确实是一种行之有效的安全防护方式,但是这种安全也是相对的,不是绝对安全。比如:银行的核心系统都要求专网连接,互联网逻辑隔离,军网系统通常也是内部独立部署,甚至会做网络物理隔离。这种就一定安全吗?

黑客确实无法通过常规的网络手段入侵系统,但是不要忘了还有间谍、内部人员被收买胁迫等情况,只要攻击者认为攻击收益非常大,大到愿意担负任意成本,那么在时间上这个系统终归一日会被通过某种方式攻破,所以安全都是相对的。

既然系统没有绝对安全,那么系统安全是不是就不重要了?当然不是,安全是产品的根基。

一个易燃的汽车无论性能多么出众,设计多么美观,你都不会购买使用,毕竟它不安全。虽然你现在购买或者乘坐的汽车都存在一定概率的自燃问题,相关事故在新闻中也屡有报道,但你不会因此拒绝购买或使用汽车,因为汽车自燃的概率非常非常低,这种风险远小于给你带来的便利,基于这个安全前提,你才会考虑购买和使用汽车。

系统安全也是从这个思路出发,构建一个相对安全的系统。安全测试的思想就是验证系统的相对安全程度,提升系统的被攻破成本。

从主动性上,安全测试可以分为主动防御检查和渗透性测试,其中渗透性测试又可分为基于规则的安全扫描和人工渗透测试。

测试人员可从上述三个方面着手,组织开展系统安全测试。

主动防御

主动防御检查的思想是扎紧篱笆,高筑围墙,提高渗透攻击的成本。

如系统登陆功能,本质是完成用户输入账号密码和数据库系统中记录的账号密码匹配。若匹配成功,则登陆成功,若匹配失败,则登陆失败,一条数据库查询语句就能实现上述功能。

但是,正确的登陆功能却不能这么简单设计,因为太简单了,破解成本太低,攻击者的一波遍历探索,系统可能就被攻破了。这样的系统是不够安全的,用户也无法放心使用。

从主动防御的思想出发,开发者应主动增加攻击者的破解成本。比如:

增加图片验证码,避免攻击者使用自动工具遍历尝试;

模糊登陆错误提示信息,不告诉攻击者是账号错误还是密码错误,提高撞库成功的难度;

连续错误登陆五次,账户自动锁定,减少攻击者试错次数;

规定密码必须是数字、字母和特殊字符的混合,增加攻击者暴力破解的难度。

诸如此类,通过提升安全标准,提高系统被攻破的成本,从而打消攻击者的攻击意图,使其知难而退。

那么开发人员应该给系统增加哪些安全检验呢?或者说测试人员应该从哪些方面检查系统是否具备应有的安全检验以及安全检验的程度是否满足当前系统的安全需要?

《信息安全技术 网络安全等级保护基本要求》、《信息系统等级保护安全设计技术要求》、《信息安全等级保护管理办法》等国家安全标准文件对安全设计标准都有详细的要求,测试人员可以从中选择适合自己系统的安全设计标准,对照系统进行检查。

工具扫描

基于规则的安系统全扫描的思想是基通过已知的安全漏洞特征,使用工具扫描系统代码和成品发现可能存在的的风险。

比如漏洞扫描工具会有一个识别漏洞的特征库,在漏洞扫描的时候,利用特征库里的脚本与目标系统的反馈信息进行匹配,如果能够匹配上,就说明存在某一个漏洞。

常用的安全扫描工具分为系统扫描工具和应用扫描工具,有checkmarx、Netsparker、AppScan、AWVS等。

它们的特点就是简单好用,安全知识库中存储了大量的漏洞特征,测试人员只需启动安全工具,配置完参数,工具即可给你一份完整的报告,详细告诉你漏洞所在,漏洞被攻击的方式和危害以及漏洞修复方法。

它的不足之处在于基于固定特征判定的漏洞存在一定的误报情况,更重要的是这类固定特征的漏洞无法覆盖所有的潜在漏洞,会造成大量漏洞被遗漏。

渗透攻击

人工渗透测试的思想是安全测试人员基于一定的假设前提,模拟攻击者探索系统存在的漏洞,进而绕过系统防护,攻入系统内部。

比如这样一个案例:

某园区服务系统,系统有用户、操作员和系统管理员三类角色。用户为特定群体,只有本园区员工使用员工号能注册,维护个人信息、申请各种业务等。操作员为服务公司员工可以办理各种业务,访问用户信息等。系统管理员为特定一人,负责给各类用户配置菜单权限、维护和监控系统。这样一个角色清晰看似安全的系统,其实隐藏着这样一条攻击链。

由于员工号是六位数字,初始密码是统一的1234qwer,因此攻击者通过撞库获得了一个没有修改密码的普通用户。

又由于开发将角色权限检验放在前端进行,攻击者通过修改请求报文成功垂直越权为系统管理员。通过系统管理员给自己赋予了业务操作权限,然后将系统所有客户信息导出。至此,系统沦陷,用户隐私数据遭到泄露。

从上面这个案例中不难看出,但凡有一个攻击点守住,系统就不会被攻破。

这也警示安全测试人员要提高警惕,不漏过任何一个轻微漏洞,哪怕这个轻微漏洞不会造成系统沦陷。

因为你无法确定哪些轻微漏洞可能会组合成一条完整的攻击链。

结语

安全测试的目的在于防患于未然,本文通过对安全测试进行细分,梳理出主动防御、工具扫描、渗透攻击三种工作开展方式,通过介绍每种方式的实施思路,引导测试人员正确组织开展系统安全测试。

同时,分析安全测试的重要性,指明安全测试的发展趋势,号召有精力有能力的测试人积极学习探索系统安全测试,为安全测试的发展添砖加瓦。


同类文章推荐:https://mp.weixin.qq.com/s/nh4c9El9FjJtX4vy8m2ELA 

世纪性难题:剪不断、理还乱的开发测试关系


  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   测试用例方法  1.等价类设计测试用例  具体步骤:  1)明确需求  2)划分有效和无效等价类  ·有效等价类:满足需求的  · 无效等价类:不满足需求的     -规则     - 长度     - 类型     - 是否为空     - 是否重复  3)设计测试用例  · 典型应用场景:输入框  2.边界值设计测试用例  定义:是等价类的一种补充,对输入或输出的边界进行测试的一种黑盒测试方法。  上点:边界上的点。  内点:边...
            0 0 1540
            分享
          •   一、cookie的处理方式  1、准备:两个接口:一个登录、一个充值  2、登录接口  3、充值接口:会失败  4、处理的两种方法  第一种方法,直接添加HTTPCookie管理器,移动到线程组最上面  第二种方法:有的时候Cookie会变,我们就需要,先使用正则表达式提取器获取到cookie(JSESSIONID),再在需要Cookie的接口下添加HTTPCookie管理器(填写名称、值、域、路径)即可  第一种方法  添加:HTTPCookie管理器,放到最上面。  位置:  再次运行:就会充值成功。  第二种方法  1、登录的时候会有set_Cookie存在。  2、添加后置处理器&...
            0 0 4782
            分享
          • 为了恢复作为给定事务的一部分所做的所有更改,执行 ROLLBACK 命令。这将导致还原与事务相关的更改。ROLLBACKS 通常在事务执行期间观察到/发生错误时应用。让我们看一个使用 ROLLBACK 命令的示例。我们将使用相同的交易借记 ACC1,贷记 ACC2,资金为 100 美元START TRANSACTION; --statement1UPDATE bankaccounts SET funds=funds-100 WHERE accountno='ACC1'; --statement2UPDATE bankaccounts SET funds=funds+100 WH...
            0 0 1963
            分享
          •   疫情波及面广泛,2020年,因为疫情引发的一系列后续事件,很多人的生活受到影响,作为一个打工人心里也有诸多想法。  要说这一年怎么样?用一个字总结:难。  据统计,2020年9月份,全国城镇调查失业率达8.7%,按照现行标准下劳动人口年龄18岁-59岁来计算,截至现在,中国失业人数已超过8000万人!  在年末的时候,笔者曾分别在boss直聘和智联上关注了一段时间的测试岗位,发现招聘的公司和职位很少,有时甚至2天都没有新的招聘信息,即使有也是hr例行公事而已,想投简历都很难。  不过好在这一年终于过去,大家又可以开始投简历准备面试了!在面试之前,笔者就来给大家分享一下,面试过程中基本都会被...
            0 0 1216
            分享
          • Web应用有时候需要测试,但开发人员没有做负载测试,或者更糟糕的是,他们花了时间来做负载测试,但是没有做好充分的准备。没有充足的预备工作,负载测试不可能发现它应该发现的所有问题。那么,Web开发如何进行负载测试呢?下面优就业IT培训机构的老师告诉大家。1.确定用户数量如果要加载测试,你会模拟多少虚拟用户呢?要回答这个问题,你要估计大概多少并发用户可能访问你的网站,这取决于一天中的时间。很多测试者只是猜测,相反,你需要跟你的设计师和营销人员谈谈并看看性能说明。你甚至可能要问他们设计的应用程序支持多少并发用户,然后设计这么多用户及比这更多用户的测试。2.研究你的分析不要假装知道客户如何用你的应用程...
            0 0 955
            分享
      • 51testing软件测试圈微信