生科轉資工4:2024入職趨勢二週年1|貢獻

2024年,自動化測試中解決4個產品與20個自動化問題,我在GitHub上有158項貢獻,新增301頁文件,並完成84項任務。期間經歷最心累的整合測試,還有曾讓我只睡2小時的一行陳年bug,以及緊急緩解自動化測試停擺的窘境。

文章快速連結

  1. 生科轉資工4:2024入職趨勢二週年1|貢獻
  2. 生科轉資工4:2024入職趨勢二週年2|貢獻
  3. 生科轉資工4:2024入職趨勢二週年3|成長與展望

一、二周年貢獻(2024/3 ~ 2025/1)

2024年,我們團隊的自動化測試解決4個產品問題 (1個新功能的crash / 2個新功能的bug / 1個舊的bug) + 20個自動化問題,我自己GitHub有158個貢獻,新增301篇文件頁面,並完成84項任務。

  1. 2024-05-xx 產品抓漏:特殊情境下AMSP無法運作
  2. 2024-06-xx 最心累PIT:AU Singer Certificate Expiry
  3. 2024-07-xx 升級ATSE 24
  4. 2024-08-xx 曾讓我只睡2小時的一行bug:某重要模組初始化被跳過
  5. 2024-11-xx 主動救火:Manual Test for AMSP Sensitive Level
  6. 2024-12-10 Wildcard Process Image Exclusion
  7. 2025-01-15 Windows Server 2025
  8. 2025-01-xx 差點讓驗證停擺:自動化測試框架網路不穩

(一)最心累PIT:AU Singer Certificate Expiry

DSA會透過iAU去更新病毒pattern,且會檢查iAU憑證是否過期,如果過期,就會更新失敗。由於DSA的iAU憑證將在2024-07過期,所以我們需要測試以下行為:

  1. 下載行為:新的憑證可以從iAU中成功下載。
  2. 更新行為:下載的新憑證可以取代舊憑證並且成功更新pattern。

1. 那些年當iAU糾察隊的日子

過程中真的是非常心累,這個案子我從3月就被通知要做,然後5月中旬菲律賓的iAU team才準備好東西與測項,結果我們6月測試也是瘋狂找到一堆問題,然後7月下旬就要過期了QQ,所幸7月中旬壓線完成,以下讓我說明有多心累:

  1. iAU problem:我們6月就抓到iAU重要東西只做半套,幾乎每個測項重點都出包,所以我們花很多時間都在檢查iAU是否正確?且要與他們溝通你們應該怎麼做?然後我們還需要等對方更新完,才能繼續測,所以整個6月都在當糾察隊。他們有上百個的檔案要更新,所以會漏掉是可以理解,但有同樣問題就來回過3次,我就覺得同樣問題,怎麼會一直被我們抓到?
    1. 憑證檔案不存在
    2. iAU上的憑證沒被更新
    3. 新憑證無法覆蓋舊憑證
    4. iAU所覆蓋的產品版本不夠多
  2. 其他憑證過期
    1. iCRC:這是已知的憑證過期問題,有興趣的可以參考此KB,Resolving iCRC and TrendX Certificate Expiration Issue in Deep Security
    2. DSA and DSM:iAU憑證期效只有3年,所以我們要調時間到過期前,這就導致DSA和DSM期效雙雙過期。所以各位,不要亂調你們電腦與手機上的系統時間。
  3. 測試項目:iAU team給我們的測試項目有些很奇怪,有些是漏掉重要測項。

最後我們7月初才檢查完iAU沒問題,花2週時間去驗DSA的下載與更新行為。測試項目原本iAU team希望能驗96項(48*2個Windows + Linux),但我們要求只須驗56項 (28*2) 就足以代表客戶常見情境。

2. 客戶救火隊

結果舊憑證過期下一週,就收到金主爸爸的求救。我和其他資深工程師就被拉進去除錯,一看log就知道是下載到舊版的憑證,仔細看是下載到上古DSA版本的pattern,所以當下我們做以下處置:

  1. 短期:停止下載上古DSA版本的pattern,並隱藏此功能。
  2. 中期:要求iAU team更新上古DSA版本的憑證。
除了金主爸爸,我們也去救火其他內部測試團隊的問題,結果他們遇到的雷,我們全踩過,我們根本就是掃雷大隊。

3. 專案問題與改善

iAU憑證預期每3年會過期1次,然後DSA其實是很成熟的產品,所以理論上3年前就有做過此測試,但是我們這邊沒有留下文件去紀錄3年前的事情,因此以下是可以改善的部分:

  1. 積極詢問:我應該要更積極且優先請教內部資深工程師3年前的經驗,我到6月中旬後,才積極詢問他,如果能在6月初詢問,就可以減少除錯時間並往正確方向前進。
  2. 留下文件:為了避免類似問題發生,我有留下完整文字紀錄,這使得我在7月底可以快速救火,以及在12月初可以快速交接iAU憑證工作給新人。(iAU憑證有4種喔,所以體感上1~2年就要做一次。)
  3. 拉群討論:拉群討論真的很重要,尤其是與外國團隊合作,然後這是我在2023年工作體悟到的。

(二)曾讓我只睡2小時的一行bug:某重要模組初始化被跳過

這個問題始於2024過年後,我在2月底發現其中一條特殊的回歸測試 (regression test,一種功能測試),其所有的特定測項都會失敗,8月底持續失敗所以我開始認真調查,直到11月初才修掉這一行bug,以下是此問題症狀:

  1. 時好時壞:有時連續2-3週好,有時連續2-3週壞。
  2. 設定一樣:這條特殊的回歸測試和一般的的回歸測試,其關於AM的設定都一樣,跑的測項也一樣,唯獨安裝DSA的流程有些許不一樣。
  3. 初始不全:某個重要模組的初始化被跳過。
  4. 替代方案:此問題只要把BM打開或重新啟動AMSP,模組就會重新被初始化。

1. 我除錯的系統化流程:

  1. 夾軟體版本:夾出最先發生此問題的版本,再看不同版本間程式碼變化有什麼問題。夾到最後,連很早期的官方版本都有問題,所以看起來是一個陳年問題。
  2. 縮小測試集:縮小跑的測試案子,可以縮短測試流程,也可以檢查是否和上游案子有相依性?這有利於簡化手動測試,所幸沒有相依性,只需要跑一個案子即可重現,但手動測試依舊複製不出來,所以看起來此問題與更上游建立DSA環境有關。
  3. 確認建立環境的流程:由於這條回歸測試建立DSA環境流程有些不同,所以我就去釐清哪些流程不一樣,並且把手動複製的範圍擴大到手動建DSA環境。結果就可以手動複製此問題了!會有這樣的懷疑,是因為我們看log時,就發現一開始模組初始化就有問題,因此非常有可能在建立DSA的過程中,就發生問題。
  4. 查看模組初始化程式碼:最後統整所有發現,有眼尖的RD去追初始化的這段程式碼時,發現有一行邏輯錯誤。原本要回傳true,結果回傳false,導致初始化被跳過。

2. 為什麼此問題會時有時無?

最後發現是程式有邏輯錯誤,那為什麼此問題會時有時無呢?因為重新啟動AMSP這一步驟屏蔽了此問題,那什麼時間點會自動觸發重新啟動AMSP呢?

  1. 升級軟體:升級軟體的過程中,如果AMSP版本有變化,就會觸發重新啟動AMSP,因此才會有時有時無的症狀。
  2. 特定的管理設定:管理DSA的軟體有DSM與C1WS,在自動測試中,這兩種管理軟體的預設值不一樣,其中就有一個設定的開與關,會影響是否要重新啟動AMSP。

3. 後續改善

在這問題中,我們花了極大的時間在重現問題與看log,所以以下是我做的改善:

  1. 撰寫問題報告:記錄此問題的來龍去脈,並給出Root cause analysis,以及解釋為什麼會發生這些症狀。
  2. 建立除錯SOP:由於此問題涉及到模組上游的初始化過程,所以在此問題,我必須從最下游的症狀一路往上游追溯,所以我就以此問題為範本,寫了一串針對此功能失效時,上中下游重要的檢查點,並寫出成功與失敗預期會看到什麼。
  3. 建立測試流程:此問題也涉及到測試環境與測試初始化的問題,所以我也針對測試環境與初始化的流程,寫了詳細的文件去描述,以便未來後人不用再去看程式碼就可以知道流程。

以上的改善,在我現在除錯此問題非常有幫助,我可以很快速定位出問題出現在哪一個環節?

(三)差點讓驗證停擺:自動化測試框架網路不穩

2025-01-06開始由Infra團隊維護的VMware網路十分不穩,導致我們自己用於測試AMSP和DSA的自動化測試框架也受到很大的影響(測AMSP的框架叫BVT,測DSA的框架叫DSAF)。我們很早就發現,並通報給Infra團隊,但這問題他們抓了一個月 (2025-02-10),最後是把硬體資源加大,才暫時緩解此問題。

1. 緊急救火

我們這邊受到的影響有:(1) BVT只要遇到一次網路斷線,整個測試就會終止。(2) DSAF的連線會因網路中斷,而導致測試終止。這兩個問題會嚴重影響到我們驗證工作,所以我就被派去負責研究我們這邊能做什麼改善?

我主要做的改善有:(1) 讓BVT支援多次重新連線的功能。(2) 把DSAF暫時搬到網路比較穩定的Azure和Aws上。2025-01-10我完成(1),2025-01-09我完成(2),我做的這些補強,皆有效強化我們框架的網路韌性,讓我們的開發測試流程都能正常繼續。除了加強BVT連線韌性外,我們團隊也做了5項補強去強化BVT結果的穩定度。

2. 心得

這次強化BVT的穩定度,這對我來說是個挑戰,也是更深入了解BVT框架的好時機,因為 (1) 涉及到BVT的基礎核心框架、(2) BVT至少有4個團隊在用、(3) 不好除錯與驗證,所以在6個BVT穩定度的案子中,這也是最難最急最重要的。

相關文章

  1. 跨科仔準備與分析中山資工所的過程
  2. 從生科轉資工的初期過程|十個問答
  3. 生科轉資工1:一年表現狀況
  4. 生科轉資工2:二年表現狀況1
  5. 生科轉資工2:二年表現狀況2
  6. 最長共同近乎波動子序列問題 1
  7. 最長共同近乎波動子序列問題 2
  8. 生科轉資工3:入職趨勢一週年1
  9. 生科轉資工3:入職趨勢一週年2
  10. 生科轉資工4:2024入職趨勢二週年1|貢獻
  11. 生科轉資工4:2024入職趨勢二週年2|貢獻
  12. 生科轉資工4:2024入職趨勢二週年3|成長與展望

縮寫名詞解釋

  1. AM (Anti-Malware):反惡意軟體
  2. AMPPL (Anti-Malware Protection Process Light)
  3. AMSP (Anti-Malware Solution Platform):在Windows DSA中,負責防毒解決方案的平台
  4. ATSE (Advanced Threat Search Engine): AMSP裡用於掃檔案的模組
  5. AU (Active Update):用於更新DSA會用到的病毒pattern
  6. BM (Behavior Monitor):DSA防毒的其中一個功能,可以檢查執行中的應用程式是否有做壞壞的行為
  7. BVT:測AMSP功能的自動化框架
  8. DSA (Deep Security Agent):我們團隊維護的防毒產品
  9. DSAF:測DSA功能的自動化框架
  10. DSM (Deep Security Manager):用於管理多個DSA的server
  11. E2E (End to End) test:端點到端點的測試
  12. Infra (Infrastructure):網路、OS…等基礎建設
  13. PIT (Product Integration Test):產品整合測試
  14. PMS (Process Memory Scan)
  15. QA (Quality Assurance):測試工作
  16. RD (Research and Development):開發工作
  17. Spec (Specification):規格、規範

參考資料

留言