목차
이미지 검사 기능
Docker Container Trust(DCT)
•
도커 이미지를 위장이나 변조하지 못하도록 제공자를 검증할 수 있는 기능
서명
•
이미지 제공자는 비밀키(Offline Key)를 사용하여 이미지에 서명 후 레지스트리에 이미지를 송신
검증
•
이미지 이용자는 이미지 제공자의 공개키(Tagging Key)를 사용하여 이미지가 정말 제공자가 작성한 것인지를 확인
◦
만약 이미지가 변조된 경우는 이미지를 무효로 만듬
DCT 기능 설정
•
export DOCKER_CONTENT_TRUST=1 명령어로 DCT 기능을 유효화
//DCT 기능 적용 전
hbeen@DESKTOP-EDC39JU:~$ export DOCKER_CONTENT_TRUST=0
hbeen@DESKTOP-EDC39JU:~$ docker image pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
08c01a0ec47e: Pull complete
Digest: sha256:669e010b58baf5beb2836b253c1fd5768333f0d1dbcb834f7c07a4dc93f474be
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
//DCT 기능 적용 후
hbeen@DESKTOP-EDC39JU:~$ export DOCKER_CONTENT_TRUST=1
hbeen@DESKTOP-EDC39JU:~$ docker image pull ubuntu
Using default tag: latest
Pull (1 of 1): ubuntu:latest@sha256:c95a8e48bf88e9849f3e0f723d9f49fa12c5a00cfc6e60d2bc99d87555295e4c
docker.io/library/ubuntu@sha256:c95a8e48bf88e9849f3e0f723d9f49fa12c5a00cfc6e60d2bc99d87555295e4c: Pulling from library/ubuntu
Digest: sha256:c95a8e48bf88e9849f3e0f723d9f49fa12c5a00cfc6e60d2bc99d87555295e4c
Status: Image is up to date for ubuntu@sha256:c95a8e48bf88e9849f3e0f723d9f49fa12c5a00cfc6e60d2bc99d87555295e4c
Tagging ubuntu@sha256:c95a8e48bf88e9849f3e0f723d9f49fa12c5a00cfc6e60d2bc99d87555295e4c as ubuntu:latest
docker.io/library/ubuntu:latest
Shell
복사
Security Scanning
•
도커 이미지를 검사하여 이미 알려진 보안상의 취약성이 없는지를 확인
기타 도구
도커 환경 취약점 스캔 도구
도커 보안 특징 요약
✓ 격리(Isolation)와 리소스 제어(Resource Control) 기술 기반
도커 보안 특징 – Control Group
13
공평한 리소스(CPU, Memory, Disk I/O) 배분을 위해 리소스 사용을 측정하고 제한
단일 컨테이너가 리소스를 모두 소비하는것을 방지
도커 실행시 명령 파라미터를 통해 활성화 가능
Ex) 물리 메모리 300M 제한, 스왑메모리 제한 없음
docker run -it -m 300M --memory-swap -1 ubuntu:14.04 /bin/bash
Ex) 50ms 동안 ¼ 만큼 CPU 할당 제한
docker run -it --cpu-period=50000 --cpu-quota=25000 ubuntu:14.04 /bin/bash
도커 보안 특징 - Kernel Capabilities
14
도커는 기본적으로 제한된 Capabilities(14)를 가지고 실행 (Unprivileged)
컨테이너 이미지 실행 시 “--cap-add”, “--cap-drop” 또는 “--priviledged”
(full capabilities) 옵션으로 Capabilities 변경 가능
리눅스 슈퍼유저 특권권한(Privilege)을 좀더 작은 권한들로 나눈 그룹
Default Capabilities : CHOWN, DAC_OVERRIDE, FSETID, FOWNER, MKNOD, NET_RAW, SETGID, SETUID, SETFCAP, SETPCAP, NET_BIND_SERVICE, SYS_CHROOT, KILL, AUDIT_WRITE
Ex) 도커 컨테이너(타임서버) 실행시 SYS_TIME capabilities 추가
docker run -d --cap-add SYS_TIME ntpd
도커 보안 특징 – Secure Computing Mode
Secure Computing Mode(Seccomp)
컨테이너 바이너리에서 호출되는 특정 syscall 을 차단/필터링
기본 차단된 syscall 리스트가 있음
Default Block Syscall : https://docs.docker.com/engine/security/seccomp/#/significant-syscalls-blocked-by-the-default-profile
기본 “seccomp profile” 비활성화 가능 (--security-opt seccomp=unconfined)
도커 보안 특징 – Kernel Security Module
✓ 알려진 커널 보안 모듈과 함께 사용
SELinux, AppArmor, TOMOYO, GRSECURITY
도커 보안 위협
✓ Kernel Exploits
✓ Denial of Service Attack
✓ Container Breakout
✓ Application Vulnerabilities
✓ Malicious Image
도커 이미지 취약점 패치 현황
✓ 일반적인 시스템 보안 패치와 다른 워크플로우 요구
위협 대응 방안
위협 대응 방안 - Defense in Depth
VM or Container?
✓ VM and Container!
(성능적 손해를 보더라도) 보안성은 높이고 컨테이너의 장점(배포, 관리 편의성) 얻음
위협 대응 방안 - Hardening
✓ 호스트, 도커 보안 설정 하드닝
+ CIS Benchmarking
호스트 설정, 도커 데몬 설정 등 도커 보안 운영관점에서 100 여개의 보안측정 체크리스트를 제공
https://benchmarks.cisecurity.org/tools2/docker/CIS_Docker_1.12.0_Benchmark_v1.0.0.pdf
간단하게 측정할수 있는 측정 스크립트 제공
https://github.com/docker/docker-bench-security
카카오에서는 benchmark 스크립트를 내부 보안 정책에 맞게 수정하여 사용
✓ 사내 보안 정책과 적절한 조율이 필요
위협 대응 방안 – 보안 패치/업데이트
✓ 베이스이미지에 대한 주기적 측정과 패치(Base Image Rebuilding)
✓ 이미지의 보안 패치/업데이트 상태 점검
•
OpenScap 활용
•
Clair 활용
Security Compliance/Audit 도구. 도커용 oscap-docer 사용가능
https://github.com/OpenSCAP/container-compliance
보안 취약점 정적 분석 시스템. 로컬 도구로 사용가능하며 도커 레지스트리와 통합 가능
https://github.com/coreos/clairhttps://github.com/coreos/clair/tree/master/contrib/analyze-local-images
✓
사내 표준 OS/버전이 아닌 다양한 베이스이미지가 존재하고
모든 이미지가 OS 베이스이미지로부터 빌드되지 않음
이미지에 보안 패치/업데이트만 적용하기 어려움
(Dockerfile: yum update -y , apt-get upgrade?)
✓ 이미지 보안 패치/업데이트 상태 상시 모니터링과 스캐닝
취약한 도커 컨테이너 어플리케이션은 리빌드 후 재배포
✓ 이미지 빌드시 캐싱되지 않도록 설정
docker build --no-cache=true
위협 대응 방안 – 악성 이미지 검사
✓ 신뢰할수 있는 도커 레지스트리로부터 이미지 다운로드
✓ Contents addressable Image. Pull by digests
✓ 이미지에 대한 백신 검사
+ Clamav 활용
도커 이미지를 저장(save)하거나 컨테이너를 추출(export)하여 백신 검사
docker save -o target.tar 4881879d0be8 또는
docker export b28f6bc106dd > target.tar
clamscan --max-files=30000 --max-filesize=4000M --max-scansize=40000M -max-dir-recursion=100 --max-recursion=100 -avri target.tar
모든 이미지를 매번 다운로드하여 점검해야 하는가?
클라우드 배포 환경에서의 이미지 변경 추적이 가능한가?
✓ 도커 레지스트리 통합과 연동 고려
컨테이너breakout - 독립성이 유지된다고 하는데 결국 공격자에 의해 우회될 소지가 있다host는 절때 안내려가기 때문에 컨테이너 위의 쉘을 땃고 브레이크아웃을 통해 호스트의 쉘을 땀