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