我常常提到这样一个事实,安全正变得越来越类似于软件工程,采用工程方法来处理网络安全问题,将大大有助于推动行业的发展。
尽管支持这种方法的论据很充分,但有些人难免还是持怀疑态度。我不想讨论想法的优劣,而是想说明安全与软件工程之间的相似之处。最能说明这一点的莫过于两个领域的相似之处:安全领域的渗透测试和软件工程领域的质量保证。
为什么渗透测试和质量保证在概念上相似
软件开发中的质量保证是一个确保软件一旦部署到生产中就不会出现“错误”的过程。“错误”是指那些妨碍客户实现其目标、对用户体验造成负面影响、使产品难以实现全部价值的意外缺陷。众所周知,软件开发人员不可能一直提供完美的代码,即使每个人都尽职尽责,对产品的修改也可能意外地破坏现有功能。并不是每个错误都要修复:如果目标是消除100%的错误,那么任何公司都无法创新并向市场提供新产品。聪明的技术领导者不会试图解决所有问题,而是会无情地确定哪些问题应该优先处理,从而确保工程资源始终用于解决对业务影响最大的问题。
渗透测试在安全领域发挥着类似的作用:其目标是测试产品或特定的技术实施,以发现并记录差距,从而加以解决。如果不加以控制,有些问题会使攻击者闯入客户的环境,获取敏感信息,或以其他方式影响数据的所谓CIA、保密性、完整性和可用性。还有一种共识是,每个组织都有一些漏洞,因此目标不是消除所有漏洞(类似于清除所有的错误,这既不可能也不可行),而是解决最有可能导致业务负面后果的问题。
质量保证方法的演变
在过去的几十年里,我们见证了质量保证方法的演变。在采用敏捷和精益方法论之前,软件在经过数月甚至数年的规划、编写代码和测试之后每年发布一次,而质量审核则是一个团队在发布之前根据计划进行数月的工作。
当新的敏捷和精益方法(通常以团队采用Scrum和Kanban框架进行工作管理的形式)开始受到重视时,质量保证显然也需要做出改变。质量保证不再是每年手动完成的步骤,而是成为两周迭代(通常称为“冲刺”)的一部分。在很长一段时间里,测试过程都是手工完成的:接受过产品使用培训的人员会收到详细说明新功能如何工作的规格书,然后利用他们的创造性思维去破解它并找出错误。
到了某一阶段,所有的软件似乎都将在北美和欧洲以外的地区制造:企业为了降低成本,纷纷将质量保证外包给劳动力成本较低的地区,其中最常见的是印度。阿根廷、乌克兰和俄罗斯等国也提供类似的服务,但由于这些地区居民的英语水平相对较低,因此这些服务仍然不太常见。质量保证外包面临着一些挑战:
工作质量参差不齐,但大部分都比内部质量保证的工作质量低得多。质量保证外包机构给员工的工资不高,因此无法吸引和留住优秀人才。相反,他们依靠没有受过教育的人或刚毕业的学生来完成工作。
即使聘用的人想做好工作,他们也没有足够的背景来做好工作。要测试一个软件产品并找出漏洞,就必须深入了解其功能,并明白它旨在解决什么问题。外包的质量保证团队不具备这些条件:他们会同时为多个产品工作,而不会与特定的软件或领域建立密切的关系。
没过多久,公司就发现,降低质量保证成本是以牺牲质量为代价的,而讽刺的是,质量保证本应确保的正是质量。因此,在某种程度上,由于以前价格低廉的国家劳动力成本上升,外包质量保证的时代在很大程度上结束了。
随着其他技术领域的进步、测试自动化的兴起以及质量保证职能的内包化,许多公司开始将质量保证的工作方式从手动测试演变为自动化测试。愿意并能够学习新工作方式的质量保证分析师留在了这个行业,并获得了丰厚的回报;而那些宁愿坚持自己所熟悉的工作——手动测试的人则发现,在这个竞争激烈、准入门槛相对较低的领域,要想获得高薪,甚至找到一份工作都越来越难。
如今,质量保证在软件组织中的作用在不断演变。拥有成熟软件开发实践的公司现在都希望工程师能测试他们自己的工作,而编写自动测试正在成为“完成的定义”的重要组成部分。最初作为入门级软件相关工作领域的一个职业,如今已与软件工程密不可分。事实上,亚马逊等大型企业现在都在招聘专注于质量保证的软件工程师,通常称为 "测试工程师"。
渗透测试方法的演变
当我们反思渗透测试作为一门学科的发展轨迹时,就会发现它与质量保证职能在过去几十年中的发展一脉相承。
起初,渗透测试的必要性并没有得到很好的理解,公司认为他们“很好”,他们的组织必须“安全”。毕竟,他们的员工被要求使用至少包含一个数字和一个特殊字符的密码。然后,为了满足不断扩大的合规性要求,建立了每年一次或两次的渗透测试周期。渗透测试最初由本地从业人员手工完成,随着时间的推移,越来越多地由印度和其他劳动力成本较低国家的服务提供商完成,就像质量保证一样。不过,外包并没有吞噬整个渗透测试领域:NCC Group、Bishop Fox、Trail of Bits和Doyensec等老牌公司对优秀专业人才的需求仍然很高。
在打造“渗透测试领域的Uber”这一愿望的驱使下,许多精明的创始人推出了渗透测试即服务提供商。其中许多都是双面市场:一面是买家(客户),另一面是卖家(渗透测试人员)。起初,这种模式看起来很有前景,但后来人们发现,渗透测试与驾驶出租车不同,它需要非常特殊的、难以获得的技能。许多加入渗透测试即服务提供商的渗透测试人员都是该领域的新手。那些对这一领域抱有真正热情,而不仅仅是想赚快钱的人,会迅速提高自己的技能,积累令人印象深刻的作品集,然后独立创业。因此,许多渗透测试即服务平台变成了入门级渗透测试人员的训练营:这对行业来说很好,但对企业来说并不理想。这些公司遇到的另一个问题是客户的获取和保留。企业需要强大的人才和有价值的研究成果,但由于这些人才和研究成果少之又少,企业只好退而求其次。对于这些“渗透测试的优步”来说,唯一可靠的客户群是中小型企业,但他们几乎没有预算,而且每年都会有一部分客户大量流失。
随着时间的推移,依赖廉价工人的平台和专注于外包的服务提供商开始难以体现价值:自由渗透测试者很容易发现许多无关紧要和不重要的挑战,但发现有影响的漏洞却很少。如今,这个领域已经相当成熟,HackerOne和Bugcrowd等漏洞赏金平台在设计激励系统方面普遍做得很好,鼓励赏金猎人只发现有影响的漏洞。此外,鉴于客户只为有效报告付费,这种模式总体上运行良好。
与质量保证自动化的应用稳步增长类似,利用自动化渗透测试工具的公司数量也在不断增加。面临的挑战是,无论是外部顾问还是自动化工具,都无法很好地了解业务背景,因此其发现的价值总是有限的。此外,由于攻击者(和软件工具用户)都是人,要想真正模仿他们的思维,渗透测试(和质量保证)职能部门将继续需要人员,理想情况下,他们必须全心全意投入,并掌握正确的业务、技术和组织背景。
虽然中小型企业现在和将来都会继续依赖顾问和服务提供商,但大型企业正在认识到在内部开发进攻性专业技术的重要性。让一个不带偏见和产品知识的外部用户来测试产品的质量保证或进行渗透测试,是非常有价值的。但是,外部用户的观点不能取代内部用户的知识和专长。
展望未来:从质量保证中汲取安全知识
展望未来,我认为许多影响质量保证现状的趋势将决定渗透测试的现状。就像现在人们希望软件工程师测试自己的工作一样,注重防御的安全从业人员也将被要求验证其组织的防御系统。就像编写软件和测试软件现在在软件工程的保护伞下密不可分一样,安全进攻和安全防御这两个以前独立的学科正在合二为一,形成了所谓的紫色团队。开发人员不能再仅仅编写代码,然后扔到栅栏外让别人测试;同样,蓝色团队也不可能继续依赖另一个团队来验证他们的工作是否确实加强了组织的安全态势。
另一个趋势是持续测试:在部署新软件(或更改组织的安全环境)时,质量保证和安全测试都应自动运行。十年后的今天,一个组织如果不对其安全状况进行持续验证,就会像不在后台运行任何测试而直接发运软件一样令人难以接受。
从概念上讲,渗透测试的功能是一种质量保证:它不是测试产品或系统本身是否按预期运行,而是确保其安全性。不同的是,如果组织没有发现问题,会发生什么。如果软件漏洞被发现,客户很可能会向开发产品的公司报告。用户希望获得良好的产品体验,因此他们有动力报告他们发现的任何漏洞。如果发现了安全问题,客户可以通过公司的漏洞披露计划(相当于漏洞报告的一种安全机制)进行报告。然而,并不是每个发现问题的人都会主动与公司分享,有些人主动寻找漏洞,意图利用这些漏洞。这是导致良好的渗透测试实践在某些方面比质量保证更为重要的主要因素。
另一个区别是,软件错误是在产品的正常使用过程中发现的,而安全问题则是人们必须刻意寻找的。这就是为什么漏洞悬赏在安全领域发挥着重要作用,并将继续发挥重要作用。
这篇短文的目的并不是要证明渗透测试与质量保证百分之百相同;每种测试都有其独特的一面,自然也有不同的部分。重要的是,网络安全从业者、领导者和投资者要保持开放的心态,不断向其他学科学习。尽管软件工程等领域已经解决了许多与当今安全问题相同的问题,但我们往往试图重新发明轮子。通过采用工程方法来处理安全问题,我们将找到解决许多问题的灵感,而这些问题乍一看似乎是我们领域独有的。
原文链接:
https://tldrsec.com/p/ross-pentesting-qa
声明:本文来自安全喵喵站,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。