上線前三週,才想起滲透測試
一家香港新創公司在定下資安測試預算之前,就先定下了上線日期。離上線只剩三週時,團隊裡終於有人問了一句「這個東西做過滲透測試嗎?」——問得太晚,晚到這個問題本身,就決定了現在還能做哪一種測試。 這是一個複合情境,並非指名道姓的真實客戶,取材自 Brocent 經常遇到的一種模式:資安測試是按「還剩多少時間」來劃定範圍,而不是從一開始就對著上線日期來規劃的。
這個產業:先上線,後測試
香港的科技與 SaaS 圈子,運作節奏是被壓縮過的。一輪種子輪或 A 輪募資帶來的資金跑道,是以月計而非以年計。公開上線日期往往定得很早——有時候在正式版第一行程式碼寫出來之前,就已經對媒體、投資人或候補名單公開了——因為對董事會來說,一個日期能讓路線圖顯得真實可信。工程團隊隨後倒推這個日期展開工作,而開發初期存在的每一週餘裕,最終都會在結案前被某個環節吃掉:一次延遲的串接、一次重新設計的引導流程、一個金流服務商自己的審核佇列。
資安測試很少是行事曆上被特別留出保護時間的那一項。這並不是因為創辦人不重視資安——直接問起來,多數人會說恰恰相反——而是因為上線日期是一項對外的行銷與投資人承諾,而「什麼時候測試這個」則是一項沒有外部截止期限的內部工程決策,直到有人在會議室裡把這個問題問出口為止。對於第一次、或最重要一次面向客戶的發布——那個第一次真正承載客戶帳號、金流資訊或營運資料的應用程式——這個問題往往來得比任何人預想的都晚,也比答案能讓人安心的時間點晚。
這並非某一家公司獨有的現象。它會在香港眾多科技與 SaaS 公司身上,以一個特定、可辨認的時刻反覆出現:產品在功能上已經完成,上線日期已經確定並對外公布,接著有人——一位懂技術的共同創辦人、一位新進且資安意識較強的員工、投資人盡職調查中的一個提問,或是某個企業客戶採購清單上的一項要求——問起這個應用程式是否真的被人試著攻破過,而不只是被工具依已知特徵掃過一輪。
這個情境:由行銷部門而非資安就緒度定下的上線日期
想像一家香港科技公司——十來位工程師,產品已經積極開發了將近一年,上線日期是大約兩個月前定下的,如今已經寫進新聞稿、合作夥伴公告,以及公司自家官網上的倒數計時。產品本身的建置速度很快,和大多數上線前的產品一樣:功能按照能解鎖下一次展示的順序上線,一個金流串接是在最後一個衝刺階段臨時接上去的,還有幾條後台管理與內部工具路由——當初是因為有人測試需要而存在的,後來一直沒人移除。
離上線還有三週,在一次例行的工程站立會議上,有人——往往是會議室裡資安意識最強的那一位,未必是專職的資安職位——問出了那個原本被悄悄默認已有答案的問題:「這個東西真的做過滲透測試嗎?」誠實的答案,多半是團隊在開發過程中的某個時間點跑過一次自動化弱點掃描,把一份看起來還算乾淨的掃描報告當成了安心的依據,除此之外沒有再預約任何測試。沒有人為一次人工測試劃定過範圍,沒有人把它排進行事曆,它只是從來沒有被當成一個需要拍板的決定提出來過——直到此刻。
接下來發生的事,很大程度上決定了剩下這三週究竟還值多少。如果團隊立刻預約測試,仍有時間劃定一個有意義的範圍——外部網路測試、面向客戶的網頁應用程式,以及最關鍵的身分驗證與金流流程——更重要的是,還有時間在正式上線前修復並複測發現的問題。如果團隊花上一週時間糾結測試是否真有必要、四處比價,或是爭論「現有的弱點掃描是不是已經夠用了」,那消耗掉的,恰恰是原本讓一次真正測試成為可能的那段跑道。這裡真正重要的時鐘,不是距離上線還有的三週,而是從真正決定要測試那一刻起,還剩下多少天。
這會帶來哪些實際問題
一個在固定上線時程中姍姍來遲的滲透測試需求,會催生一組特定、可重複出現的問題——不是因為測試方法論本身變了,而是因為它周圍的限制條件變了。
- 在剩餘時間內劃定一個有意義、而非走過場的測試範圍。 一次完整的「外部+內部+網頁應用程式」測試,單獨通常就需要兩到三週。被壓縮進上線前所剩無幾的天數裡,團隊要嘛誠實地收窄範圍——把測試聚焦在真正面向客戶、暴露在網際網路上的部分,也就是攻擊者第一天就能觸及的那些——要嘛就要冒險委託一次表面上看起來面面俱到、實際上卻沒留下任何時間去處理發現結果的測試。一份上線前沒人有時間讀的報告,只是一份合規存檔,稱不上一道資安防線。
- 把弱點掃描誤當成滲透測試。 這兩者是真正不同的兩項工作,之所以容易被混淆,恰恰是因為它們都會給出一個「乾淨」或「不乾淨」的訊號,而非專業人士往往會用同一種方式去解讀。弱點掃描是自動化、覆蓋面廣、可重複的——它用基於特徵的工具在大範圍資產上排查已知弱點,非常擅長在規模化情境下捕捉那些明顯的、未修補或設定錯誤的問題。它不會嘗試真正利用弱點、把多個發現串連起來,或是展示攻擊者一旦進入之後究竟能觸及什麼。滲透測試則加入了一個人——一位持證測試人員主動嘗試突破、提升權限、證明真實世界的影響,就像真正的攻擊者會做的那樣。一個幾個月前跑過一次掃描、就認為「我們已經測試過了」的團隊,回答的其實是另一個問題,而不是上線前資安審查真正要問的那個問題。
- 發現結果在上線之後才浮現,而不是在上線之前。 這正是每一次倉促的上線前測試想要避免的情境,也是一個來得太晚的測試需求會讓它更容易發生的情境。在上線後一週才發現的一個嚴重問題——那時真實客戶已經持有帳號,金流資料已經在流動——比上線前一週發現的同一個問題要嚴重得多,不是因為弱點本身發生了變化,而是因為影響範圍變了。
- 在客戶開始使用產品之前,沒有建立起修復窗口。 發現問題只是這項工作的一半;修復問題,並確認修復真的堵上了那個缺口,是另一半。一次在上線前幾乎沒留出任何餘裕就預約的測試,兩頭都留不出時間——發現報告變成了團隊在產品已經上線之後才第一次讀到的東西,這就抵消了上線前測試的大半意義。
以上這些都不代表團隊做得不好——這只是把資安測試當成「上線前找個時間做一下」的任務、而不是像上線日期本身一樣被固定納入規劃的一個可預見結果,就像金流串接或應用程式商店審核佇列會被當作固定輸入項一樣。
Brocent 的觀點:把測試對著上線日期來規劃,而不是圍著它硬塞
Brocent 在這裡遵循的原則說起來很簡單,但在截止日期的壓力下很容易被忽略:滲透測試需要對著上線日期來規劃,而不是被硬塞進其他所有上線任務瓜分完行事曆之後剩下的那點空檔。這代表「什麼時候測試」應該在上線日期本身被定下來的同時就一併拍板——而不是等到距上線只剩三週、也不理想地等到產品在功能上完成之後才三週去想,而是要足夠早,讓測試、發現結果和一個真正的修復窗口,都能舒舒服服地被安排在上線之前。
話雖如此,「我們已經只剩三週了」並不是跳過測試的理由——它是一個劃定範圍的限制條件,而且是一個合理的限制條件。即便是在上線前一週才進行的、經過範圍收窄、限定時間的測試,也比完全不測試要有意義得多,前提是範圍的選擇要誠實地圍繞「在有限時間內能做到什麼」,而不是硬要在紙面上覆蓋所有東西。一次緊湊收窄、聚焦在外部與網頁應用程式層面、能在可用時間內完成的測試,即便只留出一個簡短但有優先順序的修復窗口,也能在產品面向真實客戶上線的最初幾天裡,捕捉到最嚴重、最容易被利用的問題。這與提前留足時間、完整規劃的一次完整測試相比,能保證的深度並不相同——Brocent 不會把兩者說成是等價的——但相比僅憑一份陳舊的弱點掃描就直接上線,這在實質上是一個好得多的位置。
更根本的一點,也是 Brocent 會對處在這種境地的每一個團隊強調的一點是:一次測試相對上線日期預約得越早,它能真正改變的東西就越多。留出六週跑道預約的測試,可以完整涵蓋外部、內部與網頁應用程式範圍,留出真正的修復時間,並且支援在上線前做一次複測,確認修復確實堵上了缺口。留出六天跑道預約的測試,依然能在真實客戶之前發現最重要的問題——但可供選擇的餘地會隨著行事曆一起迅速收窄。這兩種極端都不是恐慌或乾脆跳過測試的理由;它們都在說明一件事:是否測試這個決定,應該儘早、有意識地做出,而且是對著行事曆上真正的那個日期,而不是對著三週前站立會議上有人臨時提出的一個問題去做反應。
這在實務上是什麼樣子
對於正接近第一次或最重要一次面向客戶發布的香港科技或 SaaS 公司來說,一次真正有用的滲透測試——無論手上是六週還是六天的跑道——往往具備相同的結構。
應用層與基礎設施測試,範圍對著實際要上線的東西來劃定。 對大多數上線前的產品來說,這代表面向客戶的網頁應用程式會依 OWASP Top 10 這一類問題來測試——注入類弱點、身分驗證失效、不安全的直接物件參照、存取控制缺陷、安全設定錯誤——同時涵蓋應用程式所依託的外部網路邊界:防火牆、遠端存取入口,以及任何外部攻擊者第一時間就會觸及的網際網路暴露基礎設施。如果行事曆允許,還會加入內部網路測試,檢驗攻擊者取得初始立足點之後,橫向移動能走多遠;社交工程或釣魚模擬測試則單獨評估人的這一層。Brocent 的滲透測試服務會以封閉盒(closed-box,不預先提供任何資訊,模擬真正的外部攻擊者)或開放盒(open-box,向測試人員提供架構細節,在有限窗口內最大化測試深度)兩種方式,涵蓋外部、內部、網頁應用程式與社交工程全部四種範圍,讓範圍能夠誠實地對應行事曆上真正能承受的額度。
依可被利用程度、而非只按抽象嚴重等級排序的報告。 一份把每一項技術問題都用同等權重列出的發現報告,對一個距上線只剩幾天、而不是幾週的團隊來說,用處不大。真正重要的,是一份能用白話文告訴團隊哪些發現真正可被利用、哪些一旦被觸及會帶來真實業務衝擊、哪些可以合理地留到上線後的修補週期再處理的報告。Brocent 的報告附有 CVSS 評分、概念驗證證據與業務衝擊說明,正是為了讓一個小團隊能在一個下午之內完成分診,而不是花上一整週——先讀執行摘要,弄清楚哪些問題真正緊急,先修最要緊的那些。
一個能在上線前完成的「修復—複測」閉環。 在上線前三天發現一個問題,只有在存在某種機制能在客戶接觸產品之前確認修復真的生效時,才真正有用。這正是 Brocent 把滲透測試套餐圍繞複測來設計的原因——一次針對已被標記問題、在整改之後進行的確認性複核,而不是一次完整的第二次測試。對於被壓縮得很緊的上線前時程來說,這次複測往往是整個過程中最有價值的短短幾個小時:「我們覺得已經修好了」和「我們確認已經修好了」之間的差別——一旦真實客戶資料處在風險之中,這個差別就非常重要。
以上這些都不要求團隊一定要提前很久開始才能拿到真正的價值——它要求的,只是測試的範圍要誠實地對應真正剩下的時間,而不是要嘛整個跳過,要嘛變成一場沒人有時間去落實的走過場。
這屬於哪裡:作為持續資安態勢一部分的測試,而不是一次性的臨時抱佛腳
一次滲透測試——即便是範圍劃定得當、留有充足時間、修復窗口乾淨俐落的那種——只回答一個問題:在這個日期接受測試的這個應用程式,在那些真正重要的面向上,是否可被利用?它沒有回答一家正在成長的公司實際需要持續得到解答的問題:誰來持續負責資安測試這項實務,誰來追蹤上一次測試的發現結果是否真的被修復,誰來確保下一次測試會在程式碼庫偏離得太遠、以至於上一次測試的涵蓋範圍已經過時之前及時發生?一次性的測試,無論做得多好,都無法獨自回答這些問題——而一個只有在上線日期逼出這個問題時才去測試的團隊,往往會發現自己在下一次重大發布、下一位企業客戶的資安問卷,或下一輪募資的盡職調查中,再次陷入完全相同的情境。
這正是Brocent 的受管 IT 方案要填補的空缺。資安測試不再是每次到了關鍵時刻才被重新發現的一場消防演習,而是成為一支成長中的團隊本就該具備的持續涵蓋範圍的一部分——與方案中其他受管資安服務一起被劃定範圍、排入日程、持續追蹤,而不是每次都要在上線週的截止期限下從零重新談判。一個已在方案內的團隊,不會在上線日期前三週才問「這次找誰做滲透測試」——那份合作關係、那次範圍討論以及複測節奏早已存在,這正是把「我們需要在固定日期前完成測試」從一場倉促應對,變成一次排程對話的關鍵所在。
滲透測試本身——上文所描述的這項工作——依然作為一項獨立劃定範圍的服務持續提供;而對於已經建立起扎實測試習慣、並想衡量自己的防禦方是否真的能發現並阻止一次正在進行的真實入侵的團隊而言,紅隊演練(Red Team Engagement)是更進一步的選擇:一次不預先告知、以目標為導向的對抗模擬,而不是一次範圍明確的弱點排查。這兩者都是真實、獨立的服務,各自有自己的範圍與成本。但對於一家想要不再把每一個上線日期都當成一次新的資安搶救行動的成長中香港科技公司而言,更值得問的問題,或許不是「這次該預約哪一次一次性測試」,而是資安測試、修復追蹤,以及讓下一次工作能夠快速劃定範圍的那份合作關係,是否本就該歸屬於已經涵蓋其餘技術堆疊的那份受管 IT 方案之中。可以在定價頁面查看該方案的各檔位,或聯絡 Brocent,聊聊一次上線前測試——無論是這週就預約,還是六週之後再預約——究竟適合放在哪裡。
常見問題
距離上線多久應該預約滲透測試?
理想情況下,越早越好——最好在上線日期本身被定下來的同時就一併決定。一次完整的外部、內部與網頁應用程式測試通常需要兩到三週,這還沒算上修復與複測所需的時間。留出四到六週的上線前跑道來預約,能容納完整範圍、一個真正的修復窗口,以及對修復效果的確認——這正是「一次能改變上線內容的測試」和「一次只是記錄了已經上線內容的測試」之間的差別。
滲透測試和弱點掃描有什麼差別?
弱點掃描是自動化、覆蓋面廣的——它在大範圍資產上快速、可重複地排查已知的、基於特徵的弱點,很適合按固定節奏運作。滲透測試則加入了一位持證的人工測試人員,主動嘗試利用掃描只能標記出來的問題,像真正的攻擊者一樣把多個發現串連起來,並展示真實的業務影響,而不只是列出一份潛在問題清單。很多機構會兩者都用:按節奏定期掃描,再針對某次上線、年度檢查,或某項特定的合規或客戶要求,做一次人工滲透測試。一次乾淨的掃描結果,並不能證明一次人工測試也一定會得出乾淨的結論。
在香港做一次滲透測試大概要多少錢?
這在很大程度上取決於範圍。在香港市場,由顧問執行的人工滲透測試通常從約 5,000 美元起,視包含多少範圍(外部、內部、網頁應用程式、社交工程)以及環境規模大小,可能一直到數萬美元。Brocent 自身劃定範圍的測試項目起價為 3,500 美元,最終報價由方案討論階段確定的具體範圍決定——一次針對單一上線前產品、聚焦外部與網頁應用程式的測試,與一次涵蓋更大環境的完整四範圍測試,報價會不同。
滲透測試能在兩週內完成嗎?
可以,前提是範圍選得對。一次完整的外部、內部與網頁應用程式測試,單獨通常就需要兩到三週,這在一個嚴格的兩週上線前窗口內,幾乎不會留下修復的餘裕。一次緊湊收窄的測試——聚焦在外部邊界與面向客戶的網頁應用程式,也就是上線第一天暴露程度最高的部分——可以在兩週內完成,並且仍能在上線前留出一個短暫的修復窗口。誠實地說,這裡的取捨是涵蓋廣度:兩週的窗口能很好地支撐一個聚焦收窄的範圍;它支撐不了和一次六週測試同等的深度。
如果測試在上線前發現了一個嚴重問題,會怎麼樣?
這個發現會立刻被分診,依據報告中帶有 CVSS 評分、有證據支撐的細節,而不是一個原始的嚴重等級標籤,來判斷其可被利用程度與業務衝擊。對於一個確實嚴重、且容易被利用的問題,誠實的選擇是:如果剩餘時間允許,就在上線前修復並複測;否則,就延後受影響的具體功能或流程上線,其餘部分按計畫照常上線。在公開發布前幾天面對這樣的對話都不會輕鬆,但在客戶之前發現問題,正是選擇在上線前而不是上線後測試的全部意義所在。
已經做過弱點掃描了,還需要滲透測試嗎?
一般來說,需要——尤其是對第一次或最重要一次面向客戶發布而言。掃描是一個有用、可重複的基準——它能有效率地捕捉已知的、基於特徵的問題——但它不會嘗試真正利用弱點、把多個發現串連起來,或是像人工測試那樣展示真實世界的影響。一個乾淨的掃描結果回答的是「我們用自動化工具有沒有發現任何已知弱點」,而不是「有人花真正的力氣,究竟能不能進來」。對於一次第一次承載客戶帳號或金流資料的發布來說,這是一個值得在上線前而非上線後回答清楚的、實質不同的問題。
紅隊演練和滲透測試是同一回事嗎?
不是——它們回答的是不同的問題。滲透測試問的是「這一組明確定義的系統裡存在哪些弱點」,通常會提前告知並與內部團隊排定日程,一般需要幾天到幾週時間。紅隊演練問的是一個完全不同的問題——「攻擊者能否觸及某個具體目標,而我們會不會察覺」——除了一位內部小範圍聯絡人之外,不會預先告知任何人,測試的是偵測與應變能力,而不是弱點是否存在,通常需要幾週到幾個月。紅隊演練通常假設一套可運作的滲透測試機制已經存在;它是資安基礎衛生到位之後的下一步,而不是替代上線前測試本身的選項。
完全不測 vs. 倉促趕工的測試 vs. 對著上線日期規劃的測試
這三種做法之間的差別,其實並不在於測試方法論本身——三種情況下用的都是同一批持證測試人員、同一套技術手段和同一套報告標準。真正不同的,是「決定要測試」這件事發生在什麼時候,以及發現結果出來之後,行事曆上還剩多少時間可以用來應對。
完全不測(「上線後再修」)
- 沒有任何獨立驗證來確認應用程式能抵禦一次真正的入侵嘗試——有的只是自動化掃描(如果做過的話)碰巧捕捉到的東西。
- 任何嚴重問題都是由真實使用者、或由攻擊者,在客戶帳號和資料已經上線之後才發現——對最糟糕的發現而言,這是最糟糕的時機。
- 在暴露開始之前,不存在任何修復窗口,因為發現問題的時候,暴露早就已經開始了。
倉促趕工的上線前一週測試(有一定涵蓋,但沒有修復時間)
- 測試確實做了,也依然能捕捉到真正嚴重、容易被利用的問題——這比完全不測要好得多。
- 範圍通常是在時間壓力下被收窄的,而且往往是臨時、非刻意地收窄,這可能會在實際被測試的內容裡留下缺口。
- 發現結果出來時,往往幾乎沒有時間在上線前修復並複測,於是這份報告變成了對上線時已知風險的一份紀錄,而不是推動上線前整改的動力。
對著上線日期規劃、並留有修復窗口的範圍化測試(Brocent 的模式)
- 範圍是圍繞可用時間刻意選定的——時間緊就誠實收窄,跑道充裕就涵蓋更全——而不是要嘛整個跳過,要嘛被硬拉得太薄。
- 一份依真實可被利用程度和業務衝擊來排序的發現報告,讓一個小團隊能夠快速分診,先處理真正重要的事情。
- 一個「修復—複測」的閉環,在上線前確認修復成效,把「我們覺得已經修好了」變成「我們確認已經修好了」——而且這個確認發生在仍有時間對答案採取行動的時候。
分享:
📬 亞太IT月報
中國合規動態、網絡安全預警及亞太IT實踐指南,每月一期。
不發垃圾郵件,隨時可取消訂閱。