安全最佳实践+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如何帮助您确保软件安全,立即注册申请免费试用吧。