8 분 소요

📦 DDoS 완전정복 6부작 — DDoS가 무엇이고 공격이 어떻게 분류되는지 큰 그림을 그리고(1편), 대역폭을 말려버리는 볼류메트릭·반사증폭 공격(2편), 연결 테이블을 터뜨리는 프로토콜·상태 고갈 공격(3편), 정상 요청처럼 굴며 서버를 태우는 애플리케이션 계층(L7) 공격(4편), 이 모든 걸 탐지하고 막아내는 방어·완화(5편), 그리고 세운 방어가 실제로 버티는지 내 사이트에서 합법적으로 검증하는 내성 테스트(6편)까지 이어집니다. 전체 6편.
  1. DDoS 완전정복 — 개념과 공격 지형도지금 글
  2. 볼류메트릭·반사증폭 공격 — 대역폭을 말려버리는 방법
  3. 프로토콜·상태 고갈 공격 — 연결 테이블을 터뜨리기
  4. 애플리케이션 계층(L7) 공격 — 정상 요청처럼 굴며 서버를 태우기
  5. DDoS 방어와 완화 — 탐지부터 스크러빙까지
  6. 내 사이트 DDoS 내성 테스트 — 합법적으로, 제대로

Summary

DDoS(Distributed Denial of Service, 분산 서비스 거부)는 뉴스에서 워낙 자주 등장해서 이름은 익숙한데, 막상 “그래서 정확히 뭐가 어떻게 공격당하는 거예요?”라고 물으면 설명이 막히는 주제예요. 저는 이 시리즈에서 DDoS를 방어자 관점으로, 그러니까 “공격을 제대로 이해해서 잘 막자”는 목표로 여섯 편에 걸쳐 정리하려고 합니다. 첫 편인 오늘은 지도를 펼치는 시간이에요. DoS와 DDoS가 뭐가 다른지, 공격에 쓰이는 봇넷이라는 인프라가 어떻게 만들어지는지, 그리고 수많은 공격 기법을 어떤 축으로 분류하면 머릿속이 정리되는지를 훑어봅니다. 세부 벡터별 해부는 2편부터 이어집니다.

💡 이 글에서 다루는 것

  • DoS와 DDoS의 근본적 차이, 그리고 왜 “분산”이 방어를 어렵게 만드는지
  • 봇넷·C2·부터(booter) 같은 공격 인프라의 개념
  • 공격을 나누는 두 축 — OSI 계층별, 방향별(직접 vs 반사)
  • 공격 규모를 재는 단위 bps·pps·rps가 각각 무엇을 고갈시키는지
  • 반사·증폭의 핵심 원리와 멀티벡터 공격의 라이프사이클



1. DoS와 DDoS는 무엇이 다른가

서비스 거부(Denial of Service)라는 말부터 풀어볼게요. 어떤 서버가 정상 사용자에게 서비스를 제공하지 못하도록 만드는 모든 행위를 통틀어 서비스 거부라고 부릅니다. 웹사이트가 안 열리고, 게임 서버에 접속이 안 되고, API가 타임아웃을 뱉는 상태를 인위적으로 유발하는 거예요. 방법은 다양합니다. 처리할 수 없을 만큼 많은 요청을 퍼붓는 게 대표적이지만, 소프트웨어 버그를 건드려 프로세스를 죽이는 방식도 넓게 보면 여기에 들어갑니다.

DoS는 이 공격을 한 대(또는 소수)의 출발지에서 수행하는 경우예요. 공격자의 컴퓨터 한 대가 대상 서버로 트래픽을 쏟아붓는 그림입니다. 이 구조는 방어가 상대적으로 쉬워요. 트래픽이 특정 IP 하나에서만 몰려오니까, 그 IP를 차단하면 공격이 뚝 끊깁니다.

DDoS의 D가 붙는 순간 이야기가 완전히 달라집니다. Distributed, 즉 공격 출발지가 수백에서 수십만 개로 분산돼 있어요. 전 세계에 흩어진 감염 기기들이 동시에 같은 대상을 두들깁니다.


왜 분산되면 훨씬 막기 어려운지 정리해보면 이렇습니다.

  • 차단할 IP가 너무 많아요. 출발지가 수만 개면 IP 하나씩 막는 방식은 의미가 없습니다. 막는 속도보다 새 출발지가 나타나는 속도가 빨라요.
  • 정상 트래픽과 섞여요. 감염 기기 상당수는 평범한 가정·회사의 실제 IP예요. 여기서 오는 요청을 무작정 차단하면 진짜 고객까지 같이 끊깁니다.
  • 총량이 압도적이에요. 한 대가 낼 수 있는 대역폭은 뻔하지만, 수만 대가 조금씩 보태면 초당 테라비트 규모까지 커집니다.
  • 출발지 추적이 어려워요. 진짜 공격 지휘자는 감염 기기들 뒤에 숨어 있어서, 트래픽만 봐서는 실체가 잘 안 보입니다.

정리하면 DoS는 “한 명이 문을 두들기는 것”이고, DDoS는 “수만 명이 동시에 몰려와 문 앞을 가득 메우는 것”이에요. 이 물량과 분산이 DDoS 방어를 어렵게 만드는 본질입니다.



2. 공격 인프라 — 봇넷은 어떻게 만들어지나

수만 개의 출발지는 어디서 나올까요. 공격자가 컴퓨터 수만 대를 직접 사서 데이터센터에 쌓아둘 리는 없습니다. 대신 남의 기기를 몰래 빌려요. 이렇게 공격자의 통제 아래 놓인 감염 기기들의 무리를 봇넷(botnet)이라고 부릅니다.

봇넷의 재료는 우리 주변에 널려 있어요. 보안 패치가 안 된 개인 PC, 관리가 허술한 서버, 그리고 요즘 특히 많은 것이 IoT 기기입니다. 공유기, IP 카메라, 셋톱박스, 스마트 가전처럼 “컴퓨터라는 인식이 없는” 인터넷 연결 기기들이 대표적이에요. 기본 비밀번호가 그대로 남아 있거나 오래된 펌웨어를 쓰는 기기가 널려 있어서, 자동화된 스캐너가 이런 기기를 끊임없이 찾아내 감염시킵니다.


감염된 기기(봇, 또는 좀비)는 혼자 움직이지 않아요. 공격자의 지휘를 받습니다. 이 지휘 채널을 C2(Command and Control, 명령제어) 라고 불러요. 봇은 주기적으로 C2 서버에 접속해 “무슨 일을 할까요?”라고 물어보고, C2는 “이 대상을 이 시각에 공격하라” 같은 명령을 내려보냅니다. 이런 구조 덕분에 공격자는 버튼 한 번으로 수만 대를 동시에 움직일 수 있어요.

IoT 봇넷의 대명사로 흔히 언급되는 것이 Mirai 계열이에요. 2016년에 크게 알려진 이 봇넷은 취약한 IoT 기기의 기본 계정을 노려 대량으로 감염시켰고, 결과적으로 초당 수백 기가비트 규모의 공격을 일으켰습니다. 소스가 공개된 뒤로는 수많은 변종이 파생됐고, 지금도 IoT 봇넷 이야기의 기준점처럼 쓰여요.


더 씁쓸한 현실은 이런 공격 역량이 “서비스처럼” 판매된다는 점이에요. 흔히 부터(booter) 또는 스트레서(stresser)라고 불리는 서비스가 있는데, 겉으로는 “내 서버의 부하 테스트 도구”라고 포장하지만 실제로는 돈을 받고 남의 대상을 공격해주는 대행 창구로 악용돼 왔습니다.

🚨 짚고 넘어갈 점이 있어요. 이런 부터·스트레서를 이용해 동의 없는 대상을 공격하는 것은 명백한 불법입니다. 많은 국가에서 형사 처벌 대상이고, 실제로 운영자와 이용자가 검거된 사례도 꾸준히 나오고 있어요. 이 시리즈는 어디까지나 “공격을 이해해서 막는다”는 방어자 관점이며, 실제 공격 도구의 사용법은 다루지 않습니다.

그래서 저는 이 글에서 봇넷을 어떻게 만드는지, 부터를 어떻게 쓰는지 같은 실행 레시피는 일부러 비워둡니다. 우리가 알아야 할 건 “이런 인프라가 실재하고, 값싸게 접근 가능하며, 그래서 누구나 표적이 될 수 있다”는 위협의 무게예요.



3. 공격을 나누는 두 축 — 계층과 방향

DDoS 기법은 종류가 워낙 많아서, 하나하나 외우면 금방 지칩니다. 저는 두 개의 축으로 나눠서 보는 걸 추천해요. 이 축을 잡아두면 새로운 공격 이름을 만나도 “아, 이건 이 칸에 들어가는구나” 하고 자리를 잡을 수 있습니다.

첫 번째 축은 OSI 계층이에요. 공격이 네트워크의 어느 층을, 어떤 자원을 노리는지로 나눕니다.

  • L3/L4 볼류메트릭(Volumetric) — 순수한 물량으로 대역폭을 채워버리는 공격이에요. 회선 자체를 홍수처럼 메워서 정상 트래픽이 들어올 틈을 없앱니다.
  • L4 프로토콜/상태 고갈 — 대역폭이 아니라 연결 상태를 관리하는 자원을 노려요. 방화벽·로드밸런서·서버의 연결 테이블을 가짜 연결로 가득 채우는 식입니다.
  • L7 애플리케이션 — 웹 서버나 애플리케이션이 요청 하나를 처리하는 데 드는 비용을 노려요. 트래픽 양은 작아 보여도, 무거운 요청을 골라 던지면 서버가 헐떡입니다.


두 번째 축은 방향이에요. 트래픽이 공격자(정확히는 봇)에서 피해자로 곧장 가는지, 아니면 중간의 제3자 서버를 거쳐 튕겨서 오는지로 나눕니다.

  • 직접(Direct) — 봇넷이 피해자에게 트래픽을 곧바로 보냅니다.
  • 반사(Reflection) — 봇이 제3의 서버에 요청을 보내되, 출발지를 피해자로 위조해서 그 서버의 응답이 피해자에게 쏟아지게 만듭니다. 여기에 증폭이 결합되면 위력이 배가돼요. 이건 5절에서 자세히 다룹니다.

아래 표는 계층 축을 한 줄로 요약한 거예요.

계층 노리는 자원 대표 예시
L3/L4 볼류메트릭 대역폭 UDP·ICMP 홍수
L4 프로토콜 연결 테이블 SYN 홍수
L7 애플리케이션 요청 처리량 HTTP 홍수

이 두 축(계층 × 방향)의 조합이 이 시리즈 2·3편의 뼈대가 됩니다.



4. 규모의 단위 — bps · pps · rps

DDoS 뉴스를 보면 “초당 몇 테라비트”, “초당 몇억 패킷”, “초당 몇천만 요청” 같은 숫자가 나와요. 이 단위들이 서로 다른 자원을 겨냥한다는 걸 알면 공격의 성격이 바로 읽힙니다.

  • bps (bits per second, 대역폭) — 회선으로 들어오는 데이터의 양이에요. 이 값이 크면 대역폭이 고갈됩니다. 100Gbps 회선에 300Gbps가 밀려들면, 진짜 사용자의 요청은 문 앞에도 못 옵니다. 볼류메트릭 공격이 노리는 지표예요.
  • pps (packets per second, 패킷 처리량) — 초당 처리해야 하는 패킷의 개수입니다. 라우터·방화벽·서버는 패킷 한 개를 처리할 때마다 일정한 연산을 해요. 그래서 패킷이 아주 작아도 개수가 폭발하면 패킷 처리 엔진이 먼저 무너집니다.
  • rps (requests per second, 요청 처리량) — 초당 애플리케이션이 처리해야 하는 요청 수예요. 로그인, 검색, 결제처럼 뒤에서 DB를 두들기는 요청은 하나하나가 비쌉니다.


여기서 중요한 직관이 하나 있어요. pps나 bps가 작아도 rps 공격은 아플 수 있습니다. 예를 들어 검색 API에 초당 수만 건의 무거운 질의를 던지면, 네트워크 계층에서 보는 트래픽 양(bps)은 평범해 보여도 애플리케이션과 DB는 이미 초주검이 돼요.

같은 대상을 재는 척도가 다르기 때문에, 방어 지표도 계층별로 따로 봐야 합니다. 대역폭 그래프만 보고 있으면 L7 공격을 놓치기 쉬워요.

⚠️ 대시보드에서 대역폭(bps)만 정상이라고 안심하면 안 됩니다. rps·응답시간·에러율을 함께 봐야 L7 공격의 초기 신호를 잡을 수 있어요.



5. 반사와 증폭의 핵심 개념

반사와 증폭은 DDoS에서 가장 자주 오해되는 개념이라, 원리만 확실히 잡고 갈게요. 이 둘은 볼류메트릭 공격의 위력을 폭발적으로 키우는 장치예요.

출발점은 출발지 IP 스푸핑(spoofing) 입니다. 인터넷 패킷에는 “누가 보냈는지”를 적는 출발지 주소 칸이 있는데, UDP 기반 프로토콜에서는 이 칸을 위조하기가 쉬워요. 공격자는 봇이 보내는 패킷의 출발지를 자기 IP가 아니라 피해자의 IP로 적습니다.


그다음이 반사예요. 봇은 이 위조된 패킷을 인터넷 곳곳의 공개 서버(반사서버, reflector)에 보냅니다. DNS 서버, NTP 서버처럼 요청을 받으면 응답을 돌려주는 평범한 서버들이에요. 이 서버 입장에서는 “피해자가 요청을 보냈네” 하고 착각하고, 응답을 피해자에게 돌려보냅니다. 공격자는 그림자에 숨고, 애먼 정상 서버들이 피해자를 때리는 손이 되는 구조예요.

여기에 증폭(amplification) 이 결합됩니다. 어떤 프로토콜은 아주 작은 요청에 대해 훨씬 큰 응답을 돌려줘요. 요청 대비 응답의 크기 비율을 증폭 계수라고 부릅니다. 아래 의사코드로 감을 잡아볼게요.

공격자 요청:   64 바이트  (출발지 = 피해자 IP 로 위조)
반사서버 응답: 3,000 바이트 → 피해자에게 도착

증폭 계수 = 3,000 / 64 ≈ 47배

봇이 64바이트만 흘려보내도 피해자는 3,000바이트를 맞는 셈이에요. 공격자가 가진 얼마 안 되는 대역폭이 수십 배로 뻥튀기돼서 피해자에게 꽂힙니다. 이게 반사·증폭이 소수의 자원으로도 거대한 볼류메트릭 공격을 만들어내는 비결이에요.

프로토콜마다 증폭 계수가 크게 다르고, 어떤 프로토콜이 왜 위험한지는 2편에서 벡터별로 하나씩 뜯어보겠습니다.



6. 공격의 라이프사이클과 멀티벡터

실제 DDoS 공격은 “버튼 누르니 트래픽 발사”처럼 단순하지만은 않아요. 규모가 큰 공격일수록 나름의 흐름을 밟습니다. 크게 네 단계로 정리해볼게요.

  • 정찰(Recon) — 대상의 IP 대역, 노출된 서비스, 방어 수준을 살핍니다. 어디가 약한지, 어떤 계층이 뚫릴지를 가늠하는 단계예요.
  • 준비(Weaponize) — 동원할 봇넷과 반사서버 목록을 챙기고, 어떤 벡터를 쓸지 결정합니다.
  • 발사(Launch) — 실제 트래픽을 쏟아붓습니다. 초반에 화력을 몰아 방어 체계를 흔드는 경우가 많아요.
  • 지속·적응(Sustain) — 방어자가 한 벡터를 막으면 다른 벡터로 갈아타며 공격을 이어갑니다.


이 마지막 단계에서 자주 등장하는 게 멀티벡터(multi-vector) 공격이에요. 한 번에 여러 계층·여러 기법을 동시에, 혹은 번갈아 쓰는 방식입니다. 예를 들어 볼류메트릭으로 대역폭을 채워 방어팀의 시선을 뺏은 사이, 조용히 L7 공격으로 애플리케이션을 갉아먹는 식이에요.

멀티벡터가 무서운 이유는 방어의 초점을 분산시키기 때문이에요. 대역폭 방어에 집중하면 L7이 뚫리고, L7을 막으면 프로토콜 계층이 흔들립니다. 그래서 현대의 DDoS 방어는 어느 한 계층만 잘 막는 게 아니라, 계층 전반을 동시에 관측하고 대응하는 방향으로 설계돼요. 이 이야기는 시리즈 후반부(5편)에서 방어 아키텍처로 이어집니다.



7. 공격 지형도 한눈에

지금까지 펼친 지도를 한 장으로 접어볼게요. 아래 표는 DDoS 공격을 큰 공격군으로 묶고, 노리는 계층과 대표 예시를 정리한 거예요. 각 공격군이 이 시리즈의 어느 편으로 이어지는지도 함께 감을 잡아두시면 좋습니다.

공격군 계층 대표 예시
볼류메트릭 L3/L4 UDP·ICMP 홍수
반사·증폭 L3/L4 DNS·NTP 증폭
프로토콜·상태고갈 L4 SYN 홍수
애플리케이션 L7 HTTP 홍수, 슬로로리스


이 표를 기준으로 앞으로의 여정을 미리 안내하면 이렇습니다.

  • 2편 — 볼류메트릭과 반사·증폭 공격을 벡터별로 해부합니다.
  • 3·4편 — 프로토콜·상태 고갈, 그리고 L7 애플리케이션 공격을 다룹니다.
  • 5편 — 탐지와 방어, 완화 아키텍처로 넘어갑니다.
  • 6편 — 세운 방어가 실제로 버티는지 내 사이트에서 합법적으로 검증합니다.

오늘 잡아둔 두 축(계층 × 방향)과 세 단위(bps·pps·rps)만 손에 쥐고 있으면, 다음 편부터 나오는 구체적인 공격 이름들이 훨씬 편하게 자리를 찾을 거예요.



마치며

DDoS는 결국 “정상 사용자가 써야 할 자원을 공격자가 대신 다 써버리는” 게임이에요. 그 자원이 대역폭이냐, 패킷 처리 능력이냐, 애플리케이션 처리 능력이냐에 따라 공격의 얼굴이 달라지고, 봇넷과 반사·증폭이라는 인프라가 그 위력을 키웁니다. 오늘은 이 큰 그림을 그리는 데 집중했어요. 세부 전투는 이제부터입니다.

일단 오늘은 여기까지…..
다음 글에서는 대역폭을 직접 말려버리는 볼류메트릭·반사증폭 공격을 벡터별로 뜯어볼게요.



다음 글 →: (2/6) 볼류메트릭·반사증폭 공격 — 대역폭을 말려버리는 방법


참고: Cloudflare Learning — What is a DDoS attack? · MITRE ATT&CK — Network Denial of Service (T1498) · CISA — Understanding Denial-of-Service Attacks