使用 InSpec 实现符合性即代码
法規符合性是每個企業必須面對的一個現實問題。同時,隨著改變業界格局的新技術以及客戶對數字服務的期望的出現,競爭壓力也隨之增加。各行業能否在快速交付新產品和服務的同時,仍然履行法規符合性義務?
回答是肯定的。解決方案就是將法規符合性嵌入軟件生產線,方法與嵌入其他特性(如汽車行業中的框架勁度或銀行應用程序中的往返響應時間)相似。
將符合性表示成代碼時,可以讓符合性成為部署流程不可或缺的一部分。如同系統配置已轉向基礎結構即代碼(例如 PowerShell Desired State Configuration 或 Chef)一樣,可以使用編程語言管理符合性。
借助 InSpec 這一開放源代碼項目,可以通過人工可讀和計算機可讀的語言定義符合性要求。編寫符合性要求代碼后,可以將它們作為自動測試來運行,從而審核系統。InSpec 提供本地代理以及完整的遠程測試支持。
InSpec 支持各種不同的平臺(從 Windows 到 Linux)。圖 1?列出了部分較為常見的平臺。(有關受支持平臺的完整列表,請訪問 InSpec 網站,網址為?inspec.io。)
圖 1:InSpec 支持的常見平臺列表
| 平臺 | 版本 |
| AIX | 6.1、7.1、7.2 |
| Mac OS X | 10.9、10.10、10.11 |
| Oracle Enterprise Linux | 5、6、7 |
| Red Hat Enterprise Linux(及變體) | 5、6、7 |
| Solaris | 10、11 |
| Windows | 7、8、8.1、10、2008、2008 R2、2012、2012 R2、2016 |
| Ubuntu Linux | |
| SUSE Linux Enterprise Server | 11、12 |
| OpenSUSE | 13.1、13.2、42.1 |
| HP-UX | 11.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 規則:
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,便可以了解如何將此規則轉換成行動依據:
測試未通過是因為策略要求至少有 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跨平臺或掃描二維碼關注
總結
以上是生活随笔為你收集整理的使用 InSpec 实现符合性即代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET Core API 版本控
- 下一篇: [信息安全] 4.一次性密码 amp;a