보안

netstat를 이용해서 네트워크 상태(백도어 탐지)를 분석하는 방법(윈도우)

콩메모 2024. 1. 4. 20:43

해커는 피씨나 서버를 해킹하게 되면 숨어있다가 적절한 시간에 명령을 내리기 위해 외부에서 서버로 연결할 수 있도록 백도어를 설치해 놓을 수 있다.

이 백도어를 찾으려면 현재 피씨에서 어떤 서비스가 열려있는지.. 누가 접속해 있는지를 파악할 수 있어야 되는데, netstat 유틸리티를 통해서 어느정도 파악을 할 수 있다.

윈도우는 자체적으로도 많은 서비스들이 기본적으로 오픈이 되니, 알게 모르게 외부 연결을 대기하는 서비스들이 존재한다.

필요없는 서비스들은 중지하거나, 방화벽에서 차단을 해야 되는데 이를 지속적으로 신경쓰기란 쉬운것이 아니다.

netstat 사용법은 운영체제마다 옵션이나 방법이 약간 다를수 있는데, 여기서는 윈도우 기준으로 설명한다.

명령

netstat -na

위와 같이 -na 옵션을 주는 것이 기본적으로 많이 쓰는 옵션이다.

참고로, 개인적으로는 프로세스아이디까지 표시해주는 -nao 옵션을 주로 사용한다.


결과

활성 연결
프로토콜 로컬 주소 외부 주소 상태
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING
TCP 0.0.0.0:1433 0.0.0.0:0 LISTENING
TCP 0.0.0.0:2383 0.0.0.0:0 LISTENING
TCP 0.0.0.0:3389 0.0.0.0:0 LISTENING
TCP 0.0.0.0:47001 0.0.0.0:0 LISTENING
TCP 0.0.0.0:49152 0.0.0.0:0 LISTENING
TCP 0.0.0.0:49153 0.0.0.0:0 LISTENING
TCP 0.0.0.0:49154 0.0.0.0:0 LISTENING
TCP 0.0.0.0:49155 0.0.0.0:0 LISTENING
TCP 0.0.0.0:49159 0.0.0.0:0 LISTENING
TCP 127.0.0.1:1434 0.0.0.0:0 LISTENING
TCP 123.345.567.789:80 1.225.56.162:51056 ESTABLISHED
TCP 123.345.567.789:80 1.225.56.162:51057 ESTABLISHED
TCP 123.345.567.789:80 1.236.223.163:50190 ESTABLISHED
TCP 123.345.567.789:80 211.255.190.20:57053 ESTABLISHED
TCP 123.345.567.789:139 0.0.0.0:0 LISTENING
TCP 123.345.567.789:3389 222.107.57.115:13707 ESTABLISHED
TCP 123.345.567.789:50669 108.177.97.95:443 CLOSE_WAIT
TCP 123.345.567.789:51019 74.125.203.95:443 CLOSE_WAIT
TCP 123.345.567.789:51101 64.233.187.95:443 ESTABLISHED
TCP 123.345.567.789:51255 108.177.97.95:443 TIME_WAIT
TCP 123.345.567.789:51256 108.177.125.84:443 TIME_WAIT
TCP 123.345.567.789:51257 108.177.97.95:443 ESTABLISHED
TCP 123.345.567.789:51258 108.177.97.95:443 TIME_WAIT
TCP 123.345.567.789:55076 64.233.189.84:443 CLOSE_WAIT
TCP 123.345.567.789:55325 108.177.125.84:443 CLOSE_WAIT
TCP 123.345.567.789:55471 108.177.97.95:443 CLOSE_WAIT
TCP 123.345.567.789:55503 74.125.204.95:443 CLOSE_WAIT
TCP 123.345.567.789:55504 74.125.204.95:443 CLOSE_WAIT
TCP 123.345.567.789:55596 108.177.97.84:443 CLOSE_WAIT
TCP [::]:80 [::]:0 LISTENING
TCP [::]:135 [::]:0 LISTENING
TCP [::]:445 [::]:0 LISTENING
TCP [::]:1433 [::]:0 LISTENING
TCP [::]:2383 [::]:0 LISTENING
TCP [::]:3389 [::]:0 LISTENING
TCP [::]:47001 [::]:0 LISTENING
TCP [::]:49152 [::]:0 LISTENING
TCP [::]:49153 [::]:0 LISTENING
TCP [::]:49154 [::]:0 LISTENING
TCP [::]:49155 [::]:0 LISTENING
TCP [::]:49159 [::]:0 LISTENING
TCP [::1]:1434 [::]:0 LISTENING
UDP 0.0.0.0:5355 *:*
UDP 123.345.567.789:137 *:*
UDP 123.345.567.789:138 *:*
UDP [::]:5355 *:*

상단을 보면 각각의 컬럼에 대한 명칭이 나온다.

아래는 각 컬럼에 대한 설명이다.


컬럼 설명

프로토콜

어떤 프로토콜을 사용하는지를 표시한다. (TCP, UDP)


로컬주소

나의 피씨 아이피 정보가 표시된다.

0.0.0.0 또는 127.0.0.1 로 표시된것 또한 나의 아이피이다.

아이피와 함께 포트정보도 표시되는데, 알려진 포트번호라면 포트번호로 어떤 서비스인지 유추할 수 있다.

<알려진포트정보>

https://ko.wikipedia.org/wiki/TCP/UDP%EC%9D%98_%ED%8F%AC%ED%8A%B8_%EB%AA%A9%EB%A1%9D


외부주소

외부 피씨의 아이피정보가 표시된다.

상태가 LISTENING인 것은 아직 연결이 되어있지 않고 대기하고 있는 것이므로 아이피정보가 없다.

<아이피위치정보>

https://www.ipipipip.net/index.php?ln=ko&menu=ip-address-location-geolocation-lookup-home&ipaddress=108.177.125.95


상태

네가지의 상태가 있다.

CLOSE_WAIT

내 피씨가 연결대상피씨로부터 연결종료 신호를 받은 경우

TIME_WAIT

내 피씨가 연결대상피씨에게 연결종료 신호를 보낸 경우

ESTABLISHED

현재 연결되어 있는 상태

LISTENING

연결대기중인 상태


해석

위에서 나의 아이피는 123.345.567.789 이다.

우선 관심대상 상태는 ESTABLISHED와 LISTENING 이다.

ESTABLISHED는 현재 소켓이 연결된 상태로 있는 것이니 첫번째 관심대상이 되고,

LISTENING은 외부의 연결을 기다리고 있는 것이니 그다음 관심대상이 된다.

우선 findstr 을 이용해서 ESTABLISHED만 추려본다.

netstat -na | findstr ESTABLISHED

웹서버를 운영중이라면 80포트로 접속된 것들이 많이 표시가 될텐데, 이런 것들은 의도적으로 오픈한 포트이니 그냥 넘어가도 무방하다.

나머지 항목들을 조사해보면 어떤 아이피에서 어떤 포트로 접속되어 있는지를 알수 있다.

이 중에서 의도하지 않은 포트가 있는지 확인을 하고, 아이피를 보고 위험한 아이피인지 위치조회를 해본다.

포트정보와 아이피정보로 내가 허용한 서비스인지를 판단해야 한다.

(뒤에 설명할 o 옵션을 이용해서 프로세스아이디를 통한 분석을 할 수도 있다. )

그다음 LISTENING을 조사한다.

ESTABLISHED는 현재 연결되어 있는 정보이고, LISTENING은 외부에서의 연결을 대기하고 있는 상태이므로, 내가 허용한 것인지.. 아니면 윈도우가 허용한 것인지... 그도 아니면 해커가 심어놓은 백도어인지를 판단해야 한다.

netstat -na | findstr LISTENING

LISTENING은 아직 연결이 되지 않은 상태이므로 외부아이피정보는 없다.

즉… 포트번호를 보고 어떤 서비스인지 추측을 해야 한다. ( 어떤 서비스인지 알기 어려운 경우에는 o 옵션을 통한 프로세스아이디 분석을 한다. )


-o 옵션

위에서 분석할때 netstat -na 옵션을 사용했는데 이렇게만 해서 분석을 하면 이게 어떤 프로세스인지 직관적으로 알 수가 없다.

다행히 netstat에는 프로세스아이디까지 표시해주는 옵션을 지원한다.

o 옵션을 추가하면 PID까지 표시가 된다.

netstat -nao

위와 같이 o 옵션을 추가하면 프로세스아이디 정보가 뒤에 추가된다.

분석시 표시된 프로세스 아이디를 알게 되면 작업관리자를 띄워서 어떤 프로세스가 관련되어 있는지를 알 수 있다.

참고로, “Windows 작업 관리자”에 들어가서 프로세스아이디를 찾아보면 어떤놈인지 바로 알수 있는것도 있지만 svchost.exe 같이 바로 알수 없는 프로세스도 있을 수 있다.

svchost.exe 파일은 서비스 dll을 실행시키는 브로커 역할을 하는 놈이니, “Windows 작업 관리자”의 “서비스” 탭에 들어가보면 PID에 해당하는 서비스 이름이 나오게 된다. ( 기본적으로 “서비스”탭에는 PID가 표시되지 않으니 옵션으로 열을 추가해준다. )

이 이름을 통해 어떤 서비스인지를 알수가 있다.

'보안' 카테고리의 다른 글

SMTP서버 구축 및 SPF(TXT) 레코드 수정  (2) 2024.01.05
비트로커 랜섬웨어 경험담  (2) 2024.01.04