terraform 보안코드 분석

tfsec

https://aquasecurity.github.io/tfsec/v1.10.0/

https://github.com/aquasecurity/tfsec

Terraform 코드용 정적 분석 보안 스캐너입니다.

Install with brew/linuxbrew

brew install tfsec

linux

sudo wget https://github.com/aquasecurity/tfsec/releases/download/v1.10.0/tfsec-linux-amd64 -O /usr/local/bin/tfsec ; sudo chmod 755 /usr/local/bin/tfsec

terraform 소스가 있는 곳에서 tfsec을 실행하면 된다. 사전에 정의한 RULE에 따라서 코드를 분석하여 알려준다.

$ tfsec Result #1 CRITICAL Security group rule allows ingress from public internet. ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── tfsec_test.tf Line 11 ───────┬─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 6 │ ingress { 7 │ description = "TLS from VPC" 8 │ from_port = 443 9 │ to_port = 443 10 │ protocol = "tcp" 11 │ cidr_blocks = ["0.0.0.0/0"] ##tfsec:ignore:aws-vpc-no-public-ingress-sgr 12 │ } ───────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── ID aws-vpc-no-public-ingress-sgr Impact Your port exposed to the internet Resolution Set a more restrictive cidr range More Information - https://aquasecurity.github.io/tfsec/v1.10.0/checks/aws/vpc/no-public-ingress-sgr/ - https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/security_group_rule#cidr_blocks ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Visual Studio Code extension 을 제공한다. 코드를 짜면서 바로 확인을 할 수 있다. https://marketplace.visualstudio.com/items?itemName=tfsec.tfsec

github actoins 를 제공하며 Github Security alerts 와 통합을 할 수도 있다. 그러면 github security tab에서 결과를 볼 수 있다.

https://github.com/aquasecurity/tfsec-pr-commenter-action

체크하여 나오는 결과를 무시하려면 tfsec:ignore:<rule> 형태의 주석을 달면 된다. cli로 실행시에는 옵션을 이용하여 조정하면 된다.

 

AWS check 항목 : https://aquasecurity.github.io/tfsec/v1.10.0/checks/aws/

terrascan

https://github.com/accurics/terrascan

Terrascan은 Infrastructure as Code용 정적 코드 분석기입니다. Terrascan을 사용하면 다음을 수행할 수 있습니다.

  • 잘못된 구성에 대한 코드로서의 인프라를 원활하게 스캔합니다.

  • 상태 드리프트를 도입하고 안전한 상태로 되돌릴 수 있도록 하는 구성 변경에 대해 프로비저닝된 클라우드 인프라를 모니터링합니다.

  • 보안 취약점 및 규정 준수 위반을 감지합니다.

  • 클라우드 네이티브 인프라를 프로비저닝하기 전에 위험을 완화하십시오.

  • 로컬에서 실행하거나 CI\CD와 통합할 수 있는 유연성을 제공합니다.

 

주요 특징들

 

AWS policies https://runterrascan.io/docs/policies/aws/

 

설치하고 terrascan scan 명령을 실행하면 되며 기본은 Terraform 코드를 스캐닝한다.

기타

https://www.revolgy.com/insights/blog/complete-guide-for-picking-the-right-tool-for-terraform-security-code-analysis

아래 프로그램으로 비교하고 있음.

checkov Snyk terrascan tfsec

 

위 문서에서 보안에 문제가 있는 terraform 코드 예제 : GitHub - bridgecrewio/terragoat: TerraGoat is Bridgecrew's "Vulnerable by Design" Terraform repository. TerraGoat is a learning and training project that demonstrates how common configuration errors can find their way into production cloud environments.

 

참고

AWS Compliance Scanning Tool

Terraform Registry CIS Amazon Web Services Foundations v1.4.0AWS Foundational Security Best Practices v1.0.0 을 기반으로 하는 terraform 코드