kkamagi's story

IT, 정보보안, 포렌식, 일상 공유

Cyber Security

포트 스캐닝/포트스캔 - Nmap

까마기 2015. 1. 22. 14:56
728x90
반응형

1. 준비사항

Kali linux에 DVWA 설치 및 초기 세팅 완료 상태에서 진행.

2. 기본 개념

<Port>

- 각 시스템에서 응용프로그램들을 분리하기 위한 숫자적 개념

- 논리적인 접속장소를 뜻한다. 특히 TCP/IP를 사용할 때에는 클라이언트 프로그램이 네트워크 상의 특정 서버 프로그램을 지정하는 방법으로 사용된다.

 

- TCP/IP의 상위 프로토콜을 사용하는 응용프로그램에서는 인터넷번호할당허가위원회(IANA)에 의해 미리 지정된 포트번호들을 가지고 있다. 이런 포트 번호들은 Well known port 라고 한다.

 

- 다른 응용프로그램 프로세스들은 접속할 때마다 포트번호가 새로 부여된다.

 

- 포트번호는 0부터 65535까지이며, 0부터 1023 까지는 어떤 특권을 가진 서비스에 의해 사용될 수 있도록 예약되어

있다.

 

- 실제로 Port Number를 Service 번호라고 부른다.

 

<Port Number 분류>
 

1) Well-Known Port (1~1023) : 잘 알려진 포트, application

 IANA 에 등록된 자주 사용되는 특정 서비스를 위해 지정된 포트


2) Registered Port (1024~49151) : 등록된 포트, transport

IANA 에 등록된 자주 사용하진 않지만 특정 서비스를 위해 지정된 포트
 

3) Dynamic Port (49152~65535) : 동적 포트 network

Client가 Server에 접속하기 위해 사용하는 포트, Private 포트 라고도 한다.

 

* https:// --> http에 ssl을 합쳐서 보안성을 띄어서 어떤 검색을 하든 패킷이 노출 되지 않는다.
   https(443)

Sequence Number 순차번호 Ack number는 시퀀스 넘버를 가지고 체크.

*요즘은 Well-known 1~1023 / Dynamic 1024~65535 로 나누기도 함.
 
일반적으로 흔하게 열려있는 TCP 포트 UDP 포트
80 http 631 IPP
23 telnet 161 SNMP
443 https 137 NETBIOS
21 ftp 123 NTP
22 ssh 138 NETBIOS
25 smtp 1434 MS-SQL
3389 terminal-service(원격데스크탑) 445 MS-DS
110 pop3 135 RPC
445 파일/프린터공유 NETBIOS 67 DHCP-S (SERVER)
139 파일/프린터공유 NETBIOS 53 DNS (DNS query 할때사용)
143 imap   139 NETBIOS
53 DNS (영역전송할때 사용) 500 ISAKMP(VPN관련)
135 윈도우 RPC 서비스 68 DHCP-C (CLIENT)
3306 MySQL 데이터베이스 520 RIP
8080 HTTP-Alternative(8888) 1900 UPNP (pnp?
1723 PPTP (VPN에 사용하는 2계층 프로토콜) 4500 NAT-TIKE(VPN 관련)
111 SunRPC 514 SYSLOG
995 POP3S ( 암호화통신) 49152 특정 프로그램이 실행될 때 사용하는 임시 포트
993 IMAPS ( 암호화통신) 162 SNMP
5900 VNC 69 TFTP (udp를 사용하는 FTP)

 

EX)#ntpdate time.bora.net 
nc 명령어를 사용하여 포트 open 상태 확인
* tcp
# nc -z [hostname] [port]
* udp
# nc -zu [hostname] [port]

3. 포트 스캔 - Nmap 도구 사용

* nmap.org -network scanning
* 100에 90은 공격이 들어오기 전에 스캐닝이 들어오게 되는데 특정한 패턴이 있으며 이것을 발견하여 대처할 수 있어야한다.
* 사용 방법 및 옵션
# nmap [Scan Type] [Option] <Target>    //Scan Type 과 option은 빠질수가 있는데 scan type이 빠지면 기본 타입으로 되며
 Target은 빠질 수 없다.

1) Scan Type
-sS: TCP SYN Scan
-sT: TCP Connetction
-sU: UDP Scan
-sF: TCP FIN Scan
-sX: TCP Xmas Scan
-sN: TCP NULL Scan
-sA: TCP ACK Scan
-sW: TCP Window Scan
-sM: TCP Maimon Scan
-sI: TCP IDLE Scan
-sO: IP Protocol Scan
-b: FTP Bounce Scan
 
2) Port Option
-p # 특정 포트번호만 검색
-p ssh 특정 이름의 포트만 검색
-p 1,2,3 여러개의 특정 포트만 검색
-p 1-1023 특정범 범위의 포트만 검색
-p -1023 처음부터 특정 범위 까지 포트만 검색
-p 49152- 특정 포트부터 끝까지 검색
-p- 0번을 제외한 모든 포트 검색
-pT:21,22,U:67,68 T는 TCP포트, U는 UDP 포트를 의미 --> 이렇게 구분짓지 않으면 TCP와 UDP를 포함해서 검색한다.
-p http* http라는 이름을 가진 모든 포트를 스캔
ex)htto(80), http-mgmt(280), https(443), http-alternative(8080,8888)
 
3) Time Option
-T0 : 아주 느림 //방어자 입장에서 그 스캔의 패턴을 분석하기 어렵다는 것, 수많은 패킷들이 오는데 띄엄띄엄온다면 찾기 어려울것이다
-T5 : 가장 빠름 //방어자 입장에서 그 스캔의 패턴을 분석하기 쉽다는 것
--min-rtt-timeout : 응답이 올때 까지 기다릴 최소시간
--max-rtt-timeout : 응답이 올때 까지 기다릴 최대시간
--host-timeout : 특정 시간보다 오래 걸리는 호스트는 스캔 포기
--min-rate : 초 마다 보내는 프로브 패킷의 하한선
--max-rate : 초 마다 보내는 프로브 패킷의 상한선
--max-retries : 재전송 최대 패킷 //반응이 없으면 반응이 있을 때까지 찔러보는 것을 몇번이나 할것인지 재전송을 몇번할것인지.
===> 뒤에는 초단위를.

 

4) Output Option
-v : 출력을 자세하게  //대부분의 window나 리눅스에서 대부분 v는 자세하게 보는 것이고 v는 verbose의 약자.
-vv : -v 보다 더 자세하게
-V : 버전정보
-d : debugging (옵션에 대한 상세한 정보나, 어떻게 동작하는지 출력)
--packet-trace : 보내거나 받은 모든 패킷의 요약을 출력
-oN <file> : 일반적인 text 파일로 출력
-oX <file> : XML 파일로 출력
-oG <file> : grepable(grep으로 찾기 쉽도록 파일로 출력)
-oA <directory> : 특정 디렉토리에 일반 text(.nmap)/XML(.xml)/Grepable(.gnmap) 파일
모든 형태의 파일로 출력
 
5) 기타 Option
-6 : IPv6 //6을 안붙이면 ipv4라는 얘기
-r : 포트 스캔 순서를 랜덤화 함
-PN : Ping(icmp) 테스트를 하지 않음 //Ping No 방어자 입장에서 icmp패킷을 찾아낼 수 있기 때문에 안하겠다.
--scanflag <flag> : URG/ACK/PSH/RST/SYN/FIN 등 TCP Flag를 선택적으로 붙일 수 있음.
ex) --scanflag SYNACK, -scanflag PSHACKFIN
 
<nmap 에서 인지할 수 있는 포트의 상태>
1) open : 열려있음.
2) closed : 닫혀있음.
3) filtered : 방화벽, 라우터 정책, 보안장비에 의해 필터된 상태(막혀있다, 차단).
4) unfiltered : 필터되지 않은 상태(포트에 접근은 가능하지만 열렸는지 닫혔는지 모를때).
5) open | filtered : 열린 또는 필터된 상태.
6) closed | filtered : 닫혀 있거나 필터된 상태.
7) open | closed : 열려있는지 닫혀있는지 모름.

 

4. 전형적인 스캔 유형 별 정리

1) TCP Connection Scan
관리자 계정이 아니더라도 스캔을 할 수 있음.
open / closed / filtered 상태를 확인할 수 있음.
 
# nmap -sT -T2 -p- -v 192.168.153.10
# nmap -sT -T5 -p 1-1023 -v 192.168.153.10
# nmap -sT -T5 -p 1-1023 -v 192.168.153.10/24
# nmap -sT -T5 -p 1-1023 --packet-trace -oG /tmp/test 192.168.153.10 | more /tmp/test




# nmap -sT -T4 -p 1-1023 scanme.nmap.org ==> ip가 아니라 도메인을 입력했기 때문에 맨처음에 DNS query를 날릴 것
하기전에 다른 터미널에서 # wireshark 띄워놓고 입력한다음 wireshark 에서 어떤 포트로 열리고 닫히고를 분석.
DNS 응답이후 네개의 프로토콜은 TTL을 통해서 상대방의 운영체제를 알기 위함
tcp.port==21  ==> 3 way handshaking 확인, 확인했으니 다시 차단 RST 확인

 
1-1) 열린 포트
ME ---SYN--> TARGET
<--S/A---
---ACK-->
---RST--> (정확히말하면RST,ACK)
 
1-2) 닫힌 포트
ME ---SYN---> TARGET
<--RST---(정확히 말하면RST,ACK)
 
1-3) 필터된 포트(방화벽),응답이 없으면 SYN 보내다 포기.
ME ---SYN--> TARGET
---SYN-->
---SYN-->
하지만 TCP connetion은 연결되면 시스템에 로그가 남기 때문에 사용하기에 좋지 않다.
 
2) TCP SYN Scan(= Stealth Scan, Halfopen Scan)
* nmap 기본 스캔 방법이며, 스캔에서 방법중 가장 많이 사용하는 스캔 기법이다. 완벽한 TCP 연결을 하지 않기 때문에 비교적 안전하고, 어떤 운영체제의 TCP Stack에서도 동작한다.
* open / closed / filtered 상태를 확인할 수 있다.
 
# nmap -sS -T4 -p- scanme.nmap.org
# nmap -sS -T4 -p- centos ip
==> wireshark로 tcp connection scan과 비교 분석
 
# nmap -sS -T5 -p 1-1023 --max-retries 2 scanme.nmap.org
#nmap [-sS] -T4 -p 1-1023 --max-retries 2 scanme.nmap.org
==> scan type을 안적으면 무조건 SYN Scan, 완벽한 연결을 하지 않도록 EST을 하지 않기 떄문에 log에 남지 않고 안전하다.
 
2-1) 열린 포트
ME ---SYN--> TARGET
<--S/A---
---RST--->
2-2) 닫힌 포트
ME ---SYN---> TARGET
<--RST---(정확히 말하면RST,ACK)
 
2-3) 필터된 포트(방화벽),응답이 없으면 SYN 보내다 포기.
ME ---SYN--> TARGET
---SYN-->
---SYN-->
 
2-4) 필터된 포트(간혹 이런식으로 반응하는 장비,운영체제가 있다.)
ME ---SYN--> TARGET
<--ICMP--
TYPE 3 CODE 1,2,9,10,13
 
3) UDP Scan
* 일반적으로 TCP를 사용하는 스캔보다 UDP를 사용하는 스캔은 느리고 정확하지 않다.
* UDP를 사용하는 스캔은 느리고 정확하지 않다.
 
# nmap -sU -V scanme.nmap.org
# nmap -sU -p 1-200 scanme.nmap.org
 
%%%%%%%%%%%%%%%%%%%%%%%%%
응답 포트상태
---------------------------------------------------------
프로브에 대한 응답 open
응답 없음 open | filtered
ICMP TYPE 3 (CODE 1,2,9,10,13) filtered
ICMP TYPE 3 나머지 closed
%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-sV 또는 -A 버전 정보 옵션을 사용하면 조금더 정확도를 높일 수 있음!
 
# nmap -sU -A -p 1-200 scanme.nmap.org
# nmap -sUV -p 1-200 scanme.nmap.org
사실상 버전정보를 확인하기 위해 많이 사용
 
4. TCP FIN Scan
 
# nmap -sF -T4 -p 1-1023 para.nmap.org
TCP SYN Scan 보다 더 안전함
대부분의 IDS(침입)/IPS(탐지) 보안 장비에서 TCP FIN Scan을 탐지할 수 있음
IDS - 탐지만 하지만 IPS는 공격이라고 판단되면 차단.
RFC 793
"포트 상태가 CLOSED라면 응답을 RST로 보내게 할 것!"
많은 시스템이 포트가 열려있던지 닫혀있던지 상관없이 RST 응답을 보내는 경우가 있음
즉, 모든 포트가 닫혀 있는 것으로 판단할 수 있는 오류를 범함
(UNIX 시스템에 효과적임)
*열려있는 포트가 열려있는 포트에 RST를 보내면
4-1) 열린 | 필터된 포트
ME ---FIN--> TARGET
 
4-2) 닫힌 포트
ME ---FIN--> TARGET
<--RST--
 
4-3) 필터된 포트
ME ---FIN--> TARGET
<-ICMP3-- (이게 오면 포트는 열린다.100프로)
 

5) TCP NULL Scan
프로브신호는 ? TCP Flag에 아무런 Flag도 설정하지 않는다. (not set)

ICMP TYPE 3 CODE 1,2,9,10,13 은 어떤 타입이든지 간에 필터된 것, 방화벽이다.
#nmap -PN -sN -T4 -p -1023 scanme.nmap.org
#nmap -PN -sN -T4 -p -1023 centos_ip
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
프로브 응답 포트상태
-----------------------------------------------------------------------
응답 없음 OPEN | FILTERED
TCP RST CLOSED
ICMP TYPE 3 CODE 1,2,9,10,13 FILTERED
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

6) TCP Xmas Scan
프로브 신호는? TCP FIN/PSH/URG

#nmap -PN -sX -T4 -p -1023 scanme.nmap.org
#nmap -PN -sX -T4 -p -1023 192.168.153.10(Centos_ip)

FIN, PSH, URG==> 응답없으면 OPEN | FILTERED,,,, RST, ACK가 오면 CLOSED
PSH -버퍼를 비워라 
URG -긴급데이터 
결국 말도안되는 플래그
xmas scan --플래그를 아무데나 집어넣은것 정상적이지 않은 것으로.주렁주렁
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
프로브 응답 포트 상태
--------------------------------------------------------------------
응답 없음 OPEN | FILTERED
TCP RST CLOSED
ICMP TYPE 3 CODE 1,2,9,10,13 FILTERED
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

TCP FIN =TCP NULL = TCP Xmas 결과는 모두 같음!

7) Custom Scan(TCP ACK Scan)

# nmap -sS --scanflag SYNFIN -T4 -p -1023 felix.nmap.org
# nmap -sS --scanflag SYNFIN -T4 -p -1023 192.168.153.10(centos_IP)

# nmap -sN --scanflag ACKFINPSHURG -T4 -p 1023 felix.nmap.org


8) TCP ACK Scan
FILTERED / UNFILTERED를 확인하기 위함
방화벽의 정책을 확인하기 위함
UNFILTERED 가 나오면 이 포트의 정책을 허용
FILTERED는 
호스트방화벽이 아닌 네트워크 방화벽을 의미

# nmap -sA -T4 -PN -p -1023 felix.nmap.org
# nmap -sA -T4 -PN -p -1023 192.168.153.10

%%%%%%%%%%%%%%%%%%%%%%%%%%%
프로브 응답 포트상태

응답없음 FILTERED
TCP RST UNFILTERED
ICMP TYPE 3 CODE 1,2,9,10,13 FILTERED
(나머지 코드는 CLOSED)
%%%%%%%%%%%%%%%%%%%%%%%%%%%

9) TCP Window Scan

# nmap -sW -T4 -p -1023 scanme.nmap.org
# nmap -sW -T4 -p -1023 para.nmap.org
# nmap -sW -T4 -p -1023 192.168.153.10

wireshark 에서 패킷분석시 win은 window size를 의미 ,win=0이라는것 닫혀있다는 소리. 3 way handshaking일때는 win사이즈없다

%%%%%%%%%%%%%%%%%%%%%%%%%%%%
프로브 응답 포트 상태
--------------------------------------------------------------
TCP RST (Window 1~) OPEN
TCP RST (Window 0) CLOSED
응답 없음 FILTERED
ICMP TYPE 3 CODE 1,2,9,10,13 FILTERED
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

모든 운영체제가 닫혀 있더라도 TCP RST Window Size가 1 이상인 경우도 있음!!!


10) TCP Maimon Scan
프로브 신호는 ? FIN / ACK (어떻게 보면 Xmas Scan)
최초 발견자인 Maimon의 이름을 따서 지음(1996)
BSD 시스템은 포트가 OPEN인 상태에서 FIN/ACK를 받으면 무시함
지금 현존하는 운영체제에는 안먹힘

# nmap -sM -T4 -p -1023 para.nmap.org
# nmap -sM -T4 -p -1023 192.168.153.10

%%%%%%%%%%%%%%%%%%%%%%%%%%
프로브 응답 포트 상태
---------------------------------------------------------
응답 없음 OPEN
TCP RST CLOSED
ICMP TYPE 3 CODE 1,2,9,10,13 FILTERED
%%%%%%%%%%%%%%%%%%%%%%%%%%


11) IP Protocol Scan
근본적으로 포트 스캐닝이라고 할 수 없음
대상 시스템의 지원되는 프로토콜(IP, TCP, UDP, ICMP, IGMP...)을 알고자 함

# nmap -sO -T4 para.nmap.org
# nmap -sO -T4 192.168.153.10

 


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
프로브 응답 포트 상태
---------------------------------------------------------
프로브에 대한 모든 응답 OPEN
ICMP TYPE 3 CODE 2 CLOSED CODE 2 : Protocol Unreachable (프로토콜 사용X)
ICMP TYPE 3 CODE 1,2,9,10,13 FILTERED
응답 없음 OPEN | FILTERED ( 현재 지원되고 잇는 프로토콜이라는 얘기)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

12) FTP Bounce Scan
FTP 프로토콜(RFC 959)은 FTP Proxy 연결을 지원함
사용자가 FTP 서버에 연결하고 파일을 제 3서버로 보낼 수 있음

#nmap -PN -b <FTP Server> <Target>
#nmap -PN -b <user>:<pwd>@<FTP Server>:<port> <Target>

ex) #nmap -PN -b admin:qwer1234@ftp.abc.com:21 scanme.nmap.org

13) TCP IDLE Scan
완벽하게 자신을 숨긴 채 포트 스캐닝이 가능
Web Proxy(Zombie) 시스템을 이용 **www.xroxy.com

(기본 이해)
1) SYN을 보내고, 포트가 열려있으면 S/A, 닫혀있으면 RST
2) 원하지 않는 S/A 패킷을 받은 시스템은 RST로 응답
3) 원하지 않는 RST 패킷을 받은 시스템은 무시
4) 모든 IP 패킷은 순서대로 IP IDentification을 가지고 있음

#nmap -PN -sI 220.195.192.172:80 -p -1023 para.nmap.org

5. dvwa에서 nmap 실행

* kali linux 상의 dvwa가 세팅이 되어있는 상태에서 진행한다.

# nmap -sV -O -p- 127.0.01

위 결과에서 얻은 정보는 아래와 같다.

80 및 3306 포트가 open 되어 있으며, 각 포트에 대한 서비스 http, mysql과 그 버전을 확인할 수 있다.

또한 네트워크 홉 수도 파악이 가능하다.

-sV : 서비스 버전 정보

-O : 운영체제의 종류와 버전 정보

-p- : 모든 포트를 스캔

6. nmap 스크립트 엔진 (Nmap Scripting Engine, NSE)

* Nmap은 특별한 스캔을 수행하는 스크립트를 포함하여 그 기능성을 넓혀왔다.

* 사용자는 단순히 스크립트와 그 스크립트에서 필요로 하는 매개변수를 호출하면 된다.

* NSE가 이런 기능을 다루기 때문에 특정한 수많은 스크립트를 바로 사용할 수 있다.

* 대략 400개의 Nmap 스크립트가 있고 DVWA 웹 서버를 통해 사용해 볼 수 있다.

* 모든 NSE 스크립트와 문서는 http://nmap.org/nsedoc/ 에서 확인이 가능하다.

* 모든 NSE 스크립트를 이용할 때에는 아래와 같은 문법으로 호출한다.

# nmap -sV --script=<script name>

 

* 예를 들어 버전 스캔의 일부로 대중적인 웹 애플리케이션과 서버에서 쓰는 디렉터리를 열거하는 http-enum 스크립트를 사용할 경우 아래와 같이 사용한다.

# nmap -sV --script=http-enum 127.0.0.1

 

* 또다른 예 : http-frontpage-login 스크립트를 동작시키면 오래된 버전의 FrontPage 기본 확장은 익명 사용자가 로그인 할 수 있게 설정되어 있으므로 서버는 완전하게 공격당하게 된다.

# nmap 127.0.0.1 -p 80 --script=http-frontpage-login

 

반응형

'Cyber Security' 카테고리의 다른 글

Kali linux DVWA Install  (0) 2015.06.14
네트워크 정보 수집  (0) 2015.01.22
Session hijacking  (0) 2015.01.22
[정보보안] DDoS(Distribute Denial of Service attack)  (0) 2015.01.22
DNS spoofing, SSL Webmitm  (0) 2015.01.21