WF-K8S-001 Kubernetes API 정찰 및 권한 오용
Kubernetes API에서 namespace, pod, service, ingress, secret, RBAC, exec, pod 생성 행위가 관측됐을 때 사용하는 행위 기반 IR Workflow다. ServiceAccount 토큰 악용, 과도한 RBAC 권한, privileged pod 생성, 컨테이너 경계 탈출 가능성을 함께 확인한다.
1. 행위 정의
공격자가 탈취한 ServiceAccount 토큰 또는 관리자 kubeconfig를 이용해 Kubernetes API와 통신하며 클러스터 구조를 파악하고, Secret 조회, exec, Pod 배포, RBAC 변경을 수행하는 행위다. get/list 조회와 create/patch/delete 변경 행위를 구분하고, 동일 주체의 권한 상승 흐름을 시간순으로 연결해야 한다.
2. 관련 Technique
| Technique | Name | 확인 관점 |
| T1613 | Container and Resource Discovery | namespace, pod, service, ingress, deployment 조회 확인 |
| T1552.007 | Container and Cloud Credentials | ServiceAccount token, kubeconfig, Secret 접근 확인 |
| T1609 | Container and Resource Discovery | exec를 통한 컨테이너 내부 명령 확인 |
| T1611 | Escape to Host | privileged pod, hostPath, node 접근 여부 확인 |
| T1610 | Deploy Container | 수집/악성 목적 Pod 생성 여부 확인 |
| T1098 | Account Manipulation | Role/RoleBinding/ServiceAccount 생성 또는 변경 확인 |
3. 먼저 확인할 로그
| 환경 | 대표 로그 | 핵심 필드 |
| Kubernetes | API server audit log | verb, user, groups, sourceIPs, namespace, resource, subresource |
| Container Runtime | container logs, runtime events | container id, image, command, mount, privileged |
| Cloud / Node | CloudTrail, instance log, IMDS access 후보 | role, source, eventName, metadata access |
| Network | CNI, firewall, VPC Flow Logs | pod IP, node IP, destination, port |
| EDR | node process/network telemetry | process, command, file path, network destination |
4. 빠른 KQL
Secret 조회
kubernetes.audit.verb: ("get" or "list") and kubernetes.audit.objectRef.resource: "secrets"
exec 사용
kubernetes.audit.verb: "create" and kubernetes.audit.objectRef.subresource: "exec"
RBAC 변경
kubernetes.audit.verb: ("create" or "patch" or "update") and kubernetes.audit.objectRef.resource: ("roles" or "rolebindings" or "clusterroles" or "clusterrolebindings" or "serviceaccounts")
privileged pod 후보
kubernetes.audit.verb: "create" and kubernetes.audit.objectRef.resource: "pods" and requestObject.spec.containers.securityContext.privileged: true
5. 분석자가 할 일
- API 호출 주체, ServiceAccount, source IP, namespace를 고정한다.
- 조회와 변경 행위를 구분해 타임라인을 만든다.
- Secret, exec, RBAC, Pod 생성이 같은 주체로 이어졌는지 확인한다.
- privileged, hostPath, hostNetwork, node credential 접근 여부를 확인한다.
- K8s 이후 CloudTrail, IMDS, Secrets Manager, S3 접근으로 Pivot한다.
6. 판단 기준
| 구분 | 확인 기준 |
| 의심 | 일반 앱 ServiceAccount가 Secret, RBAC, exec, Pod 생성 권한 사용 |
| 의심 | kube-system 또는 운영 namespace에 예외적 Pod 생성 |
| 의심 | privileged pod, hostPath mount, node credential 접근 |
| 정상 가능성 | 승인된 배포, 운영 자동화, GitOps/CI/CD 서비스 계정과 일치 |
7. LLM Prompt Template
너는 SIEM에 연결된 침해사고 분석 보조자다.
다음 조건으로 "Kubernetes API 정찰 및 권한 오용" 정황을 조사하라.
입력:
- 시간 범위:
- 의심 namespace:
- 의심 ServiceAccount 또는 user:
- 의심 Pod/Node:
- 관측된 단서:
요청:
1. Kubernetes API audit, container runtime, node, cloud 로그를 조회하라.
2. API 호출 주체와 리소스 조회/변경 타임라인을 작성하라.
3. Secret 조회, exec, RBAC 변경, privileged pod 생성 여부를 확인하라.
4. 정상 배포 가능성과 권한 오용 가능성을 구분하라.
5. Cloud/Node/Secret 접근 Pivot과 대응 조치를 작성하라.
출력 형식:
- 관측된 사실
- API 호출 타임라인
- 권한 오용 근거
- 영향 namespace/리소스
- 추가 Pivot
- 대응 조치
8. 대응 요약
- API audit 로그와 관련 Pod manifest, RBAC 객체를 보존한다.
- 의심 ServiceAccount token을 회전하고 불필요한 RoleBinding을 제거한다.
- privileged pod와 비정상 Pod를 격리/삭제 전 증적화한다.
- node와 cloud credential 사용 로그를 확장 확인한다.