FJCT Tech blog

富士通クラウドテクノロジーズ公式エンジニアブログです

富士通クラウドテクノロジーズ

FJCT/Tech blog

ニフクラに IaC スキャンしてみた

この記事は富士通クラウドテクノロジーズ Advent Calendar 2023の1日目の記事です。


2020年からニフクラ用のTerraform NIFCLOUD Providerを提供させていただいており、多くの方に利用いただいています。
こういったIaCは一括でインフラを構築出来たり、コードベースなためレビューしやすいなどメリットがあるものの、少なからずデメリットもあります。
設定ファイルをミスやセキュリティの考慮漏れなどがある場合、そういった問題がある状態でインフラが構築されてしまいます。
また昨今、上記のようなクラウドの設定ミスによるセキュリティ被害なども数多く見受けられます。

こういったセキュリティ被害にあわないよう、構築前にテストを行い、レビューの抜け漏れを防ぐことが重要になってきます。
今回は Terraform の IaC スキャンで使われることが多い Trivy と KICS に関して実例を踏まえて紹介します。

Trivy とは

Trivyはコンテナイメージやアプリケーションの依存ライブラリの脆弱性等をスキャンできるオープンソース脆弱性診断ツールです。
それらに加えて、TerraformのIaC設定ファイルについてもスキャンすることができ、クラウドの構成における脆弱性をチェックし設定ミスやセキュリティのベストプラクティスに沿っていない構成などを検知することが可能です。
このIaCスキャンでニフクラの Terraform のチェックすることが可能です。
例えば、「サーバーにファイアウォールが設定されていない」こともこちらで検知することができます。

Trivy をニフクラの IaC スキャンに使ってみた

初めに公式サイトの手順に沿って、Trivyをインストールをします。
https://aquasecurity.github.io/trivy/latest/getting-started/installation

Terraform の .tf ファイルをスキャンするには以下のようにコマンドを実行します。

trivy config <.tf ファイルのパス>

試しに以下のようなTerraformの設定ファイルをスキャンしてみます。

## main.tf
terraform {
  required_providers {
    nifcloud = {
      source = "nifcloud/nifcloud"
    }
  }
}

resource "nifcloud_router" "router" {
  name                  = "router"
  availability_zone = "east-11"
  type                    = "small"
  accounting_type = "2"

  network_interface {
    network_id = "net-COMMON_GLOBAL"
  }
}

スキャンした際の実行結果は以下のようになります。

$ trivy config main.tf

2023-11-30T20:02:50.736+0900    INFO    Misconfiguration scanning is enabled
2023-11-30T20:02:50.736+0900    INFO    Need to update the built-in policies
2023-11-30T20:02:50.736+0900    INFO    Downloading the built-in policies...
44.66 KiB / 44.66 KiB [----------------------------------------------------------------------------------------------------------------------------------] 100.00% ? p/s 0s2023-11-30T20:02:52.699+0900    INFO    Detected config files: 2

main.tf (terraform)

Tests: 2 (SUCCESSES: 1, FAILURES: 1, EXCEPTIONS: 0)
Failures: 1 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 1)

CRITICAL: Router does not have a securiy group.
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════Need to add a security group to your router.

See https://avd.aquasec.com/misconfig/avd-nif-0016
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── main.tf:9-18
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   9 ┌ resource "nifcloud_router" "router" {
  10 │   name                  = "router"
  11 │   availability_zone = "east-11"
  12 │   type                    = "small"
  13 │   accounting_type = "2"
  14 │ 
  15 │   network_interface {
  16 │     network_id = "net-COMMON_GLOBAL"
  17 │   }
  18 └ }
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

こちらは「CRITICAL: Router does not have a securiy group.」とあるように、ルーターファイアウォールが設定されていないという指摘がされています。
そのため、例の設定ファイルを以下のように変更することで脆弱性が検知されなくなります。

## main.tf
terraform {
  required_providers {
    nifcloud = {
      source = "nifcloud/nifcloud"
    }
  }
}

resource "nifcloud_router" "router" {
  name                  = "router"
  availability_zone = "east-11"
  type                    = "small"
  security_group    = "fw" ##ファイアウォールを設定
  accounting_type = "2"

  network_interface {
    network_id = "net-COMMON_GLOBAL"
  }
}

KICS とは

KICSはCheckmarx社が開発したオープンソースの IaC 静的解析ツールです。
こちらは Terraform の他、Kubernetes、Docker、Ansible、Helm などに使用することが可能です。
KICS は公式が Docker イメージを提供してくれているため、以下のようなコマンドで実施することが可能です。

docker run -t -v {path_to_host_folder}:/path checkmarx/kics:latest scan -p /path/{filename}.{extension} -o "/path/"

以下は KICS のテストファイルの実行結果の一部ですが、以下のような出力の指摘がされるようになります。

AD Admin Not Configured For SQL Server, Severity: HIGH, Results: 1
Description: The Active Directory Administrator is not configured for a SQL server
Platform: Terraform
Learn more about this vulnerability: https://docs.kics.io/latest/queries/terraform-queries/azure/a3a055d2-9a2e-4cc9-b9fb-12850a1a3a4b

        [1]: ../../path/web-db/assets/queries/common/passwords_and_secrets/test/positive17.tf:1

                001: resource "azurerm_sql_server" "example" {
                002:   name                         = "kics-test"
                003:   resource_group_name          = azurerm_resource_group.example.name

Results Summary:
HIGH: 160
MEDIUM: 111
LOW: 89
INFO: 51
TOTAL: 411

KICS とニフクラの今後

KICS に関しては現在ニフクラのセキュリティルールのコントリビュートをしている途中ですので、まだニフクラに対しては十分にご利用していただくことはできません。
github.com
後日、ニフクラのセキュリティルールが完全に使用できるようになった際は、またニフクラ関連のブログにて告知をしたいと考えています。

終わりに

今回は Trivy でのニフクラの IaC スキャンの実例と KICS のニフクラの IaC スキャンの展望に関して、紹介させていただきました。
CI なども活用していただくことで、こういった IaC スキャンはインフラ構築前に自動にスキャンすることが可能になります。
ぜひみなさんもご活用してみてください!


この記事は富士通クラウドテクノロジーズ Advent Calendar 2023 の 1 日目の記事でした。

明日は @heriet さんが「smithy-rsでニフクラのRust SDKを生成を試す」記事を投稿してくださるようです。
smithyはニフクラが GitHub で提供している SDK でも使用されているものであり、自分も関心の高い話題です。
お楽しみに!

参考

blog.pfs.nifcloud.com