如何开展系统安全测试?这3点一定要记牢

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

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

安全测试的前世今生

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,因此攻击者通过撞库获得了一个没有修改密码的普通用户。

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

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

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

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

结语

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

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

最后: 下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取 【保证100%免费】
在这里插入图片描述
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

软件测试技术交流群社:746506216(里面还有工作内推机会,毕竟我们是关系社会。)

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

面试文档获取方式:


在这里插入图片描述

你可能感兴趣的:(程序员,职场日常,IT,系统安全,程序人生,职场和发展,自动化测试,软件测试)