트래픽으로 문 막기 공격
가짜 접속을 한꺼번에 퍼부어 진짜 손님이 못 들어오게 막는 공격이에요. 이유 없이 사이트가 계속 죽으면 의심하고, 방어는 공격 전에 켜 둬야 해요.
쉽게 말하면
문 앞에 줄이 길게 늘어섰는데 아무도 물건을 안 사요. 앞사람은 계속 "고민 중이에요"만 하고 비켜 주지 않아요. 뒤에 선 진짜 손님은 기다리다 지쳐서 돌아가요. 트래픽으로 문 막기 공격이 정확히 이거예요. 가짜 손님을 여러 곳에서 한꺼번에 보내 계산대를 붙잡아 두고, 진짜 손님이 못 들어오게 만드는 일이에요.
물건을 훔쳐 가는 공격이 아니에요. 자료를 빼 가거나 화면 내용을 바꾸는 게 아니라 문을 막는 것 자체가 목적이에요. 그래서 사이트는 멀쩡한데 안 열리는 상태로 보여요.
"디도스"라는 이름 앞에는 여러 곳에서 동시에 라는 뜻이 붙어 있어요. 한 대가 아니라 남의 컴퓨터 수천 대가 같이 두드려서, IP(인터넷 주소) 한두 개를 막는 걸로는 끊기지 않아요.
이 공격이 노리는 것
노리는 건 자료가 아니라 시간이에요. 세일 첫날, 방송이 나가는 시간, 마감 직전처럼 문이 닫히면 가장 아픈 순간을 골라서 와요. 그래서 피해액을 셀 때는 복구 비용이 아니라 그 시간에 못 판 것으로 세야 맞아요.
손님이 몰린 것과 헷갈리기 쉬워요
사이트가 느려졌을 때 사장님이 가장 먼저 할 일은 방어가 아니라 구별이에요. 진짜 손님이 몰린 것과 공격은 화면에서 똑같이 느려 보이거든요.
| 보이는 신호 | 진짜 손님이 몰린 것 | 공격일 가능성 |
|---|---|---|
| 언제 시작됐나 | 글이 퍼지거나 광고가 나간 직후예요. 이유를 댈 수 있어요 | 아무 일도 없었는데 새벽에 시작돼요 |
| 어디로 들어오나 | 검색과 링크를 타고 여러 화면으로 흩어져요 | 같은 주소 한 곳만 짧은 시간에 수없이 두드려요 |
| 어느 지역에서 오나 | 대체로 내 손님이 사는 지역이에요 | 장사와 상관없는 지역이 목록 맨 위에 몰려요 |
| 무엇을 하고 가나 | 장바구니, 문의, 가입 같은 흔적이 남아요 | 첫 화면만 받고 아무 흔적 없이 끊겨요 |
| 잦아든 뒤에는 | 천천히 줄어들어요 | 잠시 멈췄다가 같은 세기로 다시 시작돼요 |
구별이 중요한 이유는 대응이 정반대이기 때문이에요. 진짜 손님이면 서버를 키워서 다 받아야 하고, 공격이면 키울수록 청구서만 커져요.
판단이 안 설 때 먼저 볼 곳
호스팅 업체의 접속 기록 화면부터 열어 보세요. 같은 주소 하나가 목록을 가득 채우고 있으면 사람 손님의 모양이 아니에요. 지켜보기가 평소에 켜져 있으면 이 확인이 몇 분 안에 끝나요.
문이 막히는 네 가지 방식
방식마다 아픈 곳이 달라요. 어느 쪽인지 알면 누구에게 전화할지가 바로 정해져요.
| 방식 | 가게로 치면 | 증상 | 막을 수 있는 자리 |
|---|---|---|---|
| 회선 채우기 | 가게 앞 골목을 트럭으로 꽉 막아요 | 사이트 전체가 아예 안 열려요 | 회선을 가진 쪽. 호스팅 업체나 CDN(전국 지점 창고) 업체예요 |
| 연결 붙잡기 | 손님인 척 들어와 계산대 앞에서 안 비켜요 | 가끔 열리고 대부분 멈춰 있어요 | 서버 설정과 앞단 방어 |
| 무거운 화면 반복 요청 | 제일 오래 걸리는 주문만 골라 계속 시켜요 | 검색이나 목록처럼 특정 화면만 죽어요 | 속도 제한과 캐시. 화면을 가볍게 만드는 것도 방어예요 |
| 남의 서버로 튕겨 보내기 | 남의 가게 전화를 빌려 내 가게로 착신을 몰아요 | 작은 공격인데 들어오는 양이 아주 커요 | 앞단 방어. 내 서버 혼자서는 못 막아요 |
보고서에 이 말이 보이면
"응용 계층"이라는 말이 나오면 세 번째 방식이에요. 들어오는 양은 적은데 서버가 가장 힘들어하고, 사람 접속과 모양이 비슷해서 가려내기가 제일 어려워요. 반대로 "대역폭"이라는 말이 나오면 첫 번째 방식이라 회선을 가진 쪽 말고는 손쓸 데가 없어요.
지금 공격을 맞고 있다면
순서가 중요해요. 사이트를 살리는 것보다 먼저 할 일이 있어요.
- 1돈이 새는 곳부터 잠가요. 전송량이나 실행 횟수로 요금이 붙는 곳이면, 자동으로 늘어나는 상한을 먼저 낮춰요. 공격은 몇 시간이면 끝나지만 청구서는 한 달을 가요. 운영비 점검
- 2회선을 가진 쪽에 알려요. 호스팅 업체나 CDN 업체가 실제로 막을 수 있는 자리예요. 쓰고 있는 요금제에 이미 들어 있는 방어를 켜 주는 것으로 끝나는 경우도 많아요.
- 3앞단 방어의 세기를 올려요. 공격 방어 모드, 사람 확인, 지역 단위 차단처럼 스위치 하나로 켜지는 장치가 있어요. 손님이 조금 불편해지지만 문이 열려 있는 게 먼저예요.
- 4표적이 된 화면 하나만 잠시 닫아요. 검색이나 목록 한 곳이 맞고 있다면 그 화면만 임시 안내로 바꿔도 나머지가 살아나요.
- 5손님에게 알려요. 지금 접속이 몰려 느리다는 안내 한 줄이 문의 폭주를 크게 줄여요. 침묵이 가장 비싼 대응이에요. 장애가 났을 때 순서
하지 말 것 하나
돈을 요구하는 메일이 함께 오는 경우가 있어요. 답하지 마세요. 한 번 응하면 다시 오는 표적 목록에 이름이 남아요. 메일은 지우지 말고 그대로 보관해 두세요. 나중에 신고할 때 필요한 자료예요.
장면 1 · 호스팅 업체 상담원이 말했다
“지금 들어오는 요청이 거의 한 지역에서 오고 있습니다. 그 대역을 잠시 막을까요?”
"막아 주세요"라고 바로 답하기 전에 그 지역에 내 손님이 있는지 떠올려 보세요. 없으면 지금 막는 게 맞아요. 있으면 지역 차단 대신 속도 제한부터 걸어 달라고 부탁하세요. 방어는 늘 손님을 얼마나 잃느냐와 맞바꾸는 선택이에요.
미리 켜 두는 것
이 문서에서 가장 값어치 있는 부분이에요. 아래 다섯 가지는 공격이 오기 전에 켜 두는 것이고, 대부분 호스팅이나 도메인 설정 화면에서 스위치 하나로 켜져요.
| 미리 켜는 것 | 무엇을 하나 | 안 켜 두면 |
|---|---|---|
| CDN 앞에 세우기 | 사진과 화면 복사본을 여러 지점에 두고 내 서버 앞에 세워요 | 모든 요청이 내 서버 한 대로 곧장 들어와요. 전국 지점 창고 |
| 웹 방화벽 | 수상한 모양의 요청을 앞에서 걸러 내요 | 걸러 낼 자리가 없어서 서버가 전부 받아 내야 해요 |
| 속도 제한 | 같은 곳에서 짧은 시간에 너무 많이 오면 잠시 막아요 | 한 곳이 수없이 두드려도 그대로 통과해요. 호출 제한 |
| 사람 확인 | 로그인이나 문의처럼 무거운 문 앞에서만 사람인지 물어요 | 가짜 요청이 무거운 화면을 계속 돌려요. 봇 차단 |
| 자동 확장 상한 | 서버가 알아서 늘어나는 한도를 미리 못 박아 둬요 | 맞는 만큼 서버가 늘어나 요금이 같이 늘어나요. 손님이 늘어도 버티기 |
| 캐시 | 같은 답을 미리 만들어 두고 그대로 내줘요 | 같은 요청마다 계산과 조회를 새로 해요. 캐시 |
설정이 인터넷 전체에 퍼지는 데 시간이 걸려요. 켜고 나서도 한동안 계속 맞아요. 그 시간이 그대로 못 판 매출이에요.
공격이 와도 할 일은 세기를 한 단계 올리는 것뿐이에요. 준비의 값어치가 여기서 전부 나와요.
예전보다 비싸진 이유
예전에는 사이트가 멈추는 것으로 끝났어요. 지금은 요금이 같이 움직여요.
요즘 호스팅은 쓴 만큼 내는 방식이 많아요. 공격이 퍼붓는 요청 하나하나가 실행 횟수와 전송량으로 잡혀서 청구서에 들어가요. 서버 없이 굴리기 방식일수록 이 위험이 커요.
상한을 정하는 게 곧 보험이에요
요금 상한과 자동 확장 한도를 미리 정해 두면, 최악의 경우에도 사이트가 잠시 닫히는 것으로 피해가 끝나요. 상한이 없으면 사이트는 살아 있는데 청구서가 감당 못 할 크기로 오는 쪽이 돼요. 둘 중에는 앞이 훨씬 나아요.
장면 2 · 외주 개발자가 말했다
“디도스는 코드로 막는 게 아니라 앞단에서 막는 겁니다. 서버 코드를 고쳐도 소용없어요.”
절반은 맞는 말이에요. 회선을 채우는 공격은 정말 코드로 못 막아요. 하지만 무거운 화면을 반복해서 부르는 공격은 그 화면을 가볍게 만들고 캐시를 붙이는 것만으로 크게 줄어요. 되물을 말은 하나예요. "우리 사이트에서 요청 한 번에 서버가 제일 많이 일하는 화면이 어디인가요?"
자주 묻는 것
- Q. 저처럼 작은 가게도 표적이 되나요?
- 돼요. 미움을 사서만 오는 게 아니에요. 인터넷을 자동으로 훑으며 방어가 약한 곳을 찾는 프로그램이 늘 돌고 있어요. 규모가 아니라 방어가 켜져 있는지가 기준이에요.
- Q. 신고할 수 있나요?
- 할 수 있어요. 대량의 신호를 보내 남의 서비스에 장애를 일으키는 행위는 우리나라에서도 법으로 금지돼 있어요. 다만 수사에는 시간이 걸리니 신고와 별개로 방어와 복구를 먼저 하세요. 접속 기록을 지우지 않고 남겨 두는 것이 그날 할 수 있는 가장 중요한 일이에요.
- Q. 공격하는 주소 하나만 막으면 되지 않나요?
- 그게 통하면 이 공격은 이름이 안 붙었을 거예요. 감염된 남의 기기 수천 곳에서 나눠 들어오고, 하나를 막으면 다른 곳이 이어받아요. 그래서 방어는 주소 하나가 아니라 요청의 모양과 속도를 보고 걸러요.
- Q. 서버를 크게 키우면 버틸 수 있지 않나요?
- 공격 쪽은 남의 기기를 빌려 쓰니 세기를 늘리는 데 돈이 거의 안 들어요. 사장님 쪽은 키울 때마다 돈이 들고요. 이 싸움은 크기로 이기는 싸움이 아니라 앞에서 걸러 내는 싸움이에요.
- Q. 방어를 켜면 진짜 손님도 막히나요?
- 조금 그래요. 사람 확인 화면이 한 번 뜨거나 첫 접속이 살짝 느려질 수 있어요. 그래서 평소에는 약하게, 공격 중에는 강하게 두 단계로 나눠 써요. 강한 세기를 켜 둔 채 잊어버리면 손님이 조용히 줄어드니 끝나고 되돌리는 것까지가 한 세트예요.
- Q. 바이브캠퍼스로 만드는 동안에도 신경 써야 하나요?
- 만드는 동안에는 아니에요. 이 문서가 필요해지는 순간은 내 주소로 사이트를 열고 손님을 받기 시작한 뒤예요. 그때 방어는 대부분 도메인과 회선을 맡은 쪽 설정 화면에서 켜요. 스튜디오에서는 대신 무거운 화면을 가볍게 만드는 쪽을 미리 손봐 둘 수 있어요.
확인해 보세요
새벽 3시에 사이트가 안 열려요. 접속 기록을 보니 장사와 상관없는 지역에서 같은 화면 하나만 계속 부르고 있어요. 무엇부터 할까요?
하나 더
광고를 크게 돌린 다음 날 사이트가 느려졌어요. 접속 기록에는 검색, 상품, 장바구니로 흩어진 흔적이 남아 있고 대부분 국내 손님이에요.
직접 해보기
내 사이트에서 제일 무거운 문이 어디인지 물어보세요
스튜디오 대화창에 이렇게 그대로 붙여 넣어 보세요. "지금 만든 화면 중에서 요청 한 번에 서버가 가장 많이 일하는 곳을 순서대로 알려 주고, 각각 캐시나 속도 제한을 붙일 수 있는지 한 줄씩 붙여 주세요." 목록 맨 위 한 곳이 공격을 받을 때 가장 먼저 무너지는 문이에요. 그 한 곳만 가볍게 만들어 두면 세 번째 방식의 공격은 절반이 사라져요.
스튜디오에서 물어보기더 깊이 (안 읽어도 괜찮아요)
비유가 어디까지 맞고 어디부터 다른가 · 줄 선 가짜 손님 비유는 "자리를 차지해 진짜 손님을 못 들어오게 한다"까지 정확해요. 다른 점은 가려내는 방식이에요. 진짜 가게라면 사장님이 얼굴을 보고 가짜를 알아채지만, 인터넷에서는 요청 하나하나가 똑같이 생겼어요. 그래서 얼굴 대신 속도, 순서, 어디서 왔는지 같은 모양으로 판단해요. 이 판단을 대신해 주는 게 앞단 방어예요.
왜 방어를 내 서버 안에 두면 늦나 · 요청이 내 서버까지 도착한 시점에는 이미 회선을 지나온 거예요. 골목이 트럭으로 막혀 있으면 가게 문 앞에서 아무리 빨리 거절해도 소용이 없어요. 그래서 방어는 내 서버보다 앞쪽, 회선을 가진 쪽에 두는 게 원칙이에요. 코드로 막는 이야기와 앞단에서 막는 이야기가 자꾸 엇갈리는 이유가 이거예요.
기록을 지우고 싶어질 때 · 공격 중에는 접속 기록이 아주 빠르게 쌓여서 저장 공간이 차요. 급한 마음에 지우면 나중에 신고할 때, 그리고 늘어난 요금에 이의를 제기할 때 쓸 증거가 같이 사라져요. 지우는 대신 따로 내려받아 두고 새로 쌓는 게 순서예요. 사고 기록은 다음번 준비물이기도 해요.
이것만 기억하세요
- ·훔쳐 가는 공격이 아니라 문을 막는 공격이에요. 사이트는 멀쩡한데 안 열려요
- ·손님이 몰린 것과 구별부터 해요. 대응이 정반대라 잘못 짚으면 청구서만 커져요
- ·막을 수 있는 자리는 내 서버 안이 아니라 앞단, 회선을 가진 쪽이에요
- ·맞는 중이면 자동으로 늘어나는 상한부터 낮춰요. 공격은 끝나도 청구서는 남아요
- ·미리 켜 두면 공격 날 할 일은 세기를 한 단계 올리는 것뿐이에요