TerraGoat:一款针对Terraform的安全漏洞学习基础设施

admin 2022年3月2日07:34:15评论2 views字数 4907阅读16分21秒阅读模式

TerraGoat:一款针对Terraform的安全漏洞学习基础设施

 关于TerraGoat 

TerraGoat是一款专门针对Terraform的安全漏洞学习基础设施,TerraGoat中所有存在的安全漏洞都是软件开发人员故意留下的,可以更好地帮助广大研究人员深入学习和研究跟Terraform相关的安全漏洞。

TerraGoat是一个专门的学习和培训项目,它演示了很多跟Terraform相关的安全漏洞以及常见的错误配置,而且它能够带领研究人员寻找到一条渗透路径并进入目标云生产环境。

TerraGoat的设计目的是为了让DevSecOps(通过一套包含了人文、流程、技术的框架和方法,把安全能力无缝且柔和地嵌入现有开发流程体系,它有助于在开发过程早期而不是产品发布后识别安全问题,让每个人对信息安全负责,而不仅仅是安全部门。)能够设计并实施可持续的错误配置预防策略。它可以作为代码框架来测试策略,比如Bridgecrew&Checkov。

简而言之,TerraGoat提供了一个针对Terraform的安全基线训练场,可以用于实践云基础设施的安全开发最佳实践。

注意:TerraGoat将会在你的帐号中创建一个包含安全缺陷的AWS资源,请不要将TerraGoat部署到生产环境或任何包含敏感信息的AWS资源中。

 工具要求 

Terraform 0.12

AWS CLI

Azure CLI

 工具安装 

AWS配置

我们可以通过“TF_VAR_environment”参数在一个AWS帐号中部署多个TerraGoat实例。

首先,创建一个S3 Bucket后端来存储和获取Terraform的状态:

export TERRAGOAT_STATE_BUCKET="mydevsecops-bucket"export TF_VAR_company_name=acmeexport TF_VAR_environment=mydevsecopsexport TF_VAR_region="us-west-2"aws s3api create-bucket --bucket $TERRAGOAT_STATE_BUCKET     --region $TF_VAR_region --create-bucket-configuration LocationConstraint=$TF_VAR_region# Enable versioningaws s3api put-bucket-versioning --bucket $TERRAGOAT_STATE_BUCKET --versioning-configuration Status=Enabled# Enable encryptionaws s3api put-bucket-encryption --bucket $TERRAGOAT_STATE_BUCKET --server-side-encryption-configuration '{  "Rules": [    {      "ApplyServerSideEncryptionByDefault": {        "SSEAlgorithm": "aws:kms"      }    }  ]}'

接下来,使用下列命令来部署TerraGoat(AWS)即可:

cd terraform/aws/terraform init -backend-config="bucket=$TERRAGOAT_STATE_BUCKET" -backend-config="key=$TF_VAR_company_name-$TF_VAR_environment.tfstate" -backend-config="region=$TF_VAR_region"terraform apply

下列命令可以移除TerraGoat(AWS):

terraform destroy

我们还可以通过下列命令来创建多个TerraGoat AWS实例栈:

cd terraform/aws/export TERRAGOAT_ENV=$TF_VAR_environmentexport TERRAGOAT_STACKS_NUM=5for i in $(seq 1 $TERRAGOAT_STACKS_NUM)do    export TF_VAR_environment=$TERRAGOAT_ENV$i    terraform init     -backend-config="bucket=$TERRAGOAT_STATE_BUCKET"     -backend-config="key=$TF_VAR_company_name-$TF_VAR_environment.tfstate"     -backend-config="region=$TF_VAR_region"    terraform apply -auto-approvedone

删除多个TerraGoat AWS实例栈:

cd terraform/aws/export TF_VAR_environment = $TERRAGOAT_ENVfor i in $(seq 1 $TERRAGOAT_STACKS_NUM)do    export TF_VAR_environment=$TERRAGOAT_ENV$i    terraform init     -backend-config="bucket=$TERRAGOAT_STATE_BUCKET"     -backend-config="key=$TF_VAR_company_name-$TF_VAR_environment.tfstate"     -backend-config="region=$TF_VAR_region"    terraform destroy -auto-approvedone

Azure配置

我们可以通过“TF_VAR_environment”参数在一个Azure订阅帐号中部署多个TerraGoat实例栈。

首先,创建一个Azure存储帐号后端来存储和获取Terraform的状态:

export TERRAGOAT_RESOURCE_GROUP="TerraGoatRG"export TERRAGOAT_STATE_STORAGE_ACCOUNT="mydevsecopssa"export TERRAGOAT_STATE_CONTAINER="mydevsecops"export TF_VAR_environment="dev"export TF_VAR_region="westus"# Create resource groupaz group create --location $TF_VAR_region --name $TERRAGOAT_RESOURCE_GROUP# Create storage accountaz storage account create --name $TERRAGOAT_STATE_STORAGE_ACCOUNT --resource-group $TERRAGOAT_RESOURCE_GROUP --location $TF_VAR_region --sku Standard_LRS --kind StorageV2 --https-only true --encryption-services blob# Get storage account keyACCOUNT_KEY=$(az storage account keys list --resource-group $TERRAGOAT_RESOURCE_GROUP --account-name $TERRAGOAT_STATE_STORAGE_ACCOUNT --query [0].value -o tsv)# Create blob containeraz storage container create --name $TERRAGOAT_STATE_CONTAINER --account-name $TERRAGOAT_STATE_STORAGE_ACCOUNT --account-key $ACCOUNT_KEY

部署TerraGoat(Azure):

cd terraform/azure/terraform init -reconfigure -backend-config="resource_group_name=$TERRAGOAT_RESOURCE_GROUP"     -backend-config "storage_account_name=$TERRAGOAT_STATE_STORAGE_ACCOUNT"     -backend-config="container_name=$TERRAGOAT_STATE_CONTAINER"     -backend-config "key=$TF_VAR_environment.terraform.tfstate"terraform apply

移除TerraGoat(Azure):

terraform destroy

GCP配置

我们可以通过“TF_VAR_environment”参数在一个GCP项目中部署多个TerraGoat实例栈。

创建一个GCS后端来获取和存储Terraform状态:

在使用Terraform时,我们需要准备好一个服务帐号和相关的凭证。如果没有的话,则必须手动创建:

1、登录你的GCP项目,点击“IAM”->“Service Accounts”。

2、点击“CREATE SERVICE ACCOUNT”。

3、填写服务名称(比如说“terragoat”),然后点击“CONTINUE”。

4、授权服务帐号“Editor”角色,然后点击“CONTINUE”。

5、点击“DONE”即可。

创建凭证

1、登录你的GCP项目,点击“IAM > Service Accounts”,然后点击对应的服务帐号。

2、点击“ADD KEY > Create new key > JSON”,然后点击“CREATE”。此时将会从创建一个.json文件,然后下载到你的设备上的terraform/gcp目录中。凭证创建完成后,工具将会创建如下所示的BE配置文件:

export TF_VAR_environment="dev"export TF_TERRAGOAT_STATE_BUCKET=remote-state-bucket-terragoatexport TF_VAR_credentials_path=<PATH_TO_CREDNETIALS_FILE> # example: export TF_VAR_credentials_path=terragoat_credentials.jsonexport TF_VAR_project=<YOUR_PROJECT_NAME_HERE># Create storage bucketgsutil mb gs://${TF_TERRAGOAT_STATE_BUCKET}

部署TerraGoat(GCP):

cd terraform/gcp/terraform init -reconfigure -backend-config="bucket=$TF_TERRAGOAT_STATE_BUCKET"     -backend-config "credentials=$TF_VAR_credentials_path"     -backend-config "prefix=terragoat/${TF_VAR_environment}"terraform apply

移除TerraGoat(GCP):

terraform destroy

项目地址

https://github.com/bridgecrewio/terragoat

参考资料

https://bridgecrew.io/?utm_source=github&utm_medium=organic_oss&utm_campaign=terragoat

https://github.com/bridgecrewio/checkov/

https://slack.bridgecrew.io/?utm_source=github&utm_medium=organic_oss&utm_campaign=terragoat

TerraGoat:一款针对Terraform的安全漏洞学习基础设施

原文始发于微信公众号(FreeBuf):TerraGoat:一款针对Terraform的安全漏洞学习基础设施

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月2日07:34:15
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   TerraGoat:一款针对Terraform的安全漏洞学习基础设施https://cn-sec.com/archives/810148.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息