블록체인
블록체인

도커 보안

목차

이미지 검사 기능

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

도커 이미지를 검사하여 이미 알려진 보안상의 취약성이 없는지를 확인

기타 도구

도커 환경 취약점 스캔 도구

dockerscan
cr0hn
도커 보안 특징 요약
✓ 격리(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는 절때 안내려가기 때문에 컨테이너 위의 쉘을 땃고 브레이크아웃을 통해 호스트의 쉘을 땀