https://isms.kisa.or.kr/main/csap/notice/
일부 항목을 직접 테스트 환경 서버에서 체크해보자 !

Docker 데몬은 root 권한이 필요하며 Docker 그룹에 추가된 사용자는 root 권한을 부여받게 된다. 따라서 컨테이너를 실행하고 호스트의 root 디렉터리를 컨테이너에 매핑 할 수 있어 컨테이너는 제한 없이 호스트 파일 시스템을 변경할 수 있는 위험이 존재한다. 따라서 도커 그룹에 불필요한 사용자를 제거하여 root 권한 부여를 제한해야 한다
# cat /etc/group | grep docker
docker:x:999:
# cat /etc/group | grep root
root:x:0:
현재 시스템에서는 root외의 다른 계정, 그룹에서의 docker 사용 권한이 없다
만약에 있을 경우 etc/group 에서 불필요한 사용자를 모두 제거, root 그룹 dockerroot 그룹에서 불필요한 사용자를 제거한다
/usr/bin/docker 파일에 감사 설정이 적용 되어 있는 경우 합격
root@MyServer:~# auditctl -l | grep /usr/bin/docker
Command 'auditctl' not found, but can be installed with:
apt install auditd
현재 시스템의 경우 감사로그 설정이 되어 있지 않다
apt install auditd
-w /usr/bin/docker # 추가
service auditd restart
이후에도 감사로그에 대한 설정이 많이 나오는데 실제로 고객사 가보면 감사로그 설정이 중요하다는 요청이 많았던게 생각이 난다
docker의 기본 네트워크 인터페이스인 docker0이 활성화되어 있다면 동일한 호스트 네트워크를 통해 다른 컨테이너와 통신이 가능하며 네트워크 패킷을 모두 확인할 수 있다. 따라서 각 컨테이너간의 통신이 불가하도록 default bridge(docker0) 사용을 제한해야 한다.
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:65:56:c1:79 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:65ff:fe56:c179/64 scope link
valid_lft forever preferred_lft forever
도커는 docker0 인터페이스를 브릿지로 사용하여 컨테이너간 네트워크 통신이 가능하다
root@MyServer:~# ps -ef | grep docker
root 3471 1 0 02:34 ? 00:00:01 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
docker 데몬에 --icc=false 옵션이 존재하지 않음 (취약)
root@MyServer:~# docker network ls --quiet | xargs docker network inspect --format '{{.Name}}: {{ .Options }}'
bridge: map[com.docker.network.bridge.default_bridge:true com.docker.network.bridge.enable_icc:true com.docker.network.bridge.enable_ip_masquerade:true com.docker.network.bridge.host_binding_ipv4:0.0.0.0 com.docker.network.bridge.name:docker0 com.docker.network.driver.mtu:1500]
host: map[]
none: map[]
icc가 true로 되어 있어 통신이 가능한 보안 취약점이다
# dockerd --icc=true 옵션 추가하여 데몬 재시작
/etc/default/docker에 DOCKER_OPTS='--icc=false" 문구 추가
ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_OPTS
도커 데몬 재시작
root@MyServer:~# systemctl start docker
root@MyServer:~# systemctl status docker
옵션 적용 확인
root@MyServer:~# docker network ls --quiet | xargs docker network inspect --format '{{.Name}}: {{ .Options }}'
...
com.docker.network.bridge.enable_icc:false
...
기본적으로 컨테이너의 user namespace는 호스트의 namespace와 동일하다. 즉, 컨테이너 내부의 root 사용자는 호스트 시스템의 root 사용자이므로 root로 실행되는 컨테이너 프로세스의 손상으로 Docker 호스트 또한 손상될 수 있다. 일반적으로 컨테이너에는 root 권한이 필요하지 않으므로 컨테이너에 있는 애플리케이션은 root 권한으로 실행하지 않아야 한다
컨테이너에서 계정이 root로 실행되지 않아야 한다
도커 컨테이너에서 user 격리하는 내용은 내 블로그
https://velog.io/@numerok/%EB%8F%84%EC%BB%A4-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EA%B2%A9%EB%A6%AC#%EB%8F%84%EC%BB%A4-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%97%90%EC%84%9C-user-%EB%84%A4%EC%9E%84%EC%8A%A4%ED%8E%98%EC%9D%B4%EC%8A%A4-%EA%B2%A9%EB%A6%AC-%EC%8B%A4%EC%8A%B5---%EA%B3%BC%EC%A0%9C-3
에서 실습하였으니 참고 !!