포트 스캐닝이란 무엇인가?
컴퓨터 네트워크에서 “포트”는 컴퓨터에서 실행 중인 특정 프로세스나 서비스의 네트워크 접속 지점을 식별하는 데 사용되는 추상적인 개념입니다. 각 포트에는 0부터 65535까지의 고유한 번호가 있으며, 이 번호를 통해 컴퓨터는 수신한 데이터를 어떤 애플리케이션으로 보내야 하는지 알 수 있습니다.
컴퓨터를 하나의 큰 건물이라고 생각해 볼 수 있습니다. 포트는 그 건물 안에 있는 각 방의 문패 번호와 같습니다. 흔히 볼 수 있는 “문패 번호”에는 다음과 같은 것들이 있습니다. HTTP 웹 서비스는 일반적으로 포트 80을 사용하고, HTTPS 보안 웹은 포트 443을 사용하며, 이메일 서비스 SMTP는 포트 25를 사용합니다. 데이터 패킷이 컴퓨터에 도착하면 시스템은 포트 번호에 따라 해당 서비스나 애플리케이션으로 정확하게 “배달”합니다.
포트 스캐닝이란 무엇인가?
포트 스캐닝은 특정 데이터 패킷을 대상 머신의 각 포트로 전송한 뒤, 반환되는 응답을 바탕으로 어떤 포트가 열려 있거나 닫혀 있는지 판단하는 것입니다. 이는 누군가가 건물 밖에서 문을 하나씩 두드려 보고, 응답이 있는지 여부로 어떤 방에 사람이 있고 어떤 방이 비어 있는지 판단하는 것과 같습니다.
포트 스캐닝 자체는 중립적인 기술입니다——네트워크 관리자는 이를 사용해 시스템 보안 취약점을 점검하고, 침투 테스트 담당자는 이를 통해 시스템 방어 능력을 평가하며, 공격자는 이를 침입의 돌파구를 찾는 데 사용할 수도 있습니다.
웹사이트는 브라우저에서 어떻게 포트 스캐닝을 수행하는가?
이상하게 느껴질 수 있습니다. 평범한 웹페이지가 어떻게 당신의 컴퓨터 포트를 스캔할 수 있을까요? 그 배경에는 브라우저의 몇 가지 동작 메커니즘이 활용됩니다.
시간 기반 스캐닝 방법
초기의 브라우저 포트 스캐닝 기술은 “타이밍 공격”에 의존했습니다. 웹페이지가 XMLHttpRequest 또는 fetch를 통해 특정 포트에 요청을 보낼 때:
포트가 닫혀 있으면 브라우저는 즉시 “연결이 거부됨” 응답을 받으며, 요청은 빠르게 실패합니다
포트가 열려 있으면 브라우저는 서버 측 응답을 기다리게 되며, 이 과정은 더 오래 걸립니다
요청의 응답 시간을 측정함으로써 웹사이트는 어떤 포트가 열려 있는지 추론할 수 있습니다. 다만 이 방법은 네트워크 변동의 영향을 크게 받아 정확도에 한계가 있습니다.
iframe 기반 스캐닝 방법
이후 연구자들은 주로 Chrome 브라우저를 대상으로 하는 더 신뢰할 수 있는 기술을 발견했습니다. Chrome이 닫힌 포트에 연결을 시도할 때 브라우저는 페이지 주소를 chrome-error://chromewebdata/로 변경합니다. 이 특성을 이용하면:
웹사이트는 숨겨진 iframe을 생성하고 대상 주소(예: http://127.0.0.1:8080)를 로드합니다
포트가 닫혀 있으면 iframe의 onload 이벤트가 두 번 트리거됩니다(URL이 변경되기 때문입니다)
포트가 열려 있으면 onload 이벤트는 한 번만 트리거됩니다
onload 이벤트가 트리거된 횟수를 계산함으로써 웹사이트는 포트가 열려 있는지 여부를 정확하게 판단할 수 있습니다.
WebSocket 기반 스캐닝 방법
일부 도구는 WebSocket 연결을 이용해 포트 상태를 탐지하기도 합니다——연결에 성공하면 포트가 열려 있음을 의미하고, 연결에 실패하면 포트가 닫혀 있음을 의미합니다.
웹사이트는 왜 당신의 포트를 스캔하려 하는가?
1. 사기 방지 및 봇 탐지
많은 대형 웹사이트(일부 정부 서비스 사이트와 전자상거래 플랫폼 포함)는 포트 스캐닝을 통해 사용자가 실제 사람인지 확인합니다. 예를 들어 일부 안티봇 시스템은 127.0.0.1:8888에 연결을 시도합니다——이는 Burp Suite와 같은 보안 테스트 도구의 기본 프록시 포트입니다. 이 포트가 열려 있는 것으로 확인되면 시스템은 방문자가 보안 연구자이거나 자동화 스크립트일 가능성이 있다고 의심하고, 추가 검증을 트리거할 수 있습니다.
2. 사용자 지문 추적
연구에 따르면 브라우저 기반 포트 스캐닝 결과는 충분한 고유성을 가지므로 사용자를 추적하는 수단으로 활용될 수 있습니다. 로컬에서 열려 있는 포트를 탐지함으로써 웹사이트는 사용자가 어떤 소프트웨어를 실행 중인지 추론할 수 있습니다——예를 들어 포트 80 또는 443이 열려 있다면 사용자가 웹 서버를 실행 중일 수 있고, 포트 25가 열려 있다면 메일 서버가 실행 중일 수 있습니다. 사용자마다 설치된 소프트웨어 조합은 매우 다양하기 때문에, 이는 고유한 “소프트웨어 지문”을 형성합니다.
더 우려스러운 점은, 연구에 따르면 단 1초만 스캔해도 생성되는 포트 지문이 매우 높은 고유성을 가진다는 것입니다. 포트 스캐닝 결과가 다른 지문 기술(예: Canvas 지문, WebGL 지문 등)과 결합되어 사용될 경우 추적 능력은 더욱 강화됩니다.
3. 내부 네트워크 장치 탐지
대부분의 브라우저는 기본적으로 공용 인터넷 웹사이트가 사설 IP 주소(예: 127.0.0.1 또는 192.168.x.x)로 요청을 보내는 것을 허용합니다. 이는 악성 웹사이트가 당신의 컴퓨터 로컬 포트뿐만 아니라 집의 라우터, 스마트 TV, 네트워크 카메라 등 내부 네트워크 장치의 포트까지 스캔하여, 취약점이 있을 수 있는 장치를 찾아 공격할 수 있음을 의미합니다.
브라우저 포트 스캐닝을 어떻게 방지할 수 있는가?
1. 브라우저 확장 프로그램 사용
uBlock Origin: 설정의 “개인정보” 항목에서 “외부의 내부 네트워크 침입 차단” 옵션을 선택하면 적용됩니다
NoScript: 로컬 네트워크 접근을 차단하는 옵션을 제공합니다
일부 전용 보호 플러그인도 웹사이트가 로컬 포트를 스캔하는 것을 차단할 수 있습니다
2. 내장 보호 기능이 있는 브라우저 사용
일부 브라우저는 이미 포트 스캐닝 보호 기능을 내장하고 있습니다. 예를 들어 특정 브라우저는 알려진 악성 스캐닝 스크립트를 능동적으로 차단하고, 공용 인터넷 웹사이트의 로컬 리소스 접근을 제한합니다. Chrome 등의 브라우저도 “사설 네트워크 접근” 규격을 점진적으로 도입하고 있으며, 웹사이트가 로컬 리소스에 접근하기 전에 사용자 허가를 받도록 요구하고 있습니다.
3. 지문 브라우저 사용
더 높은 수준의 개인정보 보호가 필요한 사용자에게는 안티디텍트 브라우저가 더 포괄적인 보호 방안을 제공합니다. 이러한 도구는 서로 다른 포트 상태를 시뮬레이션하여 웹사이트가 실제 포트 스캐닝 결과를 얻지 못하게 함으로써, 기기 지문 개인정보를 효과적으로 보호할 수 있습니다.
정리
포트 스캐닝은 정당한 보안 감사에 사용될 수도 있고, 개인정보 침해에 악용될 수도 있는 기술입니다. 그 작동 원리와 잠재적 위험을 이해하는 것은 자신의 네트워크 보안을 지키기 위한 첫걸음입니다. 보안 분야의 오래된 말처럼, “당신의 ‘문’이 어디에서 열려 있는지 알아야 어느 문을 닫아야 하는지 알 수 있습니다.”
