Klocwork 部署的安全最佳实践
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 文件会发送到签名机构。
收到的证书文件格式可能不同。它可能包含主机的证书、任何中间证书和签名机构的根证书。如果它只包含主机证书,则需要手动下载中间证书和根证书。需要将私钥与所有这些证书结合起来,形成密钥存储库。
下面是接收到 p7b 文件时 openssl 命令的一个示例。
密码和名称是 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 实用工具,可用于这个任务。例如:
运行 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 端口,可以使用以下命令:
启动数据库和 Klocwork 服务,浏览 https://hostname:port。
通知 Klocwork 用户
最后一步是通知 Klocwork 用户,让他们可以用新的 https url 更新脚本,并在 IDE Klocwork 插件选项/首选项中勾选“使用安全连接”复选框。
打开端口和路径
安装 Klocwork 需要:
三个入站连接端口
内部数据库端口
可选的到三个远程服务器进行身份验证(如 Active Directory/LDAP)的路径,发送电子邮件通知,并将数据导出到 bug 跟踪应用
客户端工具和许可/门户服务之间的任何防火墙都必须为 TCP/IP 连接打开 27000、33133 和 8080 端口。入站连接不使用其他端口。
这些端口号可以使用 kwservice 命令进行配置,对于许可证端口,在许可证文件中指定。
例如:
一个典型的重新分配方式是针对 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 担任咨询经理。
如需体验 Klocwork SAST 如何帮助您确保软件安全,请联系Perforce授权合作伙伴——龙智:
电话:400-775-5506
邮箱:marketing@shdsd.com
评论