• 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 

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


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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   先看一下LoadrunnerControler的界面是什么样的:  第一部分:scenarioscript  (1)scriptname:选择脚本的名字;  (2)scriptpath:脚本路径(自动);  (3)分配虚拟用户的方式:百分比/用户组--可以在scenario->convertscenariotothevusergroupmode可以切换到用户组模式。  这里切换到用户组模式后,如何修改里面的quantity?  需要到,录制脚本的vusergenerator中Tools->Createcontrolerscenario里面设置虚拟用户数和用户组的而名称,然后加载...
            0 0 137
            分享
          •   某系统的批量程序和联机程序同时发起交易、操作数据库同一张表时,出现了交易间相互影响导致交易失败。  分析原因为事务A对数据库表操作全表删除时,数据库机制会自动触发产生排他行锁,当行锁数达到“升级到表锁前允许的最大行锁数”时,会自动升级为表锁。但因事务B已对数据库表产生了排他行锁,则事务A自动升级表锁失败。直至事务A消耗掉了数据库“最大锁资源数”,系统会报错“锁资源耗尽”、交易失败。  因此,设计程序时,如涉及多事务操作数据库同一张表,需考虑事务间的关联影响,是否会引发事务冲突。  下文将详细描述和分析该问题。  1 数据库锁  首先介绍一下数据库锁的相关概念。  1.1 行锁、页锁和表锁 ...
            14 14 1672
            分享
          • Q #1) MySQL 事务是原子的吗?答:是的,事务是通过概念在 MySQL 中实现原子性的。atomic 的简单含义是——ALL 或 NONE 和 MySQL 事务完全支持这一点。在这里,如果没有错误,那么所有的语句都会被执行。但是,如果出现任何差异或错误,则不会执行事务中的任何语句。Q #2) 如何回滚 MySQL 事务?答:事务可以提交或回滚/恢复。要恢复事务的更改,您只需在执行 COMMIT 之前运行 ROLLBACK 命令。例如,参考下面的事务,我们使用 ROLLBACK 来恢复事务期间所做的更改。START TRANSACTION; --statement1 ...
            0 0 1673
            分享
          • 偶尔用到这个指令,每次都要搜,索性自己记个笔记直接进入主题,首先cd进入tomcat的bin文件夹下,然后可以尝试以下三种启动方式:第一种(当前会话启动): ./startup.sh效果:然后tomcat就在后台启动了,我们还可以在当前会话中继续输入其它指令,比如ps -ef | grep 'tomcat'来查看我们刚才启动的tomcat服务:可以看到它的进程id是6951,我们可以使用如下指令将其关闭kill 6951这种启动方式是直接后台启动,但不是让tomcat一直就在后台跑了,当我们关闭当前连接linux的会话...
            15 14 3663
            分享
          •   不管是Loadrunner还是jmeter进行性能测试,测试流程基本上都是一样的,限制以Jmeter为例分析测试流程:  一、性能测试需求分析  一般而言,被测对象的性能需求,会在用户需求规格说明说中给出,比如单位时间内的访问量达到多少、业务响应时间不超过多少、业务成功率不低于多少、硬件资源消耗应该在一个合理的范围内等,性能指标应以量化数据给出,对于一个规范的产品,产品团队会给出如下的性能要求:  如果产品团队并没有指明性能测试需求,或者只给出表述字面意义上的需求,如:系统的TPS需要到300以上,单笔交易时间不超过3秒,那么测试工程师如何提前量化的指标呢?  需要结合业务需求和系统本身特...
            0 0 535
            分享
      • 51testing软件测试圈微信