Trawling

IPv4 전체 포트 0 스캔서 PLC 원격 화면·통화 기록 노출 사례 확인

ACIDVEGAS 블로그 운영자는 2026년 11월 6일 공개 글에서 masscan으로 IPv4 전체의 TCP 포트 0을 스캔해 1,173,626개 IP 주소의 SYN-ACK 응답을 받았다고 보고했습니다. 응답 대부분은 데이터를 보내지 않았거나 경계 장비·로드밸런서에서 온 것이었지만, 분류 가능한 서비스 가운데 비밀번호 없이 접속되는 PLC 원격 화면과 연결 즉시 통화 기록을 보내는 Avaya 전화 시스템이 있었습니다. 소켓에서 포트 0은 임시 포트 할당 요청값이지만 TCP 패킷에는 목적지 포트 0을 넣을 수 있어, 전달 규칙에 따라 기존 서비스가 그 연결을 받을 수 있습니다.

ACIDVEGAS 블로그 운영자는 2026년 11월 6일 포트 0에 IRC 네트워크를 연결한 경험과 IPv4 전체의 TCP 포트 0 스캔 결과를 공개했습니다. masscan으로 1,173,626개 IP 주소에서 SYN-ACK 응답을 받았으며, 후속 응답을 분류해 비밀번호 없이 접속되는 산업용 PLC 원격 화면과 연결 즉시 통화 기록을 보내는 전화 시스템 등을 확인했다고 보고했습니다.

포트 0은 소켓 API와 TCP 패킷에서 다르게 작동합니다. Linux에서 프로그램이 bind()에 포트 0을 지정하면 커널은 실제 0번 포트에 서버 소켓을 여는 대신 임시 포트를 할당합니다. 반면 TCP 헤더의 출발지·목적지 포트 필드는 각각 16비트여서 패킷 목적지를 0으로 지정할 수 있습니다. IANA 등록부는 0/tcp를 Reserved로 두며 RFC 6335는 예약 번호를 일반 용도에 배정하지 않는 값으로 설명합니다. 예약 상태만으로 네트워크 장비의 수신이나 전달까지 막히지는 않습니다.

ACIDVEGAS는 자신이 운영하는 IRC 네트워크를 사례로 들었습니다. 서버 프로그램은 평소처럼 TCP 6667번 포트에서 연결을 기다리고, Linux 방화벽의 PREROUTING 규칙이 외부에서 들어온 목적지 포트 0 패킷을 6667번으로 바꿔 전달합니다. 응답 패킷도 경계 장비가 되돌려 보내므로 클라이언트는 외부 포트 0으로 연결한 채 IRC 대화를 주고받습니다. 이 구성에서는 포트 전달 규칙이 외부 목적지와 내부 서비스 포트를 이어 줍니다.

접속 도구마다 포트 0을 처리하는 방식도 달랐습니다. 글쓴이가 시험한 OpenBSD nc와 telnet은 포트 번호를 거부했고 Chromium은 안전하지 않은 포트로 차단했지만, socat과 Python asyncio는 접속에 성공했습니다. Linux의 getpeername()은 목적지 포트 0을 연결되지 않은 소켓의 내부 표식으로 취급해 실제 연결에서도 ENOTCONN을 반환했습니다. 글쓴이는 이 동작 때문에 Python의 블로킹 SSL 래퍼가 연결을 잘못 판단해 실패했다고 설명했습니다.

일반 연결 도구는 목적지 포트 0을 사전에 거부할 수 있지만, masscan은 커널의 일반 TCP 연결 API를 거치지 않고 SYN 패킷을 직접 만들어 보냅니다. 글쓴이는 이 방법으로 IPv4 주소 전체를 조사해 포트 0에 응답하는 주소를 찾았습니다.

응답은 IP 주소 단위로 집계됐으며, 경계 장비가 뒤쪽 주소를 대신해 응답한 경우가 섞여 있었습니다. 응답을 보낸 /24 네트워크 블록 가운데 8%에 전체 응답 주소의 78%가 몰렸고, 일부 주소 대역에서는 거의 모든 주소가 응답했습니다. 글쓴이는 이런 밀집 응답을 개별 서버가 아니라 경계의 방화벽이나 라우터가 대신 보낸 결과로 해석했습니다. 전체 응답 주소 중 1,116,675개는 TCP 연결을 마친 뒤 데이터 한 바이트도 보내지 않았습니다.

데이터를 보낸 주소는 56,951개였습니다. 이 가운데 53,741개, 즉 94%는 F5 BIG-IP 로드밸런서가 연결 재설정 이유를 담아 보낸 메시지였습니다. 같은 고정 토큰만 돌려준 주소 305개를 제외하면 서비스 응답을 분류할 수 있는 주소는 2,905개였으며, 이는 SYN-ACK를 보낸 전체 주소의 약 0.25%입니다. 분류된 응답에서는 SSH, 데이터베이스, 라우터 관리 화면, 임베디드 장비 등 이미 쓰이는 서비스가 확인됐습니다.

산업 장비 사례로 글은 벨기에의 Beckhoff CX5120 PLC를 소개했습니다. 장비는 Windows CE 원격 화면 프로토콜인 CERDISP로 연결 직후 화면 정보를 보냈습니다. 글쓴이는 Beckhoff의 CERHOST 클라이언트를 분석해 응답의 표식이 비밀번호가 필요 없음을 뜻하고, 클라이언트가 마우스와 키보드 입력을 전송한다는 점에서 원격 화면을 인증 없이 보고 조작할 수 있는 상태라고 판단했습니다. 글에는 건물 제어기, 전력 계측기, 공장 설비 통신을 포함한 다른 임베디드 시스템의 응답도 나옵니다.

접속과 동시에 데이터를 보내는 전화 시스템도 발견됐습니다. ACIDVEGAS는 Avaya IP Office 시스템이 있는 21개 주소에서 연결한 상대에게 SMDR 통화 기록을 먼저 보냈다고 보고했습니다. 주소별 약 7.5KB 분량의 데이터에는 통화 시작 시각, 전화번호, 내선 번호, 직원 이름과 내부 주소 등이 포함된 통화 기록 37~62건이 담겼습니다. 가장 오래된 기록은 2018년 12월, 가장 최근 기록은 스캔 며칠 전이었습니다. masscan이 배너를 약 7.5KB까지만 수집했기 때문에 각 시스템에서 받은 것은 통화 기록의 일부입니다. 21개 중 19개 주소는 영국에 있었습니다.

글쓴이는 일부 가정용 게이트웨이나 통신사 배포 장비에 외부 포트 0이 남은 포트 전달·NAT 설정이 들어갔을 가능성을 원인으로 추정했습니다. 스캔에서 확인된 서비스는 이미 쓰이는 서비스였으며, 경계 장비가 포트 0 패킷을 내부 서비스 포트로 전달하면 예약된 번호를 통해서도 외부 접속이 이어질 수 있습니다.

참고 자료

오류 제보