글을 작성하게 된 계기
회사에서 인프라 작업을 하던 중 11번 포트 를 알게 되었고, 이를 정리하기 위해 글을 작성하게 되었습니다.
1. 11번 포트란?
Systat(System Status) 또는 Active Users는 인터넷 초기에 만들어진 프로토콜로, 시스템 디버깅, 상태 점검, 측정 등을 위한 프로토콜 입니다. 클라이언트가 특정 서버의 포트 11번으로 TCP 또는 UDP를 통해 접속을 시도하면, 서버는 현재 시스템에 로그인한 사용자들의 목록과 간단한 시스템 상태 정보를 아무런 인증 과정 없이 클라이언트에게 전달해 줍니다.
1980 ~ 1990년대 초반과 같은 초기 인터넷 시대에는 관리자가 서버 상태를 빠르게 확인하거나 장애를 점검할 때 유용했습니다. 그러나 인터넷이 보급되고 보안이 중요해지며, 해당 프로토콜의 문제점은 빠르게 드러났습니다. 11번 포트를 사용하면 인증 절차 부재, 민감한 시스템 정보 노출 등과 같은 보안적 이슈를 야기할 수 있기 때문에요. 물론 이는 어느 포트라도 시스템 정보를 노출하면 일어날 수 있는 문제이긴 합니다. 말로 설명하는 것보다 직접 보는 것이 빠르기 때문에 간단한 실습을 해보겠습니다.
- 인증 절차 부재
- 민감한 시스템 정보 노출
2. 실습
11번 포트를 사용하는 서비스를 도커 컨테이너로 실행한 후, 11번 포트가 열려있을 때 http 요청을 합니다. 이때 잘못된 방식으로 정보를 노출하면 어떻게 되는지 확인해 보겠습니다. 실습을 위해 극단적으로 서버의 정보를 노출한 예제이므로, 실제 운영 환경에서는 절대 사용하지 않도록 합니다.
- Dockerfile 작성
- Dockerfile 빌드 및 컨테이너 실행
- 11번 포트로 접속
2-1. Dockerfile 작성
먼저 도커 파일을 작성합니다. inetd는 요청이 들어오면 정의된 명령어를 실행해서 그 결과를 보내주는, 즉, 컨테이너 내부에서 명령어(/usr/bin/w)를 실행한 뒤, 그 출력 결과를 반환 합니다. systat stream tcp nowait nobody /usr/bin/w w 는 11번 포트로 요청이 오면 /usr/bin/w를 실행해 그 결과를 반환 합니다. 이를 통해 의도된 방식으로 정보를 노출합니다.
1
2
3
4
5
6
7
8
9
10
FROM ubuntu:14.04
# inetd 설치 및 필수 유틸리티 설치
RUN apt-get update && \
apt-get install -y openbsd-inetd net-tools procps && \
echo "systat stream tcp nowait nobody /usr/bin/w w" >> /etc/inetd.conf && \
echo "inetd 실행 설정 완료"
# inetd를 실행해 systat 서비스 활성화(11번 포트)
CMD ["/usr/sbin/inetd", "-d"]
2-2. Dockerfile 빌드 및 컨테이너 실행
다음으로 도커 파일을 빌드한 후, 컨테이너를 실행합니다.
1
2
$ docker build -t ubuntu-systat .
$ docker run -d --name ubuntu-systat-container -p 8011:11 ubuntu-systat
2-3. 11번 포트로 접속
nc 명령어를 통해 8011 포트로 접속해 시스템 상태를 확인합니다.
1
2
3
4
$ nc localhost 8011
12:24:20 up 10 days, 23:37, 0 users, load average: 3.01, 2.91, 2.92
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
이는 다음과 같은 보안적 이슈를 야기할 수 있습니다. 즉, 인터넷이 보급되기 시작한 초기에는 11번 포트로 접속해 이런 정보를 인증/인가 없이 편리하게 확인했지만, 현재는 이런 방식이 보안적으로 취약하다는 것을 알고 사용하지 않는 것이죠.
현재 서버의 시스템 시각 노출: 이를 통해 공격자는 서버의 시간대를 파악할 수 있으며, 이는 공격 시도를 위한 시간 계산을 할 수 있습니다.서버가 재부팅 기록: 서버가 보안 업데이트나 패치를 오랜 기간 동안 적용하지 않았을 가능성을 나타내는 지표가 되며, 공격자가 시스템이 취약할 가능성을 추측할 수 있습니다.서버에 접속된 사용자 수 노출: 이를 통해 시스템 관리자의 활동 시간을 확인하고, 관리자가 없거나 활동이 없는 시간대를 노려 공격을 진행할 수 있습니다.부하 평균(Load Average) 정보 노출: 현재 시스템이 얼마나 바쁜 상태인지를 의미하며, 공격자는 시스템 부하 상태에 따라 공격 타이밍을 정할 수 있습니다.접속된 사용자 정보 정보 노출: 공격자는 계정 이름, IP 주소, 접속 방법 등을 이용해 추가적인 공격 벡터를 발견하고, 보다 효과적으로 시스템에 침투할 수 있습니다.
현대의 대부분의 리눅스 배포판과 운영체제에서는 이런 문제가 있는 Systat 서비스 자체가 기본적으로 설치되지 않거나, 있어도 기본 상태에서 비활성화되어 있습니다. 따라서 특별한 이유로 활성화하지 않는 이상, 일반적인 환경에서는 11번 포트가 자동으로 정보를 노출하는 상황은 잘 발생하지 않습니다.
AWS EC2 인스턴스의 보안 그룹 설정을 하면 실제로는 이런 문제가 발생할 가능성이 낮습니다.
3. 정리
11번 포트를 사용하는 것이 왜 보안 측면에서 취약한지 살펴보았습니다. 보안 측면에서는 중요하지만, 솔직히 실용적인지는 잘 모르겠는데요, 클라우드 환경에서는 보안 그룹으로 이를 막아놓기 때문입니다. 그래도 새로운 내용을 알 수 있어서 재미있긴 했습니다. 😃