Kubernetes Pivoting to Clouds
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
GCP λ΄μμ k8s ν΄λ¬μ€ν°λ₯Ό μ€ννλ κ²½μ°, ν΄λ¬μ€ν° λ΄μμ μ€νλλ μΌλΆ μ ν리μΌμ΄μ μ΄ GCPμ μ κ·Όν μ μλλ‘ νλ €λ κ²½μ°κ° λ§μ΅λλ€. μ΄λ₯Ό μννλ μΌλ°μ μΈ λ°©λ²μ 2κ°μ§μ λλ€:
kubernetes μ ν리μΌμ΄μ μ GCP μ κ·Ό κΆνμ λΆμ¬νλ μΌλ°μ μΈ λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€:
GCP μλΉμ€ κ³μ μμ±
μνλ κΆνμ λ°μΈλ©
μμ±λ SAμ json ν€ λ€μ΄λ‘λ
ν¬λ λ΄μμ λΉλ°λ‘ λ§μ΄νΈ
jsonμ΄ μλ κ²½λ‘λ₯Ό κ°λ¦¬ν€λλ‘ GOOGLE_APPLICATION_CREDENTIALS νκ²½ λ³μλ₯Ό μ€μ
λ°λΌμ 곡격μλ‘μ ν¬λ λ΄μ 컨ν μ΄λλ₯Ό μμμν€λ©΄, GCP μ격 μ¦λͺ μ΄ ν¬ν¨λ env λ³μμ json νμΌμ νμΈν΄μΌ ν©λλ€.
GKE ν΄λ¬μ€ν°μ GSA μ κ·Ό κΆνμ λΆμ¬νλ λ°©λ²μ λ€μκ³Ό κ°μ΄ λ°μΈλ©νλ κ²μ λλ€:
λ€μ λͺ λ Ήμ μ¬μ©νμ¬ GKE ν΄λ¬μ€ν°μ λμΌν λ€μμ€νμ΄μ€μ Kubernetes μλΉμ€ κ³μ μ μμ±ν©λλ€:
GKE ν΄λ¬μ€ν°μ μ κ·Ό κΆνμ λΆμ¬ν GCP μλΉμ€ κ³μ μ μ격 μ¦λͺ
μ ν¬ν¨νλ Kubernetes Secretμ μμ±ν©λλ€. λ€μ μμ μ κ°μ΄ gcloud
λͺ
λ Ήμ€ λꡬλ₯Ό μ¬μ©νμ¬ μ΄ μμ
μ μνν μ μμ΅λλ€:
λ€μ λͺ λ Ήμ΄λ₯Ό μ¬μ©νμ¬ Kubernetes Secretμ Kubernetes μλΉμ€ κ³μ μ λ°μΈλ©ν©λλ€:
λ λ²μ§Έ λ¨κ³μμλ KSAμ λΉλ°λ‘ GSAμ μ격 μ¦λͺ μ μ€μ νμ΅λλ€. κ·Έλ° λ€μ, GKE ν΄λ¬μ€ν° λ΄λΆμμ κ·Έ λΉλ°μ μ½μ μ μλ€λ©΄, ν΄λΉ GCP μλΉμ€ κ³μ μΌλ‘ μμΉν μ μμ΅λλ€.
μν¬λ‘λ μμ΄λ΄ν°ν°λ₯Ό μ¬μ©νλ©΄ Kubernetes μλΉμ€ κ³μ μ Google μλΉμ€ κ³μ μΌλ‘ μλνλλ‘ κ΅¬μ±ν μ μμ΅λλ€. Kubernetes μλΉμ€ κ³μ μΌλ‘ μ€νλλ νλλ Google Cloud APIμ μ κ·Όν λ μλμΌλ‘ Google μλΉμ€ κ³μ μΌλ‘ μΈμ¦λ©λλ€.
μ΄ λμμ νμ±ννκΈ° μν 첫 λ²μ§Έ μΌλ ¨μ λ¨κ³λ GCPμμ μν¬λ‘λ μμ΄λ΄ν°ν°λ₯Ό νμ±ννλ κ² (λ¨κ³)κ³Ό k8sκ° κ°μ₯νκ³ μ νλ GCP SAλ₯Ό μμ±νλ κ²μ λλ€.
μ ν΄λ¬μ€ν°μμ μν¬λ‘λ μμ΄λ΄ν°ν° νμ±ν
μ λ Έλ ν μμ±/μ λ°μ΄νΈ (μ€ν νμΌλΏ ν΄λ¬μ€ν°λ νμνμ§ μμ)
K8sμμ GCP κΆνμΌλ‘ κ°μ§ GCP μλΉμ€ κ³μ μ μμ±ν©λλ€:
ν΄λ¬μ€ν°μ μ°κ²°νκ³ μ¬μ©ν μλΉμ€ κ³μ μ μμ±ν©λλ€.
GSAλ₯Ό KSAμ λ°μΈλ©νκΈ°
KSAλ‘ podλ₯Ό μ€ννκ³ GSAμ λν μ κ·Όμ νμΈν©λλ€:
λ€μ λͺ λ Ήμ΄λ₯Ό νμΈνμ¬ νμ μ μΈμ¦ν©λλ€:
K8s λ΄λΆμ 곡격μλ‘μ iam.gke.io/gcp-service-account
μ£Όμμ΄ μλ SAsλ₯Ό κ²μν΄μΌ ν©λλ€. μ΄λ SAκ° GCPμ 무μΈκ°μ μ κ·Όν μ μμμ λνλ
λλ€. λ λ€λ₯Έ μ΅μ
μ ν΄λ¬μ€ν° λ΄μ κ° KSAλ₯Ό λ¨μ©ν΄λ³΄κ³ μ κ·Ό κΆνμ΄ μλμ§ νμΈνλ κ²μ
λλ€.
GCPμμ νμ λ°μΈλ©μ λμ΄νκ³ Kubernetes λ΄ SAsμ μ΄λ€ μ κ·Ό κΆνμ λΆμ¬νκ³ μλμ§ μλ κ²μ΄ ν₯λ―Έλ‘μ΅λλ€.
μ΄κ²μ μ£Όμμ μ°ΎκΈ° μν΄ λͺ¨λ ν¬λ μ μλ₯Ό μ½κ² λ°λ³΅νλ μ€ν¬λ¦½νΈμ λλ€:
Podsμ IAM μν μ λΆμ¬νλ (ꡬμ) λ°©λ²μ Kiam λλ Kube2IAM μλ²λ₯Ό μ¬μ©νλ κ²μ λλ€. κΈ°λ³Έμ μΌλ‘ ν΄λ¬μ€ν°μμ νΉκΆ IAM μν μ λ°λͺ¬μ μ μ€νν΄μΌ ν©λλ€. μ΄ λ°λͺ¬μ μ΄ νμν Podsμ IAM μν μ λν μ κ·Όμ μ 곡ν©λλ€.
λ¨Όμ λ€μμ€νμ΄μ€ λ΄μμ μ κ·Όν μ μλ μν μ ꡬμ±ν΄μΌ νλ©°, μ΄λ λ€μμ€νμ΄μ€ κ°μ²΄ λ΄μ μ£Όμμ ν΅ν΄ μνν©λλ€:
λ€μμ€νμ΄μ€κ° IAM μν λ‘ κ΅¬μ±λλ©΄, κ° ν¬λ μ μμμ μνλ μν μ λ€μκ³Ό κ°μ΄ μ§μ ν μ μμ΅λλ€:
곡격μλ‘μ, λ§μ½ λΉμ μ΄ μ΄ μ£Όμμ νλλ λ€μμ€νμ΄μ€μμ λ°κ²¬νκ±°λ kiam/kube2iam μλ²κ° μ€ν μ€μΈ κ²μ λ°κ²¬νλ€λ©΄ (μλ§λ kube-systemμμ) λΉμ μ νλμμ μ΄λ―Έ μ¬μ©λκ³ μλ λͺ¨λ roleμ κ°μ₯ν μ μμΌλ©°, λ λ§μ κ²μ ν μ μμ΅λλ€ (AWS κ³μ μ μ κ·Όν μ μλ€λ©΄ μν μ λμ΄νμμμ€).
μ§μ ν΄μΌ ν IAM μν μ kiam/kube2iam μν κ³Ό λμΌν AWS κ³μ μ μμ΄μΌ νλ©°, κ·Έ μν μ μ κ·Όν μ μμ΄μΌ ν©λλ€.
μ΄κ²μ AWSμμ κΆμ₯νλ λ°©λ²μ λλ€.
κ·Έλ° λ€μ SAμ νμν κΆνμΌλ‘ IAM μν μ μμ±ν©λλ€.
IAM μν κ³Ό SA κ°μ μ λ’° κ΄κ³λ₯Ό μμ±ν©λλ€ (λλ μν μ λν μ‘μΈμ€λ₯Ό λͺ¨λ SAμ λΆμ¬νλ λ€μμ€νμ΄μ€). μ λ’° κ΄κ³λ μ£Όλ‘ OIDC 곡κΈμ μ΄λ¦, λ€μμ€νμ΄μ€ μ΄λ¦ λ° SA μ΄λ¦μ νμΈν©λλ€.
λ§μ§λ§μΌλ‘, μν μ ARNμ λνλ΄λ μ£Όμμ΄ μλ SAλ₯Ό μμ±νλ©΄, ν΄λΉ SAλ‘ μ€νλλ ν¬λλ μν μ ν ν°μ μ κ·Όν μ μμ΅λλ€. ν ν°μ **νμΌμ κΈ°λ‘λλ©° κ²½λ‘λ **AWS_WEB_IDENTITY_TOKEN_FILE
μ μ§μ λ©λλ€ (κΈ°λ³Έκ°: /var/run/secrets/eks.amazonaws.com/serviceaccount/token
)
To get aws using the token from /var/run/secrets/eks.amazonaws.com/serviceaccount/token
run:
곡격μλ‘μ K8s ν΄λ¬μ€ν°λ₯Ό μ΄κ±°ν μ μλ€λ©΄, AWSλ‘ μμΉνκΈ° μν΄ ν΄λΉ μ£Όμμ΄ μλ μλΉμ€ κ³μ μ νμΈνμμμ€. κ·Έλ κ² νλ €λ©΄, IAM νΉκΆ μλΉμ€ κ³μ μ€ νλλ₯Ό μ¬μ©νμ¬ podλ₯Ό exec/createνκ³ ν ν°μ νμΉλ©΄ λ©λλ€.
λν, pod λ΄λΆμ μλ€λ©΄ AWS_ROLE_ARN λ° AWS_WEB_IDENTITY_TOKENκ³Ό κ°μ νκ²½ λ³μλ₯Ό νμΈνμμμ€.
λλλ‘ μν μ μ λ’° μ μ± μ΄ μλͺ» ꡬμ±λμ΄ μμλλ μλΉμ€ κ³μ μ AssumeRole μ‘μΈμ€λ₯Ό λΆμ¬νλ λμ λͺ¨λ μλΉμ€ κ³μ μ λΆμ¬ν μ μμ΅λλ€. λ°λΌμ μ μ΄λ μλΉμ€ κ³μ μ μ£Όμμ μμ±ν μ μλ€λ©΄, ν΄λΉ μν μ μ κ·Όν μ μμ΅λλ€.
μμΈν μ 보λ λ€μ νμ΄μ§λ₯Ό νμΈνμμμ€:
μ΄ μ€ν¬λ¦½νΈλ λͺ¨λ podμ sa μ μλ₯Ό μ½κ² λ°λ³΅νμ¬ ν΄λΉ μ£Όμμ μ°Ύλ κ²μ λλ€:
μ΄μ μΉμ μ podsλ‘ IAM Rolesλ₯Ό νμΉλ λ°©λ²μ λν κ²μ΄μμ§λ§, K8s ν΄λ¬μ€ν°μ Nodeλ ν΄λΌμ°λ λ΄μ μΈμ€ν΄μ€κ° λ κ²μμ μ£Όλͺ©νμΈμ. μ΄λ Nodeκ° νμΉ μ μλ μλ‘μ΄ IAM μν μ κ°μ§ κ°λ₯μ±μ΄ λλ€λ κ²μ μλ―Έν©λλ€ (μΌλ°μ μΌλ‘ K8s ν΄λ¬μ€ν°μ λͺ¨λ λ Έλλ λμΌν IAM μν μ κ°μ§λ―λ‘ κ° λ Έλλ₯Ό νμΈνλ €κ³ μλνλ κ²μ΄ κ·Έλ€μ§ κ°μΉκ° μμ μ μμ΅λλ€).
κ·Έλ¬λ λ Έλμμ λ©νλ°μ΄ν° μλν¬μΈνΈμ μ κ·ΌνκΈ° μν μ€μν μꡬ μ¬νμ΄ μμ΅λλ€. λ Έλμ μμ΄μΌ νκ±°λ (ssh μΈμ ?) μ΅μν λμΌν λ€νΈμν¬μ μμ΄μΌ ν©λλ€:
μ΄μ μ μ°λ¦¬λ IAM μν μ Podsμ μ°κ²°νλ λ°©λ² λλ λ Έλλ‘ νμΆνμ¬ μΈμ€ν΄μ€μ μ°κ²°λ IAM μν μ νμΉλ λ°©λ²μ λν΄ λ Όμνμ΅λλ€.
λ€μ μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νμ¬ μλ‘ μ΄μ¬ν μμ ν IAM μν μ격 μ¦λͺ μ νμΉ μ μμ΅λλ€:
AWS ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:HackTricks Training AWS Red Team Expert (ARTE) GCP ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°: HackTricks Training GCP Red Team Expert (GRTE)