자격증/정보보안기사

네트워크 보안 - DDoS 공격의 종류와 대응 방법

j9m 2022. 10. 4. 09:52
반응형

서비스 거부 공격(DoS : Denial of Service)

  • 컴퓨터 자원을 고갈시키기 위한 공격으로 특정 서비스를 계속적으로 호출하여 CPU, Memory, Network 등의 자원을 고갈시킨다.
  • DoS 공격은 소프트웨어 취약점을 이용하는 공격과 IP Header를 변조하여 공격하는 로직 공격, 무작위로 패킷을 발생시키는 플러딩 공격(Flooding Attack)으로 구분된다.
  • DDos(Distributed Deial of Service) 공격은 여러 대의 공격자 서버가 분산되어 있고 특정 시스템을 집중적으로 공격하는 방법을 의미한다.

 

▶ DoS 및 DDoS 공격 도구

도구 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
Agent ↔ Master 31335/udp ICMP echo Reply ICMP echo Reply

 

분산 서비스 거부 공격(DDoS) 종류

① TCP SYN Flooding

  • TCP 패킷의 SYN 비트를 이용한 공격 방법으로 너무 많은 연결 요청을 전송해서 대상 시스템이 Flooding하게 만들어 대상 시스템의 서비스를 중단시키는 공격이다.
  • 다른 사용자가 서비스를 받지 못하도록 하는 공격이다.
  • TCP 초기 연결 과정 이용, SYN 패킷을 요청하여 서버가 ACK 및 SYN 패킷을 보내게 한다.
  • 전송하는 주소가 무의미한 주소이며 서버는 대기 상태이고 대량의 요청 패킷 전송으로 서버의 대기큐가 가득 차서 DoS 상태가 된다.

 

▶ TCP SYN Flooding 대응 방법

대응책 내용
방화벽에서 대응 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 패킷을 통과시키고 일정 시간 동안 연결이 이루어지지 않으면 라우터가 SYN 패킷을 차단함
Intercept Mode 라우터에 유입되는 SYN 패킷 요청을 서버로 전송하지 않고, 라우터에서 가로채어 SYN 패킷을 요청한 클라이언트와 서버를 대신 연결하는 것

 

② ICMP Flooding

  • IP 특정(Broadcast 주소 방식)과 ICMP 패킷을 이용한 공격 방법이다.
  • 통신을 위해서 서비스 및 포트가 필요없는 유일한 프로토콜이다.
  • Smurfing Attack이라고도 한다.
  • 다수의 호스트가 존재하는 서브 네트워크에 ICMP Echo 패킷을 Broadcast로 전송(Source Address는 공격 대상 서버로 위조)한다. 이에 대한 다량의 응답 패킷이 공격 대상 서버로 집중되게 하여 마비시키는 공격이다.

 

ICMP 공격에 사용되는 메시지

메시지 내용
Sourch Quench(Type-4) 사용 중 전송자에게 패킷 전송 속도를 줄여 줄 것을 요구하는 메시지로 전송 속도의 지연 발생
Time to live exceeded in Transit
(Type-11, Code-0)
시간 초과로 패킷이 폐기되었기 때문에 재전송함
Destination unreachable
(Type-3, Code-0, 1, 2, 3)
ICMP 트래픽 처리에 자원을 사용하게 되므로 시스템이 조금씩 느려지는 현상 발생

 

 ICMP 및 UDP Flooding 대응 방법

대응 방법 내용
ACL을 이용한 차단 웹 서버 혹은 운영 장비에 대한 접근 제어 목록을 차단
Inbound 패킷 임계치 설정
  • 운영 장비로 유입되는 Inbound 패킷을 기준으로 PPS 수치를 유입되는 수치보다 낮게 설정
  • 임계치 이상의 ICMP 및 UDP를 차단

 

③ Tear Drop : IP Fragmentation(Ping of Death)

  • 네트워크 패킷은 MTU보다 큰 패킷이 오면 분할하고 분할된 정보를 flasg와 offset이 가지고 있다. 이때 offset을 임의로 조작하여 다시 조립될 수 없도록 하는 공격이다.
  • Fragment를 조작하여 패킷 필터링 장비나 IDS을 우회하여 서비스 거부를 유발한다.

 

▶ Tear drop 공격 종류

종류 설명
Tiny Fragment 최초의 Fragment를 아주 작게 만들어서 네트워크 침입탐지 시스템이나 패킷 필터링 장비를 우회하는 공격
Fragment Overlap
  • Tiny Fragment 공격 기법에 비해 더욱 정교한 방법
  • IDS의 Fragment 처리 방법과 패킷 필터링의 재조합과 Overwrite 처리를 이용
IP Fragmentation을 이용한 서비스 거부공격
  • Ping of Death : Ping을 이용하여 ICMP 패킷을 규정된 길이 이상으로 큰 IP패킷을 전송, 수신 받은 OS에서 처리하지 못함으로써 시스템을 마비시키는 공격
  • Tear Drop : fragment 재조합 과정의 취약점을 이용한 공격으로 목표시스템 정지나 재부팅을 유발하는 공격, TCP Header 부분의 offset field 값이 중첩되는 데이터 패킷을 대상 시스템에 전송

 

▶ Ping of Death의 공격 방법

  • Ping of Death는 하나의 큰 패킷을 전송하면 패킷은 MTU의 크기를 넘을 수 없기 때문에 분할되어서 응답받게 된다.

 

④ Land Attack

  • IP Header를 변조하여 인위적으로 송신자 IP 주소 및 Port 주소를 수신자의 IP 주소와 Port 주소로 설정하여 트래픽을 설정하여 트래픽을 전송하는 공격 기법이다.
  • 송신자와 수신자의 IP 주소와 Port 주소가 동일하기 때문에 네트워크 장비에 부하를 유발한다.

 

▶ Land Attack 대응 방법

  • 송신자와 수신자의 IP 주소가 동일한 패킷을 삭제한다.

⑤ HTTP Get Flooding

  • 정상적인 TCP 연결 이후에 정상적으로 보이는 HTTP Transaction 과정을 수행하는 방식으로 DoS/DDoS 공격 방법이다.
  • HTTP Get을 지속적으로 요청하여서 HTTP 연결 및 HTTP 처리 로직까지 과부하를 유발한다.
  • TCP의 3-way Handshaking 이후 공격을 수행하기 때문에 IP를 변조하지 않는다.
  • HTTP Get Flooding은 아주 간단한 공격이다. HTTP Requset를 계속적으로 호출하게 만드는 방법으로 가장 단순하게는 사용자가 메뉴를 계속 클릭해도 된다. 하지만 사용자가 직접 클릭하는 속도로는 웹 서버에 부하를 유발하기 어렵다.
  • 다수의 HTTP Get Request를 요청하여 부하를 유발한다. 그래서 공격자는 공격도구를 사용해서 HTTP Request를 계속 호출하게 되고 시스템의 부하를 유발하는 것이다.
  • POST 방식을 계속 요청하는 공격을 하면 그것을 HTTP POST Flooding이라고 부른다.

 

▶ HTTP Get Flooding 대응 방법

대응 방법 내용
선별적 IP 차단
  • TCP 연결요청 임계치 값과 HTTP Get의 임계치 값을 모니터링한 후 비정상적인 트래픽은 차단함
  • 연결기반 공격이므로 IP를 변조할 수 없는 특성을 이용
콘텐츠 요청횟수에 의한 임계치 설정 특정 콘텐츠를 다량으로 요청하는 것이므로 IP마다 콘텐츠 요청 회수의 임계치를 설정
시간대별 웹 페이지 URL 접속 임계치 설정 시간대별 임계치를 설정하여 임의의 시간 안에 설정한 임계치 이상의 요청이 들어온 경우 해당 IP를 탐지하여 방화벽 차단 목록에 등록
Web Scraping 기법을 이용한 차단 L7 스위치를 운영하는 경우 웹 스크랩핑 기능을 사용하여 요청 패킷에 대한 쿠키 값이나 자바 스크립트를 보내어 클라이언트로부터 원하는 값에 재요청 패킷이 없는 경우 해당 패킷을 차단

 

⑥ Cache Control

  • HTTP RFC 2616에 규정되어 있는 Cache-Control Header 옵션 값을 사용한다.
  • 이 옵션은 자주 변경되는 데이터에 대해서 새롭게 HTTP 요청과 응답을 요구하는 옵션으로 no-cache가 설정되면 항상 최신의 페이지를 요청하여 부하를 발생시킨다.
  • Cache-Control을  no-cache로 설정하고 웹 서버를 호출하면 항상 최신 페이지를 전송해 주어야하기 때문에 웹 서버는 더 많은 부하가 발생한다. Cace Control Attack이라는 것이 바로 이러한 공격이다.

 

▶ Cache Control 대응 방법

  • HTTP Get Attack 공격과 마찬가지로 임계치 기반 대응을 실시한다.
  • 단, Cache-Control 사용 여부에 따른 임계치를 설정하는 것이 더 효과적이다.

 

⑦ Slow HTTP Get/Post Attack

▶ Slow HTTP Get 방식

  • TCP 및 UDP 기반 공격 : 변조 IP가 아닌 정상 IP 기반 공격이며, 탐지가 어렵다.
  • 소량의 트래픽을 사용한 공격 : 소량의 트래픽과 세션 연결을 통해서 공격한다.
  • 애플리케이션 대상 : 서비스의 취약점을 이용한 공격이다.

 

▶ Slow HTTP Post 방식 

  • HTTP의 Post 지시자를 사용하여 서버에게 전달할 데이터를 장시간에 걸쳐 분할 전송한다.
  • Post 데이터가 모두 수신되지 않으면 연결을 장시간 유지하게 된다.
  • HTTP Post Method를 사용하여 HTTP Header의 Content-Length 필드에 임의의 큰 값을 입력하여 웹 서버가 클라이언트에서 해당 크기의 메시지를 전송할 때까지 Connection을 유지하게 되며 공격자는 소량의 데이터를 느린 속도로 전송하여 장기간 동안 세션을 유지하게 됨

 

▶ Slow HTTP Read DoS 

  • 공격자가 웹 서버와 TCP 연결 시 TCP 윈도우 크기 및 데이터 처리율을 감소시킨 후 HTTP 데이터를 송신하여 웹 서버가 정상적으로 응답하지 못하도록 하는 DoS/DDoS 기법이다.
  • TCP 윈도우 크기 및 데이터 처리율을 감소시키면 서버는 정상상태로 회복될 때까지 대기상태에 빠지게 되어 부하를 유발한다.
  • 공격자는 자신의 TCP 윈도우 크기를 0byte로 만든후 서버로 전달
  • 서버는 윈도우 크기가 0Byte인 것을 확인하고 데이터를 전송하지 않고 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를 전송한다.

 

▶ Slow HTTP Get/Post 대응 방법

대응 방법 내용
접속 임계치 설정 특정 발신지에서 IP로 연결할 수 있는 최대 값 설정
방화벽 설정 도구인
iptables로 차단
  • iptables -A INPUT -p tcp -dport 80 -m connlimit -above 30 -j DROP
  • # 30개 이상의 Concurrent Connection에 대한 차단
Connection Timeout과
Keepalivetime 설정
  • Connection Timeout 설정으로 클라이언트와 서버 간에 데이터 전송이 없을 경우 연결 종료
  • 웹 서버의 Keepalivetime을 설정하여 차단
RequestReadTimeout 설정으로 차단
  • Apache 2.2.15버전 이후에서 사용 
  • Slow Attack를 차단하기 위해서 RequestReadTimeout header=5 body=8 설정
  • 5초 내에 연결이 안 되면 연결 종료, POST 요청 이후 8초 내에 데이터가 오지 않으면 연결 종료
  • POST 메시지의 크기를 제한(POST_MAX_SIZE)한다.
  • 최저 데이터 전송 속도를 제한한다.
  • TCP 상태를 모니터링한다.

 

⑧ Hash DoS

  • 클라이언트에서 전달되는 각종 파라미터 값을 관리하는 해시 테이블의 인덱스 정보가 중복되도록 유도하여 사전에 저장된 정보 조회 시 많은 CPU 자원을 소모하도록 하는 공격이다.
  • HTTP Request 요청 시 Get, Post 방식으로 전송되는 변수를 Hash 구조로 관리한다.
  • 많은 수의 매개변수를 전달하면 매개변수를 저장하는 해시 테이블에서 해시 충돌이 발생하여 해시테이블에 접근하는 시간이 증가한다.
  • 해시테이블 : 해시함수가 서로 다른 두 개의 입력 값에 대해 동일한 출력 값을 도출한다.

 

▶ 해시 충돌(Hash Collision)

  • 서로 다른 키 값이 같은 인덱스 값으로 매핑되는 현상이다.

 

Hash DoS 대응 방안

대응 방법 내용
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에만 설정이 가능한 특성을 우회한다.

 

▶ Hulk DoS 대응 방안

대응 방안 내용
접속 임계치 설정을 통한 차단
  • 발신 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 공격 툴을 이용한 공격을 사전에 차단
  • 발신 IP에서 연결할 수 잇는 동시 접속 수에 대한 최대 값을 설정하여 한 개의 IP에서 대량의 연결 시도를 차단
  • iptables -A INPUT -p tcp -dport 80 -m connlimit -above 30 -j DROP
  • # 30개 이상의 Concurrent Connection에 대한 차단
반응형