IaC Security入門 ~tfsecを用いたTerraformファイルのセキュリティチェック~

2023年03月14日 火曜日


【この記事を書いた人】
ちひろ

2018年新卒入社し、SOCにてインフラ管理を担当。その後、マルウェア解析や検証業務などに従事。2022年度からは、社内のSREチームにて兼務を開始。主な保持資格は、CISSP, OSCP, GREM, GXPN, RISS, CKA, CKSなど。バイナリを読むのが好きで、一番好きな命令はx86の0x90(NOP命令)。

「IaC Security入門 ~tfsecを用いたTerraformファイルのセキュリティチェック~」のイメージ

はじめに

Infrastrucutre as Codeは、インフラの構成情報をコードとして管理するという取り組み・概念です。最近、といっても結構前からですが、このコード自体のセキュリティもチェックしようという動きがあります。それは、IaC Securityと呼ばれます。今回は、IaC Securityの入門として、Terraformを題材にセキュリティチェックを行うことができるtfsecを紹介します。

普段SOCでマルウェア解析をしている私は、兼務として社内のSREチームで働いています。兼務の中でTerraformに触る機会が増え、名前や概念は知っているものの使ったことなかったtfsecを使ってみました。やはりツールというものは知っているだけではあまり意味がなく、実際に使ってみて活用方法、良し悪しを自分なりに解釈していくことが大事だと思います。tfsec自体はすでに昔からあるツールですが、本記事がきっかけとなり知る人が増え、活用していただけると幸いです。

tfsecとは

tfsecとは、コンテナイメージスキャナTrivyなどでも知られるAqua Security社が管理しているOSSです。今後機能は、Trivyに集約されていくそうですが、現在はまだ異なるものとして存在しています。tfsecは、tfファイルのStatic Analysisをしてくれるツールなため、Terraformを動作させることなく、設定のセキュリティ的にいけていない部分を検査してくれます。この、Static Analysisという性質は、Dynamic Analysisよりも早く動かすことができたり、Terraform自体の動作環境を必要としないという観点からCI/CDパイプラインなどに組み込むことにも適しています。たとえば、GitHub Actionsなどでチェックすることで、DevSecOpsを実現することができます。

tfsecを使ってみる

では、実際の実行の様子を紹介します。シンプルな使い方としては、コマンドライン上で「tfsec .」と入力するだけです。これで、カレントディレクトリに存在するtfファイル群を走査して解析してくれます。下記の結果は、Azure上でインターネット公開してしまっているContainer(Azure Storageサービス用語で、FSでいうフォルダのようなものです。)があることを示唆しています。

tfsecの実行結果

More Informationの部分で、Aqua Security社の公開されているドキュメントへのリンクがあり、詳細なアクションを確認することができます。具体的なSecure Exampleが載っている点は、非常に便利だと思います。今回の場合だと、「container_access_type = “private”」とすることがセキュアな例だと紹介されています。
https://aquasecurity.github.io/tfsec/v1.28.1/checks/azure/storage/no-public-access/

意図した検知ルールの無視設定

次に、さまざまな理由で意図的に行っているが、検知されてしまうため、ルールを無視したくなった時の方法を紹介します。先の例であげた、Azure StorageのContainerの公開がが意図したものである場合を例に考えます。下記のコードのように、検知している箇所の前の行(もしくは、末尾)に、「tfsec:ignore:検知ID」のフォーマットでコメントを記載します。

tfsecのルールを無視する例

カスタムルールの作成

tfsecは、既存で提供されているルール以外にも、自分でルールを作ることができるカスタムルールと呼ばれる機能が備わっています。これは、YAMLファイルで定義します。下記は、Azure環境において、リソースに「owner」と呼ばれるキーのタグが付いているかを検知するためのカスタムルールの例です。説明やエラーメッセージ、解決策なども自分で定義することができます。組織にとってわかりやすい形で、規則を持たせて書いていくと良いルールを作っていくことができそうです。

---
checks:
- code: CUS001
  description: Custom check to ensure the Owner tag is applied to resources
  errorMessage: Owner tag was missing
  resolution: Add the Owner tag
  matchSpec:
    action: contains
    name: tags
    value: owner
  requiredTypes:
  - resource
  requiredLabels:
  - azurerm_*
  severity: ERROR

おわりに

今回は、IaC Securityの入門と題してTerraformを題材とし、tfsecを紹介しました。脆弱な設定を検知する例、そしてそれが意図した場合に検知から除外する方法、そしてカスタムルールの例を紹介しました。同様のツールはいくつか存在し、今ではTrivyでもチェックを行うことができたり、checkcovなども代表的なツールとして知られています。これらは、Terraformだけではなく、さまざまなものを解釈し、セキュリティチェックすることができます。有する機能が異なるため、いくつかツールを試しながら、欲しい要件のものを探すとよいと感じました。

ちひろ

2023年03月14日 火曜日

2018年新卒入社し、SOCにてインフラ管理を担当。その後、マルウェア解析や検証業務などに従事。2022年度からは、社内のSREチームにて兼務を開始。主な保持資格は、CISSP, OSCP, GREM, GXPN, RISS, CKA, CKSなど。バイナリを読むのが好きで、一番好きな命令はx86の0x90(NOP命令)。

Related
関連記事