B BROCENT

上线前三周,才想起渗透测试

一个来自香港的复合情境:一家科技初创公司定下了公开发布日期,直到离上线只剩三周,才终于有人问起这个应用是否做过渗透测试。剩下的时间里究竟能做哪些测试,以及为什么测试需要对着发布日期来规划,而不是硬塞在它定下之后。

一个现代化的初创软件公司办公室,多个开发者工位与屏幕上的代码——象征那支正朝着固定公开发布日期赶工的小型工程团队
一家香港初创公司在定下安全测试预算之前,先定下了发布日期。离上线还有三周时,团队里终于有人问了一句"这个东西做过渗透测试吗?"——问得太晚,以至于这个问题本身,就决定了还能做哪种测试。 这是一个复合情境,并非指名道姓的真实客户,取材自 Brocent 经常见到的一种模式:安全测试是按"还剩多少时间"来定范围的,而不是从一开始就对着发布日期来规划的。

这个行业:先上线,后测试

香港的科技与 SaaS 圈子,运转节奏是被压缩过的。一轮种子或 A 轮融资带来的跑道,是以月计而不是以年计的。公开发布日期往往定得很早——有时候在生产环境的第一行代码写出来之前,就已经对媒体、投资人或候补名单公开了——因为对董事会来说,一个日期能让路线图显得真实可信。工程团队随后倒推这个日期展开工作,而在开发初期存在的每一周富余,最终都会在结束前被某个环节吃掉:一次延迟的集成、一次重新设计的引导流程、一个支付服务商自己的审核队列。

安全测试很少是日历上被专门留出保护时间的那一项。这并不是因为创始人不重视安全——直接问起来,多数人会说恰恰相反——而是因为发布日期是一项对外的市场与投资人承诺,而"什么时候测试这个"则是一项没有外部截止期限的内部工程决策,直到有人在会议室里把这个问题问出口为止。对于第一次或最重要的一次面向客户发布——那个第一次真正承载客户账户、支付信息或业务数据的应用——这个问题往往来得比任何人预想的都晚,也比答案能让人安心的时间点晚。

这并非某一家公司独有的现象。它会在香港众多科技与 SaaS 公司身上,以一个特定、可辨认的时刻反复出现:产品在功能上已经完成,发布日期已经确定并对外公布,然后有人——一位懂技术的联合创始人、一位新入职的安全意识较强的员工、投资人尽职调查中的一个提问,或者某个企业客户采购清单上的一项要求——问起这个应用是否真的被人尝试攻破过,而不只是被工具按已知特征扫描过。

这个情境:由市场部门而非安全就绪度定下的发布日期

想象一家香港科技公司——十来位工程师,产品已经积极开发了将近一年,发布日期是大约两个月前定下的,如今已经写进了新闻稿、合作伙伴公告,以及公司自家落地页上的倒计时。产品本身的构建速度很快,和大多数发布前的产品一样:功能按照能解锁下一次演示的顺序上线,一个支付集成是在最后一个冲刺阶段临时接上去的,还有几条管理后台和内部工具路由——当初是因为有人测试需要而存在的,后来一直没人移除。

离上线还有三周,在一次日常的工程站会上,有人——往往是房间里安全意识最强的那个人,未必是专职的安全岗位——问出了那个原本被悄悄默认已经有答案的问题:"这个东西真的做过渗透测试吗?"诚实的回答,多半是团队在开发过程中的某个时点跑过一次自动化漏洞扫描,把一份看起来还算干净的扫描报告当成了安心的依据,除此之外没有再预约任何测试。没有人为一次人工测试划定过范围,没有人把它排上过日程,它只是从来没有作为一个需要拍板的决定被提出来过——直到此刻。

接下来发生的事,很大程度上决定了剩下这三周究竟还值多少。如果团队立刻预约测试,仍然有时间划定一个有意义的范围——外部网络测试、面向客户的 Web 应用,以及最关键的身份验证与支付流程——更重要的是,还有时间在公开上线前修复并复测发现的问题。如果团队花上一周时间纠结测试是否真有必要、四处比价,或者争论"现有的漏洞扫描是不是已经够用了",那消耗掉的,恰恰是原本让一次真正测试成为可能的那段跑道。这里真正重要的时钟,不是距离上线还有的三周,而是从真正决定要测试那一刻起,还剩下多少天。

这会带来哪些实际问题

一个在固定发布时间表中姗姗来迟的渗透测试请求,会催生一组特定、可重复出现的问题——不是因为测试方法论本身变了,而是因为它周围的约束条件变了。

  • 在剩余时间内划定一个有意义、而非走过场的测试范围。 一次完整的"外部+内部+Web 应用"测试,单独就通常需要两到三周。被压缩进上线前所剩无几的天数里,团队要么诚实地收窄范围——把测试聚焦在真正面向客户、暴露在互联网上的部分,也就是攻击者在第一天就能触及的那些——要么就要冒险委托一次表面上看起来面面俱到、实则没留下任何时间去处理发现结果的测试。一份上线前没人有时间读的报告,只是一份合规存档,算不上一道安全防线。
  • 把漏洞扫描误当成渗透测试。 这两者是真正不同的两项工作,之所以容易被混淆,恰恰是因为它们都会给出一个"干净"或"不干净"的信号,而非专业人士往往会以同样的方式去解读。漏洞扫描是自动化、覆盖面广、可重复的——它用基于特征的工具在大范围资产上排查已知弱点,非常擅长在规模化场景下捕捉那些明显的、未打补丁或配置错误的问题。它不会尝试真正利用漏洞、把多个发现串联起来,或者展示攻击者一旦进入之后究竟能触及什么。渗透测试则加入了一个人——一位持证测试人员主动尝试突破、提升权限、证明真实世界的影响,就像真正的攻击者会做的那样。一个几个月前跑过一次扫描、就认为"我们已经测试过了"的团队,回答的其实是另一个问题,而不是发布前安全审查真正要问的那个问题。
  • 发现结果在上线之后才浮现,而不是在上线之前。 这正是每一次仓促的上线前测试想要避免的情境,也是一个来得太晚的测试请求会让它更容易发生的情境。在上线后一周才发现的一个严重问题——那时真实客户已经持有账户,支付数据已经在流动——比上线前一周发现的同一个问题要严重得多,不是因为漏洞本身发生了变化,而是因为影响范围变了。
  • 在客户开始使用产品之前,没有建立起整改窗口。 发现问题只是这项工作的一半;修复问题,并确认修复真的堵上了那个缺口,是另一半。一次在上线前几乎没有留出任何余量就预约的测试,两头都留不出时间——发现报告变成了团队在产品已经上线之后才第一次读到的东西,这就抵消了上线前测试的大半意义。

这些都不代表团队做得不好——这只是把安全测试当成"上线前找个时间做一下"的任务、而不是像发布日期本身一样被固定纳入计划的一个可预见结果,就像支付集成或应用商店审核队列会被当作固定输入项一样。

Brocent 的看法:把测试对着发布日期来规划,而不是围着它硬塞

Brocent 在这里遵循的原则说起来很简单,但在截止日期的压力下很容易被忽略:渗透测试需要对着发布日期来规划,而不是被硬塞进其他所有上线任务瓜分完日历之后剩下的那点空当。这意味着"什么时候测试"应该在发布日期本身被定下来的同时就作为一项决定拍板——而不是等到距上线只剩三周、也不理想地等到产品在功能上完成之后才三周去想,而是要足够早,让测试、发现结果和一个真正的整改窗口,都能舒舒服服地被安排在上线之前。

话虽如此,"我们已经只剩三周了"并不是跳过测试的理由——它是一个划定范围的约束条件,而且是一个合理的约束条件。即便是在上线前一周才进行的、经过范围收窄、限定时间的测试,也比完全不测试要有意义得多,前提是范围的选择是诚实地围绕"在有限时间内能做到什么",而不是硬要在纸面上覆盖所有东西。一次紧凑收窄、聚焦在外部与 Web 应用层面、能在可用时间内完成的测试,即便只留出一个简短但有优先级的整改窗口,也能在产品面向真实客户上线的最初几天里,捕捉到最严重、最容易被利用的问题。这与提前留足时间、完整规划的一次完整测试相比,保证的深度并不相同——Brocent 不会把两者说成是等价的——但相比仅凭一份陈旧的漏洞扫描就直接上线,这在实质上是一个好得多的位置。

更根本的一点,也是 Brocent 会对处在这种境地的每一个团队强调的一点是:一次测试相对发布日期预约得越早,它能真正改变的东西就越多。留出六周跑道预约的测试,可以完整覆盖外部、内部和 Web 应用范围,留出真正的整改时间,并且支持在上线前做一次复测,确认修复确实堵上了缺口。留出六天跑道预约的测试,依然能在真实客户之前发现最重要的问题——但可供选择的余地会随着日历一起迅速收窄。这两种极端都不是恐慌或者干脆跳过测试的理由;它们都在说明一件事:是否测试这个决定,应该尽早、有意识地做出,而且是对着日历上真正的那个日期,而不是对着三周前站会上有人临时提出的一个问题去做反应。

这在实践中是什么样子

对于正接近第一次或最重要一次面向客户发布的香港科技或 SaaS 公司来说,一次真正有用的渗透测试——无论手上是六周还是六天的跑道——往往具备相同的结构。

应用层与基础设施测试,范围对着实际要上线的东西来划定。 对大多数上线前的产品来说,这意味着面向客户的 Web 应用会按照 OWASP Top 10 这一类问题来测试——注入类漏洞、身份验证失效、不安全的直接对象引用、访问控制缺陷、安全配置错误——同时覆盖应用所依托的外部网络边界:防火墙、远程访问入口,以及任何外部攻击者第一时间就会触及的互联网暴露基础设施。如果日历允许,还会加入内部网络测试,检验攻击者在获得初始立足点之后,横向移动能走多远;社会工程或钓鱼模拟测试则单独评估人的这一层。Brocent 的渗透测试服务会以封闭盒(closed-box,不预先提供任何信息,模拟真正的外部攻击者)或开放盒(open-box,向测试人员提供架构细节,在有限窗口内最大化测试深度)两种方式,涵盖外部、内部、Web 应用与社会工程全部四种范围,从而让范围能够诚实地对应日历上真正能承受的额度。

按可被利用程度、而不只是抽象严重等级来排序的报告。 一份把每一项技术问题都按同等权重列出的发现报告,对一个距上线只剩几天、而不是几周的团队来说没有多大用处。真正重要的,是一份能用大白话告诉团队哪些发现真正可被利用、哪些一旦被触及会带来真实业务影响、哪些可以合理地留到上线后的补丁周期再处理的报告。Brocent 的报告附有 CVSS 评分、概念验证证据和业务影响说明,正是为了让一个小团队能在一个下午之内完成分诊,而不是花上一整周——先读执行摘要,弄清楚哪些问题真正紧急,先修最要紧的那些。

一个能在上线前完成的"修复—复测"闭环。 在上线前三天发现一个问题,只有在存在某种机制能在客户接触产品之前确认修复真的生效时,才真正有用。这正是 Brocent 把渗透测试套餐围绕复测来设计的原因——一次针对已被标记问题、在整改之后进行的确认性复核,而不是一次完整的第二次测试。对于被压缩得很紧的上线前时间表来说,这次复测往往是整个过程中最有价值的短短几个小时:"我们觉得已经修好了"和"我们确认已经修好了"之间的区别——一旦真实客户数据处在风险之中,这个区别就非常重要。

以上这些都不要求团队一定要提前很久开始才能拿到真正的价值——它要求的,只是测试的范围要诚实地对应真正剩下的时间,而不是要么整个跳过,要么变成一场没人有时间去落实的走过场。

这属于哪里:作为持续安全态势一部分的测试,而不是一次性的临时抱佛脚

一次渗透测试——即便是范围划定得当、留有充足时间、整改窗口干净利落的那种——只回答一个问题:在这个日期接受测试的这个应用,在那些真正重要的方面,是否可被利用?它没有回答一家正在成长的公司实际需要持续得到解答的问题:谁来持续负责安全测试这项实践,谁来跟踪上一次测试的发现结果是否真的被修复,谁来确保下一次测试会在代码库偏离得太远、以至于上一次测试的覆盖范围已经过时之前及时发生?一次性的测试,无论做得多好,都无法独自回答这些问题——而一个只有在发布日期逼出这个问题时才去测试的团队,往往会发现自己在下一次重大发布、下一位企业客户的安全问卷、或者下一轮融资的尽职调查中,再次陷入完全相同的情境。

这正是Brocent 的托管 IT 计划要填补的空缺。安全测试不再是每次到了关键时刻才被重新发现的一场消防演习,而是成为一支成长中的团队本就应该具备的持续覆盖的一部分——与计划中其他托管安全服务一起被划定范围、排入日程、持续跟踪,而不是每次都要在发布周的截止期限下从零重新谈判。一个在计划内的团队,不会在发布日期前三周才问"这次找谁做渗透测试"——那份关系、那次范围讨论以及复测节奏早已存在,这正是把"我们需要在固定日期前完成测试"从一场仓促应对,变成一次日程安排对话的关键所在。

渗透测试本身——上文所描述的这项工作——依然作为一项独立划定范围的服务持续提供;而对于已经建立起扎实测试习惯、并想衡量自己的防御方是否真的能发现并阻止一次正在进行的真实入侵的团队而言,红队演练(Red Team Engagement)是更进一步的选择:一次不预先告知、以目标为导向的对抗模拟,而不是一次范围明确的漏洞排查。这两者都是真实、独立的服务,各自有自己的范围与成本。但对于一家想要不再把每一个发布日期都当成一次新的安全抢险的成长中香港科技公司而言,更值得问的问题,或许不是"这次该预约哪一次一次性测试",而是安全测试、整改跟踪,以及让下一次工作能够快速划定范围的那份合作关系,是否应该本就归属于已经覆盖其余技术栈的那份托管 IT 计划之内。可以在定价页查看该计划的各档位,或者联系 Brocent,聊一聊一次上线前测试——无论是这周就预约,还是六周之后再预约——究竟适合放在哪里。

常见问题

距离上线多久应该预约渗透测试?

理想情况下,越早越好——最好在发布日期本身被定下来的同时就一并决定。一次完整的外部、内部与 Web 应用测试通常需要两到三周,这还没算上整改与复测所需的时间。留出四到六周的上线前跑道来预约,能容纳完整范围、一个真正的修复窗口,以及对修复效果的确认——这正是"一次能改变上线内容的测试"和"一次只是记录了已经上线内容的测试"之间的区别。

渗透测试和漏洞扫描有什么区别?

漏洞扫描是自动化、覆盖面广的——它在大范围资产上快速、可重复地排查已知的、基于特征的弱点,很适合按固定节奏运行。渗透测试则加入了一位持证的人工测试人员,主动尝试利用扫描只能标记出来的问题,像真正的攻击者一样把多个发现串联起来,并展示真实的业务影响,而不只是列出一份潜在问题清单。很多机构会两者都用:按节奏定期扫描,再针对某次发布、年度检查,或某项特定的合规或客户要求,做一次人工渗透测试。一次干净的扫描结果,并不能证明一次人工测试也一定会得出干净的结论。

在香港做一次渗透测试大概要多少钱?

这在很大程度上取决于范围。在香港市场,由顾问执行的人工渗透测试通常从约 5,000 美元起,视包含多少范围(外部、内部、Web 应用、社会工程)以及环境规模大小,可能一直到数万美元。Brocent 自身划定范围的测试项目起价为 3,500 美元,最终报价由方案沟通阶段确定的具体范围决定——一次针对单个上线前产品、聚焦外部与 Web 应用的测试,与一次覆盖更大环境的完整四范围测试,报价会不同。

渗透测试能在两周内完成吗?

可以,前提是范围选得对。一次完整的外部、内部与 Web 应用测试,单独通常就需要两到三周,这在一个严格的两周上线前窗口内,几乎不会留下整改的余地。一次紧凑收窄的测试——聚焦在外部边界与面向客户的 Web 应用,也就是上线第一天暴露程度最高的部分——可以在两周内完成,并且仍能在上线前留出一个短暂的整改窗口。诚实地说,这里的取舍是覆盖广度:两周的窗口能很好地支撑一个聚焦收窄的范围;它支撑不了和一次六周测试同等的深度。

如果测试在上线前发现了一个严重问题,会怎么样?

这个发现会立刻被分诊,依据报告中带有 CVSS 评分、有证据支撑的细节,而不是一个原始的严重等级标签,来判断其可被利用程度与业务影响。对于一个确实严重、且容易被利用的问题,诚实的选择是:如果剩余时间允许,就在上线前修复并复测;否则,就推迟受影响的具体功能或流程上线,其余部分按计划照常上线。在公开发布前几天面对这样的对话都不会轻松,但在客户之前发现问题,正是选择在上线前而不是上线后测试的全部意义所在。

已经做过漏洞扫描了,还需要渗透测试吗?

一般来说,需要——尤其是对第一次或最重要的一次面向客户发布而言。扫描是一个有用、可重复的基线——它能高效地捕捉已知的、基于特征的问题——但它不会尝试真正利用漏洞、把多个发现串联起来,或者像人工测试那样展示真实世界的影响。一个干净的扫描结果回答的是"我们用自动化工具有没有发现任何已知弱点",而不是"有人花真正的力气,究竟能不能进来"。对于一次第一次承载客户账户或支付数据的发布来说,这是一个值得在上线前而非上线后回答清楚的、实质不同的问题。

红队演练和渗透测试是一回事吗?

不是——它们回答的是不同的问题。渗透测试问的是"这一组明确定义的系统里存在哪些漏洞",通常会提前告知并与内部团队排定日程,一般需要几天到几周时间。红队演练问的是一个完全不同的问题——"攻击者能否触及某个具体目标,而我们会不会察觉"——除了一位内部小范围联络人之外,不会预先告知任何人,测试的是检测与响应能力,而不是漏洞是否存在,通常需要几周到几个月。红队演练通常假设一套可运作的渗透测试机制已经存在;它是安全基础卫生到位之后的下一步,而不是替代上线前测试本身的选项。

完全不测 vs. 仓促赶工的测试 vs. 对着发布日期规划的测试

这三种做法之间的差别,其实并不在于测试方法论本身——三种情况下用的都是同一批持证测试人员、同一套技术手段和同一套报告标准。真正不同的,是"决定要测试"这件事发生在什么时候,以及发现结果出来之后,日历上还剩多少时间可以用来应对。

完全不测("上线后再修")

  • 没有任何独立验证来确认应用能抵御一次真正的入侵尝试——有的只是自动化扫描(如果做过的话)碰巧捕捉到的东西。
  • 任何严重问题都是由真实用户、或者由攻击者,在客户账户和数据已经上线之后才发现的——对最糟糕的发现而言,这是最糟糕的时机。
  • 在暴露开始之前,不存在任何修复窗口,因为发现问题的时候,暴露早就已经开始了。

仓促赶工的上线前一周测试(有一定覆盖,但没有整改时间)

  • 测试确实做了,也依然能捕捉到真正严重、容易被利用的问题——这比完全不测要好得多。
  • 范围通常是在时间压力下被收窄的,而且往往是临时、非刻意地收窄,这可能会在实际被测试的内容里留下缺口。
  • 发现结果出来时,往往几乎没有时间在上线前修复并复测,于是这份报告变成了对上线时已知风险的一份记录,而不是推动上线前整改的动力。

对着发布日期规划、并留有整改窗口的范围化测试(Brocent 的模式)

  • 范围是围绕可用时间刻意选定的——时间紧就诚实收窄,跑道充裕就覆盖更全——而不是要么整个跳过,要么被硬拉得太薄。
  • 一份按真实可被利用程度和业务影响来排序的发现报告,让一个小团队能够快速分诊,先处理真正重要的事情。
  • 一个"修复—复测"的闭环,在上线前确认整改效果,把"我们觉得已经修好了"变成"我们确认已经修好了"——而且这个确认发生在仍有时间对答案采取行动的时候。

分享:

立即采取行动

将这些洞察转化为您企业的IT路线图。

预约15分钟免费咨询,与我们的亚太IT专家交流。我们将评估您的现有环境,并在24小时内提供定制化IT发展路线图。

📋

免费清单

进入大中华区IT部署前必须检查的10项关键事项

PIPL合规、网络分段、双语服务台配置等——企业进入中国大陆第一天所需的完整IT准备清单。

获取清单 →