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,但在生产环境中使用时,此时门户要处理重要数据,则需要更改其配置。
需配置的关键方面包括:
移至HTTPS (SSL/TSL 设置) 打开选择性端口和路由 验证和SSO
从安全角度而言,以下是Klocwork组件。为简单起见,这些是默认端口号,而所有的端口号都是可配置的。
△ 采用一或两个虚拟机的典型Klocwork服务布局
Klocwork的服务器端组件可以驻留在同一个虚拟机上,或者许可证服务可以运行在单独的虚拟机上。但是必须打开以下三个端口:
许可服务共用 (27000) 许可服务Klocwork守护程序(33133) Klocwork门户 (443)
配置客户端工具时需要使用许可服务公共端口和Klocwork 门户端口。
SSL/TSL
对Klocwork门户和Klocwork客户端工具或浏览器之间的通信进行加密的基本技术有两种:
使用反向代理 为SSL/TSL配置Klocwork门户
使用反向代理通常是IT部门的选择,因为他们熟悉它们的安装和配置,并且效果良好。如果您希望在Linux主机的443端口上部署Klocwork门户,则需要一个反向代理。
配置Klocwork本身作为SSL/TSL (https)服务运行,可以通过以下三个简单的步骤完成:
为运行Klocwork门户的主机向企业签名授权机构索取一个签名的SSL/TSL证书。在等待期间,您可以使用由kwauthconfig生成的未签名证书。 运行kwauthconfig,配置用于https连接的门户。 通知用户使用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 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的安全范例很简单,配置步骤如下:
配置SSL / TSL
开放特定端口和路径
启用身份验证
采用这些配置步骤后,您已经:
控制接入点 加密门户和客户端工具间传输的所有数据和用户凭据 控制哪些用户可以访问门户数据
John Chapman | 咨询经理
John Chapman拥有超过30年的软件开发和管理经验。他目前在Klocwork Professional Services担任咨询经理。
文章来源:https://bit.ly/3yhaeCp