설명
NET_ADMIN, SYS_TIME 같은 Linux capability는 네트워크 설정이나 시스템 시간 변경 등 특정한 특권 작업을 허용합니다. 필요하지 않은 capability를 추가하면 애플리케이션 침해 시 공격자가 수행할 수 있는 작업이 늘어납니다.
영향 범위는 부여한 capability와 네임스페이스·호스트 접근 설정에 따라 달라집니다. 기본 capability 집합도 모든 애플리케이션에 필요한 것은 아니므로 함께 검토하세요.
잠재적 영향
침해된 프로세스가 불필요한 네트워크·시스템 작업을 수행하거나 다른 격리 약점을 악용할 수 있습니다. 반대로 검증 없이 필요한 권한을 제거하면 애플리케이션 기능이 중단될 수 있습니다.
해결 방법
- securityContext.capabilities.add에서 불필요한 capability를 제거하세요.
- 가능한 경우 drop: [ALL]을 사용하고 실제 필요한 capability만 다시 추가하세요. 예외의 목적과 허용 범위를 명확히 하세요.
- 비 root 실행과 권한 상승 방지도 함께 구성하고 필요한 기능이 정상 동작하는지 검증하세요.
예시
추가 capability 유무를 비교하는 파드 예시입니다. 실제 대상 파드에 변경을 적용하고 이미지가 필요한 권한을 확인하세요.
변경 전
yaml
apiVersion: v1
kind: Pod
metadata:
name: pod2
spec:
containers:
- name: app
image: images.my-company.example/app:v4
securityContext:
allowPrivilegeEscalation: false
capabilities:
add: ["NET_ADMIN", "SYS_TIME"]
NET_ADMIN과 SYS_TIME을 추가합니다. allowPrivilegeEscalation: false는 이미 부여된 capability를 제거하지 않습니다.
변경 후
yaml
apiVersion: v1
kind: Pod
metadata:
name: pod1
spec:
containers:
- name: app
image: images.my-company.example/app:v4
securityContext:
allowPrivilegeEscalation: false
추가 capability를 지정하지 않습니다. 런타임의 기본 capability까지 모두 제거한 것은 아니므로 drop 설정도 별도로 검토하세요.