Security Content Automation Protocol (SCAP) スキャン
Security Content Automation Protocol (SCAP) スキャン
ITシステムの構成コンプライアンスはシステムハードニングの重要な一部であり、ほとんどのセキュリティ認証およびサードパーティ監査の一部となっています。Security Content Automation Protocol (SCAP) は、これらの構成コンプライアンスチェックを自動化し、修正策を特定するための一般的な方法です。
背景
Security Content Automation ProtocolはNISTが管理する米国標準であり、特定の標準を使用して情報システムの自動化された脆弱性管理、計測、およびポリシーコンプライアンスを実現する方法です。最も多く使用されるのはコンプライアンススキャン、つまりCISやPCI-DSSのような特定のコンプライアンス標準に対してITシステムを計測する用途です。
OpenSCAPはSCAPスキャンのための非常に人気の高いオープンソースエコシステムで、Red Hatによって維持されています。SCAPスキャンと評価を実施する最も一般的な方法です。
SCAPモジュール
各SCAP(Security Content Automation Protocol)モジュールには、セキュリティチェック、評価、脆弱性管理の自動化を支援する特定の機能があります。主要なSCAPモジュールとそれぞれの役割を以下に示します。
1. XCCDF (Extensible Configuration Checklist Description Format)
- 目的: XCCDFはセキュリティチェックリスト、ベンチマーク、構成ガイダンスの作成に使用されます。
- 機能: ルール、チェック、修正ガイダンスを含むXMLドキュメントとしてセキュリティポリシーを定義します。XCCDFファイルはセキュリティプロファイルを表現するように構成されており、各プロファイルには構成とコンプライアンスのためのルールが含まれます。
- 使用例: SSH設定がベストプラクティスに沿っていることを検証するためのベンチマークはXCCDFファイルで定義されます。
2. OVAL (Open Vulnerability and Assessment Language)
- 目的: OVALはシステム構成情報、状態、および脆弱性データを表現する標準的な方法を提供します。
- 機能: OVAL定義は特定の構成、パッチ、または脆弱性に対するセキュリティチェックを記述します。これによりスキャナは特定の条件が満たされているかを確認することで、システムのコンプライアンスを評価し脆弱性を発見できます。
- 使用例: OVALチェックは、特定のバージョンのパッケージがインストールされているか、または構成ファイルに特定の値が含まれているかを確認できます。
3. CPE (Common Platform Enumeration)
- 目的: CPEは情報技術システム、プラットフォーム、アプリケーションを識別するための標準化された命名スキームです。
- 機能: CPE名は特定のプラットフォーム、オペレーティングシステム、またはアプリケーションを一意に識別し、SCAPツールが対象システムに基づいて関連するチェックを適用できるようにします。
- 使用例: CPE識別子は、Red Hat Enterprise Linux 8固有のチェックを適用するために、システムを「cpe:/o:redhat:enterprise_linux:8」と指定できます。
4. CVE (Common Vulnerabilities and Exposures)
- 目的: CVEは公知の脆弱性に対する一意の識別子を提供します。
- 機能: 各CVE IDは特定の脆弱性を指し、影響を受けるソフトウェアと問題の性質を記述します。CVE識別子はデータベースおよびセキュリティツール全体で脆弱性を追跡するのに役立ちます。
- 使用例: CVE-2021-34527 (PrintNightmare) は特定のWindows脆弱性を指す識別子であり、セキュリティツールがスキャンとレポートでこれを認識・参照できるようにします。
これらのモジュールがどのように連携するか
- XCCDFは何をチェックすべきかを定義し、修正ガイダンスを提供します。
- OVALはシステム状態と構成を評価することで実際のチェックを実行します。
- CPEは対象システムを識別して、正しいXCCDFおよびOVALルールを適用します。
- CVEはセキュリティコンテンツとスキャン結果で特定の脆弱性を参照する方法を提供します。
これらのモジュールが集合的に、SCAPツールがさまざまなシステムとプラットフォームにわたって一貫した自動化されたセキュリティ評価を実行できるようにします。
これがGitLabシステムにどう適用されるか
GitLabでは主にコンテナを通じて本番アプリケーションをデプロイしています。OpenSCAPはさまざまなデプロイオプションに対して実行できますが、主にオペレーティングシステムとコンテナイメージに対して実行されます。私たちはOpenSCAPをインフラストラクチャのオペレーティングシステムとコンテナイメージに対して実行し、コンプライアンスを検証しています。
OpenSCAPは単独ではコンテナイメージを評価できず、評価にはPodmanのようなコンテナエンジンが必要です。
OpenSCAPコンプライアンススキャンを始める
- 目的に基づいてモジュールを選択(XCCDF、OVAL、CPE、CVE)
- SCAPコンテンツを入手(たとえば、XCCDFファイルは
ssgファミリーのパッケージの一部です) - 標準を決定(PCI-DSS、CIS、CUIなど)
- SCAPコンテンツで関連するOS標準ファイルを確認
- RedHat 9の例:
/usr/share/xml/scap/ssg/content/ssg-rhel9-ds-1.2.xml
- RedHat 9の例:
- コンプライアンススキャンの場合、使用したい標準のプロファイル名を取得
- SCAPコンテンツファイル内のリストは
oscap info [filename]を使って確認できます- 例:
oscap info /usr/share/xml/scap/ssg/content/ssg-rhel9-ds-1.2.xml
- 例:
- SCAPコンテンツファイル内のリストは
- コマンドを組み立てて、システムまたはコンテナイメージに対して実行
- 重要:
oscap-podmanはrootとしてのみ実行可能(sudo oscap-podmanまたはsudo su -してからoscap-podman)であり、podmanはユーザー間でコンテナイメージと構成を分離するように設計されています。oscap-podmanがコンテナイメージを参照できるよう、コンテナを_rootユーザーとして_またはsudoを使ってプルする必要があります。
コンテナイメージの例: oscap-podmanを使ってUBI9-minimalイメージに対してRedHat 9のCIS L2ベンチマークを実行。
# COMMAND CONTAINER_IMAGE MODULE MODE --report DESIRED_REPORT_LOCATION --profile STANDARD_FROM_5 LOCATION_OF_SCAP_CONTENT_FILE
oscap-podman c8d01adc0698 xccdf eval --report /tmp/ubi9-min-scap-cis-2.html --profile xccdf_org.ssgproject.content_profile_cis /usr/share/xml/scap/ssg/content/ssg-rhel9-ds-1.2.xml
# This evaluates the container image c8d01adc0698 against the CIS benchmark that exists in ssg-rhel9-ds-1.2.xml and outputs the file to /tmp/
実践的なステップ
私たちは以下を行います。
- Ubuntu 24.04システム上にOpenSCAPをセットアップ
- RedHat 9 UBIイメージをCISベンチマークに対して評価
システムの準備
Ubuntu 24.04システム上で:
- Podmanをインストール(24.04ではデフォルトの
aptリポジトリに含まれています) openscap-scanner openscap-utils openscap-common openscap-docをインストールssg-base ssg-nondebianをインストール- SCAPプロファイルについて
/usr/share/xml/scap/ssg/contentを確認- これらは
ssg-baseとssg-nondebianによってインストールされます
- これらは
- セットアップを簡単にするためのブートストラップスクリプトがこちらにあります。
SCAP評価コマンド
# Become root so the command works (alternatively use sudo for each command)
sudo su -
# Pull the latest container image
podman pull registry.access.redhat.com/ubi9/ubi
# check for the container image ID
podman image ls
# grab the container image ID and run your command
oscap-podman a674bd5e68d9 xccdf eval --report /tmp/ubi9-min-scap-cis-2.html --profile xccdf_org.ssgproject.content_profile_cis /usr/share/xml/scap/ssg/content/ssg-rhel9-ds-1.2.xml
# Open the final HTML file in your brower
その他のポイント
- OpenSCAPはさまざまな標準とフォーマットに使用できます。たとえば、米国国防総省のSecurity Technical Implementation Guides (STIGs)は公開されている中で最も厳格な構成標準の1つです。STIGsはOpenSCAPで使用できます。
- OpenSCAPはHTML以外にもさまざまな種類のレポートとスクリプトを生成できます。特定のシステムによっては、失敗を修正するために必要な正確なコマンドを生成できます。
- JSON出力が必要な場合は、このOSCAP-JSONツールがopenscapの標準出力を取り込んでJSONに変換します。ARMアーキテクチャを使用している場合は、
makeを使用してソースからビルドする必要があります。- 動作するサンプルスクリプトでは、oscap-jsonツールを使用してコンテナのリストからJSON SCAPレポートを生成しています。
参考資料
- RedHatのこのビデオ
- Red HatのOpenSCAPに関する記事
- OpenSCAPウェブサイト: https://www.open-scap.org/
ssgファミリーパッケージおよびその他のSCAPコンテンツのソース: https://github.com/ComplianceAsCode/content
bfd74782)