安全最佳實踐+Klocwork

創提科技
2022/02/22

分享到

在部署任何基於web的應用程式時,必須遵循安全最佳實踐。這裡,我們概述了設置Klocwork(一個靜態程式碼分析和應用安全靜態測試的工具(SAST))的步驟,以實現安全操作。這個過程通常是部署在本地的,並且是在防火牆之後。我們也應該採取額外的預防措施,以防在互聯網上暴露任何東西。

 
本文將包含如下幾個部分:
 
     • Klocwork安全最佳實踐概述
 
     • 步驟1: SSL/TSL
 
     • 步驟2: 開放埠和路由
 
     • 步驟3: 身份驗證


Klocwork安全最佳實踐概述
 
Klocwork門戶(Portal)接收分析結果,以準備關於合規性、趨勢和問題詳情的宏觀報告。您可以登錄查看報告,分類問題以及配置分析設置。此外,Klocwork門戶可以部署在本地或雲端。它們可以在物理機上、虛擬機器(VM)中或容器內運行。
 

安全最佳实践+Klocwork-1.jpg


Klocwork提供了“開箱即用”的身份驗證和安全設置,旨在使其在初始環境中易於設置和熟悉,但在真實的生產環境時,因為門戶伺服器要處理重要的資料,則往往需要更改其配置
 
需要配置的關鍵區域有:
 
     1. 移到HTTPS (SSL/TSL設置)
 
     2. 開放選擇的埠和路由
 
     3. 身份驗證和SSO
 
下面顯示的是Klocwork從安全的角度來看的元件組成。為簡單起見,這裡所用的都是默認的埠號——它們都是可配置的。


安全最佳实践+Klocwork-2.jpg
 
使用一個或兩個虛擬機器(VM)的典型Klocwork服務架構

 
Klocwork的伺服器端元件可以部署在同一個虛擬機器(VM)上,或者許可服務(license service)可以運行在單獨的虛擬機器(VM)上。三個埠必須開放:
 
     1. 許可服務共用(27000)
 
     2. 許可服務Klocwork後臺進程(33133)
 
     3. Klocwork門戶(443)
 
在配置用戶端工具時,需要使用到許可服務共用埠和Klocwork門戶埠。


SSL/TSL
 
加密Klocwork門戶與Klocwork用戶端工具或流覽器之間的通信有兩種基本技術:
 
     1. 使用反向代理
 
    2. 為SSL/TSL配置Klocwork門戶
 
使用反向代理通常是IT部門的選擇,因為他們熟悉自己的安裝和配置,並且運行得很好。如果您希望將Klocwork門戶部署在Linux主機的443埠上,則需要使用反向代理。
 
配置Klocwork本身作為SSL/TSL (https)服務運行可以通過三個簡單的步驟完成:
 
     1. 為運行Klocwork門戶的主機,向您的公司簽名授權機構請求已簽名的SSL/TSL證書。在等待時,您可以使用由kwauthconfig生成的未簽章憑證。
 
     2. 運行kwauthconfig,為https連接配置門戶。
 
     3. 通知您的用戶使用https並通過“use secure connection”和新的埠號更新一下其IDE的Klocwork外掛程式配置。


請求已簽名的SSL/TSL證書
 
下麵是openssl命令生成金鑰對和證書簽名請求文件(.csr)的示例。只有portal.csr檔會被發送到簽名授權機構。
 

安全最佳实践+Klocwork-3.jpg


您收到的證書檔的格式可能略有不同。它可能包含主機的證書、任何中間證書和簽名授權機構的根證書。如果它只包含主機證書,您將需要手動下載中間證書和根證書。所需要做的是將私人金鑰與所有這些證書組合在一起,以形成金鑰庫。
 
下面是收到p7b檔時openssl命令的一個示例。

 

安全最佳实践+Klocwork-4.jpg


密碼和名稱是Klocwork門戶使用的預設值,不過您也可以使用其他名稱。但是,您將需要在projects_root/tomcat/conf/server.template檔中手動編輯tomcat伺服器配置資訊。最後一行命令將輸出金鑰庫的內容以進行驗證。
 
輸出檔myhost_keystore.pfx是一個pkcs12金鑰庫,必須複製到projects_root/tomcat/conf/.keystore,以便Klocwork門戶能夠找到。
 
用於LDAP伺服器的SSL/TSL連接
 
當SSL/TSL連接用於被推薦的LDAP伺服器時(i.e. ldaps://…),伺服器的證書必須保存在門戶的信任存儲區(/_jvm/lib/security/cacerts)内。Klocwork安裝包括用於該任務的/_jvm/bin/keytool。例如:
 

安全最佳实践+Klocwork-5.jpg


運行kwauthconfig
 
儘管可以手動編輯projects_root/config/admin.conf和projects_root/tomcat/conf/server.template檔,但更容易的選擇通常是使用圖形化使用者介面(gui)工具kwauthconfig。
 
如果您的Klocwork門戶服務託管在Linux OS上,而沒有圖形化介面,那麼您將需要使用X11伺服器。kwauthconfig包含在Klocwork伺服器安裝包中。
 
kwauthconfig還可以用於配置門戶的身份驗證和電子郵件通知。下麵的示例只關注SSL/TSL配置。
 
需要特別注意:
 
    • 在更改配置之前,停止Klocwork門戶服務
 
    • 如果金鑰庫可用的話,在開始kwauthconfig之前複製您的金鑰庫(e.g. myhost_keystore.pfx)到projects_root/tomcat/conf/.keystore。如果沒有.keystore 檔的話,那麼kwauthconfig將創建一個未簽名的證書。
 
Kwauthconfig將打開最後一個projects_root配置資料或提示輸入projects_root目錄。
 

安全最佳实践+Klocwork-6.jpg


安全最佳实践+Klocwork-7.jpg

安全最佳实践+Klocwork-8.jpg

如果將金鑰庫複製到.keystore,那麼主機名稱、組織單元和組織欄位可以留空。只有主機名稱是關鍵的,它必須與託管門戶的機器的主機名稱相匹配。大多數安裝都不需要智慧卡身份驗證,但是,如果選擇了智慧卡身份驗證,則您必須提供用戶端證書的信任存儲區位置和密碼。
 
kwauthconfig不需要其他資料就可以完成SSL/TSL設置。點擊“Next”,直到您可以點擊“Finish”,然後點擊“OK”退出kwauthconfig。
 
如果有需要,您可以在啟動服務之前更改Klocwork門戶埠。
 
例如,從默認的8080埠切換到443埠,使用如下命令:


安全最佳实践+Klocwork-9.jpg


啟動資料庫和Klocwork服務並流覽https://hostname:port。
 
通知Klocwork用戶
 
最後一步是通知您的Klocwork用戶,這樣他們可以使用新的https url更新他們的腳本,並在IDE Klocwork外掛程式選項(Options)/預設(Preferences)中勾選“Use Secure Connection”核取方塊。


安全最佳实践+Klocwork-10.jpg


開放埠和路由
 
安裝Klocwork需要:
 
    • 用於入站連接的三個埠
 
    • 一個內部資料庫埠
 
    • 訪問三個遠端伺服器以進行身份驗證的可選路由(e.g. Active Directory/LDAP),從而發送電子郵件通知,並將資料匯出到缺陷跟蹤系統。
 
用戶端工具和許可/門戶服務之間的任何防火牆都必須為TCP/IP連接開放27000、33133和8080埠。除此之外沒有其他埠用於入站連接。
 
這些埠號可以使用kwservice命令進行配置,對於許可埠,可以將它們編輯到許可檔中。
 
例如:


安全最佳实践+Klocwork-11.jpg


一個典型的重新分配方法是將用於SSL/TSL的埠443分配到Klocwork門戶。如果您的門戶運行在Windows OS上,這很容易做到:只需使用kwservice命令即可。如果您的門戶運行在Linux OS下,您將需要使用埠443,或者,對於埠443,需要使用反向代理,因為埠443是一個保留埠,Klocwork門戶不能作為根用戶運行。
 
或者,Klocwork門戶需要出站連接到身份驗證伺服器、用於電子郵件通知的SMTP伺服器和缺陷跟蹤伺服器(e.g. JIRA)。必須配置這些外部伺服器以接受來自Klocwork門戶的連接。
 
資料庫埠(預設為3306埠)一定不能被外部應用程式訪問。


身份驗證
 
Klocwork“開箱即用”的預設身份驗證配置是“Authentication Disabled”。這非常適合初始設置和測試,但不適用於生產環境。因為任何人每次登錄都會自動創建一個帳號。
 
相反,您應該使用下一個更高級別的身份驗證配置“Basic”。在這種模式下,只有擁有Klocwork門戶用戶帳號的用戶才能登錄。
 
第一個帳號是用戶在安裝伺服器包時使用用戶名自動創建的。要啟用Basic身份驗證,您必須訪問門戶並點擊Users頁面上的Authentication Disabled連結。
 

安全最佳实践+Klocwork-12.jpg

在“Authentication Disabled”和“Basic”模式下,Klocwork會維護使用者和組資料庫。用戶在項目或所有項目上被分配角色,這限制了他們登錄時可以看到什麼和做什麼。
 
為了提高身份驗證的安全性,可以使用外部使用者資料庫。Klocwork同時支援NIS和LDAP伺服器。Klocwork還可以為Windows上的Active Directory使用者配置單點登錄。配置Klocwork門戶以使用外部使用者資料庫是通過kwauthconfig完成的。
 
當檢測到Active Directory伺服器時,Kwauthconfig會提供一個預設配置。這作為初始配置運行是不錯的,但是如果外部資料庫中的使用者數量很大,那麼最好優化使用者和組過濾程式,以減少回應時間。
 
關鍵的kwauthconfig對話方塊是:
 
1. 訪問伺服器的設置,包括登錄伺服器的用戶帳號。理想情況下,使用具有長期密碼的服務帳號。cacerts的預設密碼是“changeit”。


安全最佳实践+Klocwork-13.jpg

 
2. 自訂provider和filter。在這個示例中,使用者過濾程式被設置為“(&(objectCategory=person)(sAMAccountName=*)(memberOf=CN=KlocworkUsers,OU=Groups,DC=klocwork,DC=com))”.  
 
這要求用戶是Klocwork Users Active Directory Security Group的成員。最好與IT部門協作從而優化provider和filter設置,以最大限度地減少LDAP伺服器和Klocwork門戶上的工作負載。
 

安全最佳实践+Klocwork-14.jpg

3. 指定要檢索哪些屬性。
 
在這個示例中,可以使用使用者的cn或sAMAccountName屬性值進行登錄。最左邊的User Attribute用於顯示使用者的名稱,並在Users門戶頁面上搜索使用者。如果您有多個具有相同cn值的用戶,最好先指定一個唯一的屬性。

安全最佳实践+Klocwork-15.jpg

4. 點擊“Finish”完成配置設置。如果要測試伺服器連接,請點擊“Test Connection”。

安全最佳实践+Klocwork-16.jpg

有兩個Advanced Settings需要手動編輯設定檔projects_root/config/admin.conf。它們可以添加到任何地方。
 

安全最佳實踐+Klocwork-17.png


Klocwork安全最佳實踐回顧
 
Klocwork的安全最佳實踐很簡單,如下所示:
 
    1. 配置SSL/TSL
 
    2. 開放指定的埠和路由
 
    3. 啟用身份驗證


實施這些配置步驟之後,您將實現:
 
    1. 控制訪問點
 
    2. 在門戶和用戶端工具之間傳遞時,加密所有的Klocwork資料和使用者憑證
 
    3. 控制誰可以訪問門戶上的資料
 
如果您想親自瞭解Klocwork SAST如何説明您確保軟體安全,立即註冊申請免費試用吧。