nmap_정리.txt
12.89 KB · text/plain · 업로드 2026-07-30 17:47
1. nmap scan
- 옵션별 설명
- 옵션별 동작 매커니즘
- 옵션별 탐지 방법
nmap 옵션: 소문자 s는 Scan Type을 지정한다는 의미임
모든 스캔은 규정된 프로토콜을 악용해, 일반적이지 않은 통신 상황을 유도해 정보를 알아내는 방식이다
-sT
* TCP Connect Scan
* 스캔의 목적 - non-root 사용자(패킷을 마음대로 만들 수 없는) 권한만 사용해서,
가장 기본적이고 확실한 방법으로 포트 개방 여부를 탐지한다.
* 스캔의 작동 매커니즘
- 단순히 3-way-handshake 시도
-> 성공하면 열려있음(SYN->SYN/ACK->ACK)
-> 실패하면 닫혀있음(SYN->RST/ACK)
-> 응답 없으면 막힘(SYN-> X. Filtered)
! 특별한 권한이나 기법 없이, 100% 신뢰 가능한 정확한 결과를 제공한다.
하지만 스캐너의 IP가 노출되며, 로그가 남는다(연결이 estabilshed 되었으므로)
-p
* Target Port
* 대상 포트 지정 옵션
* Nmap은 기본적으로 자주 사용되는 포트 1000개에 대해서만 스캔을 진행한다
-> 스캔할 포트 내가 지정 가능
--top-ports
* Top-N Port Scan
* 가장 흔하게 쓰이는 상위 N개(지정) 포트에 대해서만 스캔 진행
--exclude-ports
* Exclude Specified Ports
* 말 그대로, 스캔 대상에서 제외할 포트를 지정한다
-sn
* No Port Scan(Ping Scan)
* 대역을 정해, 호스트가 살아있는지만 빠르게 알아보는 스캔이다
* 네트워크마다 스캔 매커니즘이 다르다(효율을 위해)
- 로컬 네트워크: ARP Request
- 외부 네트워크: ICMP Echo(Ping) / ICMP Timestamp Request / TCP SYN(443 port) / TCP ACK(80 port)
-> 이중 하나라도 응답이 오면 해당 호스트 살아있다고 판정
+ 일반 사용자(non-root) 권한일 때: TCP 80/433 포트로 연결 시도
-Pn
* No Ping(Skip Host Discovery)
* 호스트 스캔을 생략하고, 호스트가 살아있는 상태라고 가정하고 바로 포트 스캔 단계로 진입한다
-PE
* ICMP Echo Request Host Discovery
* 전통적인 ICMP Echo Request(Ping)을 이용한 호스트의 생존 여부 확인
-PP
* ICMP Timestamp Request Host Discovery
* ICMP Timestamp Request를 보내 호스트의 생존 여부 탐지
-PM
! 이것도 대강 ICMP 허점 이용하는거임 나중에 정리하자 이건
-PR
* ARP Ping Host Discovery
* 호스트 생존 여부 탐지가 목적
* 동일 L2 네트워크 안에 있는 호스트 생존 여부 확인
-> ARP Request를 대역내 모든 아이피에게 보내봄
-oN
* Output Normal Format
-> 출력 결과 텍스트파일로 저장함
-oX
* Output XML Format
-> 출력 결과 XML파일로 저장
-oA
* Output All Format
-> 모든 주요 포멧으로 동시에 저장
-v
* verbose
-vv
* very verbose
--reason
-e
결과저장/로그
스캔진행률표시
-sU
* UDP Port Scan
* UDP 기반 서비스의 열린 포트 탐지
unreachable / open / open|filtered(구분 불가)
-PS
* TCP SYN Ping Host Discovery
* TCP SYN 패킷을 보내 응답 유도(SYN+ACK 혹은 RST+ACK) 해 호스트의 생존여부 탐지
-> 응답이 어떤 형태로든 날아오면 alive, 아니면 dead
-PA
-PU
-sV
--version-light
--version-all
--version-intensity
-T0 ~ T5
--scan-delay
--host-timeout
--max-retries
--min-rate
--max-rate
--min-parallelism
--max-parallelism
--ttl
--source-port
--data-length
-sS
* TCP SYN Scan (일명 Half-Open Scan)
* 스캔의 목적 - 열려 있는 포트 찾기
* 스캔의 작동 매커니즘
- TCP 3-way-handshake(SYN / SYN+ACK / ACK) 프로토콜의 작동 방식을 악용
- 3-way-handshake 과정을 전부 거치지 않고, 중간에 끊어버리는 식으로 동작한다
-> 장점: 연결이 확립된 적이 없으므로, 애플리케이션 로그가 남지 않음(그래서 스텔스 스캔이라고도 부른다)
완전한 TCP 연결을 맺지 않으므로 비교적 빠르고, 네트워크 오버헤드가 적다
* 해당 스캔을 통해 얻을 수 있는 정보
- Port State(포트의 개방 여부)
- Open : 해당 포트에서 서비스(주로 Daemon)이 수신 대기(LISTENING) 중
응답으로 SYN+ACK 패킷이 돌아온 경우
- Closed : 해당 포트가 닫혀 있으며, 시스템이 응답했음
응답으로 RST+ACK 패킷이 돌아온 경우
- Filtered : 방화벽에 가로막힘. -> 응답이 없더나 차단되었다는 응답 패킷이 반환된 경우
응답이 돌아오지 않거나, ICMP unreachable 에러가 반환되는 경우
- Host Discovery
- 대상 IP가 살아있는지 확인
* SYN Scan은 -sV, -O등과 조합 가능 : 열린 포트 탐색 후-> 열린 포트로 작동중 서비스의 구체정보 가져올 수 있음
-sA
* TCP ACK Scan
* 스캔의 목적 - 방화벽 필터링 규칙 탐지
[TCP RFC 793] : 세션이 맺어지지 않은 상태에서 ACK 패킷을 받은 경우,
포트의 열림/닫힘에 관계없이 RST를 반환한다.
* 스캔의 작동 매커니즘
- TCP Connection이 established 되지 않은 상태에서, ACK 플래그가 세팅된 패킷을 해당 포트로 발송
- TCP 프로토콜상, TCP Connection이 되지 않은 상태에서 들어오는 ACK 패킷에 대한 응답은
-> RST 패킷을 보낸다. 즉, 포트가 개방 유무에 상관없이 RST 패킷이 돌아와야 한다
- RST 응답을 받은 경우, 해당 포트는 방화벽에 의해 막혀 있지 않은 경우이다.
- RST 응답을 받지 못한 경우, 해당 포트는 방화벽에 의해 막혀 있는 경우이다.
* 해당 스캔을 통해 얻을 수 있는 정보
! ACK Scan의 목적은 방화벽의 필터링 규칙/상태 보존 여부 탐색이다.
-> Port State가 Filtered/Unfiltered로 출력된다
- Port State
- Unfiltered : 방화벽이 해당 포트로 가는 패킷을 통과시킨다
응답으로 RST 패킷이 돌아온 경우
! 포트가 열려 있는지/닫혀 있는지 여부는 알 수 없다. 방화벽이 패킷을 통과시켰다는 사실만 알 수 있다.
- Filtered : 방화벽이 해당 포트로 가는 패킷을 Drop 시켰다
응답이 돌아오지 않거나, ICMP unreachable 에러가 반환되는 경우
-sN
* TCP Null Scan
* 스캔의 목적 - 방화벽 우회 및 OS Fingerprinting
[TCP RFC 793] : 포트가 닫혀(Closed) 있을 때는 유효하지 않은 패킷을 받으면 RST 응답을 보내야 하고,
포트가 열려(Open) 있을 때는 유효하지 않은 패킷을 받으면 무시(Drop)해야 한다.
* 스캔의 작동 매커니즘
! SYN 패킷은 IPS/IDS의 집중 관제 대상임 -> SYN Flag가 없는 없는 룰셋은 그냥 통과할 가능성이 높다
! SYN 패킷을 보내지 않는다 : 연결 신호로 카운트되지 않는다
!! OS Fingerprinting: Null Scan 시도 시 Windows는 RFC 규격을 무시하고 무조건 RST 패킷을 반환함
-> 오탐의 원인이 되기도 하지만, OS Fingerprinting을 할 수 있는 이유이기도 하다
- TCP 헤더에 어떤 플래그도 세팅하지 않고, 비어 있는(Null, 0b00000) 상태의 패킷을 발송하는 스캔 방식임
* 해당 스캔을 통해 얻을 수 있는 정보
- Port State
- Open | Filtered : 포트가 열려 있거나 패킷이 차단됨
응답이 안 돌아온 경우이다: 포트가 열려 있어서 무시했는지/방화벽이 차단했는지 모른다
- Closed : 포트가 닫혀 있음
타깃으로부터 RST 패킷이 들어온 경우이다.
- Filtered : 패킷이 확실히 차단된 경우이다
ICMP unreachable 에러 패킷이 반환된 경우이다.
-sF
* TCP FIN Scan
* 스캔의 목적 - 방화벽 우회(SYN 감시) 및 유닉스 계열 포트 개방여부 탐지
[TCP RFC 793] : 포트가 닫혀(Closed) 있을 때는 유효하지 않은 패킷을 받으면 RST 응답을 보내야 하고,
포트가 열려(Open) 있을 때는 유효하지 않은 패킷을 받으면 무시(Drop)해야 한다.
** 매커니즘은 -sN과 같으나, TCP FIN Flag만 세팅된 패킷을 발송한다는 점만 차이점이 있다.
-sX
* TCP Xmas Scan
* 스캔의 목적 - TCP FIN Scan과 같음
** 매커니즘은 -sN과 같으나, TCP FIN/PSH/URG Flag가 전부 세팅된 패킷을 발송한다는 점에 차이점이 있다.
-sM
* TCP Maimon Scan(메이몬 스캔)
* 스캔의 목적 - BSD 계열 Linux 시스템의 방화벽 우회(SYN X) 및 포트 개방여부 탐지
[BSD Standard] : [TCP RFC 793] 기준과는 다르게, 과거 BSD계열 OS중 일부에서는 다른 행동을 보임
-> 포트가 열려 있을 경우 FIN이나 ACK Flag가 포함된, 비정상 패킷을 Drop한다
* 스캔의 작동 매커니즘
- FIN과 ACK Flag가 세팅된 패킷을 보낸다
** 포트 개방여부를 판단한다는 점은 다른 스캔들과 같으나, BSD계
-sW
* TCP Window Scan
* 스캔의 목적 - 방화벽 우회(SYN X)와, 포트의 개방 여부 식별
[구현상 디테일 차이점] : 비유효 ACK 패킷 수신시 RST 응답을 하는 건 맞다
-> OS별로 구현상 포트가 열려있을때는 양수의 Window Size,
포트가 닫혀있을때는 0(zero)의 Window Size를 담는 경우가 있다
* 스캔의 작동 매커니즘
- ACK Flag가 세팅된 패킷 발송
-> 돌아오는 RST 패킷의 TCP Window Size 필드값 검사 -> 양수면 열려있음, 0이면 닫혀있음, 응답없으면 filtered
-O
* OS Detection
* 스캔의 목적 : 대상 시스템의 OS Fingerprinting
* 스캔의 작동 매커니즘
- 각 OS마다, 개발사 및 커널 버전마다 TCP/IP 스택의 내부적 동작 방식에 약간의 차이가 있다.
- 대상 포트 중 최소 1개의 열린 포트와 1개의 닫힌 포트를 지정해, 여러 형태의 조작된 패킷을 발송한다.
- 시스템이 응답하는 방식에 따라, Nmap 내부 데이터베이스에 저장된 정보와 대조해 시스템의 OS를 추측한다.
-D
* Decoy Scan(미끼 스캔)
* 스캔의 목적 : 스캐너(공격자)의 실제 IP주소를 여러 가짜 IP속에 은닉해 대상 시스템 관리자의 추적에 혼선을 만듬
* 스캔의 작동 매커니즘
** 스캔의 매커니즘은 동일하나, 공격받는 입장에서는 어떤 IP가 공격자(스캐너)의 IP인지 특정하는 데 어려움이 생긴다
-f
* Packet Fragmentation
* 스캔의 목적 : 패킷 헤더를 잘게 쪼개어 발송 -> IDS/IPS의 시그니처 기반 탐지를 우회한다
* TCP는 IP의 상위 레이어이므로, 여러 IP 패킷에 페이로드를 나눠 담아 보낼 수 있다
--mtu
* Maximum Transmission Unit
* 스캔의 목적 : -f 옵션과 동일하게, fragmentation을 통해 시그니처 기반 탐지 우회
* MUT를 직접 입력해 쪼갤 크기(오프셋)을 지정 가능
--spoof-mac
* MAC Address Spoofing
* 스캔의 목적 : L2 계층의 Source MAC 주소를 위조해, MAC filtering 우회
* 당연히, 동일 L2 네트워크 내부에서만 의미 있는 옵션이다.
-sI
* TCP Idle Scan(좀비 스캔 / Idle 스캔)
* 스캔의 목적 : 제 3의 시스템을 경유해 공격자(스캐너)의 IP주소를 은닉하고, IP기반의 방화벽 필터링 정책을 우회한다.
* 스캔의 작동 매커니즘
! 네트워크 활동이 거의 없는(Idle) 상태인 좀비 호스트의 IP ID 변화 추이를 추적/조작해 포트 상태를 간접 판별하는 것
- L3 IP 헤더의 ID(패킷 식별 번호)필드는 패킷이 발송될 때마다 순차적 증가한다
1. 스캐너가 좀비에게 SYN/ACK를 보내 현재 IP ID값을 알아낸다
2. 출발지를 좀비의 IP로 위조한, SYN 패킷을 타깃에게 보낸다.
-> 타깃의 포트가 Open인 경우, 타깃은 좀비에게 RST를 전송하고, 좀비의 IP ID가 증가한다
-> 타깃의 포트가 Closed인 경우, 타깃은 아무런 응답을 하지 않고, 좀비의 IP ID가 그대로다
---> 이때, 좀비에게 다시 SYN/ACK를 보내서 IP ID가 공격자와 한 만큼만 증가했다면 closed, 그보다 하나 더 증가했다면 open
! 공격자의 IP가 노출되지 않는 스캔 방법이지만,
통신을 거의 하지 않는 좀비 PC가 필요하며, 간접적으로 추측하는 방식이기에 결과값을 완전히 신뢰할 수 없다는 단점이 있다
2. 네트워크 관련 기법 조사
[Spoofing]
ARP Spoofing/Poisoning
DNS Spoofing
IP Spoofing
DHCP Spoofing
MAC Flooding
MITM(Man-in-the-Middle)
VLAN Hopping
XXE
SSRF
HTTP Prarmeter Pollution
Open Redirect
Broken Athentication
IDOR
LFI/RFI
3. 자동화