본문 바로가기
정보보안기사 필기/1. 정보보안 일반

정보보안기사 필기 3-5. 네트워크 보안(Port Scanning)

by kkmin93 2022. 4. 19.
반응형

정보보안기사 필기 3-5. 네트워크 보안(Port Scanning)

1. Nmap 포트 스캐너 사용법

 1) #nmap [scan type] [option] [target]

  1-1) Scan Type

  • -sS : TCP SYN(Half-Open) Scan : TCP 포트 오픈 여부를 확인하는 스캔
  • -sT : TCP Connect(Open) Scan : TCP 포트 오픈 여부를 확인하는 스캔
  • -sU : UDP Scan : UDP 포트 오픈 여부를 확인하는 스캔
  • -sF : TCP FIN Scan : TCP FIN 제어피트 패킷을 이용한 스캔
  • -sX : TCP Xmas Scan : TCP FIN, PSH, URG 제어비트를 조합한 패킷을 이용한 스캔
  • -sN : TCP NULL Scan : TCP 제어비트 설정이 없는 NULL 패킷을 이용한 스캔
  • -sA : TCP ACK Scan : 방화벽 룰셋(필터링 정책)을 확인하기 위한 스캔
  • -sP : Ping Scan : Ping을 이용해 호스트 활성화 여부를 확인하는 스캔
  • -D : Decoy Scan : 실제 스캐너 주소 외에도 다양한 주소로 위조하여 스캔하는 방식

  1-2) Port Option

  • -p 80 : 80번 포트 스캔
  • -p <service> : 특정 서비스명으로 포트 스캔
  • -p 20, 25, 80 : 20, 25, 80번 포트 스캔, 여러 포트 스캔
  • -p 1-1000 : 1-1000번 포트 스캔
  • -pT:80,U:53 : TCP 80번 포트와 UDP 53번 포트를 분리하여 포트 스캔

 

 1-3) Output Option

  • -v : 상세 내역 출력
  • -d : Debugging
  • -oN <file> : 결과를 일반 파일 형식으로 출력
  • -oX <file> : 결과를 XML 파일 형식으로 출력

 

  1-4) 기타 Option

  • -O : 대상 호스트의 운영체제 정보를 출력
  • -F : 빠른 네트워크 스캐닝
  • -T0 ~ T5 : 아주 느린 ~ 아주 빠른 스캐닝

 

2. TCP Connect(Open) 스캔

 1) 개요

  • 일반 사용자 권한으로 TCP 포트 오픈 여부를 확인하기 위해 connect() 시스템 호출을 이용하는 방식이다.
    • 시스템 호출 : 커널(운영체제)가 제공해주는 기능을 이용하기 위한 인터페이스를 의미
    • connect() : 원격 호스트와 TCP 연결 설정(3-Wayhandshake)을 수행하도록 한다.
    • TCP 등 프로토콜 패킷 자체를 직접 조작하여 생성하기 위해서는 관리자 권한이 필요하다. 즉 일반 사용자 권한으로는 시스템 호출을 이용하는 TCP Connect 스캔을 이용한다.
  • 정상적인 TCP 연결 설정을 수행하여 스캔하는 방식이다.
  • 포트 스캔 과정에서 connect() 시스템 호출을 통해 TCP 연결 설정 과정을 완전하게 수행하기 때문에 Open 스캔이라고도 하며 시스템 로그에 스캔한 흔적이 남는 특성이 있다.

 

 2) 동작방식

  2-1) OPEN/CLOSED 상태

[ 그림 2-1. TCP Connect(Open) 스캔 ]

  • 공격자는 희생자의 대상 포트로 SYN 패킷을 전송한다. 
    • 포트가 열린 상태 : SYN+ACK 패킷을 수신한 후 ACK 패킷을 전송하여 TCP 연결을 완료한다.(connect() 시스템 호출 동작 방식)
    • 포트가 닫힌 상태 : RST+ACK 패킷을 수신한다.
  • 대상 포트가 열린 상태에서 연결 설정이 완료되고나면 공격자의 목적인 포트 오픈 여부를 확인했기 때문에 연결을 즉시 중단하기 위해 RST+ACK 패킷을 전송하여 연결을 종료한다.
  • TCP 연결 설정이 이루어지기 때문에 희생자의 시스템 로그에 스캔을 시도한 IP 주소가 남는 특징이 있다.

 

실습 (OPEN/CLOSED 상태, #nmap -T4 -sT -p 23,80 [희생자 IP])

[ 그림 2-2. TCP Connect(Open) 스캔 결과 ]

  • 스캔 결과를 살펴보면, 희생자의 telnet(23/tcp) 포트는 열려있고 http(80/tcp) 포트는 닫혀있는 것을 알 수 있다.

[ 그림 2-3. 23/tcp 스캔 Wireshark 모습 ]

  • (Wireshark) 희생자로부터 SYN+ACK 패킷이 왔으며 ACK 패킷 전달(연결 설정 완료) 후 RST+ACK 패킷을 보내 연결을 즉시 중단한다. 
    • SYN ▶ Sequence Number : A
    • SYN + ACK ▶ Sequence Number : B, Acknowledgment Number : A+1
    • ACK ▶ Sequence Number : A+1, Acknowledgment Number : B+1
    • RST+ACK ▶ Sequence Number : A+1, Acknowledgment Number : B+1

[ 그림 2-4. 80/tcp 스캔 Wireshark 모습 ]

  • (Wireshark) 80/tcp 포트 스캔 시 희생자로부터 RST+ACK 패킷이 온 것을 확인 할 수 있다.
    • SYN ▶ Sequence Number : A
    • RST + ACK ▶ Sequence Number : 0, Acknowledgment Number : A+1

 

  2-2) FILTERED 상태

[ 그림 2-5. 서버에 방화벽(iptables) DROP 설정 ]
[ 그림 2-6. 서버에 방화벽(iptables) REJECT 설정 ]

  • 희생자의 포트가 방화벽에 의해 필터링(차단)되고 있다면 방화벽 차단 정책에 따라 응답이 없거나 ICMP 에러 메시지 응답을 받게된다. 방화벽 필터링(차단) 정책은 보안상의 이유로 응답을 하지 않도록 설정하는 것이 좋다.
    • iptables 방화벽의 DROP 정책 : 해당 패킷을 폐기 후 아무런 응답을 하지 않는다.
    • iptables 방화벽의 REJECT 정책 : 해당 패킷을 폐기 후 ICMP Destination Unreachable 패킷을 응답한다.

[ 그림 2-7. 방화벽(iptables) DROP 정책 결과 ]
[ 그림 2-8. 방화벽(iptables) REJECT 정책 결과 ]

실습 (FILTERED 상태, #nmap -T4 -sT -p 21 [희생자 IP])

[ 그림 2-9. TCP Connect(Open) FILTERED 결과 ]

 

3. TCP SYN(Half-Open) 스캔

 1) 개요

  • 관리자 권한으로 TCP 패킷을 조작하여 TCP 포트 오픈 여부를 판단하는 스캔 방식이다.
  • TCP 패킷 헤더의 제어비트를 조작하여 TCP 연결 설정 과정을 완전하게 수행하지 않기 때문에 Half-Open 스캔이라고 한다.
스텔스 스캔(Stealth Scan)
  • TCP 세션이 완전히 성립되지 않은 상태에서 시스템의 포트 오픈 여부를 알아내는 방식으로 스캔 대상 시스템에 로그가 남지 않아 공격자는 자신의 IP를 노출시키지 않으면서 스캔할 수 있기 때문에 스텔스 스캔이라고 한다.
    • TCP SYN Scan, TCP FIN Scan, TCP NULL Scan, TCP Xmas Scan 등이 있다.

 

 2) 동작방식

  2-1) OPEN/CLOSED 상태

[ 그림 3-1. TCP SYN(Half-Open) 스캔 ]

  • 공격자는 희생자의 대상 포트로 SYN 패킷을 전송한다. 
    • 포트가 열린 상태 : SYN+ACK 응답을 수신한다.
    • 포트가 닫힌 상태 : RST+ACK 응답을 수신한다.
  • 대상 포트가 열린 상태면 희생자로부터 SYN+ACK 응답이 오고 해당 응답만으로도 포트가 열린 상태임을 알 수 있기 때문에 연결을 완료하지 않고 패킷 조작을 통해 즉시 중단하기 위한 RST 패킷을 전송한다.

 

실습 (OPEN/CLOSED 상태, #nmap -T4 -sS -p 23,80 [희생자 IP])

[ 그림 3-2. TCP SYN(Half-Open) 스캔 결과 ]

  • 스캔 결과를 살펴보면, 희생자의 telnet(23/tcp) 포트는 열려있고 http(80/tcp) 포트는 닫혀있는 것을 알 수 있다.

[ 그림 3-3. 23/tcp 스캔 Wireshark 모습 ]

  • (Wireshark) 희생자로부터 SYN+ACK 패킷이 왔으며 연결 미완료 상태에서 RST 패킷로 즉시 연결을 중단한다.

[ 그림 3-4. 80/tcp 스캔 Wireshark 모습 ]

  • (Wireshark) 80/tcp 포트 스캔 시 희생자로부터 RST+ACK 패킷이 온 것을 확인 할 수 있다.

 

  2-2) FILTERED 상태

  • 희생자의 포트가 방화벽에 의해 필터링(차단)되고 있다면 방화벽 차단 정책에 따라 응답이 없거나 ICMP 에러 메시지 응답을 받게된다. 방화벽 필터링(차단) 정책은 보안상의 이유로 응답을 하지 않도록 설정하는 것이 좋다.
    • iptables 방화벽의 DROP 정책 : 해당 패킷을 폐기 후 아무런 응답을 하지 않는다.
    • iptables 방화벽의 REJECT 정책 : 해당 패킷을 폐기 후 ICMP Destination Unreachable 패킷을 응답한다.

 

4. TCP FIN/NULL/Xmas 스캔

 1) 개요

  • 관리자 권한으로 TCP 패킷을 조작하여 TCP 포트 오픈 여부를 판단하는 스캔 방식이다.
  • TCP 연결을 생성하지 않고 스캔하는 스텔스 스캔 방식으로 TCP 패킷 헤더의 제어비트를 비정상적으로 설정해서 스캔한다.
    • TCP FIN 스캔 : FIN 제어비트만 설정하여 스캔하는 방식. TCP 표준에서 연결 종료 패킷은 FIN+ACK 제어비트를 사용한다.
    • TCP NULL 스캔 : 제어비트를 설정하지 않고 스캔하는 방식.
    • TCP Xmas 스캔 : URG, PSH, FIN 제어비트를 설정하여 스캔하는 방식.
TCP 표준(RFC 793)의 다음 특성을 이용하여 포트 오픈 여부를 확인
  • 닫힌 포트로 RST 이외의 패킷을 수신한 경우 RST 패킷으로 응답한다.
  • 열린 포트로 SYN, ACK 또는 RST 이외의 패킷을 수신한 경우 이를 폐기하고 응답하지 않는다.
  • 열린 포트, 닫힌 포트로 ACK를 수신한 경우 RST 패킷으로 응답한다.

 

 2) 동작방식

  2-1) TCP FIN 스캔(OPEN/CLOSED 상태)

[ 그림 4-1. TCP FIN 스캔 ]

  • 공격자는 희생자의 대상 포트로 FIN 제어비트만 설정한 패킷을 전송한다.
    • 포트가 열린 상태 : 응답 없음
    • 포트가 닫힌 상태 : RST+ACK 응답을 수신한다.
실습 (OPEN/CLOSED 상태, #nmap -T4 -sF -p 23,80 [희생자 IP])

[ 그림 4-2. TCP FIN 스캔 결과 ]
[ 그림 4-3. FIN 스캔, 포트가 열린 상태 ]
[ 그림 4-4. FIN 스캔, 포트가 닫힌 상태 ]

  2-2) TCP NULL 스캔(OPEN/CLOSED 상태)

[ 그림 4-5. TCP NULL 스캔 ]

  • 공격자는 희생자의 대상 포트로 제어비트를 설정하지 않은 패킷을 전송한다. 
    • 포트가 열린 상태 : 응답 없음
    • 포트가 닫힌 상태 : RST+ACK 응답을 수신한다.

 

  2-3) TCP Xmas 스캔(OPEN/CLOSED 상태)

[ 그림 4-6. TCP Xmas 스캔 ]

  • 공격자는 희생자의 대상 포트로 URG, PSH, FIN 제어비트만 설정한 패킷을 전송한다.
    • 포트가 열린 상태 : 응답 없음
    • 포트가 닫힌 상태 : RST+ACK 응답을 수신한다.

 

  2-4) TCP FIN, NULL, Xmas 스캔(FILTERED 상태)

 

  • 희생자의 포트가 방화벽에 의해 필터링(차단)되고 있다면 방화벽 차단 정책에 따라 응답이 없거나 ICMP 에러 메시지 응답을 받게된다. 방화벽 필터링(차단) 정책은 보안상의 이유로 응답을 하지 않도록 설정하는 것이 좋다.
    • iptables 방화벽의 DROP 정책 : 해당 패킷을 폐기 후 아무런 응답을 하지 않는다.
    • iptables 방화벽의 REJECT 정책 : 해당 패킷을 폐기 후 ICMP Destination Unreachable 패킷을 응답한다.

 

5. TCP ACK, UDP, Decoy 스캔

 1) TCP ACK 스캔

  • 희생자의 포트 오픈 여부를 판단하는 것이 아니라 방화벽 룰셋(필터링 정책)을 알아내기 위한 스캔방식이다.
  • 공격자는 희생자의 대상 포트로 ACK 제어비트만 설정한 패킷을 전송하게 되면 방화벽 룰셋(필터링 정책) 확인 가능하다. 
    • 방화벽에 의해 차단된 상태 : 방화벽으로부터 응답이 없거나 ICMP 에러 메시지 응답을 수신한다.
    • 방화벽에 의해 허용된 상태 : 희생자의 포트 오픈 여부와는 무관하게 RST 응답을 수신한다.
  • 따라서 희생자의 포트 오픈 여부와는 상관없이 RST 응답을 수신한다면 방화벽이 허용된 경우이며, TCP ACK 스캔의 경우 포트 오픈 여부를 판단할 수 없다.

 

 2) UDP 스캔

  2-1) OPEN/CLOSED 상태

  • 희생자의 UDP 포트 오픈 여부를 판단하는 스캔방식이다.
  • 닫힌 UDP 포트로 패킷 수신시 ICMP 에러 메시지(Type 3, Code 3)로 응답하는 특성을 이용한다.

[ 그림 5-1. UDP 스캔 ]

  • 공격자는 희생자의 대상 포트로 UDP 패킷을 전송한다. 
    • 포트가 열린 상태 : UDP 응답을 수신하거나 응답 없음
    • 포트가 닫힌 상태 : ICMP 에러 메시지(Type 3 : Destination Unreachable, Code 3 : Port Unreachable) 응답 수신

 

  2-2) FILTERED 상태

  • 희생자의 포트가 방화벽에 의해 필터링(차단)되고 있다면 방화벽 차단 정책에 따라 응답이 없거나 ICMP 에러 메시지 응답을 받게된다. 방화벽 필터링(차단) 정책은 보안상의 이유로 응답을 하지 않도록 설정하는 것이 좋다.
    • iptables 방화벽의 DROP 정책 : 해당 패킷을 폐기 후 아무런 응답을 하지 않는다.
    • iptables 방화벽의 REJECT 정책 : 해당 패킷을 폐기 후 ICMP Destination Unreachable 패킷을 응답한다.

 

 3) Decoy 스캔

  • 희생자에서 스캐너 주소를 식별하기 어렵도록 IP 주소를 다양하게 위조하여 스캔하는 방식이다.
실습 (#nmap -T4 -sF -p 23,80 [희생자 IP] -D RND)

[ 그림 5-2. Decoy 스캔 결과 ]
[ 그림 5-3. 공격자의 위조된 IP로 스캔 ]

 

반응형