프로젝트를 진행하며 발견된 도커의 보안 취약점 정리
inter-container communication(icc)
icc는 네트워크의 옵션으로 네트워크의 컨테이너간 통신을 사용/미사용 처리하는 옵션
컨테이너간 불필요한 통신을 제한하도록 권고 (필요 사유 기입시 허용)
icc: true = 컨테이간 통신가능
icc: false = 컨테이너간 통신 불가능
디폴트 브릿지 icc 적용전 후 테스트
디폴트 브릿지를 사용한 통신
디폴트 브릿지를 사용시 DNS사용이 불가능하기에 컨테이너 이름이 아닌 컨테이너 IP 사용
# nginx 컨테이너 생성
docker run -d --name test-nginx nginx
# nginx의 컨테이너 아이피 확인
docker inspect test-nginx | grep IPAdd
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",
# nginx 컨테이너로 통신
docker run --rm --name test-curl curlimages/curl curl http://172.17.0.2:80
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 615 100 615 0 0 145k 0 --:--:-- --:--:-- --:--:-- 150k
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
디폴트 브릿지의 icc 적용
icc 적용
/etc/docker/daemon.json
{
...
"icc": false
...
}
icc 확인
docker network inspect bridge | grep enable_icc
"com.docker.network.bridge.enable_icc": "false",
icc 적용 후 디폴트 브릿지를 통신 테스트
# 기존 컨테이너 삭제후 재기동
docker stop test-nginx ; docker rm test-nginx
docker run -d --name test-nginx nginx
# 컨테이너 아이피 확인
docker inspect test-nginx | grep IPAdd
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",
# 컨테이너간 통신 테스트
docker run --rm --name test-curl curlimages/curl curl http://172.17.0.2:80
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:02:13 --:--:-- 0
curl: (28) Failed to connect to 172.17.0.2 port 80 after 133158 ms: Could not connect to server
커스텀 네트워크 icc 적용전 후 테스트
icc 적용 전 테스트
# 네트워크 생성
docker network create \
--opt com.docker.network.bridge.enable_icc=true \
icc-net
# 네트워크 옵션 확인
docker network inspect icc-net | grep icc
"Name": "icc-net",
"com.docker.network.bridge.enable_icc": "true"
# nginx 컨테이너에 네트워크 할당.
docker stop test-nginx ; docker rm test-nginx
docker run -d --name test-nginx --network icc-net nginx
# nginx 와 동일한 네트워크 할당후 컨테이너 명으로 통신
docker run --rm --name ltest-cur --network icc-net curlimages/curl curl http://test-nginx:80
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 615 100 615 0 0 183k 0 --:--:-- --:--:-- --:--:-- 300k
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
icc 적용 후 테스트
# nginx 컨테이너 삭제
docker stop test-nginx ; docker rm test-nginx
# 네트워크 삭제
docker network rm icc-net
# icc false로 네트워크 재생성
docker network create \
--opt com.docker.network.bridge.enable_icc=false \
icc-net
# 네트워크 옵션 확인
docker network inspect icc-net | grep icc
"Name": "icc-net",
"com.docker.network.bridge.enable_icc": "false"
# 네트워크 할당 된 nginx 컨테이너 생성
docker run -d --name test-nginx --network icc-net nginx
# 같은 네트워크에서 통신
docker run --rm --name ltest-cur --network icc-net curlimages/curl curl http://test-nginx:80
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:02:12 --:--:-- 0
curl: (28) Failed to connect to test-nginx port 80 after 132533 ms: Could not connect to server
docker compose에 적용하는 방법
docker-compose.yml
...
networks:
icc-net:
name: icc-net
driver_opts:
com.docker.network.bridge.enable_ic: "false"'보안' 카테고리의 다른 글
| 도커 보안 취약점(userland-proxy) (0) | 2025.08.27 |
|---|---|
| 도커 보안 취약점(tls 인증서 사용) (0) | 2025.08.26 |
| 도커 보안 취약점(원격 로그서버 미사용) (0) | 2025.08.24 |
| 도커 보안 취약점(권한 설정 미흡) (0) | 2025.08.23 |