[정보보안기사/네트워크] 분산 서비스 거부 공격(DDos)
서비스 거부 공격(DoS, Denial of Service)
컴퓨터의 자원을 고갈시키기 위한 공격으로 특정 서비스를 계속적으로 호출하여 CPU, Memory, Network 등의 자원을 고갈시킨다.
DoS 공격은 소프트웨어 취약점을 이용하는 공격과 IP Header를 변조하여 공격하는 로직 공격(Logic Attack), 무작위로 패킷을 발생시키는 플러딩 공격(Flooding Attack)으로 구분된다.
도구 | Trinoo | TFN | Stacheldraht |
---|---|---|---|
공격방법 | UDP Flood | UDP, ICMP, SYN Flood, Smurf | UDP, ICMP, SYN Flood, Smurf |
암호 기능 | 없음 | 없음 | 가능 |
Attacker-Master | 27665/tcp | Telnet 등 방법 | 1660/tcp(암호화) |
Master-Agent | 27444/udp | ICMP echo Reply | ICMP echo Reply, 65000/tcp |
Agent-Master | 323335/udp | ICMP echo Reply | ICMP echo Reply |
분산 서비스 거부 공격(DDoS)
TCP SYN Flooding
TCP
패킷의 SYN
비트를 이용한 공격 방법으로 너무 많은 연결 요청을 전송해서 대상 시스템이 범람(Flooding
)하게 만들어 대상 시스템의 서비스를 중단시키는 공격
- TCP 연결 요청. TCP SYN packet 전송 (Host A[Hacker] => Host B[Victim])
- Host C에게 응답. TCP SYN/ACK packet 전송
- Host B는 Host C의 응답 대기 TCP ACK packet 대기
- TCP 연결 대기 큐가 Overflow될 때까지 Host B에게 계속 연결 요청
- Host C로부터 ACK 없음, 대기 큐는 Overflow
- TCP 초기 연결 과정(
3-Way Handshaking
) 이용, SYN 패킷을 요청하여 서버가 ACK 및 SYN 패킷을 보내게 한다. -
전송하는 주소가 무의미한 주소이며 서버는 대기 상태이고 대량의 요청 패킷 전송으로 서버의 대기 큐가 가득차서 DoS 상태가 된다.
- 대응 방법
- 방화벽에서 대응
IP 당 SYN 요청에 대한 PPS(Packet Per Second) 임계치를 단계적으로 조정 - First SYN Drop(Spoofed) 설정
SYN 패킷을 보낸 클라이언트의 존재 여부를 파악하여 차단하는 방법
클라이언트에서 전송된 첫 번째 SYN을 DROP하여 재요청 여부 확인 후 Spoofing 여부를 판단한다 - TCP 세션 연결 차단
트래픽 유형별 임계치를 조정하여 TCP 세션 연결에 대한 차단 - Back Queue 증가
임시적 방법으로 서버의 Queue 사이즈를 증가시킴sysctl -w net.ipv4.tcp_max_syn_backlog = 1024
- (라우터) Watch Mode
SYN 패킷을 통과시키고 일정 시간 동안 연결이 이루어지지 않으면 라우터가 SUN 패킷을 차단한다 - (라우터) Intercept Mode
라우터에 유입되는 SYN 패킷 요청을 서버로 전송하지 않고, 라우터에서 가로채어 SYN 패킷을 요청한 클라이언트와 서버를 대신 연결한다
- 방화벽에서 대응
DRDoS
별도의 Agent를 설치하지 않고 TCP Half Open의 취약점을 이용하는 공격 기법
공격대상 IP로 출발지 IP를 변조하여 SYN 패킷 전송, 서버는 변조된 공격대상 IP로 SYN-ACK 패킷 전송
ICMP Flooding
IP 특징(Broadcast 주소 방식)과 ICMP
패킷을 이용한 공격 방법
- 통신을 위해서 서비스 및 포트가 필요없는 유일한 프로토콜이다
- Smurfing Attack이라고도 한다
다수의 호스트가 존재하는 서브 네트워크에 ICMP echo 패킷을 Broadcast
로 전송한다. 이에 대한 다량의 응답 패킷이 공격대상 서버로 집중되게 하여 마비시키는 공격이다.
ICMP 공격에 사용되는 메시지
Source Quench(Type-4)
사용 중 전송자에게 패킷 전송 속도를 줄여 줄 것을 요구하는 메시지로 전송 속도 지연 발생
Time to live exceeded in Transit(Type-11, Code-0)
시간초과로 패킷이 폐기되었기 때문에 재전송한다
Destination unreachable(Type-3, Code-0,1,2,3)
ICMP 트래픽 처리에 자원을 사용하게 되므로 시스템이 조금씩 느려지는 현상 발생
- 대응 방법
- ACL(Access Control List)을 이용한 차단
웹 서버 혹은 운영 장비에 대한 접근 제어 목록을 차단 - Inbound 패킷 임계치 설정
운영 장비로 유입되는 Inbound 패킷을 기준으로 PPS 수치를 유입되는 수치보다 낮게 설정. 임계치 이상의 ICMP 및 UDP 차단
- ACL(Access Control List)을 이용한 차단
Tear Drop : IP Fragmetation (Ping of Death)
네트워크 패킷은 MTU
(Maximum Transmission Unit)보다 큰 패킷이 오면 분할하고 분할(Fragmentation
)된 정보를 Flag와 Offset이 가지고 있다. 이 때, Offset을
임의로 조작하여 다시 조립될 수 없도록 하는 공격
Fragment를 조작하여 패킷 필터링 장비나 IDS를 우회하여 서비스 거부를 유발시킨다
공격 종류
-
Tiny Fragment
최초의 Fragment를 아주 작게 만들어서 네트워크 침입탐지 시스템이나 패킷 필터링 장비를 우회하는 공격 -
Fragment Overlap
Tiny Fragment 공격 기법에 비해 정교하며, IDS의 Fragment 처리 방법과 패킷 필터링의 재조합과 Overwrite 처리를 이용 -
IP Fragmentation을 이용한 DoS
- Ping of Death
Ping
을 이용하여ICMP
패킷을 규정된 길이 이상으로 큰 IP 패킷을 전송, 수신받은 OS에서 처리하지 못함으로써 시스템을 마비시키는 공격 - Tear Drop
Fragment 재조합 과정의 취약점을 이용한 공격으로 목표시스템 정지나 재부팅을 유발하는 공격. TCP Header 부분의 Offset Field 값이 중첩되는 데이터 패킷을 대상 시스템에 전송- offset field : 특정 데이터 패킷이 운반 중인 데이터나 데이터 범위 내에서 운반할 byte를 지정한다
- Ping of Death
Land Attack
IP Header를 변조하여 인위적으로 송신자 IP주소 및 Port주소를 수신자의 IP 주소와 Port주소로 설정하여 트래픽을 전송하는 공격 기법.
송신자와 수신자의 IP주소와 Port주소가 동일하기 때문에 네트워크 장비에 부하를 유발한다
RAW Socket에서 s_addr은 송신자의 IP이고 daddr은 수신자의 IP주소이다. 즉, s_addr과 daddr을 동일한 IP주소로 설정하고 송신하면 Land Attack을 구현할 수 있다.
송신자와 수신자의 IP주소가 동일한 패킷을 삭제함으로써 대응이 가능하다
HTTP Get Flooding
정상적인 TCP 연결 이후에 정상적으로 보이는 HTTP Transaction 과정을 수행하는 방식으로 DoS/DDoS 공격 방법.
HTTP Get을 지속적으로 요청하여 HTTP 연결 및 HTTP 처리 로직까지 과부하를 유발한다. TCP의 3-Way Handshaking 이후 공격을 수행하기 때문에 IP를 변조하지 않는다.
HTTP Get Flooding은 아주 간단한 공격으로 다수의 HTTP Request
를 계속적으로 호출하게 만드는 방법이다.
- 대응 방법
-
선별적 IP 차단
TCP 연결요청 임계치 값과 HTTP Get의 임계치 값을 모니터링한 후 비정상적인 트래픽은 차단한다.연결기반 공격이므로 IP를 변조할 수 없는 특성을 이용한 방법이다
-
컨텐츠 요청횟수에 의한 임계치 설정
특정 컨텐츠를 다량으로 요청하는 것이므로 IP마다 컨텐츠 요청 횟수의 임계치를 설정 -
시간대별 웹 페이지 URL 접속 임계치 설정 차단
시간대별 임계치를 설정하여 임의의 시간 안에 설정한 임계치 이상의 요청이 들어온 경우 해당 IP를 탐지하여 방화벽 차단 목록에 등록한다 -
Web Scraping 기법을 이용한 차단
L7 스위치를 운영하는 경우 웹 스크랩핑 기능을 사용하여 요청 패킷에 대한 쿠키 값이나 자바 스크립트를 보내어 클라이언트로부터 원하는 값에 재요청 패킷이 없는 경우 해당 패킷을 차단한다
-
Cache Control Attack
HTTP RFC 2616에 규정되어 있는 Cache-Control Header 옵션 값을 사용한다. 이 옵션은 자주 변경되는 데이터에 대해서 새롭게 HTTP 요청과 응답을 요구하는 옵션으로 no-cache가 설정되면 항상 최신의 페이지를 요청하여 부하를 발생시킨다
- 대응 방법
- HTTP GET Attack과 마찬가지로 임계치 기반 대응을 실시
- 단, Cache-Control 사용여부에 따른 임계치를 설정하는 것이 더 효과적
Slow HTTP Get/Post Attack
Slow HTTP GET Flooding
HTTP GET Flooding과 달리 HTTP Header를 변조해야 한다.
- Slow HTTP Get 방식
- TCP 및 UDP 기반 공격 : 변조 IP가 아닌 정상 IP 기반 공격이며, 탐지가 어렵다
- 소량의 트래픽을 사용한 공격 : 소량의 트래픽과 세션 연결을 통해서 공격한다
- 애플리케이션 대상 : 서비스의 취약점을 이용한 공격이다
- Slow HTTP Post 방식
- HTTP의 Post 지시자를 이용하여 서버에게 전달할 대량의 데이터를 장시간에 걸쳐 분할 전송한다
- Post 데이터가 모두 수신되지 않으면 연결을 장시간 유지하게 된다
- Slow HTTP Read DoS
- 공격자가 웹 서버와 TCP 연결 시 TCP 윈도우 크기 및 데이터 처리율을 감소시킨 후 HTTP 데이터를 송신하여 웹 서버가 정상적으로 응답하지 못하도록 하는 DoS/DDoS 기법
- TCP 윈도우 크기 및 데이터 처리율을 감소시키면 서버는 정상상태로 회복할 때까지 대기 상태에 빠지게 되어 부하를 유발한다
- 공격자는 자신의 TCP 윈도우 크기를 0바이트로 만든 후 서버로 전달
- 서버는 윈도우 크기가 0바이트인 것을 확인하고 데이터를 전송하지 않고 Pending 상태로 빠지게 된다
- 공격자는 윈도우 크기를 점검하는 Probe 패킷을 ACK로 전송하면 서버는 대기 상태로 빠지게 된다
- Slow HTTP Header DoS(Slowloris)
- HTTP Header를 비정상적으로 조작해서 웹 서버가 헤더 정보를 구분할 수 없도록 하는 방법. 웹 서버에 HTTP Header 정보가 모두 전달되지 않은 것으로 판단하여 연결을 장시간 유지한다
- 웹 서버는 클라이언트로부터 요청이 끝나지 않은 것으로 판단되기 때문에 웹 로그에 기록하지 않는다
- HTTP Header와 Body는 개행문자(\r\n\r\n)로 구분되는데 Slow HTTP Header DoS는 \r\n만 전송하여 불완전한 Header를 전송한다
- 대응 방법
-
접속 임계치 설정
특정 발신지에서 IP로 연결할 수 있는 최대값 설정 - 방화벽 설정 도구인 iptables로 차단
iptables -A INPUT -p tcp -dport 80 -m connlimit-above 30 -j DROP
30개 이상의 Concurrent Connection에 대한 차단
-
Connection Timeout과 Keepalibetime 설정
Connection Timeout 설정으로 클라이언트와 서버 간에 데이터 전송이 없을 경우 연결 종료
웹 서버의 keepalivetime을 설정하여 차단 -
RequestReadTimeout 설정으로 차단
Apache 2.2.15 버전이후에서 사용RequestReadTimeout header=5 body=8 설정
Slow Attack를 차단하기 위해서 5초 내에 연결이 안되면 연결 종료, POST 요청 이후 8초 내에 데이터가 오지 않으면 연결 종료
- POST 메시지의 크기(POST_MAX_SIZE)를 제한한다
- 최저 데이터 전송 속도를 제한한다
- TCP 상태를 모니터링한다
-
Hash DoS
클라이언트에서 전달되는 각종 파라미터 값을 관리하는 해시테이블의 인덱스 정보가 중복되도록 유도하여 사전에 저장된 정보 조회 시 많은 CPU 자원을 소모하도록 하는 공격
HTTP Request 요청 시 Get, Post 방식으로 전송되는 변수를 Hash 구조로 관리한다. 많은 수의 매개변수를 전달하면 매개변수를 저장하는 해시테이블에서 해시 충돌이 발생하여 해시테이블에 접근하는 시간이 증가한다.
해시 충돌(Hash Collision) : 서로 다른 키 값이 같은 인덱스 값으로 매핑되는 현상
- 대응 방안
-
HTTP Post 파라미터 수 제한
TOMCAT, PHP, Ruby 등의 최신 버전은 파라미터의 수를 제한할 수 있다. 즉, 개수 제한을 적용시킨다 -
Post 메시지 크기 제한
POST 메시지의 사이즈를 제안하는 서비스 설정 -
PHP에서 Hash DoS 차단
php.ini파일에서 max_input_var로 최대 HTTP POST Parameter 개수 설정
-
Hulk DoS
웹 서버의 가용량을 모두 사용하여 정상적인 서비스가 불가능하도록 하는 Get Flooding 공격 유형
공격 대상 URL을 지속적으로 변경하여 DDoS 차단정책을 우회하는 특징을 가진다. 특정 URL이 계속 변경되면 임계치 설정 기반 방어가 불가능해진다. 즉, 임계치는 고정된 URL에만 설정이 가능한 특성을 우회한다
- 대응 방안
- 접속 임계치 설정을 통한 차단
발신 IP에서 연결할 수 있는 동시 접속 수에 대한 최댓값을 설정하여 한 개의 IP에서 대량의 연결 시도를 차단iptables -A INPUT -p tcp -dport 80 -m connlimit-above 30 -j DROP
30개 이상의 Concurrent Connection에 대한 차단
-
HTTP Request HOST 필드 값에 대한 임계치 설정을 통한 차단
Hulk DoS는 URL을 계속 변경하기 때문에 URL이 아닌 HTTP Request에 포함된 HOST 필드 값을 카운트하여 임계치 이상인 경우 차단한다 - 302-Redirect를 이용한 차단
대부분의 DDoS 공격 툴은 302-Redirect 요청에 대해 반응하지 않는 것이 특징이므로, URL 중에서 공격 당하기 쉬운 웹 사이트에 대한 Redirect 처리를 통해서 자동화된 DDoS 공격 툴을 이용한 공격을 사전에 차단한다
- 접속 임계치 설정을 통한 차단
댓글남기기