DDoS에 있습니다. 내가 무엇을 할 수 있을지?


179

이것은 DoS 및 DDoS 완화에 대한 정식 질문 입니다.

오늘 내가 호스팅하는 웹 사이트에서 엄청난 트래픽 급증을 발견했습니다. 초당 수천 개의 연결을 얻고 있으며 100Mbps의 가용 대역폭을 모두 사용하고 있습니다. 모든 요청이 시간 초과되어 아무도 내 사이트에 액세스 할 수 없으며 SSH 시간이 초과되어 서버에 로그인 할 수도 없습니다! 이것은 몇 시간 전에 일어 났으며, 두 시간 동안 지속되어 저절로 사라졌습니다.

때때로 내 웹 사이트에는 또 다른 고유하지만 관련된 문제가 있습니다. 서버의 평균로드 (평균 .25)가 최대 20 이상으로 증가하고 아무도 다른 사이트와 동일하게 내 사이트에 액세스 할 수 없습니다. 몇 시간 후에 사라집니다.

서버를 다시 시작해도 도움이되지 않습니다. 내 사이트에 다시 액세스 할 수 있도록하려면 어떻게해야합니까?

이와 관련하여 서비스를 시작할 때마다 하루나 이틀 동안 특정 IP 주소에서 연결이 끊어진다는 것을 알았습니다. 다시 시작하자마자이 문제가 다시 발생하여 다시 충돌했습니다. 그 점이 어떻게 비슷하고 어떻게해야합니까?


답변:


191

서비스 거부 공격이 발생했습니다. 여러 네트워크 (다른 서브넷의 다른 IP)에서 트래픽이 발생하는 경우 분산 서비스 거부 (DDoS)가 있습니다. 모두 같은 장소에서 나온다면 평범한 오래된 DoS가 있습니다. 가능하면 확인하는 것이 도움이 될 수 있습니다. netstat를 사용하여 확인하십시오. 그러나 이것은 어려울 수 있습니다.

서비스 거부는 일반적으로 트래픽 기반 및로드 기반의 두 가지 범주로 분류됩니다. 마지막 서비스 (충돌 서비스 포함)는 익스플로잇 기반 DoS이며 상당히 다릅니다.

어떤 유형의 공격이 발생했는지 파악하려는 경우 wireshark, tcpdump 또는 libpcap을 사용하여 일부 트래픽을 캡처 할 수 있습니다. 가능하면 많은 트래픽을 캡처 할 수 있음을 알고 있어야합니다.

그렇지 않은 경우, 봇넷 (일부 공격자가 중앙에서 제어 할 수있는 손상된 호스트의 네트워크)에서 발생합니다. 이는 공격자가 서로 다른 네트워크에있는 여러 호스트의 업스트림 대역폭을 (매우 싸게) 획득하여 자신을 추적하면서 공격 할 수있는 좋은 방법입니다. 저궤 이온 캐논 봇넷의 일례 (대신 자발적 임에도 불구 악성 유래); 제우스가 더 전형적인 것입니다.

교통 기반

트래픽 기반 DoS를 사용하는 경우 서버로 들어오는 트래픽너무 많아 인터넷 연결이 완전히 포화 된 것을 알 수 있습니다. 다른 곳에서 서버를 핑할 때 패킷 손실률이 높으며 (사용중인 라우팅 방법에 따라) 때로는 대기 시간이 매우 길기도합니다 (핑이 높음). 이러한 종류의 공격은 일반적으로 DDoS입니다.

이것은 실제로 "거대한"공격이며 진행 상황은 분명하지만 서버 관리자는 완화하기가 어렵습니다 (기본적으로 공유 호스팅 사용자는 완화 할 수 없습니다). ISP의 도움이 필요합니다. DDoS하에 있다는 것을 알려 주면 도움을 줄 수 있습니다.

그러나 대부분의 ISP 및 대중 교통 제공 업체는 진행 상황을 사전에 인식하고 서버에 대한 블랙홀 경로 를 게시 합니다. 이것이 의미하는 바는 다음을 통해 가능한 적은 비용으로 서버에 대한 경로를 게시한다는 것 0.0.0.0입니다. 이 경로는 일반적으로 / 32이며 결국 제거됩니다. 이것은 전혀 도움이되지 않습니다. 목적은 ISP 네트워크를 홍수로부터 보호하는 것입니다. 해당 기간 동안 서버의 인터넷 액세스가 효과적으로 끊어집니다.

ISP (또는 자신의 AS가있는 경우)가 도울 수있는 유일한 방법은 가능한 DDoS 트래픽을 감지하고 속도를 제한 할 수있는 지능형 트래픽 셰이퍼를 사용하는 것입니다. 모든 사람이이 기술을 가지고있는 것은 아닙니다. 그러나 트래픽이 하나 또는 두 개의 네트워크 또는 하나의 호스트에서 오는 경우 앞서 트래픽을 차단할 수도 있습니다.

요컨대이 문제에 대해 할 수있는 일은 거의 없습니다 . 가장 장기적인 해결책은 DDoS를 개별적으로 동시에 수행해야하는 인터넷의 여러 위치에서 서비스를 호스팅하여 DDoS를 훨씬 더 비싸게 만드는 것입니다. 이를위한 전략은 보호해야하는 서비스에 따라 다릅니다. 여러 신뢰할 수있는 네임 서버, 백업 MX 레코드 및 메일 교환기가있는 SMTP, 라운드 로빈 DNS가있는 HTTP 또는 멀티 호밍을 사용하여 DNS를 보호 할 수 있습니다.

로드 밸런서 자체가 동일한 문제를 겪고 병목 현상을 일으키기 때문에로드 밸런서는이 문제에 대한 효과적인 해결책은 거의 없습니다. 파이프가 포화 상태라는 문제 때문에 IPTable 또는 기타 방화벽 규칙이 도움이되지 않습니다 . 방화벽에서 연결을 확인하면 이미 너무 늦습니다 . 귀하의 사이트에 대한 대역폭이 소비되었습니다. 연결로 무엇을하든 상관 없습니다. 들어오는 트래픽의 양이 정상으로 돌아갈 때 공격이 완화되거나 완료됩니다.

가능한 경우 Akamai, Limelight 및 CDN77과 같은 CDN ( 콘텐츠 배포 네트워크 )을 사용하거나 CloudFlare 또는 Prolexic과 같은 DDoS 스크러빙 서비스를 사용하십시오. 이러한 서비스는 이러한 유형의 공격을 완화하기위한 적극적인 조치를 취하며, 여러 지역에서 가용 대역폭이 너무 많아서 일반적으로 범람 할 수는 없습니다.

CloudFlare (또는 다른 CDN / 프록시)를 사용하기로 결정한 경우 서버의 IP를 숨기십시오. 공격자가 IP를 찾으면 CloudFlare를 우회하여 서버를 직접 DDoS 할 수 있습니다. IP를 숨기려면 서버가 안전하지 않은 한 다른 서버 / 사용자와 직접 통신해서는 안됩니다. 예를 들어 서버가 사용자에게 직접 이메일을 보내서는 안됩니다. CDN에 모든 컨텐츠를 호스팅하고 자신의 서버가없는 경우에는 적용되지 않습니다.

또한 일부 VPS 및 호스팅 제공 업체는 다른 VPS보다 이러한 공격을 완화하는 것이 좋습니다. 일반적으로 그들이 클수록 이것에 더 좋을 것입니다. 매우 잘 평가되고 대역폭이 많은 제공자는 당연히 더 탄력적이며, 적극적이고 직원이 풍부한 네트워크 운영 팀이있는 제공자는 더 빨리 대응할 수 있습니다.

로드 기반

로드 기반 DDoS 가 발생 하는 경우 로드 평균이 비정상적으로 높습니다 (또는 플랫폼 및 사양에 따라 CPU, RAM 또는 디스크 사용량). 서버가 유용한 작업을 수행하지 않는 것 같지만 매우 바쁩니다. 종종 로그에 비정상적인 조건을 나타내는 많은 양의 항목이있을 수 있습니다. 종종 이것은 많은 다른 장소에서 나오고 DDoS이지만, 반드시 그런 것은 아닙니다. 다른 호스트가 많을 필요조차 없습니다 .

이 공격은 서비스가 많은 비용이 드는 일을하게하는 것을 기반으로합니다. 이것은 엄청나게 많은 수의 TCP 연결을 열어서 상태를 유지하도록 강요하거나, 너무 크거나 많은 파일을 서비스에 업로드하거나, 정말로 비싼 검색을하거나, 처리하기에 비싼 것을 수행하는 것과 같은 것일 수 있습니다. 트래픽이 계획 한대로 수행 할 수있는 범위 내에 있지만 요청 유형이 너무 많아서 많은 부분을 처리 할 수 ​​없습니다 .

첫째, 이러한 유형의 공격이 가능하다는 것은 종종 구성 문제 또는 버그를 나타냅니다.당신의 서비스에서. 예를 들어, 지나치게 자세한 로깅이 설정되어 있고 쓰기 속도가 느린 항목에 로그를 저장하고있을 수 있습니다. 누군가가 이것을 알고 많은 양의 로그를 디스크에 쓰도록하는 많은 일을하면 서버가 크롤링 속도가 느려집니다. 소프트웨어는 특정 입력 사례에서 매우 비효율적 인 작업을 수행 할 수도 있습니다. 그 원인은 프로그램만큼이나 많지만 두 가지 예는 서비스가 세션을 닫지 못하게하는 상황과 자식 프로세스를 생성하여 떠나는 상황입니다. 수만 개의 자식 프로세스를 추적하기 위해 수만 개의 열린 연결로 상태를 유지하면 문제가 발생할 수 있습니다.

가장 먼저 할 수있는 일은 방화벽을 사용하여 트래픽을 삭제하는 것 입니다. 이것이 항상 가능하지는 않지만 들어오는 트래픽에서 찾을 수있는 특성이있는 경우 (트래픽이 적 으면 tcpdump가 유용 할 수 있음) 방화벽에서 드롭 할 수 있으며 더 이상 문제를 일으키지 않습니다. 다른 방법은 서비스의 버그를 수정하는 것입니다 (공급 업체에 문의하여 오랜 지원 경험을 준비하십시오).

그러나 구성 문제인 경우 시작하십시오 . 프로덕션 시스템에서 로깅을 적절한 수준으로 낮추십시오 (프로그램에 따라 이것이 기본값이며 일반적으로 "디버그"및 "자세한"레벨의 로깅을 해제해야합니다. 사용자가 수행하는 모든 것이 정확하게 기록 된 경우 세부 사항은 로깅이 너무 자세합니다). 또한, 하위 프로세스 및 요청 제한을 확인 , 아마도 스로틀 적용 가능한 들어오는 요청, IP 당 연결 및 허용 된 자식 프로세스의 수를.

서버를보다 효율적으로 구성하고 프로비저닝할수록 이러한 유형의 공격은 더 어려워 질 것입니다. 특히 RAM과 CPU에 찌르지 마십시오. 백엔드 데이터베이스 및 디스크 스토리지와 같은 연결이 빠르고 안정적이어야합니다.

악용 기반

서비스 가 중단 된 후 서비스 가 매우 빠르게 충돌하는 경우, 특히 충돌 이전의 요청 패턴을 설정할 수 있고 요청이 비정형 적이거나 예상되는 사용 패턴과 일치하지 않는 경우, 익스플로잇 기반 DoS가 발생했을 수 있습니다. 이것은 하나의 호스트 (거의 모든 유형의 인터넷 연결이있는 호스트) 또는 많은 호스트에서 나올 수 있습니다.

이는 여러 측면에서 로드 기반 DoS와 유사하며 기본적으로 동일한 원인과 완화 조치가 있습니다. 차이점은이 경우 버그로 인해 서버가 낭비되지 않고 죽는다는 것입니다. 공격자는 일반적으로 널 역 참조 또는 서비스에서 무언가를 유발하는 잘못된 입력과 같은 원격 충돌 취약점을 악용합니다.

이것을 무단 원격 액세스 공격과 유사하게 처리하십시오. 원래 호스트와 트래픽 유형을 고정 할 수있는 경우 방화벽 . 해당되는 경우 유효성 검사 리버스 프록시를 사용하십시오 . 법 의학적 증거를 모으고 (일부 트래픽을 시도하고 캡처) 공급 업체에 버그 티켓을 제출하고 출처에 대한 남용 불만 (또는 법적 불만)을 제출하는 것도 고려하십시오.

이러한 공격은 익스플로잇이 발견 될 경우 설치하기에 상당히 저렴하며 매우 강력하지만 추적 및 중지가 비교적 쉽습니다. 그러나 트래픽 기반 DDoS에 유용한 기술은 일반적으로 익스플로잇 기반 DoS에 대해서는 쓸모가 없습니다.


1
마지막 단락과 관련하여 악용 기반 D DoS를 받으면 어떻게 됩니까? 어떻게 추적하고 중지 할 수 있습니까?
Pacerier

8

기업이라면 많은 옵션이 있습니다. 소규모 웹 사이트에 서비스를 제공하기 위해 VPS 또는 전용 서버를 임대하는 나와 같은 작은 사람이라면 비용이 금방 엄청나게 높아질 수 있습니다.

내 경험에 따르면 대부분의 전담 VPS 제공 업체는 서버에 대해서만 특별한 방화벽 규칙을 설정하지는 않을 것이라고 생각합니다. 그러나 요즘에는 몇 가지 옵션이 있습니다.

CDN

웹 서버를 실행중인 경우 CloudFlare 또는 Amazon CloudFront와 같은 CDN 뒤에 배치하십시오.

CDN은 비싸다. 비용을 통제하려면 CDN 대신 서버에서 직접 큰 파일 (큰 이미지, 오디오, 비디오)을 제공하십시오. 그러나 이로 인해 서버 IP 주소가 공격자에게 노출 될 수 있습니다.

프라이빗 클라우드

프라이빗 클라우드는 일반적으로 고가의 엔터프라이즈 솔루션이지만 Amazon VPC는 ​​별도의 비용이 들지 않습니다. 그러나 일반적으로 아마존의 대역폭은 비싸다. 여유가 있다면 인스턴스에 도달하기 전에 트래픽을 차단하도록 Amazon VPC의 보안 그룹 및 네트워크 ACL을 설정할 수 있습니다. TCP 서버 포트를 제외한 모든 포트를 차단해야합니다.

공격자는 여전히 TCP 서버 포트를 공격 할 수 있습니다. 웹 서버 인 경우 비 차단 IO를 사용하고 많은 수의 연결을 처리 할 수있는 nginx와 같은 것을 사용하는 것이 좋습니다. 그 외에도 최신 버전의 서버 소프트웨어를 실행하는 것 외에는 할 수있는 일이 많지 않습니다.

TCP 포트가 공격을 받고 다른 모든 것이 실패한 경우

이것은 WebSocket, 미디어 컨텐츠 / 스트리밍 서버와 같은 CDN 뒤에 숨길 수없는 웹이 아닌 서버에 적용하기 위해 개발 한 솔루션입니다. CloudFlare는 WebSocket을 지원하지만 현재 기업에서만 지원합니다.

목표는 봇넷이 유지할 수 없을 정도로 TCP 수신 포트를 신속하게 변경하는 것입니다 (예 : 10 초마다 한 번씩). 이는 포트 로밍을 수행하는 간단한 프록시 프로그램을 사용하여 수행됩니다. 포트 순서는 의사 난수이지만 서버 시간을 기반으로해야합니다. 그리고 서버 시간 및 포트를 계산하는 알고리즘은 클라이언트 자바 스크립트 / 플래시 코드에 숨겨져 있어야합니다. 또한 수신 포트가 변경 될 때 방화벽을 수정해야하며 방화벽은 상태 저장이 필요합니다. 누군가 관심이 있다면 Amazon에서 작동하는 node.js 스크립트를 GitHub에 업로드합니다.


4

짧은 기간 동안 도메인을 0.0.0.0과 같은 블랙홀로 변경하십시오.

서버에 문의하여 서버에 임시로 액세스하거나 서버 앞에 원격 콘솔 액세스 권한이 있는지 확인하여 다른 IP 주소를 사용자에게 발급 할 수 있는지 확인하십시오. 여기에서 단일 IP 주소인지 확인하고 사이트 또는 분산 공격으로부터 차단할 수 있습니다.


3
이와 같이 DNS를 변경하면 좋은 것보다 더 해를 끼칠 수 있습니다. 처음에는 A 레코드의 TTL을 줄이지 만 IP 주소가 바뀌지 않을 때까지 그대로 둡니다.
kasperd

1

DDoS 공격을 받고있는 경우 ISP가 가장 도움이 될 수 있지만 DDoS 보호 기능이없는 경우 공격이 중지 될 때까지 서비스가 중단 될 수 있습니다. 일반적으로 공격받은 IP 주소를보고 업스트림 라우터에서 네트워크를 무효화합니다. 트래픽이 많지 않은 경우 트래픽이 다시 라우팅되고 필터링되어 서버로 다시 전송되는 DDoS 보호를위한 많은 온라인 서비스가 있습니다.


-1

우리는 전에도 비슷한 상황을 겪었습니다. 아래는 우리가 한 일입니다.

먼저 서버에서 네트워크 케이블을 뽑습니다. 이제 성능 모니터와 작업 관리자를보고 서버 서비스가 정상 작동 상태인지 확인하십시오. 그렇지 않은 경우, 멀웨어 바이트 소프트웨어로 서버를 스캔하여 서버를 청소하십시오. 이 단계는 일반적으로 연결이 끊어진 서버를 다시 정상 상태로 되돌립니다.

다음으로 방화벽이 있습니까? 그렇다면 구독을 갱신하셨습니까? 방화벽에서 IPS 침입 기능을 활성화하십시오. 방화벽 구독을 갱신하면 DDOS 공격이 해결되었습니다.

보안 가입 (예 : firwall 또는 anti virus)을 갱신하고 가볍게 가져 가지 않아야한다는 것을 배웠습니다. DDOS 공격은 매일 발생하며 소규모 비즈니스에도 발생할 수 있습니다. 도움이 되었기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.