Terraform Security
Last updated
Last updated
Learn & practice AWS Hacking: Learn & practice GCP Hacking:
HashiCorp Terraform์ ์ฝ๋๋ก์์ ์ธํ๋ผ ๋๊ตฌ๋ก, ์ฌ๋์ด ์ฝ์ ์ ์๋ ๊ตฌ์ฑ ํ์ผ์์ ํด๋ผ์ฐ๋ ๋ฐ ์จํ๋ ๋ฏธ์ค ๋ฆฌ์์ค๋ฅผ ์ ์ํ ์ ์๊ฒ ํด์ค๋๋ค. ์ด๋ฌํ ํ์ผ์ ๋ฒ์ ๊ด๋ฆฌ, ์ฌ์ฌ์ฉ ๋ฐ ๊ณต์ ๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ผ๊ด๋ ์ํฌํ๋ก๋ฅผ ์ฌ์ฉํ์ฌ ์ธํ๋ผ์ ์ ์ฒด ์๋ช ์ฃผ๊ธฐ ๋์ ๋ชจ๋ ์ธํ๋ผ๋ฅผ ํ๋ก๋น์ ๋ํ๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. Terraform์ ์ปดํจํ , ์คํ ๋ฆฌ์ง ๋ฐ ๋คํธ์ํน ๋ฆฌ์์ค์ ๊ฐ์ ์ ์์ค ๊ตฌ์ฑ ์์๋ฟ๋ง ์๋๋ผ DNS ํญ๋ชฉ ๋ฐ SaaS ๊ธฐ๋ฅ๊ณผ ๊ฐ์ ๊ณ ์์ค ๊ตฌ์ฑ ์์๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
Terraform์ ํด๋ผ์ฐ๋ ํ๋ซํผ ๋ฐ ๊ธฐํ ์๋น์ค์์ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค (API)๋ฅผ ํตํด ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํฉ๋๋ค. ๊ณต๊ธ์๋ Terraform์ด ์ ๊ทผ ๊ฐ๋ฅํ API๊ฐ ์๋ ๊ฑฐ์ ๋ชจ๋ ํ๋ซํผ์ด๋ ์๋น์ค์ ์์ ํ ์ ์๋๋ก ํฉ๋๋ค.
Terraform์ ํต์ฌ ์ํฌํ๋ก๋ ์ธ ๊ฐ์ง ๋จ๊ณ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค:
์์ฑ: ์ฌ๋ฌ ํด๋ผ์ฐ๋ ๊ณต๊ธ์ ๋ฐ ์๋น์ค์ ๊ฑธ์ณ ๋ฆฌ์์ค๋ฅผ ์ ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ณด์ ๊ทธ๋ฃน๊ณผ ๋ก๋ ๋ฐธ๋ฐ์๊ฐ ์๋ ๊ฐ์ ์ฌ์ค ํด๋ผ์ฐ๋ (VPC) ๋คํธ์ํฌ์ ๊ฐ์ ๋จธ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๋ ๊ตฌ์ฑ์ ๋ง๋ค ์ ์์ต๋๋ค.
๊ณํ: Terraform์ ๊ธฐ์กด ์ธํ๋ผ์ ๊ตฌ์ฑ์ ๋ฐ๋ผ ์์ฑ, ์ ๋ฐ์ดํธ ๋๋ ์ญ์ ํ ์ธํ๋ผ๋ฅผ ์ค๋ช ํ๋ ์คํ ๊ณํ์ ์์ฑํฉ๋๋ค.
์ ์ฉ: ์น์ธ์ด ์ด๋ฃจ์ด์ง๋ฉด Terraform์ ๋ฆฌ์์ค ์ข ์์ฑ์ ์กด์คํ๋ฉฐ ์ ์๋ ์์ ์ ์ฌ๋ฐ๋ฅธ ์์๋ก ์ํํฉ๋๋ค. ์๋ฅผ ๋ค์ด, VPC์ ์์ฑ์ ์ ๋ฐ์ดํธํ๊ณ ํด๋น VPC์ ๊ฐ์ ๋จธ์ ์๋ฅผ ๋ณ๊ฒฝํ๋ฉด Terraform์ ๊ฐ์ ๋จธ์ ์ ํ์ฅํ๊ธฐ ์ ์ VPC๋ฅผ ์ฌ์์ฑํฉ๋๋ค.
์ปดํจํฐ์ terraform์ ์ค์นํ์ธ์.
Terraform์ ์น ํ์ด์ง๋ ๋คํธ์ํฌ ์๋น์ค๋ฅผ ๋ ธ์ถํ๋ ํ๋ซํผ์ด ์์ต๋๋ค. ๋ฐ๋ผ์ terraform์ ์์์ํค๋ ์ ์ผํ ๋ฐฉ๋ฒ์ terraform ๊ตฌ์ฑ ํ์ผ์ ์ถ๊ฐ/์์ ํ ์ ์๋ ๋ฅ๋ ฅ์ ๋๋ค.
๊ทธ๋ฌ๋ terraform์ ๋งค์ฐ ๋ฏผ๊ฐํ ๊ตฌ์ฑ ์์๋ก, ์ ๋๋ก ์๋ํ๊ธฐ ์ํด ํน๊ถ ์ก์ธ์ค๋ฅผ ๋ค์ํ ์์น์ ๊ฐ์ ธ์ผ ํฉ๋๋ค.
๊ณต๊ฒฉ์๊ฐ terraform์ด ์คํ๋๋ ์์คํ ์ ์์์ํฌ ์ ์๋ ์ฃผ์ ๋ฐฉ๋ฒ์ terraform ๊ตฌ์ฑ์ ์ ์ฅํ๋ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์์์ํค๋ ๊ฒ์ ๋๋ค. ์๋ํ๋ฉด ์ธ์ ๊ฐ๋ ์ด๋ค์ด ํด์๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ค์ ๋ก, PR์ด ์์ฑ๋ ํ terraform plan/apply๋ฅผ ์๋์ผ๋ก ์คํํ๋ ์๋ฃจ์ ์ด ์กด์ฌํฉ๋๋ค. ์๋ฅผ ๋ค์ด Atlantis๊ฐ ์์ต๋๋ค:
terraform ํ์ผ์ ์์์ํฌ ์ ์๋ค๋ฉด, ๋๊ตฐ๊ฐ terraform plan
๋๋ terraform apply
๋ฅผ ์คํํ ๋ RCE๋ฅผ ์ํํ ์ ์๋ ๋ค์ํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
Terraform plan์ terraform์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๋ช ๋ น์ด์ด๋ฉฐ, terraform์ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์/์๋ฃจ์ ์ ์ด๋ฅผ ํญ์ ํธ์ถํฉ๋๋ค. ๋ฐ๋ผ์ RCE๋ฅผ ์ป๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ์์์ ๋ช ๋ น์ ์คํํ terraform ๊ตฌ์ฑ ํ์ผ์ ์ค์ผ์ํค๋ ๊ฒ์ ๋๋ค.
์ธ๋ถ ๊ณต๊ธ์ ์ฌ์ฉ
terraform ๊ตฌ์ฑ ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ ์ฃผ์
ํ๋ฉด terraform plan
์ ์คํํ ๋ rev shell์ด ์คํ๋ฉ๋๋ค:
์ฌ์ฉ์ ์ ์ ์ ๊ณต์ ์ฌ์ฉํ๊ธฐ
The provider is downloaded in the init
and will run the malicious code when plan
is executed
์ธ๋ถ ์ฐธ์กฐ ์ฌ์ฉํ๊ธฐ
๋ ๊ฐ์ง ์ธ๊ธ๋ ์ต์ ์ ์ ์ฉํ์ง๋ง ๊ทธ๋ฆฌ ์๋ฐํ์ง๋ ์์ต๋๋ค (๋ ๋ฒ์งธ๋ ๋ ์๋ฐํ์ง๋ง ์ฒซ ๋ฒ์งธ๋ณด๋ค ๋ ๋ณต์กํฉ๋๋ค). ๋ค์ ์ ์์ ๋ฐ๋ฅด๋ฉด ์ด ๊ณต๊ฒฉ์ ๋ ์๋ฐํ ๋ฐฉ๋ฒ์ผ๋ก ์ํํ ์ ์์ต๋๋ค:
terraform ํ์ผ์ rev shell์ ์ง์ ์ถ๊ฐํ๋ ๋์ , rev shell์ ํฌํจํ๋ ์ธ๋ถ ๋ฆฌ์์ค๋ฅผ ๋ก๋ํ ์ ์์ต๋๋ค:
์ธ๋ถ ๋ฆฌ์์ค์์ ref ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๋ฆฌํฌ์งํ ๋ฆฌ ๋ด์ ๋ธ๋์น์ ์๋ terraform rev shell ์ฝ๋๋ฅผ ์จ๊ธธ ์ ์์ต๋๋ค. ์: git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b
์ด ๊ณต๊ฒฉ์ ๋ ์๋ฐํ ๋ฐฉ๋ฒ์ผ๋ก ์ธ๋ถ ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ํํ๊ธฐ ์ํด ์ด์ ๊ธฐ์ ์ ์ ์์ ๋ฐ๋ฅด์ญ์์ค.
terraform apply
๋ฅผ ์คํํ์ฌ terraform์์ ์ฌ์ฉ๋๋ ๋น๋ฐ ๊ฐ์ ๋คํํ ์ ์์ต๋๋ค. terraform ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ ์ถ๊ฐํ์ญ์์ค:
๋ฆฌ์์ค๋ฅผ ํ๊ดดํ๋ ๋ฐฉ๋ฒ์ 2๊ฐ์ง๊ฐ ์์ต๋๋ค:
์ค์ ์ญ์ ํ ๋ฆฌ์์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ์์์ ์ด๋ฆ์ผ๋ก ๋ฆฌ์์ค๋ฅผ ์ํ ํ์ผ์ ์ฝ์ ํ๊ธฐ
terraform์ ํด๋น ๋ฆฌ์์ค๊ฐ ์กด์ฌํ์ง ์์์ผ ํ๋ค๊ณ ํ๋จํ์ฌ, ์ด๋ฅผ ํ๊ดดํ ๊ฒ์ ๋๋ค(์ง์ ๋ ์ค์ ๋ฆฌ์์ค ID๋ฅผ ๋ฐ๋ฆ ๋๋ค). ์ด์ ํ์ด์ง์ ์:
์ ๋ฐ์ดํธํ ์ ์๋ ๋ฐฉ์์ผ๋ก ์ญ์ ํ ๋ฆฌ์์ค๋ฅผ ์์ ํฉ๋๋ค (๊ทธ๋์ ์ญ์ ๋๊ณ ๋ค์ ์์ฑ๋ฉ๋๋ค)
EC2 ์ธ์คํด์ค์ ๊ฒฝ์ฐ, ์ธ์คํด์ค ์ ํ์ ์์ ํ๋ ๊ฒ๋ง์ผ๋ก terraform์ด ์ญ์ ํ๊ณ ๋ค์ ์์ฑํ๋๋ก ๋ง๋ค ์ ์์ต๋๋ค.
hashicorp/external
์ด ๋ธ๋๋ฆฌ์คํธ์ ์๋ ์ํฉ์ ์ง๋ฉดํ ๊ฒฝ์ฐ, ๋ค์๊ณผ ๊ฐ์ด external
ํ๋ก๋ฐ์ด๋๋ฅผ ์ฌ๊ตฌํํ ์ ์์ต๋๋ค. ์ฐธ๊ณ : ์ฐ๋ฆฌ๋ https://registry.terraform.io/providers/nazarewk/external/latest์์ ๊ฒ์๋ external ํ๋ก๋ฐ์ด๋์ ํฌํฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋น์ ๋ ์์ ์ ํฌํฌ๋ ์ฌ๊ตฌํ์ ๊ฒ์ํ ์ ์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ์ผ๋ฐ์ ์ผ๋ก external
์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
HashiCorp์ Terraform ์ปค๋ฎค๋ํฐ๋ ์ด๋ฏธ 1700๊ฐ ์ด์์ ๊ณต๊ธ์๋ฅผ ์์ฑํ์ฌ ์์ฒ ๊ฐ์ง ์ ํ์ ๋ฆฌ์์ค์ ์๋น์ค๋ฅผ ๊ด๋ฆฌํ๊ณ ์์ผ๋ฉฐ, ์ด ์ซ์๋ ๊ณ์ ์ฆ๊ฐํ๊ณ ์์ต๋๋ค. ๋ชจ๋ ๊ณต๊ฐ ๊ณต๊ธ์๋ ์์ ์ฐพ์ ์ ์์ผ๋ฉฐ, ์ฌ๊ธฐ์๋ Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog ๋ฑ์ด ํฌํจ๋ฉ๋๋ค.
์ฌ๊ธฐ ๊ฐ ์์ผ๋ฉฐ, ์ฌ๊ธฐ์์ terraform์ ๋ค์ด๋ก๋ํ๋ ์ ์ฐพ์ ์ ์์ต๋๋ค.
Terraform์ Terraform๊ณผ ์ธ๋ถ ํ๋ก๊ทธ๋จ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ๋ฅผ ์ ๊ณตํฉ๋๋ค. plan
์ค์ ์์์ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ํด external
๋ฐ์ดํฐ ์์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ณต๊ฒฉ์๋ ์ ๋ฅผ ์ ์กํ ๋ค์ ๊ธฐ๋ฅ ๋ธ๋์น์ Terraform ์ฝ๋์ ์ถ๊ฐํ ์ ์์ต๋๋ค ():
You can find an example in
You can find the rev shell code in
Terraform apply๋ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ๊ธฐ ์ํด ์คํ๋ฉ๋๋ค. ๋ํ ์
์ฑ Terraform ํ์ผ์ ์ฃผ์
ํ์ฌ RCE๋ฅผ ์ป๊ธฐ ์ํด ์
์ฉํ ์ ์์ต๋๋ค .
๋ค์๊ณผ ๊ฐ์ ํ์ด๋ก๋๊ฐ main.tf
ํ์ผ์ ํฌํจ๋๋๋ก ํด์ผ ํฉ๋๋ค:
terraform ์ํ ํ์ผ์ ๋ํ ์ฐ๊ธฐ ๊ถํ์ด ์์ง๋ง terraform ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๊ฒฝ์ฐ, ๋ ํ์ผ์ ํ์ฉํ ์ ์๋ ํฅ๋ฏธ๋ก์ด ์ต์ ์ ์ ๊ณตํฉ๋๋ค:
๊ทธ๋ฆฌ๊ณ terraform ์ํ ํ์ผ์์ ์ ์์ ์ธ ํ๋ก๋ฐ์ด๋๋ก ํ๋์ ํ๋ก๋ฐ์ด๋๋ฅผ ๊ต์ฒดํ๊ฑฐ๋ ์ ์์ ์ธ ํ๋ก๋ฐ์ด๋๋ก ๋น ๋ฆฌ์์ค๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์๋ ์ฐ๊ตฌ์ ์:
: tfsec๋ ์ ์ฌ์ ์ธ ์๋ชป๋ ๊ตฌ์ฑ ์์๋ฅผ ๋ฐ๊ฒฌํ๊ธฐ ์ํด terraform ์ฝ๋์ ์ ์ ๋ถ์์ ์ฌ์ฉํฉ๋๋ค.
: Terrascan์ ์ฝ๋๋ก์์ ์ธํ๋ผ์ ๋ํ ์ ์ ์ฝ๋ ๋ถ์๊ธฐ์ ๋๋ค.
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ: GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
ํ์ธํ๊ธฐ!
**๐ฌ ๋๋ ์ ์ฐธ์ฌํ๊ฑฐ๋ Twitter ๐ฆ ๋ฅผ ํ๋ก์ฐํ์ธ์.
๋ฐ github ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํ์ ๊ณต์ ํ์ธ์.