Klocwork部署的安全最佳实践

来源:Perforce      作者:龙智      发布时间:2022-07-08

Klocwork是一款静态代码分析和SAST工具,适用于 C、C++、C#、Java、JavaScript、Python和Kotlin,可识别软件安全性、质量和可靠性问题,帮助强制遵守标准。

阅读本文,您将了解Klocwork的设置步骤,助力您实现安全的最佳实践。如需了解更多关于Klocwork的信息,请联系Perforce授权合作伙伴——龙智

在安装任何基于web的应用程序时,都必须遵循安全最佳实践。本文概述了设置Klocwork的步骤,这是一款静态分析和SAST工具,旨在实现安全操作。Klocwork通常本地部署,并且位于防火墙之后。如有可能在互联网上暴露任何内容,则需采取额外的预防措施。

安全最佳实践与Klocwork概述

Klocwork门户可接收分析结果,用以制作关于合规、趋势和问题细节的总体报告。您登录后可以查看报告、进行问题分类并配置分析设置。此外,Klocwork门户部署在本地或云上,可在裸机、虚拟机或容器中运行。

通过配置Klocwork的开箱即用身份验证和安全设置,可以方便地在测试设置中进行设置并尽快熟悉Klocwork,但在生产环境中使用时,此时门户要处理重要数据,则需要更改其配置。

需配置的关键方面包括:

  1. 移至HTTPS (SSL/TSL 设置)
  2. 打开选择性端口和路由
  3. 验证和SSO

从安全角度而言,以下是Klocwork组件。为简单起见,这些是默认端口号,而所有的端口号都是可配置的。

△ 采用一或两个虚拟机的典型Klocwork服务布局

Klocwork的服务器端组件可以驻留在同一个虚拟机上,或者许可证服务可以运行在单独的虚拟机上。但是必须打开以下三个端口:

  1. 许可服务共用 (27000)
  2. 许可服务Klocwork守护程序(33133)
  3. Klocwork门户 (443)

配置客户端工具时需要使用许可服务公共端口和Klocwork 门户端口。

SSL/TSL

对Klocwork门户和Klocwork客户端工具或浏览器之间的通信进行加密的基本技术有两种:

  1. 使用反向代理
  2. 为SSL/TSL配置Klocwork门户

使用反向代理通常是IT部门的选择,因为他们熟悉它们的安装和配置,并且效果良好。如果您希望在Linux主机的443端口上部署Klocwork门户,则需要一个反向代理。

配置Klocwork本身作为SSL/TSL (https)服务运行,可以通过以下三个简单的步骤完成:

  1. 为运行Klocwork门户的主机向企业签名授权机构索取一个签名的SSL/TSL证书。在等待期间,您可以使用由kwauthconfig生成的未签名证书。
  2. 运行kwauthconfig,配置用于https连接的门户。
  3. 通知用户使用https,并使用“使用安全连接”和新的端口号更新IDE的Klocwork插件配置。

请求已签名的SSL/TSL证书

下面是生成密钥对和证书签名请求文件(.csr)的openssl命令示例。只有portal.csr文件会发送到签名机构。

				
					openssl genrsa -out portal.key 2048

openssl req -new -key portal.key -out portal.csr

 Country Name (2 letter code) []: US

 State or Province Name (full name) []: Minnesota

 Locality Name (eg, city) []: Minneapolis

 Organization Name (eg, company) []: mycompany Inc.

 Organizational Unit Name (eg, section) []: Defense

 Common Name (eg, your server's hostname) []: klocwork.mycompany.com

 Email Address []: me@mycompany.com
				
			

收到的证书文件格式可能不同。它可能包含主机的证书、任何中间证书和签名机构的根证书。如果它只包含主机证书,则需要手动下载中间证书和根证书。需要将私钥与所有这些证书结合起来,形成密钥存储库。

下面是接收到p7b文件时openssl命令的一个示例。

				
					
openssl pkcs7 -print_certs -in myhost.p7b -out myhost.cer -inform der
openssl pkcs12 -export -in myhost.cer -inkey portal.key -out
        myhost_keystore.pfx -name tomcat
  Enter Export Password: changeit
  Verifying - Enter Export Password: changeit
openssl pkcs12 -nokeys -info -in myhost_keystore.pfx
				
			

密码和名称是Klocwork门户使用的默认值,但您也可以使用其他名称。之后需要手动编辑projects_root/tomcat/conf/server.template文件中的tomcat服务器配置信息。最后一个命令输出用于验证的密钥库内容。

输出文件myhost_keystore.Pfx是pkcs12密钥库,必须拷贝到projects_root/tomcat/conf/.keystore,以便Klocwork门户找到它。

用于LDAP服务器的SSL/TSL连接

当使用SSL/TSL连接到LDAP服务器(即ldaps://…),这是推荐的做法,服务器的证书必须保存在门户的信任存储(<Klocwork服务器安装>/_jvm/lib/security/cacerts)。Klocwork安装包含了<Klocwork install>/_jvm/bin/keytool实用工具,可用于这个任务。例如:

				
					keytool -import -alias ldaproot -file rootca.cer -keystore cacerts
keytool -import -alias ldapInter -file inter.cer -keystore cacerts
keytool -import -alias ldap -file ldap.cer -keystore cacerts
				
			

运行kwauthconfig

虽然可以手动编辑projects_root/config/admin.conf和 projects_root/tomcat/conf/server.template文件,但更轻松的选择通常是使用GUI工具kwauthconfig。

如果您的Klocwork门户服务托管在Linux操作系统上,没有桌面,那么您将需要使用X11服务器。kwauthconfig包含在Klocwork服务器安装包中。

Kwauthconfig还用于配置门户进行身份验证和电子邮件通知。下面的示例只关注SSL/TSL配置。

非常重要

  • 在修改配置前停止Klocwork门户服务
  • 复制您的密钥存储库(例如myhost_keystore.pfx)到projects_root/tomcat/conf/。如果密钥存储库可用,则在启动kwauthconfig之前进行密钥存储。如果没有.keystore文件,那么kwauthconfig将创建一个未签名的证书。

Kwauthconfig将上次的projects_root配置数据或提示输入projects_root目录。

如果将密钥存储库复制到.keystore,则主机名、组织单元和组织字段可以留空。只有主机名是关键的,它必须与承载门户的机器的主机名匹配。大多数安装不需要智能卡身份验证,但是,如果选择了智能卡,您必须提供客户端证书的信任储存库的位置和密码。

kwauthconfig不需要其他数据便可完成SSL/TSL设置。点击“Next”,接着可以点击“Finish”,然后点击“OK”,从而退出kwauthconfig。

或者,您也可以选择在启动服务之前更改Klocwork门户端口。

例如,要从默认的8080端口切换到443端口,可以使用以下命令:

				
					kwservice -r projects_root set-service-property klocwork port 443
				
			

启动数据库和Klocwork服务,浏览https://hostname:port。

通知Klocwork用户

最后一步是通知Klocwork用户,让他们可以用新的https url更新脚本,并在IDE Klocwork插件选项/首选项中勾选“使用安全连接”复选框。

打开端口和路径

安装Klocwork需要:

  • 三个入站连接端口

  • 内部数据库端口

  • 可选的到三个远程服务器进行身份验证(如Active Directory/LDAP)的路径,发送电子邮件通知,并将数据导出到bug跟踪应用。

客户端工具和许可/门户服务之间的任何防火墙都必须为TCP/IP连接打开27000、33133和8080端口。入站连接不使用其他端口。

这些端口号可以使用kwservice命令进行配置,对于许可证端口,在许可证文件中指定。

例如:

				
					kwservice –projects-root <projects_root> set-service-property klocwork port 443
				
			

一个典型的重新分配方式是针对SSL/TSL使用443端口,以便连接到Klocwork门户。如果门户运行在Windows操作系统上,这将很容易做到:只需使用kwservice命令。在Linux操作系统下,您将需要使用端口443,或者对于端口443,使用一个反向代理,因为端口443是一个保留端口,Klocwork门户不能作为root运行。

此外,Klocwork门户需要出站连接到身份验证服务器,用于电子邮件通知的SMTP服务器和bug跟踪服务器(例如JIRA)。这些外部服务器必须配置为接受来自Klocwork门户的连接。

数据库端口(默认为3306端口)必须不能被外部应用所访问。

身份验证

Klocwork的开箱即用身份验证配置是“身份验证禁用”。这对于初始设置和测试来说非常棒,但不适用于生产环境。因为任何人每次登录都会自动创建一个帐户。

相反,你应该使用下一个更高的身份验证配置,“Basic”。在这种模式下,只有那些拥有Klocwork门户用户账号的用户才能登录。

第一个帐户使用安装服务器包的用户名自动创建。要启用基本身份验证,必须进入门户,单击Users页面上的authentication Disabled链接。

在“认证禁用”和“Basic”模式下,Klocwork维护一个用户和组数据库。用户在项目或所有项目中会被分配角色,这限制了他们在登录时可看到的内容和操作。

为提高身份验证的安全性,可使用外部用户数据库。Klocwork同时支持NIS和LDAP服务器。Klocwork还可以配置为Windows上Active Directory用户的单点登录。配置Klocwork门户使用外部用户数据库是通过kwauthconfig完成的。

Kwauthconfig在检测Active Directory服务器时提供默认配置。这作为初始配置很好,但是如果外部数据库中的用户数量很大,那么最好细化用户和组过滤器以减少响应时间。

kwauthconfig的关键对话框有:

1.访问服务器的设置,包括登录服务器的用户帐户。理想情况下,使用具有长期密码的服务帐户。cacerts的默认密码是“changeit”。

2.定制提供商和过滤器。在本例中,用户过滤器已设置为“(&(objectCategory=person)(sAMAccountName=*)(memberOf=CN=KlocworkUsers,OU=Groups,DC=klocwork,DC=com))”。

这就要求用户必须是Klocwork Users Active Directory安全组的成员。最好与您的IT部门合作,优化认证服务和过滤器设置,以减轻LDAP服务器和Klocwork门户上的工作负载。

3.指定要检索的属性。

在本例中,可以使用用户的cn或sAMAccountName属性值登录。最左边的User Attribute用于显示用户名,并在users门户页面中搜索用户。如果有多个用户具有相同的cn值,最好先指定一个唯一的属性。

4.点击“Finish”完成配置设置。要测试服务器连接,请单击“测试连接”。

有两个高级设置需要手动编辑配置文件projects_root/config/admin.conf。它们可以添加到任何位置。

安全范例与Klocwork回顾

Klocwork的安全范例很简单,配置步骤如下:

  1. 配置SSL / TSL

  2. 开放特定端口和路径

  3. 启用身份验证

采用这些配置步骤后,您已经:

  1. 控制接入点
  2. 加密门户和客户端工具间传输的所有数据和用户凭据
  3. 控制哪些用户可以访问门户数据
作者简介:

John Chapman  |  咨询经理

John Chapman拥有超过30年的软件开发和管理经验。他目前在Klocwork Professional Services担任咨询经理。

文章来源:https://bit.ly/3yhaeCp

如需体验Klocwork SAST如何帮助您确保软件安全,请联系Perforce授权合作伙伴——龙智

电话:400-775-5506

邮箱:marketing@shdsd.com