[정보보안기사] DDoS 종류와 대응 방법
· DoS(Denial of Service, 서비스 거부 공격): 컴퓨터의 자원을 고갈시키기 위해 특정 서비스를 계속적으로 호출하여 CPU, Memory, Network 등의 자원을 고갈시키는 공격.
· DDoS(Distributed Denial of Service, 분산 서비스 거부 공격): 여러 대의 공격자가 분산되어 있고, 특정 시스템을 집중적으로 공격하는 방법.
1. TCP SYN Flooding
· TCP Half Open의 취약점을 이용하는 공격 기법이다.
* TCP Half Open: 세션을 완전히 연결하지 않고 3-way handshaking 과정에서 SYN 패킷만 보내는 행위.
1.1. 공격 방법
(1) 공격자 A는 패킷을 조작하여 수많은 TCP SYN 패킷을 피해자 C에게 보낸다.
- 발신자 IP 주소: 존재하지 않는 주소 B.
- 수신자 IP 주소: 피해자 C의 IP 주소.
(2) 피해자는 SYN 패킷에 응답(3-way handshaking) 하기 위해 발신자 주소(B)로 SYN, ACK를 보낸다.
그러나 B는 존재하지 않는 주소이기 때문에 3-way handshaking의 마지막 ACK 응답이 없다.
(3) 피해자는 B의 ACK 응답을 계속 기다리며 SYN 패킷 요청은 계속 대기 큐에 쌓인다.
(4) 피해자의 대기 큐가 가득 차서, 더 이상 정상적인 요청도 받을 수가 없게 된다.
1.2. 대응 방법
대응 방법 | 설명 | |
방화벽에서 대응(임계치) | IP당 SYN 요청에 대한 PPS(Packet Per Second) 임계치를 단계적으로 조정. | |
First SYN Drop 설정 | · SYN 패킷을 보낸 클라이언트의 존재 여부를 파악하여 차단하는 방법. · 클라이언트에서 전송된 첫 번째 SYN을 DROP하여 재요청 여부를 확인 후 Spoofing 여부 판단. (재요청 시 정상 클라이언트.) |
|
TCP 세션 연결 차단(임계치) | 트래픽 유형별 임계치를 조정하여 TCP 세션 연결 차단. | |
Back Queue 증가 | · 임시적인 방법으로 서버의 Queue 크기를 증가시킴. · sysctl -w net.ipv4.tcp_max_syn_backlog = 1024 |
|
라우터에서 대응 | Watch Mode | SYN 패킷을 통과시키고 일정 시간 연결이 이루어지지 않으면 라우터가 SYN 패킷을 차단. |
Intercept Mode | SYN 패킷을 서버로 전송하지 않고, 라우터에서 가로채어 SYN 패킷을 요청한 클라이언트와 대신 연결. |
* iptables 방화벽에서 차단
iptables -A INPUT -p tcp --dport 80 --syn -m connlimit --connlimit -above 30 -j DROP
(SYN 패킷이 TCP 80번 포트로 30번 이상 오면 차단.)
2. DRDoS(Distributed Refloction Denial of Service): 반사 DDoS 공격
· 별도의 Agent를 설치하지 않고 TCP Half Open의 취약점을 이용하는 공격 기법.
* 반사 공격:
2.1. 공격 방법
(1) 공격자는 발신자 IP주소를 피해자 IP주소로 수정하여 정상 서비스 중인 여러 대의 서버에 TCP SYN 요청을 무수히 보낸다.
- 발신자 IP 주소: 피해자 IP
- 도착지 IP 주소: 정상 서버들의 IP
(2) 여러 대의 반사 서버에서 SYN에 대한 응답으로 SYN, ACK를 피해자에게 보내게 된다. (정상적으로 서비스하던 서버들이 DDoS Agent가 된다.)
(3) 피해자는 TCP SYN Flooding보다 수십~수백 배 많은 양의 패킷을 받게 된다.
(반사 서버의 수가 많을수록 패킷이 많아진다.)
3. ICMP Flooding (Smurfing Attack)
· IP의 Broadcast와 ICMP 패킷을 이용한 공격이다.
· ICMP는 통신을 위해서 서비스 및 포트가 필요 없는 유일한 프로토콜이다.
3.1. 공격 방법
(1) 다수의 호스트가 존재하는 서브 네트워크에 ICMP echo request 패킷을 Broadcast로 전송한다.
- 발신자 IP 주소: 피해자 IP
- 수신자 IP 주소: 서브 네트워크 Broadcast 주소 (10.10.10.255)
(2) 수많은 호스트들의 ICMP echo request에 대한 응답(ICMP echo reply)이 피해자에게 집중된다.
3.2. 대응 방법
대응 방법 | 설명 |
ICMP echo 패킷 차단 | · icmp_echo_ignore_all = 1 (ICMP echo 패킷 전체 차단) · icmp_echo_ignore_broadcasts = 1 (ICMP echo Direct Broadcast 차단) |
ACL을 이용한 차단 | 웹 서버 혹은 운영 장비에 대한 접근 제어 목록 차단. |
Inbound 패킷 임계치 설정 | · 운영 장비로 유입되는 Inbound 패킷을 기준으로 PPS 수치를 유입되는 수치보다 낮게 설정. · 임계치 이상의 ICMP 패킷 차단. |
4. Tear Drop (IP Fragmentation, IP 단편화)
· MTU(Maximum Transmission Unit)보다 큰 패킷은 분할되는 특성을 이용한 공격.
· 분할된 패킷은 flags와 offset 값을 가진다.
* flags: IP 패킷 분할 여부를 나타냄.
0x00(현재의 조각이 마지막임), 0x01(뒤에 남은 조각이 있음), 0x02(단편화 하지 말라는 뜻)
*offset: 분할 되기 전의 데이터 위치. IP 헤더의 크기(20byte)를 뺀 값이 들어간다.
4.1. 공격 방법
· 분할된 패킷의 offset을 임의로 조작하여 다시 조립될 수 없도록 한다.
예) offset field 값이 중첩되는 데이터 패킷 전송 - Bonk Attack
정상적인 패킷을 보내다가 중간에 중첩되는 offset 값의 데이터 전송 - Boink Attack
* Tiny Fragment: 최초의 Fragment를 아주 작게 만들어서 IDS 장비를 우회하는 공격.
(공격 코드 문자열이 분할되어 탐지를 우회하는 기법)
5. Ping of Death (IP Fragmentation, IP 단편화)
· Ping을 이용하여 하나의 큰 ICMP 패킷을 전송하는 공격.
5.1. 공격 방법
· 규정된 길이 이상으로 큰 IP 패킷을 수신받은 OS에서 처리하지 못하여 시스템을 마비시킨다.
5.2. 대응 방법
대응 방법 | 설명 |
ICMP echo 패킷 차단 | · icmp_echo_ignore_all = 1 (ICMP echo 패킷 전체 차단) · icmp_echo_ignore_broadcasts = 1 (ICMP echo Direct Broadcast 차단) |
6. Land Attack
· IP 헤더를 변조하여 수행하는 공격.
· 발신자와 수신자의 IP주소를 동일하게 설정하여 네트워크 부하를 유발한다.
6.1. 공격 방법
· 발신자 IP 주소 = 피해자 IP 주소
· 수신자 IP 주소 = 피해자 IP 주소
6.2. 대응 방법
· 발신자와 수신자의 IP 주소가 동일한 패킷을 삭제한다.
· snort rule (sameip)
alert ip any any -> 192.168.0.2/24 any (msg:"Land Attack"; sameip; sid:10000005;)
7. HTTP Get / Post Flooding
7.1. 공격 방법
· 정상적인 TCP 연결 이후에 HTTP Get / Post Request를 계속적으로 호출한다.
7.2. 대응 방법
대응 방법 | 설명 |
선별적 IP 차단 | · TCP 연결요청 임계치 값과 HTTP Get의 임계치 값을 모니터링 한후 비정상적인 트래픽을 차단. · 연결 기반 공격이므로 IP를 변조할 수 없는 특성을 이용. |
콘텐츠 요청횟수에 의한 임계치 설정 | · 특정 콘텐츠를 다량으로 요청하는 것이므로 IP마다 콘텐츠 요청 횟수의 임계치를 설정 |
시간대별 웹 페이지 URL 접속 임계치 설정 차단 |
· 시간대별 임계치를 설정하여 임의의 시간 안에 설정한 임계치 이상의 요청이 들어온 경우 해당 IP를 탐지하여 방화벽 차단 목록에 등록 |
Web Scraping 기법을 이용한 차단 | · L7 스위치를 운영하는 경우 웹 스크랩핑 기능을 사용하여 요청 패킷에 대한 쿠키 값이나 자바 스크립트를 보내어 클라이언트로부터 원하는 값에 재요청 패킷이 없는 경우 해당 패킷을 차단. |
8. Slow HTTP Attack
· 큰 HTTP 데이터를 천천히 전송하는 공격.
8.1. Slow HTTP Get / Post Attack
· HTTP 헤더에는 Content Length가 있는데 이 값에 임의의 큰 값을 입력하고, 1byte씩 천천히 전송하여 서버가 연결을 장시간 유지하게 만든다.
· Web Proxy(Burp Suite)를 사용해서 HTTP 헤더를 변조할 수 있다.
8.2. Slow HTTP Read DoS
· 공격자는 자신의 TCP 윈도우 크기를 0Byte로 설정하여 서버로 전달한다.
· 서버는 윈도우 크기가 0Byte인 것을 확인하고 데이터를 전송하지 않고 Pending 상태로 빠지게 된다.
· 공격자는 윈도우 크기를 점검하는 Probe 패킷을 ACK로 전송하면 서버는 대기 상태로 빠지게 된다.
8.3. Slow HTTP Header DoS (Slowloris)
· HTTP Header와 Body는 개행문자(\r\n\r\n)으로 구분된다.
* \r (Carriage Return) = 0x0D, \n (Line Feed) = 0x0A
· Slow HTTP Header DoS는 \r\n만 전송하여 불완전한 Header를 전송하는 공격이다.
8.4. Slow HTTP Get / Post Attack 대응 방법
대응 방법 | 설명 |
접속 임계치 설정 | 특정 발신지 IP에서 연결할 수 있는 최대 값 설정. |
iptables로 차단 | · iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit -above 30 -j DROP · 30개 이상의 http 연결 차단. |
Connection Timeout과 Keepalivetime 설정 |
· Connection Timeout 설정으로 클라이언트와 서버 간에 데이터 전송이 없을 경우 연결 종료. · 웹 서버의 Keepalivetime을 설정하여 차단. |
RequestReadTimeout 설정으로 차단 |
· Apache 2.2.15 버전 이후에서 사용. · Slow Attack을 차단하기 위해서 RequestReadTimeout header=5 body=8 설정. · 5초 내 연결이 안 되면 연결 종료, POST 요청 이후 8초 내에 데이터가 오지 않으면 연결 종료. |
9. Cache Control Attack
9.1. 공격 방법
· Cache-Control을 no-cache (또는 max-age=0) 으로 설정하고 웹 서버를 호출하면 항상 최신 페이지를 전송해 주어야 하기 때문에 웹 서버는 더 많은 부하가 발생한다.
9.2. 대응 방법
· HTTP Get Attack과 마찬가지로 임계치 기반 대응을 실시.
· 방화벽에서 HTTP Request 메시지를 파싱해서 캐싱 공격 문자열을 포함하고 있는 IP 주소를 차단한다.
· L7 스위치를 이용하여 HTTP Request 문자열을 파싱해서 IP를 차단한다.
10. DNS 증폭 공격
· Open DNS Resolver 서버를 이용해서 DNS Query의 Type을 "ANY"로 설정하면 모든 레코드의 응답을 요청하기 때문에 요청한 쿼리 패킷보다 응답이 크게 증폭된다.
· DNS 반사 공격(DNS Reflector Attack)이라고도 한다.
· DNS Record 종류
종류 | 설명 |
A | 호스트 이름을 IPv4로 매핑. |
AAAA | 호스트 이름을 IPv6로 매핑. |
PTR (Pointer) | 역방향 조회 (IP 주소 → 도메인 이름) |
NS (Name Server) | DNS 서버를 가리킴. |
MX (Mail Exchanger) | 도메인 이름으로 보낸 메일을 받도록 하는 목록 지정. |
CNAME (Canonical Name) | 호스트의 다른 이름을 정의하는 데 사용. |
SoA (Start of Authority) | 도메인에 가장 큰 권한을 부여받은 호스트 선언, TTL(유효기간) |
ANY(ALL) | 위의 모든 레코드를 표시. |
10.1. 공격 방법
공격자는 발신자 IP주소를 피해자 IP주소로 수정하여 DNS 서버에 "ANY" Request를 무수히 보낸다.
- 발신자 IP 주소: 피해자 IP
- 도착지 IP 주소: DNS Server IP
10.2. 대응 방법
· 반드시 필요한 상황이 아니면 DNS 재귀기능을 비활성화한다.
· 과도한 OutBound 트래픽이 생성되는지 모니터링한다.
11. NTP 증폭 공격
· 시간 동기화를 위해 사용되는 NTP(Network Time Protocol) 서버 기능을 악용하여 UDP 트래픽의 양을 증폭시키는 공격.
· ntp 질의에 대한 모든 대답 목록을 보여주는 monlist 명령어를 사용한다.
· monlist는 기본적으로 최근 600개의 질의/응답 목록을 보여주기 때문에 한 질의 패킷에 약 20배의 증폭이 된다.
11.1. 공격 방법
· 발신자 IP 주소 = 피해자 IP 주소
· ntpd -n -c monlist (NTP 서버)
11.2. 대응 방법
· NTP 버전 업데이트: v4.2.7 이상 부터는 monlist 기능이 삭제됨.
· monlist 기능 제거: /etc/ntp.conf 파일에 'disable monitor' 추가.
· iptables등의 방화벽에서 NTP 서버가 사용하는 UDP 123번 포트를 차단.
11.3. 취약한 NTP 서버 확인 방법
· ntpdc -n -c monlist pool.ntp.org
· 위와 같이 질의 시 time out이 나오면 안전. 목록이 나오면 취약.
12. Hash DoS
클라이언트에서 전달되는 각종 파라미터 값을 관리하는 해시테이블의 인덱스 정보가 중복되도록 유도하여 사전에 저장된 정보 조회 시 많은 CPU 자원을 소모하도록 하는 공격.
13. Hulk DoS
웹 서버 가용량을 모두 사용하여 정상적인 서비스가 불가능하도록 하는 Get Flooding 공격 유형이다.
공격 대상 URL을 지속적으로 변경하여 DDoS 차단 정책을 우회하는 특징이 있다.
특정 URL이 계속 변경되면 임계치 설정 기반 방어가 불가능하게 된다.