一、安全测试的前世今生
1945年12月, 在宾夕法尼亚大学摩尔电气工程学院,占地1500 平方英尺,重达30吨的世界上第一台全电子数字计算机ENIAC诞生。不过,那时的计算机输入还是卡片带,谈不上编程语言。随着第一代电子的计算机诞生,出现了机器语言和汇编语言。当时编程仅被少数人和科学家所能驾驭,程序还不复杂,没有测试的概念。随着代码规模、复杂度的不断提升,一部分人开始思考如何验证程序的正确性。1957年Charles baker在他的新书中对调试和测试进行了区分。至此软件测试诞生,并发展壮大成一门新的重要学科。随着计算机应用数量、规模、成本、复杂性的大幅提升以及经济风险的大大增加,软件测试的重要性日益突出。
1994年10月,万维网联盟在麻省理工学院计算机科学实验室成立,标志着世界进入互联互通时代。万维网的出现使得世界上任何地方的任何一个人都可以通过网络访问任意一个联网程序,这极大提升了程序的普及和使用范围。同时,也使得程序容易遭受到更多的攻击和破坏。随着系统安全形势的日益严峻,软件安全测试应运而生。
纵观计算机行业发展史,我们不难发现计算机处理能力的提升催生了编程语言的出现,编程语言的发展促使了软件测试的诞生,万维网(WWW)的普及又触发了安全测试的兴起。所以,事务的诞生和发展都是形势发展到某一阶段的产物。那么,安全测试的未来将如何呢?
根据工信部安全中心发布的《2021年网络安全半年形势分析》报告显示,当前网络安全形势严峻,全球勒索软件攻击事件数量增长明显,大规模数据泄露事件不断涌现。2021年3月,微软Exchanger Server电子邮件服务器的安全漏洞导致全球范围内大量企业、政府部门被感染。2021年5月,美国最大的输油管道公司Colonial Pipeline遭受勒索攻击,导致美国东海岸燃油输送线路大面积停运。2021年6月,富士通的项目信息共享攻击ProjectWEB被攻击,导致多个政府部门敏感数据泄露。诸如此类,还有facebook的用户数据泄露、棱镜门、万豪信息泄露、震网病毒、委内瑞拉全国断网等等。
从这些事件中,我们不难发现随着数字时代的深入和万物互联的加深,不法分子也加速向线上转移,初步形成了专业化、规模化和产业化的网络黑灰产业。各种黑客组织的趋理性攻击越来越明显,网络安全防护形势日益严峻。大视角看,世界主要国家都将网络安全作为国家安全的战略重点,纷纷出台各类综合性网络安全文件,不断加码数据安全和供应链安全的要求,对各行业的网络安全水平提出了更多更细致的要求。在这种大环境下,各公司为了满足各类监管要求、行业标准,确保自身系统的安全可靠,势必会不断加大安全领域的投入。安全测试随着也将迎来一波大的发展,安全测试技能将会受到越来越多用人公司的青睐和追捧。
二、认识和开展安全测试
世界上没有绝对的安全,只有相对的安全。系统安全也是如此,攻破系统的成本大于攻破系统的收益,则认为系统是安全的,这个安全就是相对安全。有人说不对啊,我建个局域网,禁止外网访问,那我是不是就是绝对安全?网络隔离确实是一种行之有效的安全防护方式,但是这种安全也是相对的,不是绝对安全。比如:银行的核心系统都要求专网连接,互联网逻辑隔离。军网系统通常也是内部独立部署,甚至会做网络物理隔离。这种就一定安全吗,黑客确实无法通过常规的网络手段入侵系统,但是不要忘了还有间谍、内部人员被收买胁迫等情况,只要攻击者认为攻击收益非常大,大到愿意担负任意成本,那么在时间上这个系统终归一日会被通过某种方式攻破,所以安全都是相对的。
既然系统没有绝对安全,那么系统安全是不是就不重要了。当然不是,安全是产品的根基,一个易燃的汽车无论性能多么出众,设计多么美观,你都不会购买使用,毕竟它不安全。但是,你现在购买或者乘坐的汽车都存在一定概率的自燃问题,相关事故在新闻中也屡有报道。但是,你不会因此拒绝购买或使用汽车,因为汽车自燃的概率非常非常低,这种风险远小于给你带来的便利。基于这个安全前提,你才会考虑购买和使用汽车。
系统安全也是从这个思路出发,构建一个相对安全的系统。安全测试的思想就是验证系统的相对安全程度,提升系统的被攻破成本。从主动性上,安全测试可以分为主动防御检查和渗透性测试,其中渗透性测试又可分为基于规则的安全扫描和人工渗透测试。测试人员可从上述三个方面着手,组织开展系统安全测试。
2.1主动防御检查的思想是扎紧篱笆,高筑围墙,提高渗透攻击的成本。如系统登陆功能,本质是完成用户输入账号密码和数据库系统中记录的账号密码匹配。若匹配成功,则登陆成功,若匹配失败,则登陆失败。一条数据库查询语句就能实现上述功能。但是,正确的登陆功能却不能这么简单设计,因为太简单了,破解成本太低,攻击者的一波遍历探索,系统可能就被攻破了。这样的系统是不够安全的,用户也无法放心使用。从主动防御的思想出发,开发者应主动增加攻击者的破解成本。比如:增加图片验证码,避免攻击者使用自动工具遍历尝试。模糊登陆错误提示信息,不告诉攻击者是账号错误还是密码错误,提高撞库成功的难度。连续错误登陆五次,账户自动锁定,减少攻击者试错次数。规定密码必须是数字、字母和特殊字符的混合,增加攻击者暴力破解的难度。诸如此类,通过提升安全标准,提高系统被攻破的成本,从而打消攻击者的攻击意图,使其知难而退。那么开发人员应该给系统增加哪些安全检验呢?或者说测试人员应该从那些方面检查系统是否具备应有的安全检验以及安全检验的程度是否满足当前系统的安全需要?《信息安全技术 网络安全等级保护基本要求》、《信息系统等级保护安全设计技术要求》、《信息安全等级保护管理办法》等国家安全标准文件对安全设计标准都有详细的要求,测试人员可以从中选择适合自己系统的安全设计标准,对照系统进行检查。
功能测试 | 压力测试 | 验收测试 | 登记测试 | APP测试
风险评估 | 漏洞扫描 | 基线检查 | 代码审计 | 渗透测试