使用 InSpec 实现符合性即代码

法规符合性是每个企业必须面对的一个现实问题。同时,随着改变业界格局的新技术以及客户对数字服务的期望的出现,竞争压力也随之增加。各行业能否在快速交付新产品和服务的同时,仍然履行法规符合性义务?


回答是肯定的。解决方案就是将法规符合性嵌入软件生产线,方法与嵌入其他特性(如汽车行业中的框架劲度或银行应用程序中的往返响应时间)相似。


将符合性表示成代码时,可以让符合性成为部署流程不可或缺的一部分。如同系统配置已转向基础结构即代码(例如 PowerShell Desired State Configuration 或 Chef)一样,可以使用编程语言管理符合性。


借助 InSpec 这一开放源代码项目,可以通过人工可读和计算机可读的语言定义符合性要求。编写符合性要求代码后,可以将它们作为自动测试来运行,从而审核系统。InSpec 提供本地代理以及完整的远程测试支持。


InSpec 支持各种不同的平台(从 Windows 到 Linux)。图 1 列出了部分较为常见的平台。(有关受支持平台的完整列表,请访问 InSpec 网站,网址为 inspec.io。)


图 1:InSpec 支持的常见平台列表

平台版本
AIX6.1、7.1、7.2
Mac OS X10.9、10.10、10.11
Oracle Enterprise Linux5、6、7
Red Hat Enterprise Linux(及变体)5、6、7
Solaris10、11
Windows7、8、8.1、10、2008、2008 R2、2012、2012 R2、2016
Ubuntu Linux
SUSE Linux Enterprise Server11、12
OpenSUSE13.1、13.2、42.1
HP-UX11.31


借助广泛的平台支持,InSpec 成为在整个基础结构中管理符合性的完整解决方案。由于 InSpec 是开放源代码项目,因此一些 OS 供应商协助提供了对其自身平台的支持。例如,IBM 协助提供了对其 AIX OS 的大量支持。


InSpec 入门


InSpec 入门非常简单。InSpec 包含在 Chef Devel­opment Kit (Chef DK) 中,也可以从 Chef 下载网站 (downloads.chef.io/inspec) 下载适用于各种平台的程序包。下载并安装程序包后,便可以开始编写符合性规则。(请注意,安全团队经常使用的符合性规则可选名称是审核控件。)


了解格式后,就可以轻松编写 InSpec 规则。所有规则均以资源开头。资源是要测试的配置项。例如,下面展示了使用 windows_feature 资源的 InSpec 规则:


describe windows_feature('DHCP Server') doit { should_not be_installed }
end


windows_feature 资源声明 Windows 功能的名称,并进行测试来确定其是否与特定配置相符。在此示例中,规则测试的是 DHCP 服务器是否未安装。


网络的许多标准组成部分都有对应的资源,如文件、目录、用户、组和注册表项。有关完整列表,可以参阅 bit.ly/2n3ekZe 上的 InSpec 文档。还可以使用自己的资源轻松扩展 InSpec,从而检查可能开箱即不支持或特定应用程序专用的配置项。


添加元数据


使用 InSpec,可以添加符合性规则的相关元数据。元数据有助于关联测试与具体的法规或安全要求。符合性要求历来都会以文档、电子表格或其他一些无法执行操作的格式发布。这些官方符合性文档中的信息非常重要,因为此类信息可以为管理员提供上下文,让其了解符合性策略如此重要的原因所在,但此类信息通常不便于获取。


图 2 中的示例展示了将此类信息作为元数据包含在内的 InSpec 规则。


图 2:InSpec 示例(其中包含符合性规则的元数据)

control 'sshd-8' doimpact 0.6title 'Server: Configure the service port'desc 'Always specify which port the SSH server should listen to.Prevent unexpected settings.'tag 'ssh','sshd','openssh-server'tag cce: 'CCE-27072-8'ref 'NSA-RH6-STIG - Section 3.5.2.1',url: 'https://www.nsa.gov/ia/_files/os/redhat/rhel5-guide-i731.pdf'describe sshd_config doits('Port') { should eq('22') }end
end


此示例针对的是名为 ssh-8 的规则(或控件)。影响力、标题和说明字段定义了描述规则的重要性、用途和说明的元数据。标记字段包含可选信息,引用字段引用外部文档。


说明字段反映了包含规则的代码块的开头。测试中的资源是 sshd_config,这是 Linux 和 Unix 平台上的 OpenSSH 守护程序。规则测试的是 SSH 服务器是否侦听端口 22。


需要注意以下三个要点。首先,如果没有元数据,规则就会被孤立,并缺少上下文。其次,所有相关信息均包含在规则之中。无需与其他文档进行核对。最后,InSpec 语言非常易于阅读。虽然利益干系人(如法律人员)可能不是程序员,但可以理解规则测试的内容,并能通过元数据了解此规则存在的原因及其审核的要求。他们甚至可能想要提交自己的规则。


使用开放源代码配置文件


为了方便操作,InSpec 提供了许多开放源代码配置文件,其中已包含所有相关规则和元数据。例如,有 DevSec Linux 基线配置文件和 DevSec Apache 基线配置文件。可以从 bit.ly/2mBVXNr 下载这些配置文件。


InSpec 提供的许多开放源代码配置文件均以行业标准 Internet 安全中心 (CIS) 系统安全基准为依据。虽然 CIS 基线是不错的入手级配置文件,但可能需要对它们进行修改来满足自己特定的符合性需求。使用 InSpec,可以创建自己的配置文件,并能继承其他配置文件中的规则。InSpec 还允许忽略配置文件中的规则。这一点非常有用,因为这样便无需直接修改 InSpec 提供的开放源代码配置文件。可以通过继承所需的开放源代码配置文件创建自己的配置文件,然后忽略不适用的规则。当有新发布的开放源代码配置文件时,只需更新你的开放源代码规则,而无需修改自定义规则。


扫描主机


InSpec 使用客户端服务器模型。也就是说,可以通过集中式工作站审核远程系统。还可以视需要允许让 InSpec 扫描作为持续自动化系统(如 Chef Automate (chef.io/automate))的一部分运行。本文的后面部分中有关于此做法的简单示例。


必须具备目标系统(要测试的服务器)和符合性配置文件(一组用于测试目标系统的规则),才能运行符合性扫描。对于此示例,目标系统是 Windows Server,我将使用 CIS 定义的 Dev-Sec Windows 基线(存储在 GitHub 存储库中)。图 3 中的示例展示了 InSpec 运行。


图 3:InSpec 运行示例


如果查看结果,便会发现运行结果指明有许多配置设置不符合 CIS 符合性基线的要求。值得注意的是,测试的服务器是主要云服务提供商提供的默认 Windows Server 2016 映像,因此可以通过 InSpec 立即了解你的网络与公司安全策略的符合程度。


如果查看第一个未通过测试的实际 InSpec 规则 cis-­enforce-password-history-1.1.1,便可以了解如何将此规则转换成行动依据:


control 'cis-enforce-password-history-1.1.1' doimpact 0.7title '1.1.1 Set Enforce password history to 24 or more passwords'desc 'Set Enforce password history to 24 or more passwords'describe security_policy doits('PasswordHistorySize') { should be >= 24 }end
end


测试未通过是因为策略要求至少有 24 个密码历史记录条目,但实际上根本就没有保留任何历史记录。显然,必须更改当前配置设置,才能符合此规则。


将 InSpec 和自动发布管道结合使用


虽然 InSpec 本身有助于管理系统符合性,但 InSpec 也可以作为一系列自动测试运行(即作为标准发布管道的一部分执行)。可以轻松添加 InSpec 测试,作为符合性质量检验关。在此部分中,我将结合使用 InSpec 和 Chef Automate。


Chef Automate 是用于管理和部署基础结构和应用程序的集成解决方案。它依赖用于基础结构自动化的开放源代码产品(包含 InSpec 和 Chef)基础。Chef Automate 提供了用于管理更改的自动化管道,所含功能可确保呈现这些更改。


借助 Chef Automate,不仅可以根据需要运行 InSpec 符合性测试,还能在仪表板上查看结果并更正问题。还可以在需要时生成审核报告。


例如,修补程序管理是 IT 安全的最重要方面之一。能够发现并升级过时系统,这一点至关重要。大多数监管框架(如支付卡行业数据安全标准 (PCI DSS))都要求这一点。为了确保系统是最新的,可以使用 Chef Automate 管理从初始识别到更新的整个流程。


首先,可以扫描系统,以确定系统是否符合策略且软件是否是最新的。你会收到指明基础结构状态的报告。图 4 中的示例展示了此类报告。报告根据网络中服务器与符合性要求的符合程度显示了这些服务器的状态。


图 4:符合性报告示例


收到此报告后,便可以使用 Chef DK 生成更新程序,然后在将其部署到生产中之前对其进行本地测试。Chef DK 包含创建和测试代码所需的全部工具。


认为更改没有问题后,可以通过 Chef Automate 管道发送更改,从而部署更新程序。管道包含测试更改并确保更改能够生效的各个阶段。管道内有两个手动检验关。一个用于代码评审,另一个用于将代码发送到发布环境。可以在这两个检验关或其中之一嵌入符合性和安全管理人员,从而确保这两个检验关能够在发布流程中积极发挥作用。


最后,当更改通过管道中的所有阶段时,可以将这些更改发送到 Chef 服务器。然后,Chef 服务器可以开始更新节点。通过 Chef Automate,可以了解在部署这些更改后基础结构中发生的所有情况。


通过 InSpec 自动执行符合性测试


印度最大的银行之一已开始在其银行业务部门使用 InSpec,此部门负责处理银行的大部分交易。符合性对其尤为重要。此部门大约有 500 台 HP-UX 服务器,这些服务器构成了其开发、测试和生产环境。


当然,这家银行必须遵守许多法律和安全准则,相关团队每月都会进行检查,以确保其服务器合规。检查大约有 100 项,在使用 InSpec 之前,这些检查均手动执行。此流程非常难执行。相关团队必须登录每台计算机,检查配置设置,提供书面结果,然后记录在册。完成一项检查大约需要 5 分钟,因此仅审查一台服务器就需要大约 8 小时。


在相关团队开始使用 InSpec 自动执行符合性测试后,影响明显可见。只需几分钟即可生成整个扫描结果。相关团队可以了解合规和不合规的服务器台数,并能根据这些信息快速做出决策。审查一台服务器曾经需要 500 分钟,现在只需 2 分钟。


此外,使用 InSpec,还更容易满足银行审计的需求。有时,IT 审计会要求检查特定计算机的状态,而信息检索速度非常缓慢。团队成员必须手动运行脚本,然后获取输出并使其适合生成报告。现在,只需单击一下,相关团队即可立即向审计展示已执行的检查。


此外,InSpec 不仅人工可读,还简单易学。大多数安全和审计服务供应商都使用二进制格式,而且工具很难使用。在看到 InSpec 后,银行团队成员认为他们可以在几天之内轻松学会,因为其学习曲线非常短。(有关详情,请访问“Learn Chef”网站,网址为 bit.ly/2mGthmE。)


总结


InSpec 是开放源代码测试语言,可方便你实现符合性即代码。将符合性表示成代码后,规则变得明确,所有团队成员都可以理解。开发者知道自己应该符合哪些标准,审计也清楚地知道测试中的内容。借助 InSpec,可以将文档和人工核对清单替换为目标明确的程序测试。


还可以将符合性测试集成到开发管道中,然后自动执行安全策略符合性测试。按所需的频率运行测试,开始测试所有更改的符合性,然后在开发过程早期(在发布到生产环境中之前)捕获问题。




Michael Ducy 是 Chef 软件开放源代码产品市场营销部门的主管。他已使用、管理、推广开放源代码软件近 20 年之久。Ducy 曾担任众多技术角色,其中包括 Linux 系统工程师、IT 导师和售前工程师等。他一直热衷于与更广大的的社区进行交互,可以通过 Twitter @mfdii 与他联系。


衷心感谢以下技术专家对本文的审阅: Bakh Inamov、Adam Leff 和 Roberta Leibovitz

原文地址:https://msdn.microsoft.com/zh-cn/magazine/mt808501


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324435.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机专业毕业后能做什么工作?

众所周知,目前比较火的专业之一莫过于计算机专业了。在这个互联网时代,越来越多的人选择去学习计算机专业,可是你知道计算机专业毕业后都有哪些岗位可选择吗?各个岗位的工作任务主要是什么?以下是对于计算机专业中各个…

什么是 binlog

转载自 什么是 binlog 引言 为什么写这篇文章? 大家当年在学MySQL的时候,为了能够迅速就业,一般是学习一下MySQL的基本语法,差不多就出山找工作了。水平稍微好一点的童鞋呢还会懂一点存储过程的编写,又或者是懂一点索引的创建…

[信息安全] 4.一次性密码 amp;amp;amp;amp; 身份认证三要素

在信息安全领域,一般把Cryptography称为密码,而把Password称为口令。日常用户的认知中,以及我们开发人员沟通过程中,绝大多数被称作密码的东西其实都是Password(口令),而不是真正意义上的密码。…

干货!sqlserver数据库所有知识点总结整理,含代码(挺全的)

01T-SQL案例整理已知有一个表:该表的字段有:id,name,date,gradeid,email,表名为table_name,按要求实现下面内容。1.插入一条记录:insert into table_name values (1,刘世豪,2017-10-21,1,666qq.com)2.将学号是1的学生姓名修改成张…

深入源码分析Java线程池的实现原理

转载自 深入源码分析Java线程池的实现原理 程序的运行,其本质上,是对系统资源(CPU、内存、磁盘、网络等等)的使用。如何高效的使用这些资源是我们编程优化演进的一个方向。今天说的线程池就是一种对CPU利用的优化手段。 网上有…

“桌面日历”记录的事件居然是看某某视频……

某年某月某下午,正在激情澎湃的在讲台上讲课,忽发现医学生缓缓的将右手举起来,见状,不用想,他一定有问题,嗯……要问我。于是,紧走几步下去,问他怎么了,他说他的某某功能…

开源个.NetCore写的 - 并发请求工具PressureTool

本篇和大家分享的是一个 并发请求工具,并发往往代表的就是压力,对于一些订单量比较多的公司这种情况很普遍,也因此出现了很多应对并发的解决方案如:分布式,队列,数据库锁等; 对于没有遇到过或者…

浅析DNS域名解析过程

转载自 浅析DNS域名解析过程 对于每一个HTTP请求发起过程中,都有很重要的一个步骤——DNS解析,本篇文章将跟着DNS解析过程来分析域名是如何解析的。 一、DNS域名解析步骤 下图是DNS域名解析的一个示例图,它涵盖了基本解析步骤和原理。 下…

最好的方法,是为你们量身定制!

昨天还和佟老师在讨论3班的学习情况,整体来说,学习氛围还是比较好的。由于近几天各种事纠结在一块儿,本来想给三班的学生制作一个提升计划,一直都腾不出来手。今天,终于抽了一点点时间,在原来互帮互助计划的…

Entity Framework Core 命名约定

注意:我使用的是 Entity Framework Core 2.0 (2.0.0-preview2-final)。正式版发布时,功能可能存在变动。Entity Framework 迁移允许从模型生成数据库,这意味着必须从类名和属性名生成数据库对象的名称。对于大多数人来说使用默认名称是没有问…

ZOJ1654-Place the Robots【最大匹配,图论】

正题 大意 一个n*m个地方,有墙,草地和空地。在空地可以放机器人,机器人会将看到的其他机器人 [河蟹] 掉。他不能隔墙看。求最多能放多少个机器人。 解题思路 这里用一种奇特的构图方法, (盗一下ppt里的图&#xff0…

彻底理解JVM常考题之分级引用模型

转载自 彻底理解JVM常考题之分级引用模型 本文通过探析Java中的引用模型,分析比较强引用、软引用、弱引用、虚引用的概念及使用场景,知其然且知其所以然,希望给大家在实际开发实践、学习开源项目提供参考。 Java的引用 对于Java中的垃圾…

越优秀的人越努力,越努力的人越幸运!

昨日晚间,学校值班,在楼道里面巡查几遍之后发现无异常情况,接着就去值班室中打开电脑忙自己的事。过了没一会儿,3班三学生去找我了,对我说,最近班里的学习情况不是太好,部分学生上课容易打盹&am…

SOA和微服务之间的区别

近几年,我们有很多文章对SOA和微服务之间的不同点和相似点进行了分析。有些人认为SOA有很多地方是值得微服务学习的,而有些人则认为区别对待微服务和SOA会更好。而Neal Ford认为,将单体迁移到面向服务的架构要比迁移到微服务来得容易。关于选…

考研生的努力程度是有多恐怖!

2021年全国研究生招生考试在12月26日开始,不过我没有参加。早就听闻考研生是多么多么的努力,今日一见,果然名不虚传,在这之前他们是有多努力我不知道,但是今天我所见到他们努力的程度,可以用恐怖来形容。偶…