인증되지 않은 * 요청 * 요청 속도 제한


11

속도 제한을 수행하는로드 밸런서가 있다고 가정하십시오. 로그인 한 사용자에게는 속도 제한이 매우 간단 해 보입니다. JWT를보고 메모리 내 데이터 저장소를 사용하여 해당 사용자에 대한 지난 10 초 동안의 요청 수를 확인하십시오.

그러나 로그인하지 않은 (인증되지 않은) 사용자는 어떻습니까? 우리는 그들이 누구인지 또는 어디에서 요청이 어디에서 왔는지 확실하지 않으므로 요청을 쉽게 제한 할 수 없습니다 ..?

AWS 및 기타 호스팅 플랫폼에이 솔루션에 대한 기본 제공 솔루션이 있습니까? 로그인 한 사용자의 속도 제한 논리를 수동으로 처리해야하는 것처럼 보이지만 로그인하지 않은 사용자는 어떻습니까?

호스팅 플랫폼에서 인증되지 않은 요청을 속도 제한하는 몇 가지 기본 메커니즘이있을 수 있습니다.


2
이 페이지 는 로그인 한 사용자를 언급하지 않습니다. 실제로, 여기에 설명 된 기술은 암호에 대한 무차별 대입 공격에 대한 완화 조치로 인용되었으며, 이는 로그인하지 않은 사용자를 의미합니다.
Robert Harvey

1
속도 제한을 사용하려는 이유는 무엇입니까? 사용자가 지불 계획을 초과하지 못하도록 서비스 거부 공격에 대응하는 것입니까? 유스 케이스는 효과적으로 사용할 수있는 방법에 영향을줍니다.
Bart van Ingen Schenau

1
이 질문은
안타깝게도

@BartvanIngenSchenau 위의 모든 것?

왜 두 가지 속도 제한이 있어야합니까? 제약 조건 / 기능이 다른 모든 종류의 "계획"을 판매하고 있습니까?
Laiv

답변:


9

그러나 로그인하지 않은 (인증되지 않은) 사용자는 어떻습니까? 우리는 그들이 누구인지 또는 어디에서 요청이 어디에서 왔는지 확실하지 않으므로 요청을 쉽게 제한 할 수 없습니다 ..?

취할 수있는 몇 가지 접근법이 있습니다. 하나는 IP 주소와 같이 신뢰할 수있는 출처 식별자가 필요하다는 것입니다. IP 주소별로 제한을 평가할 수 있으므로 손상된 단일 시스템에 대한 공격이 제한됩니다. 이것은 매우 간단한 접근 방법이지만 대규모 네트워크 공급자는 단일 발신 IP 주소 만 사용하여 NAT 뒤에있는 많은 수의 사용자를 숨길 수 있다는 단점이 있습니다.

속도 제한에 대한 다른 접근 방식은 인증되지 않은 요청에 대한 작업 증명 을 요구하는 입니다. 서버는 인증되지 않은 요청 (예 : 로그인 요청)을하는 모든 클라이언트가 요청을 처리하기 전에 자원 집약적 인 응답을 계산해야하는 챌린지 코드를 발행합니다. 이 아이디어를 일반적으로 구현하려면 클라이언트가 부분 해시 복귀를 계산해야합니다.


나는 "작업 증명"이 어떻게 DOS 공격을 막을 수 있는가? 클라이언트는 시도를 무시하고 실패까지 계속 요청을 보낼 수 있습니다. 도전 과제를 처리하는 세 번째 프로세스가 있습니까?
Laiv

4
@Laiv POW는 대부분의 다른 속도 제한 체계가 실패하는 중앙 데이터베이스에 연결하지 않고도 안정적으로 발급 및 배포 할 수 있습니다. 공격자에 대한 공격을 확장하는 것보다 방어력을 확장하고 부하 요소를 늘리는 것이 귀하와 합법적 인 사용자에게 더 저렴하므로 공격자에 대한 공격 비용이 증가합니다. 또한 시스템을 공격하는 데 경제적 인 부담을 주며, 저전력 장치 (예 : 손상된 프린터, IOT, 라우터)가 효과적인 공격 플랫폼으로 사용되지 않도록 효과적으로 배제합니다.
거짓말 라이언

6

요청이 인증 된 사용자 또는 익명 사용자의 요청인지 확인하려면 요청을 반드시 처리해야합니다 (빠르지 만). 이것은 여전히 ​​응용 프로그램이 서비스 거부 공격에 취약하다는 것을 의미합니다.

초당 전체 요청을 확인해야하며 특정 수가 초과되면 나머지는 무시합니다. 이 숫자는 정상 작동 중에 문제를 일으키지 않도록 충분히 높아야하지만 이러한 공격으로부터 보호해야합니다.

또한 일반적으로 DOS 공격과 관련하여 인증 된 사용자로부터 공격이 발생하지 않는다고 가정해서는 안됩니다. 암호가 약하면 누군가 이전 사용자의 신원을 쉽게 추정 할 수 있습니다. 따라서 이러한 검사를 수행 할 수 있다고 가정하면 (인간적인) 사용자는 개별 사용자가 많기 때문에 그러한 속도로 요청을 수행 할 필요가 없습니다.


IP 주소를 사용하고 각각에 대해 높은 속도 제한을 설정할 수 있다고 가정합니다. 잘 조정 된 DoS 공격이 수천 개의 IP 주소를 사용할 수 있다고 생각합니까? 어쩌면 더? idk ... 동일한 IP 주소가 여러 다른 클라이언트에 사용될 수 있다는 것을 알고 있지만 동일한 사용자 일 가능성이 높습니다.
Alexander Mills

@AlexanderMills 글쎄, 알고리즘이 동일한 IP 주소에서 여러 요청을 확인하기로 결정했다고 가정 해보십시오. 수천 개가 있어도 1000 개가 넘는 요청에 대해 반복됩니다. 서버가 주어진 IP 주소에서 첫 번째 요청을 기록하고 플러딩이 시작됩니다. 서버가 이미 요청으로 백 로그되었습니다. 같은 IP에서 두 번째 반복에 도달하기에 충분한 요청을 처리 할 수조차 없습니다 (아직 합법적 인 요청 일 수 있음) 그건 그렇고). 동일한 IP 만 사용하는 DoS 공격으로부터 보호합니다. 둘 다 사용하는 것이 좋습니다. : P
Neil

0

Cloudflare의 주요 제품 중 하나는 API / 웹 서버에 대한 지능형 프록시를 제공하여 서비스 거부 공격으로부터 보호 하는 것 입니다. 기본 서비스는 무료입니다. 그들은 CDN 서비스 및로드 밸런싱과 같은 다른 관련 서비스로부터 돈을 버는 것입니다. 또한보다 정교하고 제어 가능한 속도 제한 서비스를 제공합니다. 현재 10 만 건의 양호한 요청 당 US $ .05 (거부 된 요청에 대한 비용 없음)의 요금이 부과되지만, 둘 이상의 글로벌 규칙을 얻으려면 유료 요금제로 업그레이드해야합니다.

도메인 이름 서버를 제어 할 수있는 한, AWS 또는 다른 플랫폼에서 Cloudflare의 서비스를 사용할 수 있습니다 (도메인에 등록 된 이름 서버를 변경할 수 있음).

로그인 한 사용자를 다른 URL로 보내 익명 및 로그인 사용자에게 별도의 속도 제한을 제공 할 수 있습니다. 예를 들어, 익명으로 사용할 수있는 모든 URL 경로 앞에 '/ u'를 붙이면 항상 인증이 필요하고 속도 제한이 다른 엔드 포인트를 만들 수 있습니다.

Cloudflare의 속도 제한 (알고있는 익명 사용자의 모든 상업적 속도 제한과 마찬가지로)은 IP 주소로 클라이언트를 정의합니다. 상용 VPN이나 ​​Tor를 사용하는 사람들은 개인 정보 보호를 위해 1 개의 IP 주소 뒤에 많은 수의 클라이언트를 숨기는 경향이 있기 때문에 문제가 발생할 수 있습니다.


0

AWS에는 AWS Shield 및 AWS WAF 관련 서비스가 있습니다 . 이들은 주로 DDoS 공격을 방지하기위한 것이며 IP 주소를 기반으로하는 속도 제한을 지원합니다.

WAF에서는이 개념을 요율 기반 규칙 이라고 합니다. 원래 발표 에서 무차별 기반 로그인 시도 방지는 사용 사례로 언급됩니다 .

이 새로운 규칙 유형은 고객 웹 사이트 및 API를 웹 계층 DDoS 공격, 무차별 대입 로그인 시도 및 불량 봇과 같은 위협으로부터 보호합니다. 클라이언트의 웹 요청이 구성 가능한 임계 값을 초과하면 속도 기반 규칙이 자동으로 트리거됩니다.

다른 클라우드 제공 업체도 유사한 서비스를 제공해야합니다. 여기에 Google Cloud Armor와 AWS WAF, Cloudflare WAF의 비교표가 있습니다.

이미 Nginx를 사용하고 있으므로 내장 IP 기반 속도 제한을 사용하는 것도 간단한 옵션 일 수 있습니다. 모듈은 ngx_http_limit_req_module 입니다. 이 블로그 게시물블로그 사용법을 설명합니다.

IP 기반 속도 제한은 비교적 간단한 개념이지만 완벽하지는 않습니다.

  • IP 주소가 공유되어 (같은 사무실에서 일하는 사람들) 오 탐지로 이어질 수 있음
  • 공격자는 여러 IP 주소에 쉽게 액세스하고이를 사용하여 제한을 우회 할 수 있습니다 (분산 된 무차별 로그인 공격)

일반적으로 IP 주소는 좋은 시작입니다. 그러나보다 강력한 보호가 필요한 경우 스레드 모델 (예 : 어떤 유형의 공격을 방지 하려는지)에 따라 최선의 선택이 달라집니다.

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