동작 계층 및 원리:네트워크 계층(L3)에서 동작하는 ICMP 프로토콜을 사용합니다. 송신 측에서 ICMP Echo Request(Type 8) 메시지를 대상 호스트에 보내면, 수신한 호스트는 ICMP Echo Reply(Type 0) 메시지를 응답하여 통신 가능 상태임을 알립니다.
RTT(Round Trip Time): 패킷이 대상까지 갔다가 돌아오는 데 걸리는 왕복 시간을 측정하여 네트워크 지연 상태를 파악할 수 있습니다.
보안 고려사항: 최근 많은 시스템과 방화벽에서 스캐닝을 방지하기 위해 ICMP 패킷을 차단(Drop)하도록 설정하며, 이 경우 서버가 살아있더라도 응답이 오지 않을 수 있습니다.
기능
Windows
Linux
비고 및 주의사항
패킷 개수 지정
-n
-c
가장 중요! 리눅스는 옵션 없이 실행하면 제어권을 반환하지 않고 무한 루프를 돕니다.
패킷 크기 지정
-l
-s
MTU 임계치를 초과하는 대형 패킷을 보내는 Ping of Death 공격 스크립트 분석 시 단골 출제됩니다.
TTL 값 지정
-i
-t
경로 추적(Traceroute)의 매커니즘 원리나 원격지 OS 정보 탐지(Footprinting) 관련 문제와 연계됩니다.
무한 핑 전송
-t
기본값
윈도우는 -t를 붙여야 강제 종료(Ctrl+C) 전까지 연속 전송되며, 리눅스는 인자값 생략 시 기본 무한 전송됩니다.
(2) netstat 명령어 및 윈도우/리눅스 옵션 상세 설명
- 요약 키워드: 네트워크 연결 상태, 포트 모니터링, 옵션(a, n, t, p, u, l), PID 확인
- 이론 상세 내용:
정의: 현재 호스트의 활성화된 네트워크 연결, 라우팅 테이블, 인터페이스 통계 등을 보여주는 도구입니다.
리눅스 주요 옵션 상세:
-a: 모든 연결(Connected) 및 리스닝(Listening) 상태의 소켓을 표시합니다.
-n: IP 주소와 포트 번호를 이름 대신 숫자로 표시합니다.
-t: TCP 프로토콜 기반 연결만 표시합니다.
-u: UDP 프로토콜 기반 연결만 표시합니다.
-l: LISTEN 상태의 포트만 표시합니다.
-p: 해당 포트를 사용하는 프로세스 ID(PID)와 프로그램 명을 표시합니다.
윈도우 주요 옵션 상세:
-a: 모든 연결 및 리스닝 포트를 표시합니다.
-n: 주소와 포트 번호를 숫자 형태로 표시합니다.
-o: 소켓(연결)을 생성한 프로세스의 프로세스 ID(PID)를 표시합니다.
-b: 소켓(연결)을 생성한 프로세스의 프로그램명(실행파일명)을 표시합니다.
-p tcp: TCP 연결만 표시합니다.
-p udp: UDP 연결만 표시합니다.
-r: 라우팅 테이블 정보를 표시합니다.
-s: 프로토콜별(TCP, UDP, ICMP, IP 등) 통계 정보를 표시합니다.
운영체제별 차이:
리눅스:-t, -u, -l 옵션을 통해 TCP/UDP 및 LISTEN 상태를 개별적으로 필터링할 수 있으며, -p 옵션으로 프로세스 정보까지 확인할 수 있습니다.
윈도우: TCP/UDP 구분 시 -p tcp, -p udp 형식을 사용하며, -o 옵션으로 PID를 확인할 수 있습니다. 리눅스의 -l 옵션은 존재하지 않으므로 일반적으로 netstat -ano 명령으로 전체 연결 및 리스닝 상태를 함께 확인합니다.
(3) traceroute 및 tracert의 동작 원리와 구현 차이
- 요약 키워드: TTL(Time To Live), ICMP Time Exceeded, 윈도우(ICMP) vs 리눅스(UDP)
- 이론 상세 내용:
기본 원리:TTL(생존 시간) 값을 1부터 시작하여 1씩 증가시키며 패킷을 전송합니다. 중간 라우터에서 TTL이 0이 되면 패킷을 폐기하고 송신자에게 ICMP Time Exceeded(Type 11) 메시지를 보내며, 이를 통해 경로상의 라우터 IP를 수집합니다.
최종 목적지 도달: 최종 목적지에 도착하면 더 이상 TTL 초과 메시지가 아닌 ICMP Port Unreachable(Type 3, Code 3)을 받게 됩니다.
TCP SYN Scan (Half-Open): SYN을 보낸 후 SYN/ACK가 오면 즉시 RST를 보내 연결을 끊습니다. 로그를 최소화합니다. [반응: 열림(SYN/ACK), 닫힘(RST/ACK)]
스텔스 스캔 (Stealth Scan): 세션을 맺지 않고 비정상적인 플래그 조합(FIN, NULL, XMAS)을 사용합니다. XMAS 스캔은 URG, PSH, FIN을 1로 설정한 것으로, 101001으로 표기합니다.
공통 반응: 포트가 닫혀있으면 RST/ACK 응답이 오고, 열려있으면 아무런 응답이 오지 않습니다(무응답).
방화벽(Filtered)에 막혔을 때의 반응 차이:
TCP Connect / SYN Scan: 방화벽 차단 시 패킷이 드롭되어 아무 응답이 오지 않거나(Timeout), ICMP 차단 메시지(Administratively Prohibited)를 수신합니다.
스텔스 스캔(FIN, NULL, XMAS): 방화벽에서 패킷이 조용히 드롭될 경우 아무 응답이 오지 않는데, 이는 포트가 '열려있을 때'의 반응과 동일합니다. 즉, 스텔스 스캔은 방화벽에 막혔는지, 포트가 열렸는지 정확히 구분할 수 없다는 치명적 한계가 있습니다.
ACK 스캔 (ACK Port Scan): ACK Scan은 포트의 Open/Closed 상태를 확인하는 스캔이 아니라, 패킷 필터링 여부를 추정하기 위한 스캔입니다. 방화벽이 iptables라고 가정했을 때, REJECT이면 ICMP Error가, DROP이면 아무 응답이 없습니다.
3.2. DoS/DDoS 공격 및 대응 (Network Layer)
(1) 주요 DoS 공격 4대 천왕 비교 (Land, Tear Drop, PoD, Smurf)
- 요약 키워드: 소스/데스티네이션 변조, 오프셋 조작, 거대 패킷, 브로드캐스트 반사
- 이론 상세 내용 (핵심 요약 표):
공격명 (실기 키워드)
핵심 공격 원리 및 매커니즘
Land Attack
패킷의 출발지 IP(Source)와 목적지 IP(Destination)를 타겟의 IP로 동일하게 위조하여, 타겟이 자기 자신에게 무한히 응답하게 만들어 자원을 고갈(Loop)시킵니다. 침입차단시스템 또는 OS 패치를 통해 출발지 IP와 목적지 IP 주소가 동일한 패킷을 차단해야 합니다.
Tear Drop
IP 단편화(Fragmentation) 시 Offset 값을 중첩(Overlap)시키거나 공백을 두어, 수신 측이 패킷을 재조합하는 과정에서 오류를 유발하고 시스템을 다운시킵니다.
Ping of Death
ICMP 규격(65,535 바이트) 이상의 거대한 비정상 패킷을 보내어, 수신 측이 수많은 단편화 조각들을 재조합할 때 버퍼 오버플로우를 발생시킵니다.
Smurf Attack
출발지 IP를 타겟 IP로 스푸핑한 후 Directed Broadcast 주소로 ICMP Echo Request를 전송하여, 네트워크 내 모든 호스트가 타겟에게 일제히 응답(반사)하게 만듭니다.
1) 네트워크 관점에서 / 증폭 네트워크로 사용되는 것을 막기 위해, Router(config-if)# no ip directed-broadcast를 통해 다른 네트워크로부터 자신의 네트워크로 들어오는 Directed Broadcast 패킷을 허용하지 않도록 라우터 설정을 해야 합니다.
2) 서버 관점에서 / Directed Broadcast 목적지 주소로 전송된 ICMP Echo Request 패킷에 대해 응답하지 않도록 아래와 같이 설정할 수 있습니다.
- 리눅스 : sysctl -w net.ipv4.icmp_echo_ignore_broadcasts = 1
- 유닉스 : ndd -set /dev/ip ip_respond_to_echo_broadcast 0
(2) IP 단편화 관련 공격 (Fragment Overlap vs Tiny Fragment)
- 요약 키워드: 오프셋 중첩(재조합 오류), 포트 정보 밀어내기(방화벽 우회)
- 이론 상세 내용:
Fragment Overlap: 단편화된 조각들의 오프셋을 겹치게 하여 데이터의 일관성을 깨뜨리고 시스템 부하를 유도합니다.
Tiny Fragment: IP 패킷을 매우 작은 크기로 단편화하여 상위 계층 헤더(TCP/UDP Header)가 여러 조각에 나뉘도록 만드는 공격 기법입니다. 일부 보안 장비나 필터링 장비가 첫 번째 단편만 검사하거나 단편 재조합을 수행하지 않는 경우, 이를 이용해 보안 정책 탐지 및 필터링을 우회할 수 있습니다.
💡 서술형(실기) 대비 핵심 키워드 구분:
Fragment Overlap의 목적:"재조합 과정 공격"에 초점을 맞추며, "중첩된 Offset(Fragment Offset Overlap)"을 이용해 운영체제나 보안 장비의 재조합 처리 오류를 유발하거나 시스템 장애를 일으키는 것이 핵심입니다.
Tiny Fragment의 목적:"단편화 기반 탐지 및 필터링 우회"에 초점을 맞추며, "상위 계층 헤더 정보를 여러 단편으로 분산"시켜 방화벽, IDS/IPS, 패킷 필터링 장비 등이 정상적으로 포트·플래그·세션 정보를 검사하지 못하게 만드는 것이 핵심입니다.
(3) Directed Broadcast의 개념 및 방어 기술
- 요약 키워드: 네트워크 전체 전송, Smurf 공격 방어, no ip directed-broadcast
- 이론 상세 내용:
개념:10.10.10.255와 같이 특정 네트워크 대역의 모든 호스트를 대상으로 패킷을 일제히 전송하는 브로드캐스트 방식입니다.
원리: 공격자가 ICMP Echo Request를 보내면서 소스 IP를 피해자로 속이면, 해당 대역의 수많은 호스트들이 ICMP Echo Reply를 피해자에게 쏟아부어 대역폭을 마비시킵니다.
대응책: 라우터 등 인프라 장비에서 no ip directed-broadcast 설정을 적용하여 외부로부터 들어오는 브로드캐스트 전송을 원천 차단합니다.
Trinoo: 초기의 단순 UDP Flooding 전용 도구입니다. Attacker, Master, Agent로 공격 네트워크를 구성하며, Attacker는 Master에 접속하여 공격 명령을 내리고 Master는 Agent에 공격 명령을 내리면 Agent가 실제 희생자에 DDoS 공격을 수행하는 구조입니다.
TFN (Tribe Flood Network): UDP, ICMP, SYN 등 다양한 형태의 다중 플러딩 공격을 지원합니다.
Stacheldracht: Trinoo와 TFN의 기능을 통합하고, 공격자와 마스터 간 암호화 통신 기능을 추가했습니다.
TFN2k: TFN의 발전형으로 통신 암호화 및 은닉 기능을 강화했습니다.
hping3: 보안 스캐닝 테스트 도구로 개발되었으나, 임의의 TCP 플래그 조작 및 패킷 생성이 자유로워 DoS 공격에 빈번히 악용됩니다.
Slow HTTP Header (Slowloris): 헤더의 끝을 알리는 개행 문자(\r\n\r\n)를 다 보내지 않고 불완전한 헤더를 천천히 전송하여 서버의 연결을 장시간 점유합니다.
Slow HTTP POST (RUDY):Content-Length를 매우 크게 설정한 후 본문 데이터(Payload)를 1바이트씩 아주 느리게 전송하여 연결 자원을 고갈시킵니다.
Slow HTTP Read DoS 핵심 동작 원리:
공격자는 서버로 정상적인 HTTP GET 요청을 보냅니다.
서버가 응답 데이터(HTML 이미지 등)를 보내려 할 때, 공격자는 TCP 통신의 흐름 제어(Flow Control)를 악용하여 자신의 TCP 수신 버퍼 여유 공간인 Window Size를 0 (혹은 1)으로 설정(W=0으로 고정)하여 서버에 알립니다. 정상 패킷은 Window Size가 가변적입니다.
서버는 "클라이언트 측 버퍼가 가득 찼으니 데이터를 보내지 말고 기다려야 한다"고 판단하고, 윈도우 프로브(Window Probe) 패킷만 보내며 대기 상태에 빠집니다.
"다수의 HTTP 요청에 대한 서버 응답"이 이런 식으로 대기 상태에 걸리면, 서버의 송신 버퍼와 동시 접속자 수(Connection Pool)가 완전히 고갈되어 결국 서비스 거부 상태가 됩니다.
Slow 계열의 공격 대응방안:
방화벽(iptables)를 이용하여 동시 연결에 대한 임계치 설정을 통해 동일한 출발지 IP에서 동시에 연결 가능한 연결개수를 제한
클라이언트와 웹서버 간 세션에 대한 연결 타임아웃(Connection Timeout)을 적절히 설정하여 천천히 지속하는 요청에 대응
읽기 타임아웃(Read Timeout)을 적절히 설정하여 지정한 시간 이내에 요청 데이터를 모두 수신하지 못하면 타임아웃을 발생시킵니다.
(6) DNS 증폭 DRDoS 및 tcpdump 패킷 분석 시나리오
- 요약 키워드: UDP 반사, 질의 타입 ANY, SPF 레코드, tcpdump 트랜잭션 및 단편화 분석
- 이론 상세 내용:
개념: 소스 IP를 피해자로 변조한 후, 응답 크기가 매우 큰 질의 타입 ANY 혹은 TXT 레코드를 요청하여 수십 배 증폭된 트래픽을 피해자에게 쏟아붓는 반사 공격입니다. 공격자들이 이 기법을 주로 사용하는 이유는 1) 다수의 반사 서버를 경유하기에 공격자의 IP를 추적하기 어렵게 할 수 있으며, 2) 요청 대비 응답 트래픽의 크기가 매우 커 효율적인 공격이 가능하기 때문입니다. DNS를 활용한 DRDoS 외에도 1) TCP 3-Way Handshaking을 이용한 다수의 SYN 요청, 2) ICMP 프로토콜을 이용한 방식, 3) UDP 프로토콜을 이용한 방식(DNS, NTP, SNMP, CHARGEN) 등의 서비스를 이용한 방식도 있습니다.
SPF(Sender Policy Framework): 본래 이메일 스푸핑 방지 기술이나, DRDoS 공격자들이 도메인 사칭용 TXT 레코드에 대량의 데이터를 넣어 증폭 매개체로 악용하기도 합니다.
[DNS 증폭 탐지용 tcpdump 분석 예시]
00:55:03.989042 IP (tos 0x0, ttl 63, id 63215, offset 0, flags [none], proto UDP (17), length 67) 10.10.10.10.25950 > 192.168.56.100.53: [udp sim ok] 24093+ [1au] TXT? test.com. ar:.OPT UDPsize=4096 (39)
00:55:03.989258 IP (tos 0x0, ttl 64, id 54509, offset 0, flags [+], proto UDP (17), length 155) 192.168.56.100.53 > 10.10.10.10.35950: 24093*- q: TXT? test.com. 10/2/1 test.com. TXT[|domain]
00:55:03.989352 IP (tos 0x0, ttl 64, id 54509, offset 1480, flags [none], proto UDP (17), length 826) 192.168.56.100 > 10.10.10.10: udp
요청 패킷 (첫 번째 줄): 피해자(10.10.10.10)로 위장한 공격자가 DNS 서버(192.168.56.100)로 TXT 레코드를 질의합니다. 24093+에서 24093은 트랜잭션 ID이며, + 기호는 재귀 질의(Recursion Desired)를 요구한다는 의미입니다.
응답 패킷 1 (두 번째 줄): DNS 서버가 피해자에게 응답을 보냅니다. 트랜잭션 ID 24093이 일치하며, * 기호는 이 응답이 권한 있는 응답(Authoritative Answer)임을 나타냅니다. 특히 flags [+]는 MF(More Fragments) 비트가 1임을 의미하여 이 패킷 뒤에 조각이 더 있음을 암시합니다.
응답 패킷 2 (세 번째 줄): 두 번째 패킷과 동일한 id 54509를 가집니다. 즉, 응답 데이터가 너무 커서 IP 단편화(Fragmentation)가 발생했음을 보여줍니다. offset 1480은 단편화된 두 번째 조각의 시작 위치를 의미하며, flags [none]은 마지막 조각(MF=0)임을 나타냅니다. 공격 성공 시 이처럼 거대한 파편화된 응답들이 피해자를 덮치게 됩니다.
DNS 증폭(Amplification) DRDoS 대응방안:
공개용이 아닌 내부 사용자용 resolving(cache) DNS 서버라면 서버 설정을 통해 내부 사용자 주소만 Recursive Query(재귀 쿼리)가 가능하도록 제한합니다.
서버 방화벽 또는 네트워크 보안장비를 통해 특정 Byte 이상의 DNS 응답을 차단하거나, 동일 출발지 IP에 대해 단위시간(초)당 요청개수 제한 설정을(임계치 설정) 합니다.
(7) 기타 증폭/반사 공격 프로토콜 (Memcached/WSD/ARMS/CoAP)
- 요약 키워드: Memcached, WSD, ARMS, CoAP 1줄 요약 정리
- 이론 상세 내용:
Memcached: 포트 11211번을 사용하며, 인증 부재 취약점을 통해 수만 배의 엄청난 증폭 비율을 가지는 분산 캐시 시스템 악용 공격입니다.
WSD (Web Services Dynamic Discovery): 멀티캐스트를 이용해 로컬 네트워크의 웹 서비스를 탐색하는 프로토콜(UDP 3702)을 악용하여 외부 트래픽을 증폭시킵니다.
ARMS (Apple Remote Management Service): 애플의 원격 관리 서비스 포트(UDP 3283)를 악용하여 다량의 응답을 반사시키는 공격입니다.
TCP 세션 하이재킹: 인증이 완료된 정상 사용자의 TCP 연결 세션을 가로채는 공격으로, 주로 TCP 통신의 Sequence Number 예측 가능성이나 세션 동기화 특성을 악용합니다. 공격자는 정상 사용자와 서버 사이의 TCP 세션 흐름을 탈취하여 위조된 패킷을 삽입하고, 연결의 주도권을 강탈하거나 정상 사용자를 연결에서 제외시킬 수 있습니다.
HTTP 세션 하이재킹: 웹 애플리케이션에서 사용자의 로그인 세션을 식별하는 세션 쿠키(Session Cookie)나 세션 토큰(Session ID)을 탈취하여 사용자의 권한을 가로채는 공격입니다. 공격자는 XSS, 스니핑, 세션 고정(Session Fixation), 악성 스크립트 등을 통해 세션 정보를 획득한 뒤 정상 사용자처럼 웹 서비스에 접근할 수 있습니다.