Infosec403

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. 자동화