Spacebar Campaigns

KB-001 Kubernetes API Audit Log

Log ID:
KB-001
Source:
Kubernetes API Server
Representative Path:
/var/lib/rancher/k3s/server/logs/audit.log
Dataset:
sb05.kubernetes_audit
Kibana Data View:
logs-*
Format:
JSON, audit.k8s.io/v1, Metadata level
Primary Use:
Kubernetes API 기반 Discovery, Secret 조회, Pod exec, Pod 생성, RBAC 변경 여부 확인

공격 행위 요약

ClusterDrain에서 공격자는 침해된 배포/운영 지점에서 확보한 kubeconfig로 Kubernetes API Server에 인증한 뒤, prod-platform namespace를 중심으로 리소스 조회, Secret 접근, Pod 내부 명령 실행, 수집 Pod 생성, RBAC 리소스 생성을 수행했다.

Metadata level audit log는 요청 본문과 응답 본문 전체를 남기지는 않지만, 요청 주체, 동작, 대상 리소스, namespace, requestURI, 응답 코드, 인가 결과를 확인할 수 있다.

로그 발생 위치

kubectl get, kubectl describe, kubectl exec, kubectl run, kubectl apply, kubectl create rolebinding 같은 요청은 Kubernetes API Server로 전달되며 audit event로 기록된다.

수집 방식

k3s API Server audit log를 파일로 생성하도록 설정하고, Elastic Agent custom log input으로 logs-* 인덱스에 적재한다. Kibana Discover에서는 data_stream.dataset:"sb05.kubernetes_audit" 조건으로 Kubernetes audit log만 필터링한다.

주요 탐지 포인트

Technique탐지 기준KQL
T1613 Container and Resource Discoveryget 또는 list 요청이 여러 Kubernetes 리소스에 반복적으로 발생한다. Secret, ConfigMap, Ingress 같은 민감/구조성 리소스가 포함되면 우선 확인한다.data_stream.dataset:"sb05.kubernetes_audit" and verb:("get" or "list") and responseStatus.code:200 and objectRef.resource:("namespaces" or "pods" or "deployments" or "services" or "ingresses" or "configmaps" or "secrets" or "endpoints" or "serviceaccounts" or "roles" or "rolebindings")
T1552.007 Unsecured Credentials: Container API업무 namespace에서 secrets 리소스에 대한 get 또는 list 요청이 성공한다.data_stream.dataset:"sb05.kubernetes_audit" and objectRef.resource:"secrets" and objectRef.namespace:"prod-platform" and verb:("get" or "list") and responseStatus.code:200
T1609 Container Administration CommandrequestURIexec가 포함되고 업무 namespace의 Pod에 대한 요청이 성공한다.data_stream.dataset:"sb05.kubernetes_audit" and requestURI:*exec* and objectRef.namespace:"prod-platform" and responseStatus.code:200
T1610 Deploy Container업무 namespace에서 pods 리소스에 대한 create 요청이 성공한다.data_stream.dataset:"sb05.kubernetes_audit" and objectRef.resource:"pods" and objectRef.namespace:"prod-platform" and verb:"create" and responseStatus.code:(200 or 201)
T1098.006 Additional Container Cluster Roles업무 namespace에서 serviceaccounts, roles, rolebindings 생성/수정 요청이 성공한다.data_stream.dataset:"sb05.kubernetes_audit" and objectRef.resource:("serviceaccounts" or "roles" or "rolebindings") and objectRef.namespace:"prod-platform" and verb:("create" or "patch" or "update") and responseStatus.code:(200 or 201)

추가 KQL

data_stream.dataset:"sb05.kubernetes_audit" and verb:("get" or "list") and responseStatus.code:200 and objectRef.namespace:"prod-platform" and objectRef.resource:("pods" or "deployments" or "services" or "ingresses" or "configmaps" or "secrets" or "endpoints" or "serviceaccounts" or "roles" or "rolebindings")
data_stream.dataset:"sb05.kubernetes_audit" and objectRef.resource:"pods" and objectRef.subresource:"exec" and objectRef.namespace:"prod-platform" and responseStatus.code:200
data_stream.dataset:"sb05.kubernetes_audit" and objectRef.resource:"rolebindings" and objectRef.namespace:"prod-platform" and verb:"create" and responseStatus.code:(200 or 201)

Investigation Pivot