컨테이너/K8s 진단 - 신뢰할 수 없는 레지스트리 이미지
점검 결과
| 이미지 | 레지스트리 | 검증 | 평가 |
|---|
| random-image:latest | Docker Hub | 없음 | 위험! |
| nginx:latest | Docker Hub | 태그만 (해시 아님) | 위험! |
| gcr.io/project/app | 공개 리포지토리 | 서명 없음 | 위험! |
| registry.internal/app@sha256:abc... | 내부 레지스트리 | SHA256 다이제스트 | 안전 |
신뢰할 수 없는 이미지 분석
apiVersion: v1
kind: Pod
metadata:
name: app-pod
spec:
containers:
- name: app
image: nginx:latest # 위험!
imagePullPolicy: Always
[위험한 상황]
1. 태그 기반 이미지 (latest)
-> 매번 최신 버전 다운로드
-> 이미지 변조 가능
2. Docker Hub 공개 레지스트리
-> 보증된 소스 아님
-> 악성 이미지 포함 가능
3. 이미지 서명/검증 없음
-> Man-in-the-Middle 공격 가능
-> 악성 이미지 삽입 가능
# 권장 설정
image: registry.internal/app@sha256:a1b2c3d4e5f6...
imagePullPolicy: Never 또는 IfNotPresent
[공격 시나리오]
1. 악성 이미지를 Docker Hub에 업로드
2. 개발자가 nginx:latest 사용
3. 클러스터가 악성 이미지 자동 다운로드
4. 악성 코드 실행
5. 데이터 탈취/암호화
[이미지 무결성 검증]
docker pull nginx:latest
docker inspect nginx:latest | grep RepoDigests
# RepoDigests: [nginx@sha256:...]
조치 가이드
- SHA256 다이제스트 사용: 태그 대신 이미지 해시 지정
- 내부 레지스트리 필수: 공개 이미지는 미러링
- 이미지 스캔: 배포 전 취약점 검사
- Image Pull Policy: IfNotPresent로 변경
- 서명 검증: Docker Content Trust 활용