트래픽으로 문 막기 공격

가짜 접속을 한꺼번에 퍼부어 진짜 손님이 못 들어오게 막는 공격이에요. 이유 없이 사이트가 계속 죽으면 의심하고, 방어는 공격 전에 켜 둬야 해요.

쉽게 말하면

문 앞에 줄이 길게 늘어섰는데 아무도 물건을 안 사요. 앞사람은 계속 "고민 중이에요"만 하고 비켜 주지 않아요. 뒤에 선 진짜 손님은 기다리다 지쳐서 돌아가요. 트래픽으로 문 막기 공격이 정확히 이거예요. 가짜 손님을 여러 곳에서 한꺼번에 보내 계산대를 붙잡아 두고, 진짜 손님이 못 들어오게 만드는 일이에요.

물건을 훔쳐 가는 공격이 아니에요. 자료를 빼 가거나 화면 내용을 바꾸는 게 아니라 문을 막는 것 자체가 목적이에요. 그래서 사이트는 멀쩡한데 안 열리는 상태로 보여요.

"디도스"라는 이름 앞에는 여러 곳에서 동시에 라는 뜻이 붙어 있어요. 한 대가 아니라 남의 컴퓨터 수천 대가 같이 두드려서, IP(인터넷 주소) 한두 개를 막는 걸로는 끊기지 않아요.

이 공격이 노리는 것

노리는 건 자료가 아니라 시간이에요. 세일 첫날, 방송이 나가는 시간, 마감 직전처럼 문이 닫히면 가장 아픈 순간을 골라서 와요. 그래서 피해액을 셀 때는 복구 비용이 아니라 그 시간에 못 판 것으로 세야 맞아요.

손님이 몰린 것과 헷갈리기 쉬워요

사이트가 느려졌을 때 사장님이 가장 먼저 할 일은 방어가 아니라 구별이에요. 진짜 손님이 몰린 것과 공격은 화면에서 똑같이 느려 보이거든요.

보이는 신호진짜 손님이 몰린 것공격일 가능성
언제 시작됐나글이 퍼지거나 광고가 나간 직후예요. 이유를 댈 수 있어요아무 일도 없었는데 새벽에 시작돼요
어디로 들어오나검색과 링크를 타고 여러 화면으로 흩어져요같은 주소 한 곳만 짧은 시간에 수없이 두드려요
어느 지역에서 오나대체로 내 손님이 사는 지역이에요장사와 상관없는 지역이 목록 맨 위에 몰려요
무엇을 하고 가나장바구니, 문의, 가입 같은 흔적이 남아요첫 화면만 받고 아무 흔적 없이 끊겨요
잦아든 뒤에는천천히 줄어들어요잠시 멈췄다가 같은 세기로 다시 시작돼요

구별이 중요한 이유는 대응이 정반대이기 때문이에요. 진짜 손님이면 서버를 키워서 다 받아야 하고, 공격이면 키울수록 청구서만 커져요.

판단이 안 설 때 먼저 볼 곳

호스팅 업체의 접속 기록 화면부터 열어 보세요. 같은 주소 하나가 목록을 가득 채우고 있으면 사람 손님의 모양이 아니에요. 지켜보기가 평소에 켜져 있으면 이 확인이 몇 분 안에 끝나요.

문이 막히는 네 가지 방식

방식마다 아픈 곳이 달라요. 어느 쪽인지 알면 누구에게 전화할지가 바로 정해져요.

방식가게로 치면증상막을 수 있는 자리
회선 채우기가게 앞 골목을 트럭으로 꽉 막아요사이트 전체가 아예 안 열려요회선을 가진 쪽. 호스팅 업체나 CDN(전국 지점 창고) 업체예요
연결 붙잡기손님인 척 들어와 계산대 앞에서 안 비켜요가끔 열리고 대부분 멈춰 있어요서버 설정과 앞단 방어
무거운 화면 반복 요청제일 오래 걸리는 주문만 골라 계속 시켜요검색이나 목록처럼 특정 화면만 죽어요속도 제한과 캐시. 화면을 가볍게 만드는 것도 방어예요
남의 서버로 튕겨 보내기남의 가게 전화를 빌려 내 가게로 착신을 몰아요작은 공격인데 들어오는 양이 아주 커요앞단 방어. 내 서버 혼자서는 못 막아요

보고서에 이 말이 보이면

"응용 계층"이라는 말이 나오면 세 번째 방식이에요. 들어오는 양은 적은데 서버가 가장 힘들어하고, 사람 접속과 모양이 비슷해서 가려내기가 제일 어려워요. 반대로 "대역폭"이라는 말이 나오면 첫 번째 방식이라 회선을 가진 쪽 말고는 손쓸 데가 없어요.

지금 공격을 맞고 있다면

순서가 중요해요. 사이트를 살리는 것보다 먼저 할 일이 있어요.

  1. 1돈이 새는 곳부터 잠가요. 전송량이나 실행 횟수로 요금이 붙는 곳이면, 자동으로 늘어나는 상한을 먼저 낮춰요. 공격은 몇 시간이면 끝나지만 청구서는 한 달을 가요. 운영비 점검
  2. 2회선을 가진 쪽에 알려요. 호스팅 업체나 CDN 업체가 실제로 막을 수 있는 자리예요. 쓰고 있는 요금제에 이미 들어 있는 방어를 켜 주는 것으로 끝나는 경우도 많아요.
  3. 3앞단 방어의 세기를 올려요. 공격 방어 모드, 사람 확인, 지역 단위 차단처럼 스위치 하나로 켜지는 장치가 있어요. 손님이 조금 불편해지지만 문이 열려 있는 게 먼저예요.
  4. 4표적이 된 화면 하나만 잠시 닫아요. 검색이나 목록 한 곳이 맞고 있다면 그 화면만 임시 안내로 바꿔도 나머지가 살아나요.
  5. 5손님에게 알려요. 지금 접속이 몰려 느리다는 안내 한 줄이 문의 폭주를 크게 줄여요. 침묵이 가장 비싼 대응이에요. 장애가 났을 때 순서

하지 말 것 하나

돈을 요구하는 메일이 함께 오는 경우가 있어요. 답하지 마세요. 한 번 응하면 다시 오는 표적 목록에 이름이 남아요. 메일은 지우지 말고 그대로 보관해 두세요. 나중에 신고할 때 필요한 자료예요.

장면 1 · 호스팅 업체 상담원이 말했다

지금 들어오는 요청이 거의 한 지역에서 오고 있습니다. 그 대역을 잠시 막을까요?

"막아 주세요"라고 바로 답하기 전에 그 지역에 내 손님이 있는지 떠올려 보세요. 없으면 지금 막는 게 맞아요. 있으면 지역 차단 대신 속도 제한부터 걸어 달라고 부탁하세요. 방어는 늘 손님을 얼마나 잃느냐와 맞바꾸는 선택이에요.

미리 켜 두는 것

이 문서에서 가장 값어치 있는 부분이에요. 아래 다섯 가지는 공격이 오기 전에 켜 두는 것이고, 대부분 호스팅이나 도메인 설정 화면에서 스위치 하나로 켜져요.

미리 켜는 것무엇을 하나안 켜 두면
CDN 앞에 세우기사진과 화면 복사본을 여러 지점에 두고 내 서버 앞에 세워요모든 요청이 내 서버 한 대로 곧장 들어와요. 전국 지점 창고
웹 방화벽수상한 모양의 요청을 앞에서 걸러 내요걸러 낼 자리가 없어서 서버가 전부 받아 내야 해요
속도 제한같은 곳에서 짧은 시간에 너무 많이 오면 잠시 막아요한 곳이 수없이 두드려도 그대로 통과해요. 호출 제한
사람 확인로그인이나 문의처럼 무거운 문 앞에서만 사람인지 물어요가짜 요청이 무거운 화면을 계속 돌려요. 봇 차단
자동 확장 상한서버가 알아서 늘어나는 한도를 미리 못 박아 둬요맞는 만큼 서버가 늘어나 요금이 같이 늘어나요. 손님이 늘어도 버티기
캐시같은 답을 미리 만들어 두고 그대로 내줘요같은 요청마다 계산과 조회를 새로 해요. 캐시
공격 당일에 시작
업체 찾기, 요금제 확인, 설정 배우기를 동시에 함

설정이 인터넷 전체에 퍼지는 데 시간이 걸려요. 켜고 나서도 한동안 계속 맞아요. 그 시간이 그대로 못 판 매출이에요.

평소에 켜 둠
앞단 방어와 속도 제한을 평소 세기로 켜 둔 채로 장사함

공격이 와도 할 일은 세기를 한 단계 올리는 것뿐이에요. 준비의 값어치가 여기서 전부 나와요.

예전보다 비싸진 이유

예전에는 사이트가 멈추는 것으로 끝났어요. 지금은 요금이 같이 움직여요.

요즘 호스팅은 쓴 만큼 내는 방식이 많아요. 공격이 퍼붓는 요청 하나하나가 실행 횟수와 전송량으로 잡혀서 청구서에 들어가요. 서버 없이 굴리기 방식일수록 이 위험이 커요.

상한을 정하는 게 곧 보험이에요

요금 상한과 자동 확장 한도를 미리 정해 두면, 최악의 경우에도 사이트가 잠시 닫히는 것으로 피해가 끝나요. 상한이 없으면 사이트는 살아 있는데 청구서가 감당 못 할 크기로 오는 쪽이 돼요. 둘 중에는 앞이 훨씬 나아요.

장면 2 · 외주 개발자가 말했다

디도스는 코드로 막는 게 아니라 앞단에서 막는 겁니다. 서버 코드를 고쳐도 소용없어요.

절반은 맞는 말이에요. 회선을 채우는 공격은 정말 코드로 못 막아요. 하지만 무거운 화면을 반복해서 부르는 공격은 그 화면을 가볍게 만들고 캐시를 붙이는 것만으로 크게 줄어요. 되물을 말은 하나예요. "우리 사이트에서 요청 한 번에 서버가 제일 많이 일하는 화면이 어디인가요?"

자주 묻는 것

Q. 저처럼 작은 가게도 표적이 되나요?
돼요. 미움을 사서만 오는 게 아니에요. 인터넷을 자동으로 훑으며 방어가 약한 곳을 찾는 프로그램이 늘 돌고 있어요. 규모가 아니라 방어가 켜져 있는지가 기준이에요.
Q. 신고할 수 있나요?
할 수 있어요. 대량의 신호를 보내 남의 서비스에 장애를 일으키는 행위는 우리나라에서도 법으로 금지돼 있어요. 다만 수사에는 시간이 걸리니 신고와 별개로 방어와 복구를 먼저 하세요. 접속 기록을 지우지 않고 남겨 두는 것이 그날 할 수 있는 가장 중요한 일이에요.
Q. 공격하는 주소 하나만 막으면 되지 않나요?
그게 통하면 이 공격은 이름이 안 붙었을 거예요. 감염된 남의 기기 수천 곳에서 나눠 들어오고, 하나를 막으면 다른 곳이 이어받아요. 그래서 방어는 주소 하나가 아니라 요청의 모양과 속도를 보고 걸러요.
Q. 서버를 크게 키우면 버틸 수 있지 않나요?
공격 쪽은 남의 기기를 빌려 쓰니 세기를 늘리는 데 돈이 거의 안 들어요. 사장님 쪽은 키울 때마다 돈이 들고요. 이 싸움은 크기로 이기는 싸움이 아니라 앞에서 걸러 내는 싸움이에요.
Q. 방어를 켜면 진짜 손님도 막히나요?
조금 그래요. 사람 확인 화면이 한 번 뜨거나 첫 접속이 살짝 느려질 수 있어요. 그래서 평소에는 약하게, 공격 중에는 강하게 두 단계로 나눠 써요. 강한 세기를 켜 둔 채 잊어버리면 손님이 조용히 줄어드니 끝나고 되돌리는 것까지가 한 세트예요.
Q. 바이브캠퍼스로 만드는 동안에도 신경 써야 하나요?
만드는 동안에는 아니에요. 이 문서가 필요해지는 순간은 내 주소로 사이트를 열고 손님을 받기 시작한 뒤예요. 그때 방어는 대부분 도메인과 회선을 맡은 쪽 설정 화면에서 켜요. 스튜디오에서는 대신 무거운 화면을 가볍게 만드는 쪽을 미리 손봐 둘 수 있어요.

확인해 보세요

새벽 3시에 사이트가 안 열려요. 접속 기록을 보니 장사와 상관없는 지역에서 같은 화면 하나만 계속 부르고 있어요. 무엇부터 할까요?

하나 더

광고를 크게 돌린 다음 날 사이트가 느려졌어요. 접속 기록에는 검색, 상품, 장바구니로 흩어진 흔적이 남아 있고 대부분 국내 손님이에요.

직접 해보기

내 사이트에서 제일 무거운 문이 어디인지 물어보세요

스튜디오 대화창에 이렇게 그대로 붙여 넣어 보세요. "지금 만든 화면 중에서 요청 한 번에 서버가 가장 많이 일하는 곳을 순서대로 알려 주고, 각각 캐시나 속도 제한을 붙일 수 있는지 한 줄씩 붙여 주세요." 목록 맨 위 한 곳이 공격을 받을 때 가장 먼저 무너지는 문이에요. 그 한 곳만 가볍게 만들어 두면 세 번째 방식의 공격은 절반이 사라져요.

스튜디오에서 물어보기

더 깊이 (안 읽어도 괜찮아요)

비유가 어디까지 맞고 어디부터 다른가 · 줄 선 가짜 손님 비유는 "자리를 차지해 진짜 손님을 못 들어오게 한다"까지 정확해요. 다른 점은 가려내는 방식이에요. 진짜 가게라면 사장님이 얼굴을 보고 가짜를 알아채지만, 인터넷에서는 요청 하나하나가 똑같이 생겼어요. 그래서 얼굴 대신 속도, 순서, 어디서 왔는지 같은 모양으로 판단해요. 이 판단을 대신해 주는 게 앞단 방어예요.

왜 방어를 내 서버 안에 두면 늦나 · 요청이 내 서버까지 도착한 시점에는 이미 회선을 지나온 거예요. 골목이 트럭으로 막혀 있으면 가게 문 앞에서 아무리 빨리 거절해도 소용이 없어요. 그래서 방어는 내 서버보다 앞쪽, 회선을 가진 쪽에 두는 게 원칙이에요. 코드로 막는 이야기와 앞단에서 막는 이야기가 자꾸 엇갈리는 이유가 이거예요.

기록을 지우고 싶어질 때 · 공격 중에는 접속 기록이 아주 빠르게 쌓여서 저장 공간이 차요. 급한 마음에 지우면 나중에 신고할 때, 그리고 늘어난 요금에 이의를 제기할 때 쓸 증거가 같이 사라져요. 지우는 대신 따로 내려받아 두고 새로 쌓는 게 순서예요. 사고 기록은 다음번 준비물이기도 해요.

이것만 기억하세요

  • ·훔쳐 가는 공격이 아니라 문을 막는 공격이에요. 사이트는 멀쩡한데 안 열려요
  • ·손님이 몰린 것과 구별부터 해요. 대응이 정반대라 잘못 짚으면 청구서만 커져요
  • ·막을 수 있는 자리는 내 서버 안이 아니라 앞단, 회선을 가진 쪽이에요
  • ·맞는 중이면 자동으로 늘어나는 상한부터 낮춰요. 공격은 끝나도 청구서는 남아요
  • ·미리 켜 두면 공격 날 할 일은 세기를 한 단계 올리는 것뿐이에요
VibeCampus新建作品