[컴] docker 의 보안이슈, loginuid

 도커보안 / 다커 보안이슈 /보안 issue / audit log

docker 의 보안이슈, loginuid

container 를 만드는 주체인 docker deamon 이 root 권한으로 실행된다. container 를 띄우기 위해서는 root 권한으로 실행되고 있는 deamon 에게 socket 를 열어줘야만 한다. 그래야 이 정보를 docker client 로 전달해 줄 수 있다.

참고로, docker v20.10 부터 rootless mode 가 지원된다.

하지만, 어떤 문제가 있는지는 알 필요가 있다. 여기서는 ref.1 의 내용을 필자의 취향에 맞게 정리했다.

linux kernel 의 audit 기능을 이용할 때 auid 가 잡히지 않는다.

docker 는 docker client tool 과 docker deamon 이 통신하는 구조이다. 그래서 우리가 container 를 만들라고 하면, 실제로 docker deamon 이 container 를 만든다. 그래서 container 는 docker deamon 의 child process 가 된다.

docker client tool <--> docker deamon

이 docker deamon 은 init system 에 의해 생성된다. 그래서

  • Docker deamon
  • container processes

는 전부 같은 loginuid 를 갖게 된다.

그런데 init system 의 loginuid 인 4294967295 를 갖는데, 이 값은 audit log 에서 audit UID(auid) 가 unset 으로 잡힌다. 즉 누가 했는지 알 수 없게 된다.

그래서 만약 docker 를 priviliged mode 로 접근해서, host 의 configuration 을 수정하면 audit log 에 auid 로 unset 이 남게 된다. 즉, 흔적이 남지 않는다.

참고로, see also 1. 에서 container 에서 process 를 실행할 때 non-privileged user 로 실행하면, docker container 는 꽤 안전하다고 이야기 한다.

login UID

/proc/self/loginuid 에 저장된다. 이 login UID 는 proc struct 의 일부다.(/proc 관련 설명은 여기를 참고하자.)

이 녀석은 login program 에 의해 딱 한번만 set 되고, kernel 은 이 것을 reset 하는 것을 허용하지 않는다.

docker privileged mode

이 모드를 사용하면, docker container 가 root 권한으로 host system(docker 를 실행하고 있는) 이 가진 모든 device 에 접근할 수 있다. 즉 host machine 의 능력을 주게 된다. 참고로 이 기능은 podman 도 가지고 있다.

그래서 host machine 의 설정등을 변경할 수 있다. priviliged mode 는 다음과 같이 실행할 수 있다.

sudo docker run --privileged [image_name]

특정 container 가 priviliged mode 로 실행됐는지 여부는 아래 command 로 알 수 있다.

docker inspect --format='{{.HostConfig.Privileged}}' [container_id]

docker rootless mode

참고로, docker engine v20.10 부터 rootless mode 가 지원된다.

See Also

  1. Docker security | Docker Documentation : 여러 docker 의 security 이슈에 대한 이야기를 해준다.

References

  1. Podman: A more secure way to run containers | Opensource.com, 2018-10-30
  2. container in privileged mode gives it the capabilities of its host machine. For example, it e

댓글 없음:

댓글 쓰기