capabilities를 설정하는 것은 권한 상승 및 컨테이너 탈출로 이어질 수 있습니다.
리눅스 capabilities는 루트 권한의 조각을 프로세스에 할당하는 것을 허용합니다. capabilities가 있는 쓰레드는 일반 커널 보안 검사를 바이패스하여 추가 루트 권한 없이 디렉터리에 장치를 마운트하는 것과 같은 높은 권한 작업을 실행합니다.
컨테이너에서 capabilities를 통해 호스트 시스템의 리소스에 액세스할 수 있으므로 컨테이너 탈출이 발생할 수 있습니다. 예를 들어 capabilities의 SYS_ADMIN이 설정되면 사용하면 공격자가 호스트 시스템에서 컨테이너 내부로 디바이스를 마운트할 수 있습니다.
다음 질문을 확인하세요
- 모든 capabilities가 필요하지 않은 프로세스에게 capabilities가 부여되었습니다.
- 신뢰할 수 없는 프로세스에 capabilities가 부여되었습니다.
만약 상위 질문에 해당된다면 위험이 있을 수 있습니다.
권장되는 보안 코딩 방법
capabilities는 전통적으로 슈퍼유저(루트)와 관련된 높은 권한이므로 가장 제한적이고 필요한 기능을 할당해야 합니다
민감한 코드 예시
apiVersion: v1
kind: Pod
metadata:
name: example
spec:
containers:
- image: k8s.gcr.io/test-webserver
name: test-container
securityContext:
capabilities:
add: ["SYS_ADMIN"] # Sensitive
규칙을 준수한 해결책
apiVersion: v1
kind: Pod
metadata:
name: example
spec:
containers:
- image: k8s.gcr.io/test-webserver
name: test-container
같이보면 좋은 자료
- MITRE, CWE-250 - 불필요한 권한으로 실행
- MITRE, CWE-266 - 잘못된 권한 할당
- Kubernetes Documentation - POD 또는 컨테이너에 대한 보안 컨텍스트 설정
- Linux manual page - capabilities(7)
If you like SONARKUBE, don’t forget to give me a star.