본문 바로가기
정보보호 (Security)

Docker 및 Kubernetes API 서비스 보안 점검 및 보호 조치

by 날으는물고기 2025. 2. 26.

Docker 및 Kubernetes API 서비스 보안 점검 및 보호 조치

Docker 및 Kubernetes API는 컨테이너 및 클러스터를 관리하는 핵심 요소이며, 잘못된 설정이나 보안 조치 부족으로 인해 해커의 표적이 될 수 있습니다. Docker API 탐지, 분석, 보안 점검 및 개선 방안이며, 이를 위해 Masscan, ZGrab, Nmap 등의 도구를 활용하여 탐지하고 분석한 뒤, 보안 수준을 점검하는 과정입니다.

Docker API 탐지

Masscan을 사용해 네트워크에서 Docker API(2375, 2376 포트)가 열려 있는 시스템을 탐지하는 것이 첫 단계입니다.

Masscan 사용 예시

masscan -p2375,2376 192.168.1.0/24 --rate=1000
  • -p2375,2376: Docker API가 실행될 가능성이 있는 포트인 2375(비암호화)와 2376(TLS 암호화) 포트를 스캔.
  • 192.168.1.0/24: 스캔할 네트워크 범위. (환경에 맞춰 변경)
  • --rate=1000: 초당 1000개의 패킷을 보내는 스캔 속도.

결과 분석

Masscan의 결과는 탐지된 IP 주소와 포트가 열려 있는 시스템 목록을 제공합니다. 이 정보를 통해 Docker API가 열려 있는 호스트를 식별할 수 있습니다.

결과 예시

Discovered open port 2375/tcp on 192.168.1.10
Discovered open port 2376/tcp on 192.168.1.15

이 결과는 192.168.1.10에서 비암호화된 Docker API가 실행 중이고, 192.168.1.15에서는 암호화된 Docker API가 실행 중임을 나타냅니다.

Docker API 분석

Masscan으로 탐지된 시스템을 ZGrab 또는 Nmap을 통해 더 깊이 분석할 수 있습니다.

ZGrab을 사용한 Docker API 분석

ZGrab을 사용해 Docker API에 접근하여 버전 및 API 정보를 수집합니다.

zgrab2 http --port 2375 --endpoint /version --output results.json
  • --port 2375: Docker API의 비암호화 포트에 대해 스캔.
  • --endpoint /version: Docker API의 버전 정보를 제공하는 엔드포인트.
  • --output results.json: 결과를 JSON 파일로 저장.

ZGrab 결과 예시

{
  "data": {
    "Version": "20.10.7",
    "APIVersion": "1.41",
    "OS": "linux",
    "Arch": "amd64"
  }
}

이 결과는 Docker API가 어떤 버전을 사용 중인지, 운영체제와 아키텍처 정보를 보여줍니다. 이를 통해 잠재적인 취약점 여부를 확인할 수 있습니다.

Nmap을 사용한 Docker API 분석

Nmap의 NSE(Nmap Scripting Engine) 스크립트 중에는 Docker API를 탐지하고 관련 정보를 수집할 수 있는 스크립트가 존재합니다. 이러한 스크립트는 Nmap을 사용해 네트워크에서 Docker API가 열려 있는 포트를 찾고, API에 대한 추가 정보를 수집할 수 있도록 돕습니다.

Nmap과 NSE 스크립트 개요

Nmap은 네트워크 스캐닝 도구로 유명하지만, NSE 스크립트 기능을 통해 다양한 서비스의 정보를 보다 깊이 있게 수집할 수 있습니다. Nmap은 기본 포트 스캔 외에도 애플리케이션 레벨에서 동작하는 특정 스크립트를 통해 서비스에 대한 세부 정보를 가져올 수 있습니다. Docker API 탐지와 관련된 Nmap의 스크립트는 docker-api라는 이름의 스크립트로, 기본적으로 Docker API가 실행 중인 서버를 스캔하고 버전 정보 등을 수집할 수 있습니다.

Docker API 탐지 NSE 스크립트 사용 방법

Docker API를 탐지하는 Nmap 스크립트를 실행하려면 다음 명령을 사용할 수 있습니다.

nmap -p 2375 --script docker-api --script-args docker.version -sV <target-ip>
  • -p 2375: Docker API의 기본 포트(2375)를 스캔합니다. Docker API가 HTTPS를 사용하는 경우 -p 2376으로 변경합니다.
  • --script docker-api: Nmap의 docker-api NSE 스크립트를 실행하여 해당 포트에서 Docker API가 실행 중인지 확인합니다.
  • --script-args docker.version: Docker API 버전 정보를 요청합니다.
  • -sV: 서비스 버전 탐지 모드를 활성화하여, 특정 포트에서 실행 중인 서비스의 세부 정보를 수집합니다.
  • <target-ip>: 스캔할 대상 서버의 IP 주소를 입력합니다.

추가 스크립트 인수

docker-api 스크립트는 다양한 인수를 통해 Docker API에 대한 추가 정보를 요청할 수 있습니다. 예를 들어, docker.containers 인수를 사용하면 Docker 컨테이너 정보를 가져올 수 있습니다.

nmap -p 2375 --script docker-api --script-args "docker.containers" -sV <target-ip>

이 명령을 통해 해당 서버에서 실행 중인 Docker 컨테이너 목록을 가져올 수 있습니다.

Nmap Docker API 스크립트의 동작 방식

NSE 스크립트는 다음과 같은 작업을 수행합니다.

  • 포트 탐지: 먼저 지정된 포트(2375, 2376)에서 Docker API가 실행 중인지 확인합니다.
  • 버전 정보 수집: /version 엔드포인트를 통해 Docker 엔진의 버전 정보를 요청합니다.
  • 추가 정보 요청: 스크립트 인수를 통해 API에서 컨테이너 목록, 이미지 정보 등을 추가로 요청할 수 있습니다.

 

docker-api 스크립트는 Docker API가 열려 있는 시스템을 탐지하고, 인증 설정이 제대로 되어 있지 않거나 외부에 노출된 시스템을 대상으로 한다면, 공격자가 시스템을 악용할 수 있는 가능성을 파악할 수 있습니다. 특히, 인증되지 않은 API 호출이 가능한 경우 보안에 심각한 문제가 될 수 있습니다.

예시 결과

아래는 Nmap Docker API 스크립트를 실행한 결과 예시입니다.

PORT     STATE SERVICE VERSION
2375/tcp open  docker   Docker REST API 1.40 (Docker Engine 20.10.8)
| docker-api:
|   Version: 20.10.8
|   API Version: 1.40
|   OS: linux
|   Arch: amd64
|_  Kernel Version: 5.4.0-54-generic

이 스캔 결과는 2375 포트에서 Docker REST API가 열려 있고, 해당 API가 Docker Engine 20.10.8 버전을 사용 중임을 보여줍니다.

  • 포트 노출 방지: Docker API가 인터넷에 노출되지 않도록 하고, 특히 인증이 없는 경우에는 반드시 방화벽 설정을 강화하거나 API 접근을 제한해야 합니다.
  • TLS 사용 권장: Docker API를 사용하는 경우, 기본적으로 TLS를 활성화하여 데이터를 안전하게 암호화해야 합니다. 2375 포트는 비암호화 연결이기 때문에, 2376 포트(TLS 사용)를 사용하는 것이 좋습니다.
  • NSE 스크립트 사용: Nmap의 Docker API 스크립트를 주기적으로 사용하여 Docker API가 노출되지 않도록 시스템을 모니터링하는 것이 중요합니다.

 

Nmap의 docker-api NSE 스크립트는 네트워크에서 노출된 Docker API 포트를 탐지하고, API 버전 및 Docker 엔진의 세부 정보를 수집할 수 있습니다. 이 스크립트를 사용하면 네트워크 보안 점검 시 Docker API의 보안 상태를 확인할 수 있으며, 스캔을 통해 잠재적인 취약점을 발견하고 대응할 수 있습니다. 이 결과는 해당 호스트에서 Docker API가 어떤 버전을 사용하는지, 운영체제와 커널 버전 등의 세부 정보를 제공합니다.

보안 점검 및 개선 방안

Docker API가 외부에 노출되어 있거나 인증 설정이 없다면 심각한 보안 위협이 될 수 있습니다. 이를 방지하기 위한 점검 및 개선 방안입니다.

Docker API 노출 확인

비암호화된 포트(2375)를 통해 Docker API가 외부에 노출되어 있는지 확인하고, 노출된 경우 해당 포트를 차단하거나 TLS(암호화)를 설정해야 합니다.

  • IPTABLES를 사용한 포트 차단 예시
iptables -A INPUT -p tcp --dport 2375 -j DROP
  • UFW를 사용한 포트 차단 예시
ufw deny 2375/tcp

인증 설정 확인

Docker API에 TLS 또는 인증 설정이 없는 경우, 인증 설정을 적용해야 합니다. Docker는 TLS를 통한 API 보안을 지원합니다.

 

TLS 설정 파일 생성

mkdir -p /etc/docker/certs.d
openssl genrsa -aes256 -out /etc/docker/certs.d/server-key.pem 4096
openssl req -new -key /etc/docker/certs.d/server-key.pem -out /etc/docker/certs.d/server.csr
openssl x509 -req -days 365 -in /etc/docker/certs.d/server.csr -signkey /etc/docker/certs.d/server-key.pem -out /etc/docker/certs.d/server-cert.pem

Docker 데몬 설정 파일(/etc/docker/daemon.json)에 TLS 적용

{
  "tlsverify": true,
  "tlscacert": "/etc/docker/certs.d/ca.pem",
  "tlscert": "/etc/docker/certs.d/server-cert.pem",
  "tlskey": "/etc/docker/certs.d/server-key.pem",
  "hosts": ["tcp://0.0.0.0:2376", "unix:///var/run/docker.sock"]
}
  • 이후 systemctl restart docker 명령으로 Docker를 재시작합니다.

인증되지 않은 API 호출 방지

비인증된 호출을 방지하기 위해서는 기본적으로 Docker API에 대한 접근을 차단하거나, 반드시 인증서 또는 토큰 기반 인증을 적용해야 합니다.

  • Docker Swarm을 사용하는 경우, 인증을 위해 --tlsverify 옵션을 적용한 다음 인증서 기반 접근을 강제할 수 있습니다.

점검 이후 보안 테스트

보안 설정을 완료한 후, 다시 Nmap 또는 ZGrab을 사용해 보안 설정이 제대로 적용되었는지 확인합니다.

  • TLS 활성화 후 포트 스캔
nmap -p 2376 --script docker-api --script-args "docker.version" -sV <target-ip>
  • 인증 적용 후 API 테스트

Docker API에 접근할 때 인증서가 필요한지 확인합니다. 인증이 없으면 더 이상 API 정보를 수집할 수 없어야 합니다.

zgrab2 https --port 2376 --endpoint /version --output results.json
  1. Masscan으로 Docker API 포트가 열려 있는 시스템을 탐지합니다.
  2. ZGrabNmap을 사용해 API 버전 및 세부 정보를 수집하여 취약점 여부를 확인합니다.
  3. 보안 설정(포트 차단, 인증 설정)을 적용해 Docker API의 노출을 방지합니다.
  4. 설정 후 다시 스캔해 보안 설정이 제대로 적용되었는지 확인합니다.

이러한 방법을 통해 Docker API의 노출 여부를 탐지하고, 보안 설정을 적용해 시스템을 안전하게 보호할 수 있습니다.

 

Nmap과 ZMap은 모두 네트워크 스캐닝 도구로, 네트워크 상의 열린 포트를 탐지하거나 네트워크 서비스 정보를 수집하는 데 사용됩니다. 그러나 이 두 도구는 목적, 성능, 사용 사례 등에서 차이점이 있으며, 각각의 장단점이 존재합니다.

Nmap (Network Mapper)

Nmap은 1997년에 처음 개발된 이후로 네트워크 보안 및 스캐닝 분야에서 가장 널리 사용되는 도구입니다. 단순한 포트 스캐닝부터 복잡한 네트워크 분석까지 매우 다양한 기능을 제공합니다.

주요 기능

  • 포트 스캐닝: 특정 IP 범위에서 열린 포트를 탐지합니다.
  • 서비스 및 버전 탐지: 열린 포트에서 실행 중인 서비스와 해당 서비스의 버전 정보를 확인합니다.
  • 운영체제(OS) 탐지: 패킷 분석을 통해 운영체제 유형과 버전을 추정합니다.
  • NSE(Nmap Scripting Engine): 다양한 NSE 스크립트를 사용하여 취약점 검사, 애플리케이션 분석 등 심화된 스캔을 수행할 수 있습니다.
  • Ping 스윕: 네트워크 상에서 활성화된 호스트를 탐지합니다.

장점

  • 다양한 기능: 포트 스캐닝, 서비스 및 버전 탐지, OS 탐지 등 다목적 도구로 매우 유연하게 사용할 수 있습니다.
  • 세밀한 스캔: 세밀하게 설정된 스캔을 통해 포트 및 서비스 정보를 심층적으로 수집할 수 있습니다.
  • NSE 스크립트 지원: 취약점 분석, 악성 코드 탐지, HTTP 탐색 등 다양한 스크립트를 이용해 네트워크 및 애플리케이션 분석이 가능합니다.
  • 안정성: 오랜 기간 발전해왔기 때문에 다양한 네트워크 환경에서 안정적으로 동작합니다.

단점

  • 속도: 다른 도구에 비해 상대적으로 느릴 수 있습니다. 대규모 네트워크에서 사용하기에는 스캔 속도가 제한적입니다.
  • 리소스 소모: 특히 심화된 스캔(예: 서비스 및 OS 탐지, NSE 사용)에서는 네트워크 대역폭 및 시스템 리소스를 많이 사용합니다.
  • 대규모 네트워크 환경: 수백만 개의 IP 주소를 스캔해야 하는 상황에서는 비효율적일 수 있습니다.

ZMap

ZMap은 2013년에 발표된 도구로, 고속 대규모 네트워크 스캐닝을 위해 설계되었습니다. 초당 수백만 개의 패킷을 보내는 기능을 제공하며, 대규모 네트워크 환경에서 공개된 포트를 빠르게 탐지하는 데 최적화되어 있습니다.

주요 기능

  • 고속 스캐닝: 수백만 개의 IP 주소를 초당 매우 빠르게 스캔할 수 있습니다.
  • 단일 패킷 방식: 각 IP에 대해 단일 패킷을 전송해 포트가 열려 있는지 확인하는 방식으로 동작합니다.
  • 대규모 네트워크 분석: 인터넷 전체 스캔 또는 수십만 개의 IP를 대상으로 한 스캔에서 매우 효율적입니다.

장점

  • 빠른 속도: Nmap에 비해 훨씬 빠른 속도로 네트워크를 스캔할 수 있습니다. 초당 수백만 개의 IP 주소를 스캔할 수 있어, 대규모 네트워크 스캐닝에 최적화되어 있습니다.
  • 대규모 스캔: 대규모 네트워크나 인터넷 전체 스캔을 위해 설계되었습니다. 특정 포트가 열려 있는지 확인하기 위한 대규모 포트 스캔에 적합합니다.
  • 경량 도구: 시스템 리소스를 적게 사용하며, 단일 패킷을 사용해 포트 열림 여부만을 확인하므로 대역폭 소모도 적습니다.

단점

  • 기능 제한: ZMap은 기본적으로 단일 패킷을 보내 포트가 열려 있는지 여부만 확인할 수 있으며, Nmap처럼 심층적인 서비스 분석이나 운영체제 탐지 기능을 제공하지 않습니다.
  • 정밀도 부족: 서비스 버전 탐지, 운영체제 탐지 등 고급 분석 기능이 없기 때문에, 스캔 후 추가 분석이 필요할 수 있습니다.
  • 기본 탐지 기능에 집중: Nmap의 NSE 스크립트처럼 다양한 추가 분석 기능을 지원하지 않으며, 포트가 열려 있는지 여부만 확인합니다.

Nmap vs. ZMap: 비교 분석

항목 Nmap ZMap
스캔 속도 상대적으로 느림, 고급 기능이 많아 리소스 소모가 큼 매우 빠름, 초당 수백만 개의 IP 스캔 가능
기능 포트 스캐닝, 서비스/OS 탐지, NSE 스크립트를 통한 취약점 분석 등 다양한 기능 제공 포트 열림 여부만 확인하는 기본적인 스캔, 추가적인 심층 분석 기능 부족
사용 사례 소규모에서 중간 규모의 네트워크 및 서비스 분석, 보안 평가 대규모 네트워크, 인터넷 전체 스캔, 고속 포트 탐지에 적합
정밀도 세밀한 정보 수집 가능, 서비스 및 운영체제에 대한 심층 분석 가능 정밀한 정보 수집 불가, 포트 열림 여부만 확인
리소스 소모 심화된 스캔에서 CPU 및 네트워크 자원 많이 소모 경량 도구로 리소스 소모가 적음
보안 분석 취약점 분석 및 서비스 감시를 위한 다목적 도구 보안 분석 기능 없음, 단순 포트 스캔에 중점
사용 난이도 상대적으로 복잡한 설정 및 많은 옵션 제공, 고급 사용자에게 적합 상대적으로 간단하고 빠르게 실행 가능, 특정 목적에만 초점을 맞춘 도구

장단점 비교

Nmap의 장단점

장점

  • 다목적 도구: 포트 스캐닝부터 심층적인 서비스 분석 및 취약점 탐지까지 가능한 다양한 기능 제공.
  • 세밀한 제어: 스캔 설정, 옵션 조정, NSE 스크립트를 통한 다양한 사용 사례 지원.
  • 보안 테스트 지원: 네트워크 보안 평가에 최적화된 도구로, 서비스 분석 및 보안 취약점 탐지에 유용.

단점

  • 느린 속도: ZMap에 비해 속도가 느리고 대규모 네트워크 스캔에서는 시간이 많이 소요될 수 있음.
  • 리소스 사용량: 심화된 스캔에서는 CPU와 네트워크 대역폭을 많이 사용함.

ZMap의 장단점

장점

  • 빠른 속도: 매우 빠른 스캔 속도로 대규모 네트워크 분석에 적합.
  • 경량 도구: 시스템 리소스를 적게 사용하며 단일 패킷 스캔 방식으로 네트워크 대역폭도 효율적으로 사용.
  • 대규모 네트워크 스캔: 수백만 개의 IP에 대해 빠르게 스캔할 수 있어, 인터넷 전체 스캔에 적합.

단점

  • 기능 제한: 포트 열림 여부만 확인할 수 있고, 심층적인 서비스 분석이나 보안 평가 기능이 없음.
  • 정밀도 부족: 서비스 버전 정보나 운영체제 정보 등을 제공하지 않아, 추가적인 도구와 결합해 분석해야 할 필요가 있음.

사용 사례

  • Nmap은 보안 전문가, 네트워크 관리자들이 세밀한 네트워크 분석, 서비스 및 버전 탐지, 취약점 검사를 위해 주로 사용합니다. 소규모에서 중간 규모의 네트워크에 적합하며, 심층 분석이 필요할 때 유용합니다.
  • ZMap은 인터넷 전체 스캔이나 대규모 네트워크 포트 스캔에서 빠르게 결과를 얻고자 할 때 사용됩니다. 서비스 분석은 필요하지 않지만 빠른 포트 탐지가 필요한 상황에 적합합니다.

 

따라서, 세밀한 분석과 취약점 탐지가 필요한 경우에는 Nmap이 적합하며, 대규모 네트워크에서 빠른 포트 탐지가 필요한 경우에는 ZMap을 사용하는 것이 좋습니다.

728x90

댓글