만들면서 이해하는 네트워크 공격 #3 DDoS 공격 (상)

Eric·2021년 12월 19일
0
post-thumbnail

해당 시리즈는 방주원 저자의 네트워크 공격패킷 분석 책의 내용을 기반으로 합니다.

DDoS 공격이란?

DDoS(Distributed DoS attack, 분산 서비스 거부 공격)은 여러 클라이언트를 동원하여 과도한 트래픽을 타겟에게 전송해 서비스의 자원을 고갈시키는 공격입니다.

일반적으로 하나의 클라이언트가 동원되는 기존 DoS(Denial of Service) 공격에 비해 치명적이고, 공격자 추적도 비교적 힘들다는 점에서 DoS보다 더욱 더 조심해야 할 공격이라고 할 수 있습니다.

이번 게시글의 경우 분량이 많아, 개념을 설명하는 상과 직접 구현해보고 해결책을 찾는 하로 나누도록 하겠습니다.

DDoS의 방법들

해당 포스트에서는 기술적 관점에서의 DDoS 방법들만을 언급합니다.

DDoS의 경우 상당히 다양하고 많은 방법들이 존재합니다만, 이들 중에서 대표적인 공격들만 언급해 보려 합니다.

1. 대역폭 공격

대역폭 공격은 과도한 트래픽을 발생시켜, 타겟이 정상적인 트래픽을 수용하지 못하게 하는 공격입니다. 일반적으로 패킷의 크기가 큰 것이 특징입니다.

  • UDP Flooding
    • 용량이 큰 임의의 페이로드를 담아 타겟에게 지속적으로 전송하는 공격
    • DDoS 차단 장비를 우회하기 위해, IP를 지속적으로 변조해 전송
  • ICMP Flooding
    • ping에 사용되는 Echo Request에다 큰 페이로드를 담아 지속적으로 전송하는 공격
    • UDP Flooding을 ICMP로 바꾼 거라고 봐도 무방함
  • 증폭 / 반사 공격(DRDoS)
    * IP 패킷의 발신자를 타겟 IP로 조작한 뒤 다른 서버들에 전송하여, 서버들이 타겟에게 패킷을 전송하도록 하는 공격
  • Fragment(단편화) Flooding
    • 네트워크 디바이스는 보낼 패킷의 크기가 자신이 전송할 수 있는 최대 크기인 MTU(Maximum Transfer Unit)를 넘어설 때, Fragmentation(단편화)를 통해 패킷을 분할하게 된다.
    • TCP 프로토콜은 단편화를 막기 위해 시퀀스 넘버 등 자체 수단(Segmentation)을 지녀서, 단편화가 일어나지 않는다.
      • 단, 이러한 TCP의 단편화 방지 수단은 오로지 데이터 전송 과정에서만 작동하기 때문에 3-way 핸드쉐이킹 과정에서는 단편화가 발생할 수 있다.
      • 이를 악용해 SYN 패킷을 이용한 TCP 단편화 공격도 발생할 수 있다!
    • 따라서 TCP를 제외한 다른 프로토콜(UDP, ICMP 등) 기반의 큰 패킷을 만들고 이를 단편화시킬 수 있으며, 다음과 같은 공격이 가능하다 :
      • Teardrop 공격 - 단편화의 재조합 순서를 가리키는 fragment offset을 겹치게 전송하면 재조합에서 문제가 발생해 타겟의 시스템에서 장애가 발생하게 된다.
      • 일반적인 공격 - 많은 파편의 재조합 과정을 발생시켜, 자원을 소모시킨다.

2. 자원 고갈 공격

자원 고갈 공격은 다량의 패킷을 발생시켜, 타겟의 자원을 고갈시키는 공격입니다. 이 과정에서 패킷의 크기도 늘려 대역폭 공격을 동시에 수행하기도 합니다.

  • TCP SYN Flooding
    • TCP 서버는 SYN을 수신하게 되면 SYN-ACK을 보낸 후, 이 기록을 backlog(백로그) 큐에 보관하며 클라이언트의 ACK를 대기하게 된다.(3-way 핸드쉐이킹)
    • 백로그 큐는 클라이언트가 일정 시간 이상동안 ACK로 응답하지 않으면 해당 SYN 요청을 삭제하게 된다.
    • 이 때 클라이언트에서 많은 SYN 패킷을 보낸 뒤 ACK을 반환하지 않으면, 백로그 큐가 가득 차게 된다.
    • 백로그 큐가 가득 차게 되면 정상적인 통신들도 불가능해짐!
  • Fragment(단편화) Flooding - 대역폭 공격에서 언급한 것과 동일

3. 응용 계층 공격

응용 계층 공격은 HTTP나 DNS 같은 응용 계층의 프로토콜을 이용해 부하를 발생시키는 공격입니다. 다른 공격들과 다르게 타겟 서비스와 연계된 데이터베이스 등에도 영향을 끼칠 수 있습니다.

  • HTTP Methods(GET, POST..) Flooding
    • HTTP 메소드들을 이용해 HTTP 서버에 부하를 발생시키는 공격, 주로 서비스의 리소스 소모가 큰 GET을 이용하게 된다.
  • DNS Query Flooding
    • DNS 질의를 이용해 서비스의 DB 조회나 파일 I/O 접근을 발생시켜 자원을 소모시키는 공격

마무리하며

다음 시간에는 DDoS 공격을 직접 구현해보고, 탐지 및 방어하는 방법 또한 알아보도록 하겠습니다.

감사합니다.

profile
Backend Engineer | 코드로 우리의 세상을 어떻게 바꿀 수 있는지 고민합니다

0개의 댓글