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
- Masscan으로 Docker API 포트가 열려 있는 시스템을 탐지합니다.
- ZGrab과 Nmap을 사용해 API 버전 및 세부 정보를 수집하여 취약점 여부를 확인합니다.
- 보안 설정(포트 차단, 인증 설정)을 적용해 Docker API의 노출을 방지합니다.
- 설정 후 다시 스캔해 보안 설정이 제대로 적용되었는지 확인합니다.
이러한 방법을 통해 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을 사용하는 것이 좋습니다.