================================
* 포트 스캔이란 ?
================================
- 포트스캔이란 말그대로 해당 호스트에서 어떤 포트가 열려있는지 스캔해보는 것이다.
스캔하는 방법에는 수많은 방법이 있으며, 그중엔 대상호스트에 로그기록이 남지 않는
Stelth 스캐닝도 있다. 포트스캔을 통해 얻은 정보는 해커에게 유용할 수 있다.
어느 포트가 열려있는지에 대한 정보는 곧 어느 서비스가 활성화 되어 있는지,
어느 포트로 침입해야 하는지에 대한 기초 정보를 제공하기 때문이다. 때문에
포트스캔은 불법이며, 함부로 스캐닝을 해서는 안된다.
이러한 포트스캐닝은 자신의 서버 취약점을 진단하기 위해서도 사용할 수 있다.
불필요한 포트가 열려있는지 늘 점검해 보아야 할 것이다.
1. scan 의 종류
1. Sweeps
Sweep 이라는 것은 돌아본다는 말그대로 해당 네트워크를 돌면서 살아있는 호스트,포트를 찾는 것을 의미한다.
1) ICMP ECHO (ping)
- ICMP 를 이용한 스캐닝으로, ICMP ECHO( type 8 ) 을 타겟 호스트에 보내 ICMP Reply (type 0) 을 보내면 살아있는 호스트로 판단한다(ping) . ping 은 널리 쓰이고 있는 네트워크 점검용 프로그램이며, 기본적으로 대부분의 OS 에 설치되어 있다. 하지만 호스트에 일일이 ping 을 해보고 기다려야 하므로 거대한 네트워크에 사용하기에는 무리가 있으며, 소규모의 C 클래스 정도에 사용할 수 있다. fping 은 이를 RR(Round Robin)방식으로 ping 을 하여 기존의 ping 보다 시간을 단축시킬 수 있으며, 윈도우 계열에서는 대표적으로 pinger 가 있다. 또한 강력한 스캐닝 툴인 nmap 을 이용할 수 있다.
ex) nmap -sP 192.168.7.0/24
이와 같은 명령으로 해당 네트워크의 서브넷 구조와 살아있는 호스트에 대한 정보를 얻을 수 있으며, 이것은해커에게 아주 유용한 정보가 될 수 있다. 이를 방지하기 위해서는 방화벽, 라우터 상에서 패킷을 필터링하는 방법이 있다.
이미 많은 사이트에서 echo 를 허용하지 않도록 설정되어 있다.
2) Non-ECHO ICMP
- ping 이 기본적으로 echo (type 8) 을 이용하므로 방화벽에서도 주로 echo 만을 필터링 하는 경우가 많다.
이런때 ICMP 의 TIME STAMP(type 13), ADDRESS MASK REQUEST(type 17) 를 이용할 수 있다.
하지만 이 경우 쉽게 관리자에 의해 발견될 수 있고, 이 트래픽 또한 방화벽에 의해 차단될 수 있다.
3) TCP Sweep
- TCP 의 3-way handshake 연결 절차를 이용하는 것으로, ACK 나 SYN 을 보낸다.
Sweep에 사용할 포트는 대부분의 방화벽에서 허용될 수 있는 21,22,23,25,80 번 포트를 주로 이용한다.
4) UDP Sweep
- UDP 패킷을 타겟 호스트에 보내 UDP포트 의 ICMP PORT UNREACHABLE 을 이용한다. UNREACHABLE 메시지를
받지 못하면 해당 포트가 열려있다고 판단하게 된다. 하지만 이러한 방법은 100%신뢰할 수 없다.
라우터, 파이어월에서 UDP 패킷을 drop 할 수 있으며, 정상적인 UDP 서비스도 응답을 하지 않는 경우가 많기 때문이다.
2. Open Scan
Open Scan 은 완전한 연결을 하는 스캔으로서, 스캔결과의 신뢰성은 매우 높지만 정상적인 3-way handshake 를 모두 수행하
기 때문에 타겟 호스트에 로그가 남으며 탐지되기도 쉽다.
1) TCP connection
- TCP 의 3-way handshake 를 이용해 완전한 연결을 한다. 확실한 결과를 얻을 수 있지만 당연히 로그 기록이 남게 된다.
- 정상적인 tcp 3 handshake 이후 추가로 reverse ident query를 한다. 이것은 해당 포트의 실행권한과 uid 를 알아내기 위함이다.
3. Half Scan
1) SYN TCP flag
- SYN 플래그를 보내 SYN/ACK 가 오는 것을 확인해 포트가 열려있는 것만 확인한 후 정상적인 ACK 가 아닌 RST 를
보내 연결을 끊어버린다. 정상적인 연결이 아니므로 타겟 호스트에 로그는 남지 않게 된다.
하지만 이런 스텔스 기법은 완전한것이 아니고 라우터나 IDS 등에 의해 쉽게 발견될 수 있으므로 다른 스텔스 스캔을
사용하는 것이 좋다. Half Scan 은 어느정도 로깅을 피할 수 있으나 raw socket 접근이 필요하므로 루트 권한이 있어야
한다.
2) IP ID Header TCP Scanning
- IP ID Header TCP Scanning 은 Attacker 와 Target 말고도 중간의 dumb 호스트가 필요하다.
1. Attacker 는 dumb 에 연속적으로 핑을 보낸다.
2. IP 를 dumb 의 IP로 spoof 하여 Target 에 syn 패킷을 보낸다.
- 열린 포트일 경우 target 은 dumb 에게 syn/ack 를 보낼 것이고, dumb 는 target 에게 rst 로 응답할 것이다.
- 닫힌 포트일 경우 target 은 dumb 에게 rst/ack 를 보내고, dumb 는 아무런 응답을 하지 않는다.
3. dumb 가 Attacker 에게 보내는 핑의 ID 필드를 관찰한다.
- 열린 포트였을 경우 ID 필드가 증가한다.
- 닫힌 포트였을 경우 ID 필드가 계속 1이다.
4. Stealth Scan
1) Inverse TCP flag scanning