你以為安全?其實漏洞已潛伏!
是否曾經認為程式碼執行正常就代表安全無虞?事實上,許多資安漏洞往往潛藏在看似無害的邏輯中,直到被駭客利用才驚覺問題嚴重。本篇文章將帶你深入了解 OpenText™ Fortify SAST 這套原始碼靜態分析工具,透過實際案例分享,揭示開發過程中容易忽略的安全風險,協助開發者提升資安意識,打造更安全的程式碼品質。
什麼是 Fortify?
Fortify 是由 OpenText 提供的一套靜態應用程式安全測試(SAST)工具,能夠在程式碼尚未執行前,針對潛在資安風險進行掃描與分析。它支援 Java、C/C++、Python、JavaScript 等多種主流程式語言,能有效找出如 SQL Injection、跨站腳本(XSS)、不當認證等常見漏洞。開發團隊可透過 Fortify 提供的GUI介面或命令列工具,快速整合至 CI/CD 流程中,強化軟體生命週期中的安全防護。
Fortify 工具與操作流程
圖2 : Fortify 掃描流程圖
使用 Fortify 進行原始碼安全檢測,主要依賴 Fortify Static Code Analyzer(SCA)與 Fortify Audit Workbench(AWB)這兩個工具。
安裝完成後,首先準備好要掃描的原始碼專案,可以直接用AWB人形化的介面,或透過 sourceanalyzer 命令來掃描(例如:sourceanalyzer -b myProject javac MyApp.java)。接著執行掃描與結果產出(例如:sourceanalyzer -b myProject -scan -f result.fpr),產生 .fpr 格式的報告檔。
開啟 Fortify Audit Workbench,載入 .fpr 檔案後即可進行視覺化分析,快速定位可能的安全問題。AWB 會依據嚴重程度分類漏洞,並提供詳細的原始碼位置與修復建議,方便開發人員對症下藥。
為了與 DevOps 流程整合,Fortify 也支援 Jenkins、Azure DevOps 等 CI 工具,能在開發早期就主動偵測風險,降低後期修復成本。
實際案例分享:發現程式碼中的潛藏風險
圖3:Fortify 案例掃描結果總覽
在一次針對內部開發系統的 Fortify 掃描中,我們針對一個 Java 專案進行分析。該系統負責接收外部表單並寫入資料庫,看似單純,卻在 Fortify 的掃描報告中,揭示了多項關鍵資安風險:
第一個被標示為「高風險」的是 SQL Injection。原始碼中使用 Statement stmt = conn.createStatement(); 並將使用者輸入的參數直接拼接進 SQL 字串:
String query = "SELECT * FROM users WHERE id = " + request.getParameter("id");
Fortify 清楚指出這是典型的注入風險點,建議使用 PreparedStatement 進行參數綁定,避免惡意語句被執行。
第二個問題是「硬編碼密碼(Hardcoded Credentials)」。在設定資料庫連線時,原始碼中直接寫死帳號密碼:
String password = "admin123";
Fortify 建議改為讀取加密後的環境變數或使用憑證管理系統(如 HashiCorp Vault)取代。
第三個問題則是「日誌資訊洩漏(Log Forging)」,開發者將使用者輸入直接記錄到 log 中,未經清洗處理,可能造成惡意使用者偽造記錄或注入惡意字元攻擊日誌系統。
這些案例顯示,雖然程式碼能正常執行,但實際上卻潛藏著高風險漏洞。透過 Fortify 的圖形化介面,我們不僅能看到每個漏洞的程式位置,也能根據其提供的修復建議快速調整,極大提升修復效率與資安防禦水準。
使用 Fortify 的優點
Fortify 為開發團隊提供強大的原始碼靜態分析功能,能在開發早期就發現潛藏的安全風險,大幅降低修復成本與漏洞流出風險。它支援多種主流程式語言(如 Java、Python、JavaScript 等),且具備完整的圖形介面與報告系統,幫助使用者快速理解漏洞內容與修復建議。
Fortify 的另一大優勢是可與 CI/CD 流程無縫整合,例如搭配 Jenkins、GitLab、Azure DevOps 等工具,在每次提交或建置時自動進行安全掃描,使資安真正融入開發流程中。對於希望建立安全開發文化的團隊來說,Fortify 是一個值得投入的解決方案。
結語與建議:從開發開始守護資安
資訊安全從來不是產品上線後才需要面對的課題,而是應該從開發階段就開始著手。透過 Fortify 這類靜態原始碼分析工具,開發者可以在程式尚未執行前,就有效發現潛藏風險,提早修正、避免資安漏洞流出。建議企業團隊將 Fortify 納入開發流程,培養安全程式設計的文化,才能真正做到從源頭守護程式碼的安全。